aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock16
-rw-r--r--crates/ra_assists/src/assist_ctx.rs16
-rw-r--r--crates/ra_assists/src/doc_tests/generated.rs4
-rw-r--r--crates/ra_assists/src/handlers/add_custom_impl.rs10
-rw-r--r--crates/ra_assists/src/handlers/add_derive.rs8
-rw-r--r--crates/ra_assists/src/handlers/add_explicit_type.rs4
-rw-r--r--crates/ra_assists/src/handlers/add_from_impl_for_enum.rs4
-rw-r--r--crates/ra_assists/src/handlers/add_function.rs242
-rw-r--r--crates/ra_assists/src/handlers/add_impl.rs4
-rw-r--r--crates/ra_assists/src/handlers/add_new.rs8
-rw-r--r--crates/ra_assists/src/handlers/apply_demorgan.rs2
-rw-r--r--crates/ra_assists/src/handlers/change_visibility.rs4
-rw-r--r--crates/ra_assists/src/handlers/flip_binexpr.rs2
-rw-r--r--crates/ra_assists/src/handlers/inline_local_variable.rs2
-rw-r--r--crates/ra_assists/src/handlers/introduce_variable.rs6
-rw-r--r--crates/ra_assists/src/handlers/invert_if.rs2
-rw-r--r--crates/ra_assists/src/handlers/merge_match_arms.rs10
-rw-r--r--crates/ra_assists/src/handlers/move_guard.rs10
-rw-r--r--crates/ra_assists/src/handlers/raw_string.rs4
-rw-r--r--crates/ra_assists/src/handlers/remove_dbg.rs8
-rw-r--r--crates/ra_assists/src/handlers/remove_mut.rs2
-rw-r--r--crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs2
-rw-r--r--crates/ra_assists/src/lib.rs34
-rw-r--r--crates/ra_db/src/lib.rs4
-rw-r--r--crates/ra_hir/src/code_model.rs34
-rw-r--r--crates/ra_hir/src/from_id.rs22
-rw-r--r--crates/ra_hir/src/has_source.rs6
-rw-r--r--crates/ra_hir/src/lib.rs4
-rw-r--r--crates/ra_hir/src/semantics.rs45
-rw-r--r--crates/ra_hir/src/semantics/source_to_def.rs8
-rw-r--r--crates/ra_hir/src/source_analyzer.rs40
-rw-r--r--crates/ra_hir_def/src/adt.rs22
-rw-r--r--crates/ra_hir_def/src/attr.rs25
-rw-r--r--crates/ra_hir_def/src/body/scope.rs2
-rw-r--r--crates/ra_hir_def/src/child_by_source.rs6
-rw-r--r--crates/ra_hir_def/src/docs.rs2
-rw-r--r--crates/ra_hir_def/src/find_path.rs78
-rw-r--r--crates/ra_hir_def/src/keys.rs6
-rw-r--r--crates/ra_hir_def/src/lib.rs10
-rw-r--r--crates/ra_hir_expand/src/builtin_macro.rs6
-rw-r--r--crates/ra_hir_expand/src/lib.rs4
-rw-r--r--crates/ra_hir_ty/src/db.rs4
-rw-r--r--crates/ra_hir_ty/src/expr.rs14
-rw-r--r--crates/ra_hir_ty/src/infer.rs16
-rw-r--r--crates/ra_hir_ty/src/infer/expr.rs8
-rw-r--r--crates/ra_hir_ty/src/infer/pat.rs4
-rw-r--r--crates/ra_hir_ty/src/lower.rs6
-rw-r--r--crates/ra_hir_ty/src/tests.rs4
-rw-r--r--crates/ra_hir_ty/src/tests/coercion.rs582
-rw-r--r--crates/ra_hir_ty/src/tests/macros.rs202
-rw-r--r--crates/ra_hir_ty/src/tests/method_resolution.rs376
-rw-r--r--crates/ra_hir_ty/src/tests/patterns.rs480
-rw-r--r--crates/ra_hir_ty/src/tests/regression.rs278
-rw-r--r--crates/ra_hir_ty/src/tests/simple.rs1360
-rw-r--r--crates/ra_hir_ty/src/tests/traits.rs1106
-rw-r--r--crates/ra_ide/src/assists.rs4
-rw-r--r--crates/ra_ide/src/call_hierarchy.rs36
-rw-r--r--crates/ra_ide/src/call_info.rs2
-rw-r--r--crates/ra_ide/src/completion.rs2
-rw-r--r--crates/ra_ide/src/completion/complete_attribute.rs587
-rw-r--r--crates/ra_ide/src/completion/complete_dot.rs112
-rw-r--r--crates/ra_ide/src/completion/complete_fn_param.rs12
-rw-r--r--crates/ra_ide/src/completion/complete_keyword.rs254
-rw-r--r--crates/ra_ide/src/completion/complete_macro_in_item_position.rs22
-rw-r--r--crates/ra_ide/src/completion/complete_pattern.rs30
-rw-r--r--crates/ra_ide/src/completion/complete_postfix.rs134
-rw-r--r--crates/ra_ide/src/completion/complete_qualified_path.rs198
-rw-r--r--crates/ra_ide/src/completion/complete_record.rs60
-rw-r--r--crates/ra_ide/src/completion/complete_snippet.rs20
-rw-r--r--crates/ra_ide/src/completion/complete_trait_impl.rs53
-rw-r--r--crates/ra_ide/src/completion/complete_unqualified_path.rs379
-rw-r--r--crates/ra_ide/src/completion/completion_context.rs16
-rw-r--r--crates/ra_ide/src/completion/completion_item.rs2
-rw-r--r--crates/ra_ide/src/completion/presentation.rs286
-rw-r--r--crates/ra_ide/src/diagnostics.rs10
-rw-r--r--crates/ra_ide/src/display/navigation_target.rs4
-rw-r--r--crates/ra_ide/src/display/structure.rs76
-rw-r--r--crates/ra_ide/src/extend_selection.rs44
-rw-r--r--crates/ra_ide/src/folding_ranges.rs7
-rw-r--r--crates/ra_ide/src/goto_definition.rs90
-rw-r--r--crates/ra_ide/src/goto_type_definition.rs10
-rw-r--r--crates/ra_ide/src/hover.rs6
-rw-r--r--crates/ra_ide/src/impls.rs20
-rw-r--r--crates/ra_ide/src/inlay_hints.rs166
-rw-r--r--crates/ra_ide/src/join_lines.rs40
-rw-r--r--crates/ra_ide/src/lib.rs4
-rw-r--r--crates/ra_ide/src/matching_brace.rs4
-rw-r--r--crates/ra_ide/src/parent_module.rs6
-rw-r--r--crates/ra_ide/src/prime_caches.rs5
-rw-r--r--crates/ra_ide/src/references.rs92
-rw-r--r--crates/ra_ide/src/references/rename.rs25
-rw-r--r--crates/ra_ide/src/runnables.rs18
-rw-r--r--crates/ra_ide/src/snapshots/highlight_strings.html82
-rw-r--r--crates/ra_ide/src/source_change.rs4
-rw-r--r--crates/ra_ide/src/syntax_highlighting.rs230
-rw-r--r--crates/ra_ide/src/syntax_highlighting/html.rs14
-rw-r--r--crates/ra_ide/src/syntax_highlighting/tests.rs72
-rw-r--r--crates/ra_ide/src/syntax_tree.rs277
-rw-r--r--crates/ra_ide/src/test_utils.rs4
-rw-r--r--crates/ra_ide/src/typing.rs25
-rw-r--r--crates/ra_ide/src/typing/on_enter.rs6
-rw-r--r--crates/ra_ide_db/src/defs.rs22
-rw-r--r--crates/ra_ide_db/src/line_index.rs66
-rw-r--r--crates/ra_ide_db/src/line_index_utils.rs51
-rw-r--r--crates/ra_ide_db/src/search.rs22
-rw-r--r--crates/ra_mbe/src/syntax_bridge.rs69
-rw-r--r--crates/ra_mbe/src/tests.rs421
-rw-r--r--crates/ra_project_model/src/cargo_workspace.rs5
-rw-r--r--crates/ra_project_model/src/lib.rs12
-rw-r--r--crates/ra_syntax/Cargo.toml2
-rw-r--r--crates/ra_syntax/src/algo.rs12
-rw-r--r--crates/ra_syntax/src/ast/make.rs11
-rw-r--r--crates/ra_syntax/src/ast/tokens.rs372
-rw-r--r--crates/ra_syntax/src/fuzz.rs15
-rw-r--r--crates/ra_syntax/src/lib.rs4
-rw-r--r--crates/ra_syntax/src/parsing/lexer.rs32
-rw-r--r--crates/ra_syntax/src/parsing/reparsing.rs4
-rw-r--r--crates/ra_syntax/src/parsing/text_token_source.rs8
-rw-r--r--crates/ra_syntax/src/parsing/text_tree_sink.rs14
-rw-r--r--crates/ra_syntax/src/ptr.rs2
-rw-r--r--crates/ra_syntax/src/syntax_error.rs6
-rw-r--r--crates/ra_syntax/src/syntax_node.rs4
-rw-r--r--crates/ra_syntax/src/tests.rs8
-rw-r--r--crates/ra_syntax/src/validation.rs6
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0001_unclosed_char_at_eof.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0002_unclosed_char_with_ferris.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0003_unclosed_char_with_ascii_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0004_unclosed_char_with_unicode_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0005_unclosed_char_with_space.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0006_unclosed_char_with_slash.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0007_unclosed_char_with_slash_n.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0008_unclosed_char_with_slash_single_quote.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0009_unclosed_byte_at_eof.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0010_unclosed_byte_with_ferris.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0011_unclosed_byte_with_ascii_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0012_unclosed_byte_with_unicode_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0013_unclosed_byte_with_space.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0014_unclosed_byte_with_slash.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0015_unclosed_byte_with_slash_n.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0016_unclosed_byte_with_slash_single_quote.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0017_unclosed_string_at_eof.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0018_unclosed_string_with_ferris.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0019_unclosed_string_with_ascii_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0020_unclosed_string_with_unicode_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0021_unclosed_string_with_space.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0022_unclosed_string_with_slash.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0023_unclosed_string_with_slash_n.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0024_unclosed_string_with_slash_double_quote.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0025_unclosed_byte_string_at_eof.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0026_unclosed_byte_string_with_ferris.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0027_unclosed_byte_string_with_ascii_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0028_unclosed_byte_string_with_unicode_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0029_unclosed_byte_string_with_space.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0030_unclosed_byte_string_with_slash.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0031_unclosed_byte_string_with_slash_n.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0032_unclosed_byte_string_with_slash_double_quote.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0033_unclosed_raw_string_at_eof.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0034_unclosed_raw_string_with_ferris.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0035_unclosed_raw_string_with_ascii_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0036_unclosed_raw_string_with_unicode_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0037_unclosed_raw_string_with_space.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0038_unclosed_raw_string_with_slash.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0039_unclosed_raw_string_with_slash_n.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0040_unclosed_raw_byte_string_at_eof.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0041_unclosed_raw_byte_string_with_ferris.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0042_unclosed_raw_byte_string_with_ascii_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0043_unclosed_raw_byte_string_with_unicode_escape.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0044_unclosed_raw_byte_string_with_space.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0045_unclosed_raw_byte_string_with_slash.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0046_unclosed_raw_byte_string_with_slash_n.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0047_unstarted_raw_string_at_eof.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0048_unstarted_raw_byte_string_at_eof.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0049_unstarted_raw_string_with_ascii.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0050_unstarted_raw_byte_string_with_ascii.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0051_unclosed_block_comment_at_eof.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0052_unclosed_block_comment_with_content.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0053_unclosed_nested_block_comment_entirely.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0054_unclosed_nested_block_comment_partially.txt2
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0055_empty_int.txt26
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0056_empty_exponent.txt28
-rw-r--r--crates/ra_syntax/test_data/lexer/err/0057_lifetime_strarts_with_a_number.txt4
-rw-r--r--crates/ra_syntax/test_data/parser/err/0000_struct_field_missing_comma.rast68
-rw-r--r--crates/ra_syntax/test_data/parser/err/0001_item_recovery_in_file.rast36
-rw-r--r--crates/ra_syntax/test_data/parser/err/0002_duplicate_shebang.rast78
-rw-r--r--crates/ra_syntax/test_data/parser/err/0003_C++_semicolon.rast76
-rw-r--r--crates/ra_syntax/test_data/parser/err/0004_use_path_bad_segment.rast32
-rw-r--r--crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast120
-rw-r--r--crates/ra_syntax/test_data/parser/err/0006_named_field_recovery.rast148
-rw-r--r--crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast66
-rw-r--r--crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast162
-rw-r--r--crates/ra_syntax/test_data/parser/err/0009_broken_struct_type_parameter.rast116
-rw-r--r--crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast90
-rw-r--r--crates/ra_syntax/test_data/parser/err/0011_extern_struct.rast26
-rw-r--r--crates/ra_syntax/test_data/parser/err/0012_broken_lambda.rast636
-rw-r--r--crates/ra_syntax/test_data/parser/err/0013_invalid_type.rast178
-rw-r--r--crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast64
-rw-r--r--crates/ra_syntax/test_data/parser/err/0015_curly_in_params.rast48
-rw-r--r--crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast88
-rw-r--r--crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast94
-rw-r--r--crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast264
-rw-r--r--crates/ra_syntax/test_data/parser/err/0019_let_recover.rast214
-rw-r--r--crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast42
-rw-r--r--crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast70
-rw-r--r--crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast366
-rw-r--r--crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast88
-rw-r--r--crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast642
-rw-r--r--crates/ra_syntax/test_data/parser/err/0025_nope.rast408
-rw-r--r--crates/ra_syntax/test_data/parser/err/0026_imp_recovery.rast98
-rw-r--r--crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast58
-rw-r--r--crates/ra_syntax/test_data/parser/err/0029_field_completion.rast72
-rw-r--r--crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast250
-rw-r--r--crates/ra_syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast408
-rw-r--r--crates/ra_syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast134
-rw-r--r--crates/ra_syntax/test_data/parser/err/0034_bad_box_pattern.rast192
-rw-r--r--crates/ra_syntax/test_data/parser/err/0035_use_recover.rast108
-rw-r--r--crates/ra_syntax/test_data/parser/err/0036_partial_use.rast102
-rw-r--r--crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast198
-rw-r--r--crates/ra_syntax/test_data/parser/err/0038_endless_inclusive_range.rast60
-rw-r--r--crates/ra_syntax/test_data/parser/err/0039_lambda_recovery.rast166
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0001_array_type_missing_semi.rast54
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0002_misplaced_label_err.rast58
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0003_pointer_type_no_mutability.rast34
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0004_impl_type.rast158
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0005_fn_pointer_type_missing_fn.rast46
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0006_unsafe_block_in_mod.rast74
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0007_async_without_semicolon.rast64
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0008_pub_expr.rast52
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast122
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0010_bad_tuple_index_expr.rast106
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast82
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0013_static_underscore.rast42
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast118
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0014_record_literal_before_ellipsis_recovery.rast98
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast144
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast270
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast124
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0004_value_parameters_no_patterns.rast120
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0005_function_type_params.rast76
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast242
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0007_type_param_bounds.rast80
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast194
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0009_loop_expr.rast52
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0010_extern_block.rast18
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0011_field_expr.rast120
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0012_type_item_where_clause.rast66
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0013_pointer_type_mut.rast70
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0014_never_type.rast26
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0015_continue_expr.rast74
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0016_unsafe_trait.rast26
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0017_array_type.rast42
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast148
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0019_unary_expr.rast90
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0020_use_star.rast118
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast160
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0022_crate_visibility.rast106
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0023_placeholder_type.rast26
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast84
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0025_slice_type.rast34
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast210
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0027_ref_pat.rast100
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0028_impl_trait_type.rast86
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0029_cast_expr.rast180
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0030_cond.rast418
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0031_while_expr.rast178
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0032_fn_pointer_type.rast196
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0033_reference_type;.rast100
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0034_break_expr.rast110
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0036_unsafe_extern_fn.rast44
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0037_qual_paths.rast158
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0038_full_range_expr.rast58
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0039_type_arg.rast110
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0040_crate_keyword_vis.rast126
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0041_trait_item.rast250
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0042_call_expr.rast296
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0043_use_alias.rast276
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0044_block_items.rast60
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0045_param_list_opt_patterns.rast94
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0046_singleton_tuple_type.rast40
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0047_unsafe_default_impl.rast36
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0048_path_type_with_bounds.rast166
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0050_fn_decl.rast44
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0051_unit_type.rast28
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0052_path_type.rast140
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0053_path_expr.rast192
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0054_record_field_attrs.rast88
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0055_literal_pattern.rast154
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0056_where_clause.rast222
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0057_const_fn.rast34
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0058_range_pat.rast166
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0059_match_arms_commas.rast120
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0060_extern_crate.rast20
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0061_record_lit.rast250
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0062_mod_contents.rast134
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0063_impl_def_neg.rast46
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0064_if_expr.rast264
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0065_dyn_trait_type.rast86
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0066_match_arm.rast304
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0067_crate_path.rast30
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0068_union_items.rast92
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0069_use_tree_list_after_path.rast74
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0070_stmt_bin_expr_ambiguity.rast106
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0071_match_expr.rast192
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0072_return_expr.rast58
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0073_type_item_type_params.rast40
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0074_stmt_postfix_expr_ambiguity.rast126
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0075_block.rast180
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0076_function_where_clause.rast80
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0077_try_expr.rast52
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0078_type_item.rast32
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0079_impl_def.rast28
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0080_postfix_range.rast192
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast486
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0082_ref_expr.rast110
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0083_struct_items.rast174
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0084_paren_type.rast38
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0085_expr_literals.rast272
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0086_function_ret_type.rast72
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0087_unsafe_impl.rast32
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0088_break_ambiguity.rast138
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0089_extern_fn.rast36
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0090_type_param_default.rast44
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0091_auto_trait.rast26
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0092_fn_pointer_type_with_ret.rast46
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0093_index_expr.rast68
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0094_unsafe_auto_trait.rast30
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0095_placeholder_pat.rast58
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0096_no_semi_after_block.rast260
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0097_default_impl.rast32
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0098_const_unsafe_fn.rast38
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0099_param_list.rast206
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0100_for_expr.rast72
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0101_unsafe_fn.rast34
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0102_record_field_pat_list.rast266
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0103_array_expr.rast110
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0104_path_fn_trait_args.rast82
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rast86
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0106_lambda_expr.rast280
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0107_method_call_expr.rast126
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0108_tuple_expr.rast78
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0109_label.rast136
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0110_use_path.rast76
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast180
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0112_bind_pat.rast256
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0113_nocontentexpr.rast114
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rast128
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0115_tuple_field_attrs.rast82
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0117_macro_call_type.rast86
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0118_impl_inner_attributes.rast80
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0118_match_guard.rast96
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0120_match_arms_inner_attribute.rast162
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0121_match_arms_outer_attributes.rast292
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0122_generic_lifetime_type_attribute.rast132
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0123_param_list_vararg.rast100
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0124_async_fn.rast34
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0125_crate_keyword_path.rast64
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0125_record_literal_field_with_attr.rast96
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0126_attr_on_expr_stmt.rast198
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0127_attr_on_last_expr_in_block.rast118
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0128_combined_fns.rast74
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0129_marco_pat.rast74
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0130_let_stmt.rast258
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0130_try_block_expr.rast66
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0131_existential_type.rast62
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0132_box_expr.rast180
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast112
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0134_nocontentexpr_after_item.rast128
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0137_await_expr.rast140
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0138_associated_type_bounds.rast112
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0138_expression_after_block.rast132
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0138_self_param_outer_attr.rast52
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0139_param_outer_arg.rast70
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0142_for_range_from.rast84
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0143_box_pat.rast222
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast912
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rast152
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0146_as_precedence.rast86
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0147_const_param.rast46
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0147_macro_def.rast90
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0148_pub_macro_def.rast42
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0150_array_attrs.rast94
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0150_impl_type_params.rast76
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0151_trait_alias.rast256
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0152_arg_with_attr.rast74
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0154_fn_pointer_param_ident_path.rast116
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0155_closure_params.rast140
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0156_fn_def_param.rast88
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0156_or_pattern.rast224
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0157_fn_pointer_unnamed_arg.rast52
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0157_variant_discriminant.rast60
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0158_binop_resets_statementness.rast76
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0158_lambda_ret_block.rast90
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0000_empty.rast2
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0001_struct_item.rast78
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0002_struct_item_field.rast44
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0004_file_shebang.rast4
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0005_fn_item.rast32
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0006_inner_attributes.rast368
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0007_extern_crate.rast80
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0008_mod_item.rast186
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0009_use_item.rast42
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0010_use_path_segments.rast84
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0011_outer_attribute.rast116
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0012_visibility.rast214
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast114
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0014_use_tree.rast190
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0015_use_tree.rast130
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0016_struct_flavors.rast186
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0017_attr_trailing_comma.rast58
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0018_struct_type_params.rast514
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0019_enums.rast310
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0020_type_param_bounds.rast536
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0021_extern_fn.rast118
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0022_empty_extern_block.rast42
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0023_static_items.rast82
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0024_const_item.rast118
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0025_extern_fn_in_block.rast66
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0026_const_fn_in_block.rast64
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0027_unsafe_fn_in_block.rast86
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0028_operator_binding_power.rast372
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0029_range_forms.rast304
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0030_string_suffixes.rast128
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0030_traits.rast122
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0031_extern.rast1946
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0032_where_for.rast182
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0033_label_break.rast440
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0034_crate_path_in_call.rast84
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast4658
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0036_fully_qualified.rast186
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0037_mod.rast32
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0038_where_pred_type.rast86
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0039_raw_fn_item.rast32
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0040_raw_struct_item_field.rast44
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0041_raw_keywords.rast100
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast252
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0043_complex_assignment.rast220
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0044_let_attrs.rast152
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast362
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0046_extern_inner_attributes.rast56
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0047_minus_in_inner_pattern.rast646
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0048_compound_assignment.rast402
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0049_async_block.rast72
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0050_async_block_as_argument.rast184
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast1038
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0052_for_range_block.rast162
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0053_outer_attribute_on_macro_rules.rast78
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rast252
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rast100
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0056_neq_in_type.rast132
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0057_loop_in_call.rast118
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0058_unary_expr_precedence.rast194
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0059_loops_in_parens.rast202
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0060_as_range.rast112
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0061_match_full_range.rast54
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0062_macro_2.0.rast352
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast396
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0063_variadic_fun.rast266
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast332
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0065_comment_newline.rast34
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0065_plus_after_fn_trait_bound.rast122
-rw-r--r--crates/ra_text_edit/Cargo.toml3
-rw-r--r--crates/ra_text_edit/src/lib.rs10
-rw-r--r--crates/ra_text_edit/src/text_edit.rs25
-rw-r--r--crates/rust-analyzer/src/cli/analysis_stats.rs2
-rw-r--r--crates/rust-analyzer/src/conv.rs19
-rw-r--r--crates/rust-analyzer/src/main_loop.rs18
-rw-r--r--crates/rust-analyzer/src/main_loop/handlers.rs22
-rw-r--r--crates/rust-analyzer/src/req.rs3
-rw-r--r--crates/test_utils/Cargo.toml2
-rw-r--r--crates/test_utils/src/lib.rs26
-rw-r--r--docs/dev/syntax.md154
-rw-r--r--docs/user/assists.md4
-rw-r--r--editors/code/src/source_change.ts8
472 files changed, 28756 insertions, 27182 deletions
diff --git a/Cargo.lock b/Cargo.lock
index d966ebe61..20e6cd540 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1180,7 +1180,7 @@ dependencies = [
1180name = "ra_text_edit" 1180name = "ra_text_edit"
1181version = "0.1.0" 1181version = "0.1.0"
1182dependencies = [ 1182dependencies = [
1183 "text_unit", 1183 "text-size",
1184] 1184]
1185 1185
1186[[package]] 1186[[package]]
@@ -1322,13 +1322,13 @@ dependencies = [
1322 1322
1323[[package]] 1323[[package]]
1324name = "rowan" 1324name = "rowan"
1325version = "0.9.1" 1325version = "0.10.0"
1326source = "registry+https://github.com/rust-lang/crates.io-index" 1326source = "registry+https://github.com/rust-lang/crates.io-index"
1327checksum = "1ea7cadf87a9d8432e85cb4eb86bd2e765ace60c24ef86e79084dcae5d1c5a19" 1327checksum = "1e081ed6eacce09e243b619ab90f069c27b0cff8a6d0eb8ad2ec935b65853798"
1328dependencies = [ 1328dependencies = [
1329 "rustc-hash", 1329 "rustc-hash",
1330 "smol_str", 1330 "smol_str",
1331 "text_unit", 1331 "text-size",
1332 "thin-dst", 1332 "thin-dst",
1333] 1333]
1334 1334
@@ -1620,14 +1620,14 @@ version = "0.1.0"
1620dependencies = [ 1620dependencies = [
1621 "difference", 1621 "difference",
1622 "serde_json", 1622 "serde_json",
1623 "text_unit", 1623 "text-size",
1624] 1624]
1625 1625
1626[[package]] 1626[[package]]
1627name = "text_unit" 1627name = "text-size"
1628version = "0.1.10" 1628version = "1.0.0"
1629source = "registry+https://github.com/rust-lang/crates.io-index" 1629source = "registry+https://github.com/rust-lang/crates.io-index"
1630checksum = "20431e104bfecc1a40872578dbc390e10290a0e9c35fffe3ce6f73c15a9dbfc2" 1630checksum = "f03e7efdedc3bc78cb2337f1e2785c39e45f5ef762d9e4ebb137fff7380a6d8a"
1631 1631
1632[[package]] 1632[[package]]
1633name = "thin-dst" 1633name = "thin-dst"
diff --git a/crates/ra_assists/src/assist_ctx.rs b/crates/ra_assists/src/assist_ctx.rs
index c3e653299..2fe7c3de3 100644
--- a/crates/ra_assists/src/assist_ctx.rs
+++ b/crates/ra_assists/src/assist_ctx.rs
@@ -5,12 +5,12 @@ use ra_fmt::{leading_indent, reindent};
5use ra_ide_db::RootDatabase; 5use ra_ide_db::RootDatabase;
6use ra_syntax::{ 6use ra_syntax::{
7 algo::{self, find_covering_element, find_node_at_offset}, 7 algo::{self, find_covering_element, find_node_at_offset},
8 AstNode, SourceFile, SyntaxElement, SyntaxKind, SyntaxNode, SyntaxToken, TextRange, TextUnit, 8 AstNode, SourceFile, SyntaxElement, SyntaxKind, SyntaxNode, SyntaxToken, TextRange, TextSize,
9 TokenAtOffset, 9 TokenAtOffset,
10}; 10};
11use ra_text_edit::TextEditBuilder; 11use ra_text_edit::TextEditBuilder;
12 12
13use crate::{AssistAction, AssistId, AssistLabel, GroupLabel, ResolvedAssist}; 13use crate::{AssistAction, AssistFile, AssistId, AssistLabel, GroupLabel, ResolvedAssist};
14use algo::SyntaxRewriter; 14use algo::SyntaxRewriter;
15 15
16#[derive(Clone, Debug)] 16#[derive(Clone, Debug)]
@@ -178,8 +178,9 @@ impl<'a> AssistGroup<'a> {
178#[derive(Default)] 178#[derive(Default)]
179pub(crate) struct ActionBuilder { 179pub(crate) struct ActionBuilder {
180 edit: TextEditBuilder, 180 edit: TextEditBuilder,
181 cursor_position: Option<TextUnit>, 181 cursor_position: Option<TextSize>,
182 target: Option<TextRange>, 182 target: Option<TextRange>,
183 file: AssistFile,
183} 184}
184 185
185impl ActionBuilder { 186impl ActionBuilder {
@@ -210,12 +211,12 @@ impl ActionBuilder {
210 } 211 }
211 212
212 /// Append specified `text` at the given `offset` 213 /// Append specified `text` at the given `offset`
213 pub(crate) fn insert(&mut self, offset: TextUnit, text: impl Into<String>) { 214 pub(crate) fn insert(&mut self, offset: TextSize, text: impl Into<String>) {
214 self.edit.insert(offset, text.into()) 215 self.edit.insert(offset, text.into())
215 } 216 }
216 217
217 /// Specify desired position of the cursor after the assist is applied. 218 /// Specify desired position of the cursor after the assist is applied.
218 pub(crate) fn set_cursor(&mut self, offset: TextUnit) { 219 pub(crate) fn set_cursor(&mut self, offset: TextSize) {
219 self.cursor_position = Some(offset) 220 self.cursor_position = Some(offset)
220 } 221 }
221 222
@@ -241,11 +242,16 @@ impl ActionBuilder {
241 algo::diff(&node, &new).into_text_edit(&mut self.edit) 242 algo::diff(&node, &new).into_text_edit(&mut self.edit)
242 } 243 }
243 244
245 pub(crate) fn set_file(&mut self, assist_file: AssistFile) {
246 self.file = assist_file
247 }
248
244 fn build(self) -> AssistAction { 249 fn build(self) -> AssistAction {
245 AssistAction { 250 AssistAction {
246 edit: self.edit.finish(), 251 edit: self.edit.finish(),
247 cursor_position: self.cursor_position, 252 cursor_position: self.cursor_position,
248 target: self.target, 253 target: self.target,
254 file: self.file,
249 } 255 }
250 } 256 }
251} 257}
diff --git a/crates/ra_assists/src/doc_tests/generated.rs b/crates/ra_assists/src/doc_tests/generated.rs
index b39e60870..e4fa9ee36 100644
--- a/crates/ra_assists/src/doc_tests/generated.rs
+++ b/crates/ra_assists/src/doc_tests/generated.rs
@@ -66,7 +66,7 @@ fn doctest_add_function() {
66struct Baz; 66struct Baz;
67fn baz() -> Baz { Baz } 67fn baz() -> Baz { Baz }
68fn foo() { 68fn foo() {
69 bar<|>("", baz()); 69 bar<|>("", baz());
70} 70}
71 71
72"#####, 72"#####,
@@ -74,7 +74,7 @@ fn foo() {
74struct Baz; 74struct Baz;
75fn baz() -> Baz { Baz } 75fn baz() -> Baz { Baz }
76fn foo() { 76fn foo() {
77 bar("", baz()); 77 bar("", baz());
78} 78}
79 79
80fn bar(arg: &str, baz: Baz) { 80fn bar(arg: &str, baz: Baz) {
diff --git a/crates/ra_assists/src/handlers/add_custom_impl.rs b/crates/ra_assists/src/handlers/add_custom_impl.rs
index 15f9b216b..4ea26a550 100644
--- a/crates/ra_assists/src/handlers/add_custom_impl.rs
+++ b/crates/ra_assists/src/handlers/add_custom_impl.rs
@@ -2,7 +2,7 @@ use ra_syntax::{
2 ast::{self, AstNode}, 2 ast::{self, AstNode},
3 Direction, SmolStr, 3 Direction, SmolStr,
4 SyntaxKind::{IDENT, WHITESPACE}, 4 SyntaxKind::{IDENT, WHITESPACE},
5 TextRange, TextUnit, 5 TextRange, TextSize,
6}; 6};
7use stdx::SepBy; 7use stdx::SepBy;
8 8
@@ -60,7 +60,6 @@ pub(crate) fn add_custom_impl(ctx: AssistCtx) -> Option<Assist> {
60 .collect::<Vec<SmolStr>>(); 60 .collect::<Vec<SmolStr>>();
61 let has_more_derives = !new_attr_input.is_empty(); 61 let has_more_derives = !new_attr_input.is_empty();
62 let new_attr_input = new_attr_input.iter().sep_by(", ").surround_with("(", ")").to_string(); 62 let new_attr_input = new_attr_input.iter().sep_by(", ").surround_with("(", ")").to_string();
63 let new_attr_input_len = new_attr_input.len();
64 63
65 let mut buf = String::new(); 64 let mut buf = String::new();
66 buf.push_str("\n\nimpl "); 65 buf.push_str("\n\nimpl ");
@@ -70,8 +69,9 @@ pub(crate) fn add_custom_impl(ctx: AssistCtx) -> Option<Assist> {
70 buf.push_str(" {\n"); 69 buf.push_str(" {\n");
71 70
72 let cursor_delta = if has_more_derives { 71 let cursor_delta = if has_more_derives {
72 let delta = input.syntax().text_range().len() - TextSize::of(&new_attr_input);
73 edit.replace(input.syntax().text_range(), new_attr_input); 73 edit.replace(input.syntax().text_range(), new_attr_input);
74 input.syntax().text_range().len() - TextUnit::from_usize(new_attr_input_len) 74 delta
75 } else { 75 } else {
76 let attr_range = attr.syntax().text_range(); 76 let attr_range = attr.syntax().text_range();
77 edit.delete(attr_range); 77 edit.delete(attr_range);
@@ -81,13 +81,13 @@ pub(crate) fn add_custom_impl(ctx: AssistCtx) -> Option<Assist> {
81 .next_sibling_or_token() 81 .next_sibling_or_token()
82 .filter(|t| t.kind() == WHITESPACE) 82 .filter(|t| t.kind() == WHITESPACE)
83 .map(|t| t.text_range()) 83 .map(|t| t.text_range())
84 .unwrap_or_else(|| TextRange::from_to(TextUnit::from(0), TextUnit::from(0))); 84 .unwrap_or_else(|| TextRange::new(TextSize::from(0), TextSize::from(0)));
85 edit.delete(line_break_range); 85 edit.delete(line_break_range);
86 86
87 attr_range.len() + line_break_range.len() 87 attr_range.len() + line_break_range.len()
88 }; 88 };
89 89
90 edit.set_cursor(start_offset + TextUnit::of_str(&buf) - cursor_delta); 90 edit.set_cursor(start_offset + TextSize::of(&buf) - cursor_delta);
91 buf.push_str("\n}"); 91 buf.push_str("\n}");
92 edit.insert(start_offset, buf); 92 edit.insert(start_offset, buf);
93 }) 93 })
diff --git a/crates/ra_assists/src/handlers/add_derive.rs b/crates/ra_assists/src/handlers/add_derive.rs
index b0d1a0a80..6254eb7c4 100644
--- a/crates/ra_assists/src/handlers/add_derive.rs
+++ b/crates/ra_assists/src/handlers/add_derive.rs
@@ -1,7 +1,7 @@
1use ra_syntax::{ 1use ra_syntax::{
2 ast::{self, AstNode, AttrsOwner}, 2 ast::{self, AstNode, AttrsOwner},
3 SyntaxKind::{COMMENT, WHITESPACE}, 3 SyntaxKind::{COMMENT, WHITESPACE},
4 TextUnit, 4 TextSize,
5}; 5};
6 6
7use crate::{Assist, AssistCtx, AssistId}; 7use crate::{Assist, AssistCtx, AssistId};
@@ -37,9 +37,9 @@ pub(crate) fn add_derive(ctx: AssistCtx) -> Option<Assist> {
37 let offset = match derive_attr { 37 let offset = match derive_attr {
38 None => { 38 None => {
39 edit.insert(node_start, "#[derive()]\n"); 39 edit.insert(node_start, "#[derive()]\n");
40 node_start + TextUnit::of_str("#[derive(") 40 node_start + TextSize::of("#[derive(")
41 } 41 }
42 Some(tt) => tt.syntax().text_range().end() - TextUnit::of_char(')'), 42 Some(tt) => tt.syntax().text_range().end() - TextSize::of(')'),
43 }; 43 };
44 edit.target(nominal.syntax().text_range()); 44 edit.target(nominal.syntax().text_range());
45 edit.set_cursor(offset) 45 edit.set_cursor(offset)
@@ -47,7 +47,7 @@ pub(crate) fn add_derive(ctx: AssistCtx) -> Option<Assist> {
47} 47}
48 48
49// Insert `derive` after doc comments. 49// Insert `derive` after doc comments.
50fn derive_insertion_offset(nominal: &ast::NominalDef) -> Option<TextUnit> { 50fn derive_insertion_offset(nominal: &ast::NominalDef) -> Option<TextSize> {
51 let non_ws_child = nominal 51 let non_ws_child = nominal
52 .syntax() 52 .syntax()
53 .children_with_tokens() 53 .children_with_tokens()
diff --git a/crates/ra_assists/src/handlers/add_explicit_type.rs b/crates/ra_assists/src/handlers/add_explicit_type.rs
index 6c56d93d8..bc313782b 100644
--- a/crates/ra_assists/src/handlers/add_explicit_type.rs
+++ b/crates/ra_assists/src/handlers/add_explicit_type.rs
@@ -37,8 +37,8 @@ pub(crate) fn add_explicit_type(ctx: AssistCtx) -> Option<Assist> {
37 let stmt_range = stmt.syntax().text_range(); 37 let stmt_range = stmt.syntax().text_range();
38 let eq_range = stmt.eq_token()?.text_range(); 38 let eq_range = stmt.eq_token()?.text_range();
39 // Assist should only be applicable if cursor is between 'let' and '=' 39 // Assist should only be applicable if cursor is between 'let' and '='
40 let let_range = TextRange::from_to(stmt_range.start(), eq_range.start()); 40 let let_range = TextRange::new(stmt_range.start(), eq_range.start());
41 let cursor_in_range = ctx.frange.range.is_subrange(&let_range); 41 let cursor_in_range = let_range.contains_range(ctx.frange.range);
42 if !cursor_in_range { 42 if !cursor_in_range {
43 return None; 43 return None;
44 } 44 }
diff --git a/crates/ra_assists/src/handlers/add_from_impl_for_enum.rs b/crates/ra_assists/src/handlers/add_from_impl_for_enum.rs
index 0621487e8..03806724a 100644
--- a/crates/ra_assists/src/handlers/add_from_impl_for_enum.rs
+++ b/crates/ra_assists/src/handlers/add_from_impl_for_enum.rs
@@ -1,6 +1,6 @@
1use ra_syntax::{ 1use ra_syntax::{
2 ast::{self, AstNode, NameOwner}, 2 ast::{self, AstNode, NameOwner},
3 TextUnit, 3 TextSize,
4}; 4};
5use stdx::format_to; 5use stdx::format_to;
6 6
@@ -65,7 +65,7 @@ impl From<{0}> for {1} {{
65 variant_name 65 variant_name
66 ); 66 );
67 edit.insert(start_offset, buf); 67 edit.insert(start_offset, buf);
68 edit.set_cursor(start_offset + TextUnit::of_str("\n\n")); 68 edit.set_cursor(start_offset + TextSize::of("\n\n"));
69 }, 69 },
70 ) 70 )
71} 71}
diff --git a/crates/ra_assists/src/handlers/add_function.rs b/crates/ra_assists/src/handlers/add_function.rs
index ad4ab66ed..6c7456579 100644
--- a/crates/ra_assists/src/handlers/add_function.rs
+++ b/crates/ra_assists/src/handlers/add_function.rs
@@ -1,10 +1,10 @@
1use ra_syntax::{ 1use ra_syntax::{
2 ast::{self, AstNode}, 2 ast::{self, AstNode},
3 SyntaxKind, SyntaxNode, TextUnit, 3 SyntaxKind, SyntaxNode, TextSize,
4}; 4};
5 5
6use crate::{Assist, AssistCtx, AssistId}; 6use crate::{Assist, AssistCtx, AssistFile, AssistId};
7use ast::{edit::IndentLevel, ArgListOwner, CallExpr, Expr}; 7use ast::{edit::IndentLevel, ArgListOwner, ModuleItemOwner};
8use hir::HirDisplay; 8use hir::HirDisplay;
9use rustc_hash::{FxHashMap, FxHashSet}; 9use rustc_hash::{FxHashMap, FxHashSet};
10 10
@@ -16,7 +16,7 @@ use rustc_hash::{FxHashMap, FxHashSet};
16// struct Baz; 16// struct Baz;
17// fn baz() -> Baz { Baz } 17// fn baz() -> Baz { Baz }
18// fn foo() { 18// fn foo() {
19// bar<|>("", baz()); 19// bar<|>("", baz());
20// } 20// }
21// 21//
22// ``` 22// ```
@@ -25,7 +25,7 @@ use rustc_hash::{FxHashMap, FxHashSet};
25// struct Baz; 25// struct Baz;
26// fn baz() -> Baz { Baz } 26// fn baz() -> Baz { Baz }
27// fn foo() { 27// fn foo() {
28// bar("", baz()); 28// bar("", baz());
29// } 29// }
30// 30//
31// fn bar(arg: &str, baz: Baz) { 31// fn bar(arg: &str, baz: Baz) {
@@ -38,21 +38,30 @@ pub(crate) fn add_function(ctx: AssistCtx) -> Option<Assist> {
38 let call = path_expr.syntax().parent().and_then(ast::CallExpr::cast)?; 38 let call = path_expr.syntax().parent().and_then(ast::CallExpr::cast)?;
39 let path = path_expr.path()?; 39 let path = path_expr.path()?;
40 40
41 if path.qualifier().is_some() {
42 return None;
43 }
44
45 if ctx.sema.resolve_path(&path).is_some() { 41 if ctx.sema.resolve_path(&path).is_some() {
46 // The function call already resolves, no need to add a function 42 // The function call already resolves, no need to add a function
47 return None; 43 return None;
48 } 44 }
49 45
50 let function_builder = FunctionBuilder::from_call(&ctx, &call)?; 46 let target_module = if let Some(qualifier) = path.qualifier() {
47 if let Some(hir::PathResolution::Def(hir::ModuleDef::Module(module))) =
48 ctx.sema.resolve_path(&qualifier)
49 {
50 Some(module.definition_source(ctx.sema.db))
51 } else {
52 return None;
53 }
54 } else {
55 None
56 };
57
58 let function_builder = FunctionBuilder::from_call(&ctx, &call, &path, target_module)?;
51 59
52 ctx.add_assist(AssistId("add_function"), "Add function", |edit| { 60 ctx.add_assist(AssistId("add_function"), "Add function", |edit| {
53 edit.target(call.syntax().text_range()); 61 edit.target(call.syntax().text_range());
54 62
55 if let Some(function_template) = function_builder.render() { 63 if let Some(function_template) = function_builder.render() {
64 edit.set_file(function_template.file);
56 edit.set_cursor(function_template.cursor_offset); 65 edit.set_cursor(function_template.cursor_offset);
57 edit.insert(function_template.insert_offset, function_template.fn_def.to_string()); 66 edit.insert(function_template.insert_offset, function_template.fn_def.to_string());
58 } 67 }
@@ -60,32 +69,70 @@ pub(crate) fn add_function(ctx: AssistCtx) -> Option<Assist> {
60} 69}
61 70
62struct FunctionTemplate { 71struct FunctionTemplate {
63 insert_offset: TextUnit, 72 insert_offset: TextSize,
64 cursor_offset: TextUnit, 73 cursor_offset: TextSize,
65 fn_def: ast::SourceFile, 74 fn_def: ast::SourceFile,
75 file: AssistFile,
66} 76}
67 77
68struct FunctionBuilder { 78struct FunctionBuilder {
69 append_fn_at: SyntaxNode, 79 target: GeneratedFunctionTarget,
70 fn_name: ast::Name, 80 fn_name: ast::Name,
71 type_params: Option<ast::TypeParamList>, 81 type_params: Option<ast::TypeParamList>,
72 params: ast::ParamList, 82 params: ast::ParamList,
83 file: AssistFile,
84 needs_pub: bool,
73} 85}
74 86
75impl FunctionBuilder { 87impl FunctionBuilder {
76 fn from_call(ctx: &AssistCtx, call: &ast::CallExpr) -> Option<Self> { 88 /// Prepares a generated function that matches `call` in `generate_in`
77 let append_fn_at = next_space_for_fn(&call)?; 89 /// (or as close to `call` as possible, if `generate_in` is `None`)
78 let fn_name = fn_name(&call)?; 90 fn from_call(
91 ctx: &AssistCtx,
92 call: &ast::CallExpr,
93 path: &ast::Path,
94 target_module: Option<hir::InFile<hir::ModuleSource>>,
95 ) -> Option<Self> {
96 let needs_pub = target_module.is_some();
97 let mut file = AssistFile::default();
98 let target = if let Some(target_module) = target_module {
99 let (in_file, target) = next_space_for_fn_in_module(ctx.sema.db, target_module)?;
100 file = in_file;
101 target
102 } else {
103 next_space_for_fn_after_call_site(&call)?
104 };
105 let fn_name = fn_name(&path)?;
79 let (type_params, params) = fn_args(ctx, &call)?; 106 let (type_params, params) = fn_args(ctx, &call)?;
80 Some(Self { append_fn_at, fn_name, type_params, params }) 107 Some(Self { target, fn_name, type_params, params, file, needs_pub })
81 } 108 }
109
82 fn render(self) -> Option<FunctionTemplate> { 110 fn render(self) -> Option<FunctionTemplate> {
83 let placeholder_expr = ast::make::expr_todo(); 111 let placeholder_expr = ast::make::expr_todo();
84 let fn_body = ast::make::block_expr(vec![], Some(placeholder_expr)); 112 let fn_body = ast::make::block_expr(vec![], Some(placeholder_expr));
85 let fn_def = ast::make::fn_def(self.fn_name, self.type_params, self.params, fn_body); 113 let mut fn_def = ast::make::fn_def(self.fn_name, self.type_params, self.params, fn_body);
86 let fn_def = ast::make::add_newlines(2, fn_def); 114 if self.needs_pub {
87 let fn_def = IndentLevel::from_node(&self.append_fn_at).increase_indent(fn_def); 115 fn_def = ast::make::add_pub_crate_modifier(fn_def);
88 let insert_offset = self.append_fn_at.text_range().end(); 116 }
117
118 let (fn_def, insert_offset) = match self.target {
119 GeneratedFunctionTarget::BehindItem(it) => {
120 let with_leading_blank_line = ast::make::add_leading_newlines(2, fn_def);
121 let indented = IndentLevel::from_node(&it).increase_indent(with_leading_blank_line);
122 (indented, it.text_range().end())
123 }
124 GeneratedFunctionTarget::InEmptyItemList(it) => {
125 let indent_once = IndentLevel(1);
126 let indent = IndentLevel::from_node(it.syntax());
127
128 let fn_def = ast::make::add_leading_newlines(1, fn_def);
129 let fn_def = indent_once.increase_indent(fn_def);
130 let fn_def = ast::make::add_trailing_newlines(1, fn_def);
131 let fn_def = indent.increase_indent(fn_def);
132 (fn_def, it.syntax().text_range().start() + TextSize::of('{'))
133 }
134 };
135
89 let cursor_offset_from_fn_start = fn_def 136 let cursor_offset_from_fn_start = fn_def
90 .syntax() 137 .syntax()
91 .descendants() 138 .descendants()
@@ -94,19 +141,24 @@ impl FunctionBuilder {
94 .text_range() 141 .text_range()
95 .start(); 142 .start();
96 let cursor_offset = insert_offset + cursor_offset_from_fn_start; 143 let cursor_offset = insert_offset + cursor_offset_from_fn_start;
97 Some(FunctionTemplate { insert_offset, cursor_offset, fn_def }) 144 Some(FunctionTemplate { insert_offset, cursor_offset, fn_def, file: self.file })
98 } 145 }
99} 146}
100 147
101fn fn_name(call: &CallExpr) -> Option<ast::Name> { 148enum GeneratedFunctionTarget {
102 let name = call.expr()?.syntax().to_string(); 149 BehindItem(SyntaxNode),
150 InEmptyItemList(ast::ItemList),
151}
152
153fn fn_name(call: &ast::Path) -> Option<ast::Name> {
154 let name = call.segment()?.syntax().to_string();
103 Some(ast::make::name(&name)) 155 Some(ast::make::name(&name))
104} 156}
105 157
106/// Computes the type variables and arguments required for the generated function 158/// Computes the type variables and arguments required for the generated function
107fn fn_args( 159fn fn_args(
108 ctx: &AssistCtx, 160 ctx: &AssistCtx,
109 call: &CallExpr, 161 call: &ast::CallExpr,
110) -> Option<(Option<ast::TypeParamList>, ast::ParamList)> { 162) -> Option<(Option<ast::TypeParamList>, ast::ParamList)> {
111 let mut arg_names = Vec::new(); 163 let mut arg_names = Vec::new();
112 let mut arg_types = Vec::new(); 164 let mut arg_types = Vec::new();
@@ -158,9 +210,9 @@ fn deduplicate_arg_names(arg_names: &mut Vec<String>) {
158 } 210 }
159} 211}
160 212
161fn fn_arg_name(fn_arg: &Expr) -> Option<String> { 213fn fn_arg_name(fn_arg: &ast::Expr) -> Option<String> {
162 match fn_arg { 214 match fn_arg {
163 Expr::CastExpr(cast_expr) => fn_arg_name(&cast_expr.expr()?), 215 ast::Expr::CastExpr(cast_expr) => fn_arg_name(&cast_expr.expr()?),
164 _ => Some( 216 _ => Some(
165 fn_arg 217 fn_arg
166 .syntax() 218 .syntax()
@@ -172,7 +224,7 @@ fn fn_arg_name(fn_arg: &Expr) -> Option<String> {
172 } 224 }
173} 225}
174 226
175fn fn_arg_type(ctx: &AssistCtx, fn_arg: &Expr) -> Option<String> { 227fn fn_arg_type(ctx: &AssistCtx, fn_arg: &ast::Expr) -> Option<String> {
176 let ty = ctx.sema.type_of_expr(fn_arg)?; 228 let ty = ctx.sema.type_of_expr(fn_arg)?;
177 if ty.is_unknown() { 229 if ty.is_unknown() {
178 return None; 230 return None;
@@ -184,7 +236,7 @@ fn fn_arg_type(ctx: &AssistCtx, fn_arg: &Expr) -> Option<String> {
184/// directly after the current block 236/// directly after the current block
185/// We want to write the generated function directly after 237/// We want to write the generated function directly after
186/// fns, impls or macro calls, but inside mods 238/// fns, impls or macro calls, but inside mods
187fn next_space_for_fn(expr: &CallExpr) -> Option<SyntaxNode> { 239fn next_space_for_fn_after_call_site(expr: &ast::CallExpr) -> Option<GeneratedFunctionTarget> {
188 let mut ancestors = expr.syntax().ancestors().peekable(); 240 let mut ancestors = expr.syntax().ancestors().peekable();
189 let mut last_ancestor: Option<SyntaxNode> = None; 241 let mut last_ancestor: Option<SyntaxNode> = None;
190 while let Some(next_ancestor) = ancestors.next() { 242 while let Some(next_ancestor) = ancestors.next() {
@@ -201,7 +253,32 @@ fn next_space_for_fn(expr: &CallExpr) -> Option<SyntaxNode> {
201 } 253 }
202 last_ancestor = Some(next_ancestor); 254 last_ancestor = Some(next_ancestor);
203 } 255 }
204 last_ancestor 256 last_ancestor.map(GeneratedFunctionTarget::BehindItem)
257}
258
259fn next_space_for_fn_in_module(
260 db: &dyn hir::db::AstDatabase,
261 module: hir::InFile<hir::ModuleSource>,
262) -> Option<(AssistFile, GeneratedFunctionTarget)> {
263 let file = module.file_id.original_file(db);
264 let assist_file = AssistFile::TargetFile(file);
265 let assist_item = match module.value {
266 hir::ModuleSource::SourceFile(it) => {
267 if let Some(last_item) = it.items().last() {
268 GeneratedFunctionTarget::BehindItem(last_item.syntax().clone())
269 } else {
270 GeneratedFunctionTarget::BehindItem(it.syntax().clone())
271 }
272 }
273 hir::ModuleSource::Module(it) => {
274 if let Some(last_item) = it.item_list().and_then(|it| it.items().last()) {
275 GeneratedFunctionTarget::BehindItem(last_item.syntax().clone())
276 } else {
277 GeneratedFunctionTarget::InEmptyItemList(it.item_list()?)
278 }
279 }
280 };
281 Some((assist_file, assist_item))
205} 282}
206 283
207#[cfg(test)] 284#[cfg(test)]
@@ -714,6 +791,111 @@ fn bar(baz_1: Baz, baz_2: Baz, arg_1: &str, arg_2: &str) {
714 } 791 }
715 792
716 #[test] 793 #[test]
794 fn add_function_in_module() {
795 check_assist(
796 add_function,
797 r"
798mod bar {}
799
800fn foo() {
801 bar::my_fn<|>()
802}
803",
804 r"
805mod bar {
806 pub(crate) fn my_fn() {
807 <|>todo!()
808 }
809}
810
811fn foo() {
812 bar::my_fn()
813}
814",
815 )
816 }
817
818 #[test]
819 fn add_function_in_module_containing_other_items() {
820 check_assist(
821 add_function,
822 r"
823mod bar {
824 fn something_else() {}
825}
826
827fn foo() {
828 bar::my_fn<|>()
829}
830",
831 r"
832mod bar {
833 fn something_else() {}
834
835 pub(crate) fn my_fn() {
836 <|>todo!()
837 }
838}
839
840fn foo() {
841 bar::my_fn()
842}
843",
844 )
845 }
846
847 #[test]
848 fn add_function_in_nested_module() {
849 check_assist(
850 add_function,
851 r"
852mod bar {
853 mod baz {}
854}
855
856fn foo() {
857 bar::baz::my_fn<|>()
858}
859",
860 r"
861mod bar {
862 mod baz {
863 pub(crate) fn my_fn() {
864 <|>todo!()
865 }
866 }
867}
868
869fn foo() {
870 bar::baz::my_fn()
871}
872",
873 )
874 }
875
876 #[test]
877 fn add_function_in_another_file() {
878 check_assist(
879 add_function,
880 r"
881//- /main.rs
882mod foo;
883
884fn main() {
885 foo::bar<|>()
886}
887//- /foo.rs
888",
889 r"
890
891
892pub(crate) fn bar() {
893 <|>todo!()
894}",
895 )
896 }
897
898 #[test]
717 fn add_function_not_applicable_if_function_already_exists() { 899 fn add_function_not_applicable_if_function_already_exists() {
718 check_assist_not_applicable( 900 check_assist_not_applicable(
719 add_function, 901 add_function,
diff --git a/crates/ra_assists/src/handlers/add_impl.rs b/crates/ra_assists/src/handlers/add_impl.rs
index 6622eadb2..d26f8b93d 100644
--- a/crates/ra_assists/src/handlers/add_impl.rs
+++ b/crates/ra_assists/src/handlers/add_impl.rs
@@ -1,6 +1,6 @@
1use ra_syntax::{ 1use ra_syntax::{
2 ast::{self, AstNode, NameOwner, TypeParamsOwner}, 2 ast::{self, AstNode, NameOwner, TypeParamsOwner},
3 TextUnit, 3 TextSize,
4}; 4};
5use stdx::{format_to, SepBy}; 5use stdx::{format_to, SepBy};
6 6
@@ -51,7 +51,7 @@ pub(crate) fn add_impl(ctx: AssistCtx) -> Option<Assist> {
51 format_to!(buf, "<{}>", generic_params) 51 format_to!(buf, "<{}>", generic_params)
52 } 52 }
53 buf.push_str(" {\n"); 53 buf.push_str(" {\n");
54 edit.set_cursor(start_offset + TextUnit::of_str(&buf)); 54 edit.set_cursor(start_offset + TextSize::of(&buf));
55 buf.push_str("\n}"); 55 buf.push_str("\n}");
56 edit.insert(start_offset, buf); 56 edit.insert(start_offset, buf);
57 }) 57 })
diff --git a/crates/ra_assists/src/handlers/add_new.rs b/crates/ra_assists/src/handlers/add_new.rs
index 240b19fa3..0f9174a29 100644
--- a/crates/ra_assists/src/handlers/add_new.rs
+++ b/crates/ra_assists/src/handlers/add_new.rs
@@ -3,7 +3,7 @@ use ra_syntax::{
3 ast::{ 3 ast::{
4 self, AstNode, NameOwner, StructKind, TypeAscriptionOwner, TypeParamsOwner, VisibilityOwner, 4 self, AstNode, NameOwner, StructKind, TypeAscriptionOwner, TypeParamsOwner, VisibilityOwner,
5 }, 5 },
6 TextUnit, T, 6 TextSize, T,
7}; 7};
8use stdx::{format_to, SepBy}; 8use stdx::{format_to, SepBy};
9 9
@@ -77,16 +77,16 @@ pub(crate) fn add_new(ctx: AssistCtx) -> Option<Assist> {
77 .text_range() 77 .text_range()
78 .end(); 78 .end();
79 79
80 Some((start, TextUnit::from_usize(1))) 80 Some((start, TextSize::of("\n")))
81 }) 81 })
82 .unwrap_or_else(|| { 82 .unwrap_or_else(|| {
83 buf = generate_impl_text(&strukt, &buf); 83 buf = generate_impl_text(&strukt, &buf);
84 let start = strukt.syntax().text_range().end(); 84 let start = strukt.syntax().text_range().end();
85 85
86 (start, TextUnit::from_usize(3)) 86 (start, TextSize::of("\n}\n"))
87 }); 87 });
88 88
89 edit.set_cursor(start_offset + TextUnit::of_str(&buf) - end_offset); 89 edit.set_cursor(start_offset + TextSize::of(&buf) - end_offset);
90 edit.insert(start_offset, buf); 90 edit.insert(start_offset, buf);
91 }) 91 })
92} 92}
diff --git a/crates/ra_assists/src/handlers/apply_demorgan.rs b/crates/ra_assists/src/handlers/apply_demorgan.rs
index 239807e24..260b9e073 100644
--- a/crates/ra_assists/src/handlers/apply_demorgan.rs
+++ b/crates/ra_assists/src/handlers/apply_demorgan.rs
@@ -26,7 +26,7 @@ pub(crate) fn apply_demorgan(ctx: AssistCtx) -> Option<Assist> {
26 let op = expr.op_kind()?; 26 let op = expr.op_kind()?;
27 let op_range = expr.op_token()?.text_range(); 27 let op_range = expr.op_token()?.text_range();
28 let opposite_op = opposite_logic_op(op)?; 28 let opposite_op = opposite_logic_op(op)?;
29 let cursor_in_range = ctx.frange.range.is_subrange(&op_range); 29 let cursor_in_range = op_range.contains_range(ctx.frange.range);
30 if !cursor_in_range { 30 if !cursor_in_range {
31 return None; 31 return None;
32 } 32 }
diff --git a/crates/ra_assists/src/handlers/change_visibility.rs b/crates/ra_assists/src/handlers/change_visibility.rs
index cd6d1ee6c..44f6a1dae 100644
--- a/crates/ra_assists/src/handlers/change_visibility.rs
+++ b/crates/ra_assists/src/handlers/change_visibility.rs
@@ -5,7 +5,7 @@ use ra_syntax::{
5 ATTR, COMMENT, CONST_DEF, ENUM_DEF, FN_DEF, MODULE, STRUCT_DEF, TRAIT_DEF, VISIBILITY, 5 ATTR, COMMENT, CONST_DEF, ENUM_DEF, FN_DEF, MODULE, STRUCT_DEF, TRAIT_DEF, VISIBILITY,
6 WHITESPACE, 6 WHITESPACE,
7 }, 7 },
8 SyntaxNode, TextUnit, T, 8 SyntaxNode, TextSize, T,
9}; 9};
10 10
11use crate::{Assist, AssistCtx, AssistId}; 11use crate::{Assist, AssistCtx, AssistId};
@@ -67,7 +67,7 @@ fn add_vis(ctx: AssistCtx) -> Option<Assist> {
67 }) 67 })
68} 68}
69 69
70fn vis_offset(node: &SyntaxNode) -> TextUnit { 70fn vis_offset(node: &SyntaxNode) -> TextSize {
71 node.children_with_tokens() 71 node.children_with_tokens()
72 .skip_while(|it| match it.kind() { 72 .skip_while(|it| match it.kind() {
73 WHITESPACE | COMMENT | ATTR => true, 73 WHITESPACE | COMMENT | ATTR => true,
diff --git a/crates/ra_assists/src/handlers/flip_binexpr.rs b/crates/ra_assists/src/handlers/flip_binexpr.rs
index bfcc09e90..8030efb35 100644
--- a/crates/ra_assists/src/handlers/flip_binexpr.rs
+++ b/crates/ra_assists/src/handlers/flip_binexpr.rs
@@ -23,7 +23,7 @@ pub(crate) fn flip_binexpr(ctx: AssistCtx) -> Option<Assist> {
23 let rhs = expr.rhs()?.syntax().clone(); 23 let rhs = expr.rhs()?.syntax().clone();
24 let op_range = expr.op_token()?.text_range(); 24 let op_range = expr.op_token()?.text_range();
25 // The assist should be applied only if the cursor is on the operator 25 // The assist should be applied only if the cursor is on the operator
26 let cursor_in_range = ctx.frange.range.is_subrange(&op_range); 26 let cursor_in_range = op_range.contains_range(ctx.frange.range);
27 if !cursor_in_range { 27 if !cursor_in_range {
28 return None; 28 return None;
29 } 29 }
diff --git a/crates/ra_assists/src/handlers/inline_local_variable.rs b/crates/ra_assists/src/handlers/inline_local_variable.rs
index c4fb425b0..f5702f6e0 100644
--- a/crates/ra_assists/src/handlers/inline_local_variable.rs
+++ b/crates/ra_assists/src/handlers/inline_local_variable.rs
@@ -52,7 +52,7 @@ pub(crate) fn inline_local_variable(ctx: AssistCtx) -> Option<Assist> {
52 .next_sibling_or_token() 52 .next_sibling_or_token()
53 .and_then(|it| ast::Whitespace::cast(it.as_token()?.clone())) 53 .and_then(|it| ast::Whitespace::cast(it.as_token()?.clone()))
54 { 54 {
55 TextRange::from_to( 55 TextRange::new(
56 let_stmt.syntax().text_range().start(), 56 let_stmt.syntax().text_range().start(),
57 whitespace.syntax().text_range().end(), 57 whitespace.syntax().text_range().end(),
58 ) 58 )
diff --git a/crates/ra_assists/src/handlers/introduce_variable.rs b/crates/ra_assists/src/handlers/introduce_variable.rs
index 8c09e6bcd..eda9ac296 100644
--- a/crates/ra_assists/src/handlers/introduce_variable.rs
+++ b/crates/ra_assists/src/handlers/introduce_variable.rs
@@ -4,7 +4,7 @@ use ra_syntax::{
4 BLOCK_EXPR, BREAK_EXPR, COMMENT, LAMBDA_EXPR, LOOP_EXPR, MATCH_ARM, PATH_EXPR, RETURN_EXPR, 4 BLOCK_EXPR, BREAK_EXPR, COMMENT, LAMBDA_EXPR, LOOP_EXPR, MATCH_ARM, PATH_EXPR, RETURN_EXPR,
5 WHITESPACE, 5 WHITESPACE,
6 }, 6 },
7 SyntaxNode, TextUnit, 7 SyntaxNode, TextSize,
8}; 8};
9use stdx::format_to; 9use stdx::format_to;
10use test_utils::tested_by; 10use test_utils::tested_by;
@@ -47,10 +47,10 @@ pub(crate) fn introduce_variable(ctx: AssistCtx) -> Option<Assist> {
47 47
48 let cursor_offset = if wrap_in_block { 48 let cursor_offset = if wrap_in_block {
49 buf.push_str("{ let var_name = "); 49 buf.push_str("{ let var_name = ");
50 TextUnit::of_str("{ let ") 50 TextSize::of("{ let ")
51 } else { 51 } else {
52 buf.push_str("let var_name = "); 52 buf.push_str("let var_name = ");
53 TextUnit::of_str("let ") 53 TextSize::of("let ")
54 }; 54 };
55 format_to!(buf, "{}", expr.syntax()); 55 format_to!(buf, "{}", expr.syntax());
56 let full_stmt = ast::ExprStmt::cast(anchor_stmt.clone()); 56 let full_stmt = ast::ExprStmt::cast(anchor_stmt.clone());
diff --git a/crates/ra_assists/src/handlers/invert_if.rs b/crates/ra_assists/src/handlers/invert_if.rs
index 4c5716868..682e08512 100644
--- a/crates/ra_assists/src/handlers/invert_if.rs
+++ b/crates/ra_assists/src/handlers/invert_if.rs
@@ -28,7 +28,7 @@ pub(crate) fn invert_if(ctx: AssistCtx) -> Option<Assist> {
28 let if_keyword = ctx.find_token_at_offset(T![if])?; 28 let if_keyword = ctx.find_token_at_offset(T![if])?;
29 let expr = ast::IfExpr::cast(if_keyword.parent())?; 29 let expr = ast::IfExpr::cast(if_keyword.parent())?;
30 let if_range = if_keyword.text_range(); 30 let if_range = if_keyword.text_range();
31 let cursor_in_range = ctx.frange.range.is_subrange(&if_range); 31 let cursor_in_range = if_range.contains_range(ctx.frange.range);
32 if !cursor_in_range { 32 if !cursor_in_range {
33 return None; 33 return None;
34 } 34 }
diff --git a/crates/ra_assists/src/handlers/merge_match_arms.rs b/crates/ra_assists/src/handlers/merge_match_arms.rs
index eb967ab92..5a77d3dbc 100644
--- a/crates/ra_assists/src/handlers/merge_match_arms.rs
+++ b/crates/ra_assists/src/handlers/merge_match_arms.rs
@@ -3,7 +3,7 @@ use std::iter::successors;
3use ra_syntax::{ 3use ra_syntax::{
4 algo::neighbor, 4 algo::neighbor,
5 ast::{self, AstNode}, 5 ast::{self, AstNode},
6 Direction, TextUnit, 6 Direction, TextSize,
7}; 7};
8 8
9use crate::{Assist, AssistCtx, AssistId, TextRange}; 9use crate::{Assist, AssistCtx, AssistId, TextRange};
@@ -42,8 +42,8 @@ pub(crate) fn merge_match_arms(ctx: AssistCtx) -> Option<Assist> {
42 let current_text_range = current_arm.syntax().text_range(); 42 let current_text_range = current_arm.syntax().text_range();
43 43
44 enum CursorPos { 44 enum CursorPos {
45 InExpr(TextUnit), 45 InExpr(TextSize),
46 InPat(TextUnit), 46 InPat(TextSize),
47 } 47 }
48 let cursor_pos = ctx.frange.range.start(); 48 let cursor_pos = ctx.frange.range.start();
49 let cursor_pos = if current_expr.syntax().text_range().contains(cursor_pos) { 49 let cursor_pos = if current_expr.syntax().text_range().contains(cursor_pos) {
@@ -89,10 +89,10 @@ pub(crate) fn merge_match_arms(ctx: AssistCtx) -> Option<Assist> {
89 89
90 edit.target(current_text_range); 90 edit.target(current_text_range);
91 edit.set_cursor(match cursor_pos { 91 edit.set_cursor(match cursor_pos {
92 CursorPos::InExpr(back_offset) => start + TextUnit::from_usize(arm.len()) - back_offset, 92 CursorPos::InExpr(back_offset) => start + TextSize::of(&arm) - back_offset,
93 CursorPos::InPat(offset) => offset, 93 CursorPos::InPat(offset) => offset,
94 }); 94 });
95 edit.replace(TextRange::from_to(start, end), arm); 95 edit.replace(TextRange::new(start, end), arm);
96 }) 96 })
97} 97}
98 98
diff --git a/crates/ra_assists/src/handlers/move_guard.rs b/crates/ra_assists/src/handlers/move_guard.rs
index 1cc498638..d5ccdd91c 100644
--- a/crates/ra_assists/src/handlers/move_guard.rs
+++ b/crates/ra_assists/src/handlers/move_guard.rs
@@ -1,7 +1,7 @@
1use ra_syntax::{ 1use ra_syntax::{
2 ast, 2 ast,
3 ast::{AstNode, AstToken, IfExpr, MatchArm}, 3 ast::{AstNode, AstToken, IfExpr, MatchArm},
4 TextUnit, 4 TextSize,
5}; 5};
6 6
7use crate::{Assist, AssistCtx, AssistId}; 7use crate::{Assist, AssistCtx, AssistId};
@@ -49,16 +49,16 @@ pub(crate) fn move_guard_to_arm_body(ctx: AssistCtx) -> Option<Assist> {
49 edit.delete(ele); 49 edit.delete(ele);
50 ele.len() 50 ele.len()
51 } else { 51 } else {
52 TextUnit::from(0) 52 TextSize::from(0)
53 } 53 }
54 } 54 }
55 _ => TextUnit::from(0), 55 _ => TextSize::from(0),
56 }; 56 };
57 57
58 edit.delete(guard.syntax().text_range()); 58 edit.delete(guard.syntax().text_range());
59 edit.replace_node_and_indent(arm_expr.syntax(), buf); 59 edit.replace_node_and_indent(arm_expr.syntax(), buf);
60 edit.set_cursor( 60 edit.set_cursor(
61 arm_expr.syntax().text_range().start() + TextUnit::from(3) - offseting_amount, 61 arm_expr.syntax().text_range().start() + TextSize::from(3) - offseting_amount,
62 ); 62 );
63 }) 63 })
64} 64}
@@ -123,7 +123,7 @@ pub(crate) fn move_arm_cond_to_match_guard(ctx: AssistCtx) -> Option<Assist> {
123 } 123 }
124 124
125 edit.insert(match_pat.syntax().text_range().end(), buf); 125 edit.insert(match_pat.syntax().text_range().end(), buf);
126 edit.set_cursor(match_pat.syntax().text_range().end() + TextUnit::from(1)); 126 edit.set_cursor(match_pat.syntax().text_range().end() + TextSize::from(1));
127 }, 127 },
128 ) 128 )
129} 129}
diff --git a/crates/ra_assists/src/handlers/raw_string.rs b/crates/ra_assists/src/handlers/raw_string.rs
index 7e4b83f13..567400b9c 100644
--- a/crates/ra_assists/src/handlers/raw_string.rs
+++ b/crates/ra_assists/src/handlers/raw_string.rs
@@ -2,7 +2,7 @@ use ra_syntax::{
2 ast::{self, HasStringValue}, 2 ast::{self, HasStringValue},
3 AstToken, 3 AstToken,
4 SyntaxKind::{RAW_STRING, STRING}, 4 SyntaxKind::{RAW_STRING, STRING},
5 TextUnit, 5 TextSize,
6}; 6};
7 7
8use crate::{Assist, AssistCtx, AssistId}; 8use crate::{Assist, AssistCtx, AssistId};
@@ -81,7 +81,7 @@ pub(crate) fn add_hash(ctx: AssistCtx) -> Option<Assist> {
81 let token = ctx.find_token_at_offset(RAW_STRING)?; 81 let token = ctx.find_token_at_offset(RAW_STRING)?;
82 ctx.add_assist(AssistId("add_hash"), "Add # to raw string", |edit| { 82 ctx.add_assist(AssistId("add_hash"), "Add # to raw string", |edit| {
83 edit.target(token.text_range()); 83 edit.target(token.text_range());
84 edit.insert(token.text_range().start() + TextUnit::of_char('r'), "#"); 84 edit.insert(token.text_range().start() + TextSize::of('r'), "#");
85 edit.insert(token.text_range().end(), "#"); 85 edit.insert(token.text_range().end(), "#");
86 }) 86 })
87} 87}
diff --git a/crates/ra_assists/src/handlers/remove_dbg.rs b/crates/ra_assists/src/handlers/remove_dbg.rs
index 5085649b4..4e5eb4350 100644
--- a/crates/ra_assists/src/handlers/remove_dbg.rs
+++ b/crates/ra_assists/src/handlers/remove_dbg.rs
@@ -1,6 +1,6 @@
1use ra_syntax::{ 1use ra_syntax::{
2 ast::{self, AstNode}, 2 ast::{self, AstNode},
3 TextUnit, T, 3 TextSize, T,
4}; 4};
5 5
6use crate::{Assist, AssistCtx, AssistId}; 6use crate::{Assist, AssistCtx, AssistId};
@@ -38,9 +38,9 @@ pub(crate) fn remove_dbg(ctx: AssistCtx) -> Option<Assist> {
38 let offset_start = file_range 38 let offset_start = file_range
39 .start() 39 .start()
40 .checked_sub(macro_range.start()) 40 .checked_sub(macro_range.start())
41 .unwrap_or_else(|| TextUnit::from(0)); 41 .unwrap_or_else(|| TextSize::from(0));
42 42
43 let dbg_size = TextUnit::of_str("dbg!("); 43 let dbg_size = TextSize::of("dbg!(");
44 44
45 if offset_start > dbg_size { 45 if offset_start > dbg_size {
46 file_range.start() - dbg_size 46 file_range.start() - dbg_size
@@ -53,7 +53,7 @@ pub(crate) fn remove_dbg(ctx: AssistCtx) -> Option<Assist> {
53 let macro_args = macro_call.token_tree()?.syntax().clone(); 53 let macro_args = macro_call.token_tree()?.syntax().clone();
54 54
55 let text = macro_args.text(); 55 let text = macro_args.text();
56 let without_parens = TextUnit::of_char('(')..text.len() - TextUnit::of_char(')'); 56 let without_parens = TextSize::of('(')..text.len() - TextSize::of(')');
57 text.slice(without_parens).to_string() 57 text.slice(without_parens).to_string()
58 }; 58 };
59 59
diff --git a/crates/ra_assists/src/handlers/remove_mut.rs b/crates/ra_assists/src/handlers/remove_mut.rs
index 6884830eb..e598023b2 100644
--- a/crates/ra_assists/src/handlers/remove_mut.rs
+++ b/crates/ra_assists/src/handlers/remove_mut.rs
@@ -27,6 +27,6 @@ pub(crate) fn remove_mut(ctx: AssistCtx) -> Option<Assist> {
27 27
28 ctx.add_assist(AssistId("remove_mut"), "Remove `mut` keyword", |edit| { 28 ctx.add_assist(AssistId("remove_mut"), "Remove `mut` keyword", |edit| {
29 edit.set_cursor(delete_from); 29 edit.set_cursor(delete_from);
30 edit.delete(TextRange::from_to(delete_from, delete_to)); 30 edit.delete(TextRange::new(delete_from, delete_to));
31 }) 31 })
32} 32}
diff --git a/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs b/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs
index 94f5d6c50..2f02df303 100644
--- a/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs
+++ b/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs
@@ -43,7 +43,7 @@ pub(crate) fn replace_qualified_name_with_use(ctx: AssistCtx) -> Option<Assist>
43 if let Some(last) = path.segment() { 43 if let Some(last) = path.segment() {
44 // Here we are assuming the assist will provide a correct use statement 44 // Here we are assuming the assist will provide a correct use statement
45 // so we can delete the path qualifier 45 // so we can delete the path qualifier
46 edit.delete(TextRange::from_to( 46 edit.delete(TextRange::new(
47 path.syntax().text_range().start(), 47 path.syntax().text_range().start(),
48 last.syntax().text_range().start(), 48 last.syntax().text_range().start(),
49 )); 49 ));
diff --git a/crates/ra_assists/src/lib.rs b/crates/ra_assists/src/lib.rs
index a00136da1..64bd87afb 100644
--- a/crates/ra_assists/src/lib.rs
+++ b/crates/ra_assists/src/lib.rs
@@ -17,9 +17,9 @@ mod doc_tests;
17pub mod utils; 17pub mod utils;
18pub mod ast_transform; 18pub mod ast_transform;
19 19
20use ra_db::FileRange; 20use ra_db::{FileId, FileRange};
21use ra_ide_db::RootDatabase; 21use ra_ide_db::RootDatabase;
22use ra_syntax::{TextRange, TextUnit}; 22use ra_syntax::{TextRange, TextSize};
23use ra_text_edit::TextEdit; 23use ra_text_edit::TextEdit;
24 24
25pub(crate) use crate::assist_ctx::{Assist, AssistCtx, AssistHandler}; 25pub(crate) use crate::assist_ctx::{Assist, AssistCtx, AssistHandler};
@@ -51,9 +51,10 @@ impl AssistLabel {
51#[derive(Debug, Clone)] 51#[derive(Debug, Clone)]
52pub struct AssistAction { 52pub struct AssistAction {
53 pub edit: TextEdit, 53 pub edit: TextEdit,
54 pub cursor_position: Option<TextUnit>, 54 pub cursor_position: Option<TextSize>,
55 // FIXME: This belongs to `AssistLabel` 55 // FIXME: This belongs to `AssistLabel`
56 pub target: Option<TextRange>, 56 pub target: Option<TextRange>,
57 pub file: AssistFile,
57} 58}
58 59
59#[derive(Debug, Clone)] 60#[derive(Debug, Clone)]
@@ -63,6 +64,18 @@ pub struct ResolvedAssist {
63 pub action: AssistAction, 64 pub action: AssistAction,
64} 65}
65 66
67#[derive(Debug, Clone, Copy)]
68pub enum AssistFile {
69 CurrentFile,
70 TargetFile(FileId),
71}
72
73impl Default for AssistFile {
74 fn default() -> Self {
75 Self::CurrentFile
76 }
77}
78
66/// Return all the assists applicable at the given position. 79/// Return all the assists applicable at the given position.
67/// 80///
68/// Assists are returned in the "unresolved" state, that is only labels are 81/// Assists are returned in the "unresolved" state, that is only labels are
@@ -91,7 +104,7 @@ pub fn resolved_assists(db: &RootDatabase, range: FileRange) -> Vec<ResolvedAssi
91 .flat_map(|it| it.0) 104 .flat_map(|it| it.0)
92 .map(|it| it.into_resolved().unwrap()) 105 .map(|it| it.into_resolved().unwrap())
93 .collect::<Vec<_>>(); 106 .collect::<Vec<_>>();
94 a.sort_by_key(|it| it.action.target.map_or(TextUnit::from(!0u32), |it| it.len())); 107 a.sort_by_key(|it| it.action.target.map_or(TextSize::from(!0u32), |it| it.len()));
95 a 108 a
96} 109}
97 110
@@ -184,7 +197,7 @@ mod helpers {
184 use ra_ide_db::{symbol_index::SymbolsDatabase, RootDatabase}; 197 use ra_ide_db::{symbol_index::SymbolsDatabase, RootDatabase};
185 use test_utils::{add_cursor, assert_eq_text, extract_range_or_offset, RangeOrOffset}; 198 use test_utils::{add_cursor, assert_eq_text, extract_range_or_offset, RangeOrOffset};
186 199
187 use crate::{AssistCtx, AssistHandler}; 200 use crate::{AssistCtx, AssistFile, AssistHandler};
188 use hir::Semantics; 201 use hir::Semantics;
189 202
190 pub(crate) fn with_single_file(text: &str) -> (RootDatabase, FileId) { 203 pub(crate) fn with_single_file(text: &str) -> (RootDatabase, FileId) {
@@ -246,7 +259,13 @@ mod helpers {
246 (Some(assist), ExpectedResult::After(after)) => { 259 (Some(assist), ExpectedResult::After(after)) => {
247 let action = assist.0[0].action.clone().unwrap(); 260 let action = assist.0[0].action.clone().unwrap();
248 261
249 let mut actual = action.edit.apply(&text_without_caret); 262 let assisted_file_text = if let AssistFile::TargetFile(file_id) = action.file {
263 db.file_text(file_id).as_ref().to_owned()
264 } else {
265 text_without_caret
266 };
267
268 let mut actual = action.edit.apply(&assisted_file_text);
250 match action.cursor_position { 269 match action.cursor_position {
251 None => { 270 None => {
252 if let RangeOrOffset::Offset(before_cursor_pos) = range_or_offset { 271 if let RangeOrOffset::Offset(before_cursor_pos) = range_or_offset {
@@ -289,8 +308,7 @@ mod tests {
289 let before = "struct Foo { <|>bar: u32 }"; 308 let before = "struct Foo { <|>bar: u32 }";
290 let (before_cursor_pos, before) = extract_offset(before); 309 let (before_cursor_pos, before) = extract_offset(before);
291 let (db, file_id) = helpers::with_single_file(&before); 310 let (db, file_id) = helpers::with_single_file(&before);
292 let frange = 311 let frange = FileRange { file_id, range: TextRange::empty(before_cursor_pos) };
293 FileRange { file_id, range: TextRange::offset_len(before_cursor_pos, 0.into()) };
294 let assists = resolved_assists(&db, frange); 312 let assists = resolved_assists(&db, frange);
295 let mut assists = assists.iter(); 313 let mut assists = assists.iter();
296 314
diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs
index a06f59c14..fd4280de2 100644
--- a/crates/ra_db/src/lib.rs
+++ b/crates/ra_db/src/lib.rs
@@ -6,7 +6,7 @@ pub mod fixture;
6use std::{panic, sync::Arc}; 6use std::{panic, sync::Arc};
7 7
8use ra_prof::profile; 8use ra_prof::profile;
9use ra_syntax::{ast, Parse, SourceFile, TextRange, TextUnit}; 9use ra_syntax::{ast, Parse, SourceFile, TextRange, TextSize};
10 10
11pub use crate::{ 11pub use crate::{
12 cancellation::Canceled, 12 cancellation::Canceled,
@@ -75,7 +75,7 @@ impl<T: salsa::Database> CheckCanceled for T {
75#[derive(Clone, Copy, Debug)] 75#[derive(Clone, Copy, Debug)]
76pub struct FilePosition { 76pub struct FilePosition {
77 pub file_id: FileId, 77 pub file_id: FileId,
78 pub offset: TextUnit, 78 pub offset: TextSize,
79} 79}
80 80
81#[derive(Clone, Copy, Debug)] 81#[derive(Clone, Copy, Debug)]
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index 43f932e20..3f645a1dd 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -13,8 +13,8 @@ use hir_def::{
13 resolver::{HasResolver, Resolver}, 13 resolver::{HasResolver, Resolver},
14 type_ref::{Mutability, TypeRef}, 14 type_ref::{Mutability, TypeRef},
15 AdtId, AssocContainerId, ConstId, DefWithBodyId, EnumId, FunctionId, GenericDefId, HasModule, 15 AdtId, AssocContainerId, ConstId, DefWithBodyId, EnumId, FunctionId, GenericDefId, HasModule,
16 ImplId, LocalEnumVariantId, LocalModuleId, LocalStructFieldId, Lookup, ModuleId, StaticId, 16 ImplId, LocalEnumVariantId, LocalFieldId, LocalModuleId, Lookup, ModuleId, StaticId, StructId,
17 StructId, TraitId, TypeAliasId, TypeParamId, UnionId, 17 TraitId, TypeAliasId, TypeParamId, UnionId,
18}; 18};
19use hir_expand::{ 19use hir_expand::{
20 diagnostics::DiagnosticSink, 20 diagnostics::DiagnosticSink,
@@ -294,9 +294,9 @@ impl Module {
294} 294}
295 295
296#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 296#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
297pub struct StructField { 297pub struct Field {
298 pub(crate) parent: VariantDef, 298 pub(crate) parent: VariantDef,
299 pub(crate) id: LocalStructFieldId, 299 pub(crate) id: LocalFieldId,
300} 300}
301 301
302#[derive(Debug, PartialEq, Eq)] 302#[derive(Debug, PartialEq, Eq)]
@@ -305,7 +305,7 @@ pub enum FieldSource {
305 Pos(ast::TupleFieldDef), 305 Pos(ast::TupleFieldDef),
306} 306}
307 307
308impl StructField { 308impl Field {
309 pub fn name(&self, db: &dyn HirDatabase) -> Name { 309 pub fn name(&self, db: &dyn HirDatabase) -> Name {
310 self.parent.variant_data(db).fields()[self.id].name.clone() 310 self.parent.variant_data(db).fields()[self.id].name.clone()
311 } 311 }
@@ -331,7 +331,7 @@ impl StructField {
331 } 331 }
332} 332}
333 333
334impl HasVisibility for StructField { 334impl HasVisibility for Field {
335 fn visibility(&self, db: &dyn HirDatabase) -> Visibility { 335 fn visibility(&self, db: &dyn HirDatabase) -> Visibility {
336 let variant_data = self.parent.variant_data(db); 336 let variant_data = self.parent.variant_data(db);
337 let visibility = &variant_data.fields()[self.id].visibility; 337 let visibility = &variant_data.fields()[self.id].visibility;
@@ -358,12 +358,12 @@ impl Struct {
358 db.struct_data(self.id).name.clone() 358 db.struct_data(self.id).name.clone()
359 } 359 }
360 360
361 pub fn fields(self, db: &dyn HirDatabase) -> Vec<StructField> { 361 pub fn fields(self, db: &dyn HirDatabase) -> Vec<Field> {
362 db.struct_data(self.id) 362 db.struct_data(self.id)
363 .variant_data 363 .variant_data
364 .fields() 364 .fields()
365 .iter() 365 .iter()
366 .map(|(id, _)| StructField { parent: self.into(), id }) 366 .map(|(id, _)| Field { parent: self.into(), id })
367 .collect() 367 .collect()
368 } 368 }
369 369
@@ -394,12 +394,12 @@ impl Union {
394 Type::from_def(db, self.id.lookup(db.upcast()).container.module(db.upcast()).krate, self.id) 394 Type::from_def(db, self.id.lookup(db.upcast()).container.module(db.upcast()).krate, self.id)
395 } 395 }
396 396
397 pub fn fields(self, db: &dyn HirDatabase) -> Vec<StructField> { 397 pub fn fields(self, db: &dyn HirDatabase) -> Vec<Field> {
398 db.union_data(self.id) 398 db.union_data(self.id)
399 .variant_data 399 .variant_data
400 .fields() 400 .fields()
401 .iter() 401 .iter()
402 .map(|(id, _)| StructField { parent: self.into(), id }) 402 .map(|(id, _)| Field { parent: self.into(), id })
403 .collect() 403 .collect()
404 } 404 }
405 405
@@ -457,11 +457,11 @@ impl EnumVariant {
457 db.enum_data(self.parent.id).variants[self.id].name.clone() 457 db.enum_data(self.parent.id).variants[self.id].name.clone()
458 } 458 }
459 459
460 pub fn fields(self, db: &dyn HirDatabase) -> Vec<StructField> { 460 pub fn fields(self, db: &dyn HirDatabase) -> Vec<Field> {
461 self.variant_data(db) 461 self.variant_data(db)
462 .fields() 462 .fields()
463 .iter() 463 .iter()
464 .map(|(id, _)| StructField { parent: self.into(), id }) 464 .map(|(id, _)| Field { parent: self.into(), id })
465 .collect() 465 .collect()
466 } 466 }
467 467
@@ -527,7 +527,7 @@ pub enum VariantDef {
527impl_froms!(VariantDef: Struct, Union, EnumVariant); 527impl_froms!(VariantDef: Struct, Union, EnumVariant);
528 528
529impl VariantDef { 529impl VariantDef {
530 pub fn fields(self, db: &dyn HirDatabase) -> Vec<StructField> { 530 pub fn fields(self, db: &dyn HirDatabase) -> Vec<Field> {
531 match self { 531 match self {
532 VariantDef::Struct(it) => it.fields(db), 532 VariantDef::Struct(it) => it.fields(db),
533 VariantDef::Union(it) => it.fields(db), 533 VariantDef::Union(it) => it.fields(db),
@@ -1148,7 +1148,7 @@ impl Type {
1148 } 1148 }
1149 } 1149 }
1150 1150
1151 pub fn fields(&self, db: &dyn HirDatabase) -> Vec<(StructField, Type)> { 1151 pub fn fields(&self, db: &dyn HirDatabase) -> Vec<(Field, Type)> {
1152 if let Ty::Apply(a_ty) = &self.ty.value { 1152 if let Ty::Apply(a_ty) = &self.ty.value {
1153 if let TypeCtor::Adt(AdtId::StructId(s)) = a_ty.ctor { 1153 if let TypeCtor::Adt(AdtId::StructId(s)) = a_ty.ctor {
1154 let var_def = s.into(); 1154 let var_def = s.into();
@@ -1156,7 +1156,7 @@ impl Type {
1156 .field_types(var_def) 1156 .field_types(var_def)
1157 .iter() 1157 .iter()
1158 .map(|(local_id, ty)| { 1158 .map(|(local_id, ty)| {
1159 let def = StructField { parent: var_def.into(), id: local_id }; 1159 let def = Field { parent: var_def.into(), id: local_id };
1160 let ty = ty.clone().subst(&a_ty.parameters); 1160 let ty = ty.clone().subst(&a_ty.parameters);
1161 (def, self.derived(ty)) 1161 (def, self.derived(ty))
1162 }) 1162 })
@@ -1352,7 +1352,7 @@ impl ScopeDef {
1352#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] 1352#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
1353pub enum AttrDef { 1353pub enum AttrDef {
1354 Module(Module), 1354 Module(Module),
1355 StructField(StructField), 1355 Field(Field),
1356 Adt(Adt), 1356 Adt(Adt),
1357 Function(Function), 1357 Function(Function),
1358 EnumVariant(EnumVariant), 1358 EnumVariant(EnumVariant),
@@ -1365,7 +1365,7 @@ pub enum AttrDef {
1365 1365
1366impl_froms!( 1366impl_froms!(
1367 AttrDef: Module, 1367 AttrDef: Module,
1368 StructField, 1368 Field,
1369 Adt(Struct, Enum, Union), 1369 Adt(Struct, Enum, Union),
1370 EnumVariant, 1370 EnumVariant,
1371 Static, 1371 Static,
diff --git a/crates/ra_hir/src/from_id.rs b/crates/ra_hir/src/from_id.rs
index 62fb52e72..679ae8121 100644
--- a/crates/ra_hir/src/from_id.rs
+++ b/crates/ra_hir/src/from_id.rs
@@ -4,13 +4,13 @@
4//! are splitting the hir. 4//! are splitting the hir.
5 5
6use hir_def::{ 6use hir_def::{
7 expr::PatId, AdtId, AssocItemId, AttrDefId, DefWithBodyId, EnumVariantId, GenericDefId, 7 expr::PatId, AdtId, AssocItemId, AttrDefId, DefWithBodyId, EnumVariantId, FieldId,
8 ModuleDefId, StructFieldId, VariantId, 8 GenericDefId, ModuleDefId, VariantId,
9}; 9};
10 10
11use crate::{ 11use crate::{
12 code_model::ItemInNs, Adt, AssocItem, AttrDef, DefWithBody, EnumVariant, GenericDef, Local, 12 code_model::ItemInNs, Adt, AssocItem, AttrDef, DefWithBody, EnumVariant, Field, GenericDef,
13 MacroDef, ModuleDef, StructField, VariantDef, 13 Local, MacroDef, ModuleDef, VariantDef,
14}; 14};
15 15
16macro_rules! from_id { 16macro_rules! from_id {
@@ -184,15 +184,15 @@ impl From<VariantDef> for VariantId {
184 } 184 }
185} 185}
186 186
187impl From<StructField> for StructFieldId { 187impl From<Field> for FieldId {
188 fn from(def: StructField) -> Self { 188 fn from(def: Field) -> Self {
189 StructFieldId { parent: def.parent.into(), local_id: def.id } 189 FieldId { parent: def.parent.into(), local_id: def.id }
190 } 190 }
191} 191}
192 192
193impl From<StructFieldId> for StructField { 193impl From<FieldId> for Field {
194 fn from(def: StructFieldId) -> Self { 194 fn from(def: FieldId) -> Self {
195 StructField { parent: def.parent.into(), id: def.local_id } 195 Field { parent: def.parent.into(), id: def.local_id }
196 } 196 }
197} 197}
198 198
@@ -200,7 +200,7 @@ impl From<AttrDef> for AttrDefId {
200 fn from(def: AttrDef) -> Self { 200 fn from(def: AttrDef) -> Self {
201 match def { 201 match def {
202 AttrDef::Module(it) => AttrDefId::ModuleId(it.id), 202 AttrDef::Module(it) => AttrDefId::ModuleId(it.id),
203 AttrDef::StructField(it) => AttrDefId::StructFieldId(it.into()), 203 AttrDef::Field(it) => AttrDefId::FieldId(it.into()),
204 AttrDef::Adt(it) => AttrDefId::AdtId(it.into()), 204 AttrDef::Adt(it) => AttrDefId::AdtId(it.into()),
205 AttrDef::Function(it) => AttrDefId::FunctionId(it.id), 205 AttrDef::Function(it) => AttrDefId::FunctionId(it.id),
206 AttrDef::EnumVariant(it) => AttrDefId::EnumVariantId(it.into()), 206 AttrDef::EnumVariant(it) => AttrDefId::EnumVariantId(it.into()),
diff --git a/crates/ra_hir/src/has_source.rs b/crates/ra_hir/src/has_source.rs
index 129764e0a..63b8fd369 100644
--- a/crates/ra_hir/src/has_source.rs
+++ b/crates/ra_hir/src/has_source.rs
@@ -9,8 +9,8 @@ use hir_def::{
9use ra_syntax::ast; 9use ra_syntax::ast;
10 10
11use crate::{ 11use crate::{
12 db::HirDatabase, Const, Enum, EnumVariant, FieldSource, Function, ImplDef, MacroDef, Module, 12 db::HirDatabase, Const, Enum, EnumVariant, Field, FieldSource, Function, ImplDef, MacroDef,
13 Static, Struct, StructField, Trait, TypeAlias, TypeParam, Union, 13 Module, Static, Struct, Trait, TypeAlias, TypeParam, Union,
14}; 14};
15 15
16pub use hir_expand::InFile; 16pub use hir_expand::InFile;
@@ -37,7 +37,7 @@ impl Module {
37 } 37 }
38} 38}
39 39
40impl HasSource for StructField { 40impl HasSource for Field {
41 type Ast = FieldSource; 41 type Ast = FieldSource;
42 fn source(self, db: &dyn HirDatabase) -> InFile<FieldSource> { 42 fn source(self, db: &dyn HirDatabase) -> InFile<FieldSource> {
43 let var = VariantId::from(self.parent); 43 let var = VariantId::from(self.parent);
diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs
index 5af7e5d6d..312ef3814 100644
--- a/crates/ra_hir/src/lib.rs
+++ b/crates/ra_hir/src/lib.rs
@@ -52,9 +52,9 @@ mod has_source;
52pub use crate::{ 52pub use crate::{
53 code_model::{ 53 code_model::{
54 Adt, AsAssocItem, AssocItem, AssocItemContainer, AttrDef, Const, Crate, CrateDependency, 54 Adt, AsAssocItem, AssocItem, AssocItemContainer, AttrDef, Const, Crate, CrateDependency,
55 DefWithBody, Docs, Enum, EnumVariant, FieldSource, Function, GenericDef, HasAttrs, 55 DefWithBody, Docs, Enum, EnumVariant, Field, FieldSource, Function, GenericDef, HasAttrs,
56 HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, ScopeDef, Static, Struct, 56 HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, ScopeDef, Static, Struct,
57 StructField, Trait, Type, TypeAlias, TypeParam, Union, VariantDef, Visibility, 57 Trait, Type, TypeAlias, TypeParam, Union, VariantDef, Visibility,
58 }, 58 },
59 has_source::HasSource, 59 has_source::HasSource,
60 semantics::{original_range, PathResolution, Semantics, SemanticsScope}, 60 semantics::{original_range, PathResolution, Semantics, SemanticsScope},
diff --git a/crates/ra_hir/src/semantics.rs b/crates/ra_hir/src/semantics.rs
index 5d6edc45c..86bfb416c 100644
--- a/crates/ra_hir/src/semantics.rs
+++ b/crates/ra_hir/src/semantics.rs
@@ -14,7 +14,7 @@ use ra_db::{FileId, FileRange};
14use ra_prof::profile; 14use ra_prof::profile;
15use ra_syntax::{ 15use ra_syntax::{
16 algo::{find_node_at_offset, skip_trivia_token}, 16 algo::{find_node_at_offset, skip_trivia_token},
17 ast, AstNode, Direction, SyntaxNode, SyntaxToken, TextRange, TextUnit, 17 ast, AstNode, Direction, SyntaxNode, SyntaxToken, TextRange, TextSize,
18}; 18};
19use rustc_hash::{FxHashMap, FxHashSet}; 19use rustc_hash::{FxHashMap, FxHashSet};
20 20
@@ -23,8 +23,8 @@ use crate::{
23 diagnostics::Diagnostic, 23 diagnostics::Diagnostic,
24 semantics::source_to_def::{ChildContainer, SourceToDefCache, SourceToDefCtx}, 24 semantics::source_to_def::{ChildContainer, SourceToDefCache, SourceToDefCtx},
25 source_analyzer::{resolve_hir_path, SourceAnalyzer}, 25 source_analyzer::{resolve_hir_path, SourceAnalyzer},
26 AssocItem, Function, HirFileId, ImplDef, InFile, Local, MacroDef, Module, ModuleDef, Name, 26 AssocItem, Field, Function, HirFileId, ImplDef, InFile, Local, MacroDef, Module, ModuleDef,
27 Origin, Path, ScopeDef, StructField, Trait, Type, TypeParam, 27 Name, Origin, Path, ScopeDef, Trait, Type, TypeParam,
28}; 28};
29 29
30#[derive(Debug, Clone, PartialEq, Eq)] 30#[derive(Debug, Clone, PartialEq, Eq)]
@@ -95,7 +95,7 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
95 let token = successors(Some(parent.with_value(token)), |token| { 95 let token = successors(Some(parent.with_value(token)), |token| {
96 let macro_call = token.value.ancestors().find_map(ast::MacroCall::cast)?; 96 let macro_call = token.value.ancestors().find_map(ast::MacroCall::cast)?;
97 let tt = macro_call.token_tree()?; 97 let tt = macro_call.token_tree()?;
98 if !token.value.text_range().is_subrange(&tt.syntax().text_range()) { 98 if !tt.syntax().text_range().contains_range(token.value.text_range()) {
99 return None; 99 return None;
100 } 100 }
101 let file_id = sa.expand(self.db, token.with_value(&macro_call))?; 101 let file_id = sa.expand(self.db, token.with_value(&macro_call))?;
@@ -114,7 +114,7 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
114 pub fn descend_node_at_offset<N: ast::AstNode>( 114 pub fn descend_node_at_offset<N: ast::AstNode>(
115 &self, 115 &self,
116 node: &SyntaxNode, 116 node: &SyntaxNode,
117 offset: TextUnit, 117 offset: TextSize,
118 ) -> Option<N> { 118 ) -> Option<N> {
119 // Handle macro token cases 119 // Handle macro token cases
120 node.token_at_offset(offset) 120 node.token_at_offset(offset)
@@ -142,7 +142,7 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
142 pub fn ancestors_at_offset_with_macros( 142 pub fn ancestors_at_offset_with_macros(
143 &self, 143 &self,
144 node: &SyntaxNode, 144 node: &SyntaxNode,
145 offset: TextUnit, 145 offset: TextSize,
146 ) -> impl Iterator<Item = SyntaxNode> + '_ { 146 ) -> impl Iterator<Item = SyntaxNode> + '_ {
147 node.token_at_offset(offset) 147 node.token_at_offset(offset)
148 .map(|token| self.ancestors_with_macros(token.parent())) 148 .map(|token| self.ancestors_with_macros(token.parent()))
@@ -154,7 +154,7 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
154 pub fn find_node_at_offset_with_macros<N: AstNode>( 154 pub fn find_node_at_offset_with_macros<N: AstNode>(
155 &self, 155 &self,
156 node: &SyntaxNode, 156 node: &SyntaxNode,
157 offset: TextUnit, 157 offset: TextSize,
158 ) -> Option<N> { 158 ) -> Option<N> {
159 self.ancestors_at_offset_with_macros(node, offset).find_map(N::cast) 159 self.ancestors_at_offset_with_macros(node, offset).find_map(N::cast)
160 } 160 }
@@ -164,7 +164,7 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
164 pub fn find_node_at_offset_with_descend<N: AstNode>( 164 pub fn find_node_at_offset_with_descend<N: AstNode>(
165 &self, 165 &self,
166 node: &SyntaxNode, 166 node: &SyntaxNode,
167 offset: TextUnit, 167 offset: TextSize,
168 ) -> Option<N> { 168 ) -> Option<N> {
169 if let Some(it) = find_node_at_offset(&node, offset) { 169 if let Some(it) = find_node_at_offset(&node, offset) {
170 return Some(it); 170 return Some(it);
@@ -184,18 +184,15 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
184 self.analyze(call.syntax()).resolve_method_call(self.db, call) 184 self.analyze(call.syntax()).resolve_method_call(self.db, call)
185 } 185 }
186 186
187 pub fn resolve_field(&self, field: &ast::FieldExpr) -> Option<StructField> { 187 pub fn resolve_field(&self, field: &ast::FieldExpr) -> Option<Field> {
188 self.analyze(field.syntax()).resolve_field(self.db, field) 188 self.analyze(field.syntax()).resolve_field(self.db, field)
189 } 189 }
190 190
191 pub fn resolve_record_field( 191 pub fn resolve_record_field(&self, field: &ast::RecordField) -> Option<(Field, Option<Local>)> {
192 &self,
193 field: &ast::RecordField,
194 ) -> Option<(StructField, Option<Local>)> {
195 self.analyze(field.syntax()).resolve_record_field(self.db, field) 192 self.analyze(field.syntax()).resolve_record_field(self.db, field)
196 } 193 }
197 194
198 pub fn resolve_record_field_pat(&self, field: &ast::RecordFieldPat) -> Option<StructField> { 195 pub fn resolve_record_field_pat(&self, field: &ast::RecordFieldPat) -> Option<Field> {
199 self.analyze(field.syntax()).resolve_record_field_pat(self.db, field) 196 self.analyze(field.syntax()).resolve_record_field_pat(self.db, field)
200 } 197 }
201 198
@@ -216,19 +213,13 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
216 // FIXME: use this instead? 213 // FIXME: use this instead?
217 // pub fn resolve_name_ref(&self, name_ref: &ast::NameRef) -> Option<???>; 214 // pub fn resolve_name_ref(&self, name_ref: &ast::NameRef) -> Option<???>;
218 215
219 pub fn record_literal_missing_fields( 216 pub fn record_literal_missing_fields(&self, literal: &ast::RecordLit) -> Vec<(Field, Type)> {
220 &self,
221 literal: &ast::RecordLit,
222 ) -> Vec<(StructField, Type)> {
223 self.analyze(literal.syntax()) 217 self.analyze(literal.syntax())
224 .record_literal_missing_fields(self.db, literal) 218 .record_literal_missing_fields(self.db, literal)
225 .unwrap_or_default() 219 .unwrap_or_default()
226 } 220 }
227 221
228 pub fn record_pattern_missing_fields( 222 pub fn record_pattern_missing_fields(&self, pattern: &ast::RecordPat) -> Vec<(Field, Type)> {
229 &self,
230 pattern: &ast::RecordPat,
231 ) -> Vec<(StructField, Type)> {
232 self.analyze(pattern.syntax()) 223 self.analyze(pattern.syntax())
233 .record_pattern_missing_fields(self.db, pattern) 224 .record_pattern_missing_fields(self.db, pattern)
234 .unwrap_or_default() 225 .unwrap_or_default()
@@ -255,7 +246,7 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
255 SemanticsScope { db: self.db, resolver } 246 SemanticsScope { db: self.db, resolver }
256 } 247 }
257 248
258 pub fn scope_at_offset(&self, node: &SyntaxNode, offset: TextUnit) -> SemanticsScope<'db, DB> { 249 pub fn scope_at_offset(&self, node: &SyntaxNode, offset: TextSize) -> SemanticsScope<'db, DB> {
259 let node = self.find_file(node.clone()); 250 let node = self.find_file(node.clone());
260 let resolver = self.analyze2(node.as_ref(), Some(offset)).resolver; 251 let resolver = self.analyze2(node.as_ref(), Some(offset)).resolver;
261 SemanticsScope { db: self.db, resolver } 252 SemanticsScope { db: self.db, resolver }
@@ -271,7 +262,7 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
271 self.analyze2(src.as_ref(), None) 262 self.analyze2(src.as_ref(), None)
272 } 263 }
273 264
274 fn analyze2(&self, src: InFile<&SyntaxNode>, offset: Option<TextUnit>) -> SourceAnalyzer { 265 fn analyze2(&self, src: InFile<&SyntaxNode>, offset: Option<TextSize>) -> SourceAnalyzer {
275 let _p = profile("Semantics::analyze2"); 266 let _p = profile("Semantics::analyze2");
276 267
277 let container = match self.with_ctx(|ctx| ctx.find_container(src)) { 268 let container = match self.with_ctx(|ctx| ctx.find_container(src)) {
@@ -359,8 +350,8 @@ to_def_impls![
359 (crate::Const, ast::ConstDef, const_to_def), 350 (crate::Const, ast::ConstDef, const_to_def),
360 (crate::Static, ast::StaticDef, static_to_def), 351 (crate::Static, ast::StaticDef, static_to_def),
361 (crate::Function, ast::FnDef, fn_to_def), 352 (crate::Function, ast::FnDef, fn_to_def),
362 (crate::StructField, ast::RecordFieldDef, record_field_to_def), 353 (crate::Field, ast::RecordFieldDef, record_field_to_def),
363 (crate::StructField, ast::TupleFieldDef, tuple_field_to_def), 354 (crate::Field, ast::TupleFieldDef, tuple_field_to_def),
364 (crate::EnumVariant, ast::EnumVariant, enum_variant_to_def), 355 (crate::EnumVariant, ast::EnumVariant, enum_variant_to_def),
365 (crate::TypeParam, ast::TypeParam, type_param_to_def), 356 (crate::TypeParam, ast::TypeParam, type_param_to_def),
366 (crate::MacroDef, ast::MacroCall, macro_call_to_def), // this one is dubious, not all calls are macros 357 (crate::MacroDef, ast::MacroCall, macro_call_to_def), // this one is dubious, not all calls are macros
@@ -463,7 +454,7 @@ fn original_range_opt(
463 return None; 454 return None;
464 } 455 }
465 456
466 Some(first.with_value(first.value.text_range().extend_to(&last.value.text_range()))) 457 Some(first.with_value(first.value.text_range().cover(last.value.text_range())))
467 })?) 458 })?)
468} 459}
469 460
diff --git a/crates/ra_hir/src/semantics/source_to_def.rs b/crates/ra_hir/src/semantics/source_to_def.rs
index 66724919b..6f3b5b2da 100644
--- a/crates/ra_hir/src/semantics/source_to_def.rs
+++ b/crates/ra_hir/src/semantics/source_to_def.rs
@@ -5,8 +5,8 @@ use hir_def::{
5 dyn_map::DynMap, 5 dyn_map::DynMap,
6 expr::PatId, 6 expr::PatId,
7 keys::{self, Key}, 7 keys::{self, Key},
8 ConstId, DefWithBodyId, EnumId, EnumVariantId, FunctionId, GenericDefId, ImplId, ModuleId, 8 ConstId, DefWithBodyId, EnumId, EnumVariantId, FieldId, FunctionId, GenericDefId, ImplId,
9 StaticId, StructFieldId, StructId, TraitId, TypeAliasId, TypeParamId, UnionId, VariantId, 9 ModuleId, StaticId, StructId, TraitId, TypeAliasId, TypeParamId, UnionId, VariantId,
10}; 10};
11use hir_expand::{name::AsName, AstId, MacroDefKind}; 11use hir_expand::{name::AsName, AstId, MacroDefKind};
12use ra_db::FileId; 12use ra_db::FileId;
@@ -97,13 +97,13 @@ impl SourceToDefCtx<'_, '_> {
97 pub(super) fn record_field_to_def( 97 pub(super) fn record_field_to_def(
98 &mut self, 98 &mut self,
99 src: InFile<ast::RecordFieldDef>, 99 src: InFile<ast::RecordFieldDef>,
100 ) -> Option<StructFieldId> { 100 ) -> Option<FieldId> {
101 self.to_def(src, keys::RECORD_FIELD) 101 self.to_def(src, keys::RECORD_FIELD)
102 } 102 }
103 pub(super) fn tuple_field_to_def( 103 pub(super) fn tuple_field_to_def(
104 &mut self, 104 &mut self,
105 src: InFile<ast::TupleFieldDef>, 105 src: InFile<ast::TupleFieldDef>,
106 ) -> Option<StructFieldId> { 106 ) -> Option<FieldId> {
107 self.to_def(src, keys::TUPLE_FIELD) 107 self.to_def(src, keys::TUPLE_FIELD)
108 } 108 }
109 pub(super) fn enum_variant_to_def( 109 pub(super) fn enum_variant_to_def(
diff --git a/crates/ra_hir/src/source_analyzer.rs b/crates/ra_hir/src/source_analyzer.rs
index 0ed6d0958..74d64c97d 100644
--- a/crates/ra_hir/src/source_analyzer.rs
+++ b/crates/ra_hir/src/source_analyzer.rs
@@ -14,7 +14,7 @@ use hir_def::{
14 }, 14 },
15 expr::{ExprId, Pat, PatId}, 15 expr::{ExprId, Pat, PatId},
16 resolver::{resolver_for_scope, Resolver, TypeNs, ValueNs}, 16 resolver::{resolver_for_scope, Resolver, TypeNs, ValueNs},
17 AsMacroCall, DefWithBodyId, LocalStructFieldId, StructFieldId, VariantId, 17 AsMacroCall, DefWithBodyId, FieldId, LocalFieldId, VariantId,
18}; 18};
19use hir_expand::{hygiene::Hygiene, name::AsName, HirFileId, InFile}; 19use hir_expand::{hygiene::Hygiene, name::AsName, HirFileId, InFile};
20use hir_ty::{ 20use hir_ty::{
@@ -23,12 +23,12 @@ use hir_ty::{
23}; 23};
24use ra_syntax::{ 24use ra_syntax::{
25 ast::{self, AstNode}, 25 ast::{self, AstNode},
26 SyntaxNode, TextRange, TextUnit, 26 SyntaxNode, TextRange, TextSize,
27}; 27};
28 28
29use crate::{ 29use crate::{
30 db::HirDatabase, semantics::PathResolution, Adt, Const, EnumVariant, Function, Local, MacroDef, 30 db::HirDatabase, semantics::PathResolution, Adt, Const, EnumVariant, Field, Function, Local,
31 ModPath, ModuleDef, Path, PathKind, Static, Struct, StructField, Trait, Type, TypeAlias, 31 MacroDef, ModPath, ModuleDef, Path, PathKind, Static, Struct, Trait, Type, TypeAlias,
32 TypeParam, 32 TypeParam,
33}; 33};
34use ra_db::CrateId; 34use ra_db::CrateId;
@@ -50,7 +50,7 @@ impl SourceAnalyzer {
50 db: &dyn HirDatabase, 50 db: &dyn HirDatabase,
51 def: DefWithBodyId, 51 def: DefWithBodyId,
52 node: InFile<&SyntaxNode>, 52 node: InFile<&SyntaxNode>,
53 offset: Option<TextUnit>, 53 offset: Option<TextSize>,
54 ) -> SourceAnalyzer { 54 ) -> SourceAnalyzer {
55 let (body, source_map) = db.body_with_source_map(def); 55 let (body, source_map) = db.body_with_source_map(def);
56 let scopes = db.expr_scopes(def); 56 let scopes = db.expr_scopes(def);
@@ -140,7 +140,7 @@ impl SourceAnalyzer {
140 &self, 140 &self,
141 db: &dyn HirDatabase, 141 db: &dyn HirDatabase,
142 field: &ast::FieldExpr, 142 field: &ast::FieldExpr,
143 ) -> Option<StructField> { 143 ) -> Option<Field> {
144 let expr_id = self.expr_id(db, &field.clone().into())?; 144 let expr_id = self.expr_id(db, &field.clone().into())?;
145 self.infer.as_ref()?.field_resolution(expr_id).map(|it| it.into()) 145 self.infer.as_ref()?.field_resolution(expr_id).map(|it| it.into())
146 } 146 }
@@ -149,7 +149,7 @@ impl SourceAnalyzer {
149 &self, 149 &self,
150 db: &dyn HirDatabase, 150 db: &dyn HirDatabase,
151 field: &ast::RecordField, 151 field: &ast::RecordField,
152 ) -> Option<(StructField, Option<Local>)> { 152 ) -> Option<(Field, Option<Local>)> {
153 let expr = field.expr()?; 153 let expr = field.expr()?;
154 let expr_id = self.expr_id(db, &expr)?; 154 let expr_id = self.expr_id(db, &expr)?;
155 let local = if field.name_ref().is_some() { 155 let local = if field.name_ref().is_some() {
@@ -172,7 +172,7 @@ impl SourceAnalyzer {
172 &self, 172 &self,
173 _db: &dyn HirDatabase, 173 _db: &dyn HirDatabase,
174 field: &ast::RecordFieldPat, 174 field: &ast::RecordFieldPat,
175 ) -> Option<StructField> { 175 ) -> Option<Field> {
176 let pat_id = self.pat_id(&field.pat()?)?; 176 let pat_id = self.pat_id(&field.pat()?)?;
177 let struct_field = self.infer.as_ref()?.record_field_pat_resolution(pat_id)?; 177 let struct_field = self.infer.as_ref()?.record_field_pat_resolution(pat_id)?;
178 Some(struct_field.into()) 178 Some(struct_field.into())
@@ -232,7 +232,7 @@ impl SourceAnalyzer {
232 &self, 232 &self,
233 db: &dyn HirDatabase, 233 db: &dyn HirDatabase,
234 literal: &ast::RecordLit, 234 literal: &ast::RecordLit,
235 ) -> Option<Vec<(StructField, Type)>> { 235 ) -> Option<Vec<(Field, Type)>> {
236 let krate = self.resolver.krate()?; 236 let krate = self.resolver.krate()?;
237 let body = self.body.as_ref()?; 237 let body = self.body.as_ref()?;
238 let infer = self.infer.as_ref()?; 238 let infer = self.infer.as_ref()?;
@@ -253,7 +253,7 @@ impl SourceAnalyzer {
253 &self, 253 &self,
254 db: &dyn HirDatabase, 254 db: &dyn HirDatabase,
255 pattern: &ast::RecordPat, 255 pattern: &ast::RecordPat,
256 ) -> Option<Vec<(StructField, Type)>> { 256 ) -> Option<Vec<(Field, Type)>> {
257 let krate = self.resolver.krate()?; 257 let krate = self.resolver.krate()?;
258 let body = self.body.as_ref()?; 258 let body = self.body.as_ref()?;
259 let infer = self.infer.as_ref()?; 259 let infer = self.infer.as_ref()?;
@@ -276,14 +276,14 @@ impl SourceAnalyzer {
276 krate: CrateId, 276 krate: CrateId,
277 substs: &Substs, 277 substs: &Substs,
278 variant: VariantId, 278 variant: VariantId,
279 missing_fields: Vec<LocalStructFieldId>, 279 missing_fields: Vec<LocalFieldId>,
280 ) -> Vec<(StructField, Type)> { 280 ) -> Vec<(Field, Type)> {
281 let field_types = db.field_types(variant); 281 let field_types = db.field_types(variant);
282 282
283 missing_fields 283 missing_fields
284 .into_iter() 284 .into_iter()
285 .map(|local_id| { 285 .map(|local_id| {
286 let field = StructFieldId { parent: variant, local_id }; 286 let field = FieldId { parent: variant, local_id };
287 let ty = field_types[local_id].clone().subst(substs); 287 let ty = field_types[local_id].clone().subst(substs);
288 (field.into(), Type::new_with_resolver_inner(db, krate, &self.resolver, ty)) 288 (field.into(), Type::new_with_resolver_inner(db, krate, &self.resolver, ty))
289 }) 289 })
@@ -318,7 +318,7 @@ fn scope_for_offset(
318 db: &dyn HirDatabase, 318 db: &dyn HirDatabase,
319 scopes: &ExprScopes, 319 scopes: &ExprScopes,
320 source_map: &BodySourceMap, 320 source_map: &BodySourceMap,
321 offset: InFile<TextUnit>, 321 offset: InFile<TextSize>,
322) -> Option<ScopeId> { 322) -> Option<ScopeId> {
323 scopes 323 scopes
324 .scope_by_expr() 324 .scope_by_expr()
@@ -354,7 +354,7 @@ fn adjust(
354 source_map: &BodySourceMap, 354 source_map: &BodySourceMap,
355 expr_range: TextRange, 355 expr_range: TextRange,
356 file_id: HirFileId, 356 file_id: HirFileId,
357 offset: TextUnit, 357 offset: TextSize,
358) -> Option<ScopeId> { 358) -> Option<ScopeId> {
359 let child_scopes = scopes 359 let child_scopes = scopes
360 .scope_by_expr() 360 .scope_by_expr()
@@ -369,15 +369,15 @@ fn adjust(
369 let node = source.value.to_node(&root); 369 let node = source.value.to_node(&root);
370 Some((node.syntax().text_range(), scope)) 370 Some((node.syntax().text_range(), scope))
371 }) 371 })
372 .filter(|(range, _)| { 372 .filter(|&(range, _)| {
373 range.start() <= offset && range.is_subrange(&expr_range) && *range != expr_range 373 range.start() <= offset && expr_range.contains_range(range) && range != expr_range
374 }); 374 });
375 375
376 child_scopes 376 child_scopes
377 .max_by(|(r1, _), (r2, _)| { 377 .max_by(|&(r1, _), &(r2, _)| {
378 if r2.is_subrange(&r1) { 378 if r1.contains_range(r2) {
379 std::cmp::Ordering::Greater 379 std::cmp::Ordering::Greater
380 } else if r1.is_subrange(&r2) { 380 } else if r2.contains_range(r1) {
381 std::cmp::Ordering::Less 381 std::cmp::Ordering::Less
382 } else { 382 } else {
383 r1.start().cmp(&r2.start()) 383 r1.start().cmp(&r2.start())
diff --git a/crates/ra_hir_def/src/adt.rs b/crates/ra_hir_def/src/adt.rs
index 7c0d93691..753becc3d 100644
--- a/crates/ra_hir_def/src/adt.rs
+++ b/crates/ra_hir_def/src/adt.rs
@@ -14,7 +14,7 @@ use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner, VisibilityOwner};
14use crate::{ 14use crate::{
15 body::CfgExpander, db::DefDatabase, src::HasChildSource, src::HasSource, trace::Trace, 15 body::CfgExpander, db::DefDatabase, src::HasChildSource, src::HasSource, trace::Trace,
16 type_ref::TypeRef, visibility::RawVisibility, EnumId, HasModule, LocalEnumVariantId, 16 type_ref::TypeRef, visibility::RawVisibility, EnumId, HasModule, LocalEnumVariantId,
17 LocalStructFieldId, Lookup, ModuleId, StructId, UnionId, VariantId, 17 LocalFieldId, Lookup, ModuleId, StructId, UnionId, VariantId,
18}; 18};
19 19
20/// Note that we use `StructData` for unions as well! 20/// Note that we use `StructData` for unions as well!
@@ -38,14 +38,14 @@ pub struct EnumVariantData {
38 38
39#[derive(Debug, Clone, PartialEq, Eq)] 39#[derive(Debug, Clone, PartialEq, Eq)]
40pub enum VariantData { 40pub enum VariantData {
41 Record(Arena<StructFieldData>), 41 Record(Arena<FieldData>),
42 Tuple(Arena<StructFieldData>), 42 Tuple(Arena<FieldData>),
43 Unit, 43 Unit,
44} 44}
45 45
46/// A single field of an enum variant or struct 46/// A single field of an enum variant or struct
47#[derive(Debug, Clone, PartialEq, Eq)] 47#[derive(Debug, Clone, PartialEq, Eq)]
48pub struct StructFieldData { 48pub struct FieldData {
49 pub name: Name, 49 pub name: Name,
50 pub type_ref: TypeRef, 50 pub type_ref: TypeRef,
51 pub visibility: RawVisibility, 51 pub visibility: RawVisibility,
@@ -133,15 +133,15 @@ impl VariantData {
133 } 133 }
134 } 134 }
135 135
136 pub fn fields(&self) -> &Arena<StructFieldData> { 136 pub fn fields(&self) -> &Arena<FieldData> {
137 const EMPTY: &Arena<StructFieldData> = &Arena::new(); 137 const EMPTY: &Arena<FieldData> = &Arena::new();
138 match &self { 138 match &self {
139 VariantData::Record(fields) | VariantData::Tuple(fields) => fields, 139 VariantData::Record(fields) | VariantData::Tuple(fields) => fields,
140 _ => EMPTY, 140 _ => EMPTY,
141 } 141 }
142 } 142 }
143 143
144 pub fn field(&self, name: &Name) -> Option<LocalStructFieldId> { 144 pub fn field(&self, name: &Name) -> Option<LocalFieldId> {
145 self.fields().iter().find_map(|(id, data)| if &data.name == name { Some(id) } else { None }) 145 self.fields().iter().find_map(|(id, data)| if &data.name == name { Some(id) } else { None })
146 } 146 }
147 147
@@ -155,7 +155,7 @@ impl VariantData {
155} 155}
156 156
157impl HasChildSource for VariantId { 157impl HasChildSource for VariantId {
158 type ChildId = LocalStructFieldId; 158 type ChildId = LocalFieldId;
159 type Value = Either<ast::TupleFieldDef, ast::RecordFieldDef>; 159 type Value = Either<ast::TupleFieldDef, ast::RecordFieldDef>;
160 160
161 fn child_source(&self, db: &dyn DefDatabase) -> InFile<ArenaMap<Self::ChildId, Self::Value>> { 161 fn child_source(&self, db: &dyn DefDatabase) -> InFile<ArenaMap<Self::ChildId, Self::Value>> {
@@ -195,7 +195,7 @@ pub enum StructKind {
195fn lower_struct( 195fn lower_struct(
196 db: &dyn DefDatabase, 196 db: &dyn DefDatabase,
197 expander: &mut CfgExpander, 197 expander: &mut CfgExpander,
198 trace: &mut Trace<StructFieldData, Either<ast::TupleFieldDef, ast::RecordFieldDef>>, 198 trace: &mut Trace<FieldData, Either<ast::TupleFieldDef, ast::RecordFieldDef>>,
199 ast: &InFile<ast::StructKind>, 199 ast: &InFile<ast::StructKind>,
200) -> StructKind { 200) -> StructKind {
201 match &ast.value { 201 match &ast.value {
@@ -208,7 +208,7 @@ fn lower_struct(
208 208
209 trace.alloc( 209 trace.alloc(
210 || Either::Left(fd.clone()), 210 || Either::Left(fd.clone()),
211 || StructFieldData { 211 || FieldData {
212 name: Name::new_tuple_field(i), 212 name: Name::new_tuple_field(i),
213 type_ref: TypeRef::from_ast_opt(fd.type_ref()), 213 type_ref: TypeRef::from_ast_opt(fd.type_ref()),
214 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())), 214 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())),
@@ -226,7 +226,7 @@ fn lower_struct(
226 226
227 trace.alloc( 227 trace.alloc(
228 || Either::Right(fd.clone()), 228 || Either::Right(fd.clone()),
229 || StructFieldData { 229 || FieldData {
230 name: fd.name().map(|n| n.as_name()).unwrap_or_else(Name::missing), 230 name: fd.name().map(|n| n.as_name()).unwrap_or_else(Name::missing),
231 type_ref: TypeRef::from_ast_opt(fd.ascribed_type()), 231 type_ref: TypeRef::from_ast_opt(fd.ascribed_type()),
232 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())), 232 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())),
diff --git a/crates/ra_hir_def/src/attr.rs b/crates/ra_hir_def/src/attr.rs
index 2f2e3e5ba..5a86af8ba 100644
--- a/crates/ra_hir_def/src/attr.rs
+++ b/crates/ra_hir_def/src/attr.rs
@@ -13,7 +13,8 @@ use ra_syntax::{
13use tt::Subtree; 13use tt::Subtree;
14 14
15use crate::{ 15use crate::{
16 db::DefDatabase, path::ModPath, src::HasChildSource, src::HasSource, AdtId, AttrDefId, Lookup, 16 db::DefDatabase, nameres::ModuleSource, path::ModPath, src::HasChildSource, src::HasSource,
17 AdtId, AttrDefId, Lookup,
17}; 18};
18 19
19#[derive(Default, Debug, Clone, PartialEq, Eq)] 20#[derive(Default, Debug, Clone, PartialEq, Eq)]
@@ -37,13 +38,21 @@ impl Attrs {
37 match def { 38 match def {
38 AttrDefId::ModuleId(module) => { 39 AttrDefId::ModuleId(module) => {
39 let def_map = db.crate_def_map(module.krate); 40 let def_map = db.crate_def_map(module.krate);
40 let src = match def_map[module.local_id].declaration_source(db) { 41 let mod_data = &def_map[module.local_id];
41 Some(it) => it, 42 match mod_data.declaration_source(db) {
42 None => return Attrs::default(), 43 Some(it) => {
43 }; 44 Attrs::from_attrs_owner(db, it.as_ref().map(|it| it as &dyn AttrsOwner))
44 Attrs::from_attrs_owner(db, src.as_ref().map(|it| it as &dyn AttrsOwner)) 45 }
46 None => Attrs::from_attrs_owner(
47 db,
48 mod_data.definition_source(db).as_ref().map(|src| match src {
49 ModuleSource::SourceFile(file) => file as &dyn AttrsOwner,
50 ModuleSource::Module(module) => module as &dyn AttrsOwner,
51 }),
52 ),
53 }
45 } 54 }
46 AttrDefId::StructFieldId(it) => { 55 AttrDefId::FieldId(it) => {
47 let src = it.parent.child_source(db); 56 let src = it.parent.child_source(db);
48 match &src.value[it.local_id] { 57 match &src.value[it.local_id] {
49 Either::Left(_tuple) => Attrs::default(), 58 Either::Left(_tuple) => Attrs::default(),
@@ -106,7 +115,9 @@ pub struct Attr {
106 115
107#[derive(Debug, Clone, PartialEq, Eq)] 116#[derive(Debug, Clone, PartialEq, Eq)]
108pub enum AttrInput { 117pub enum AttrInput {
118 /// `#[attr = "string"]`
109 Literal(SmolStr), 119 Literal(SmolStr),
120 /// `#[attr(subtree)]`
110 TokenTree(Subtree), 121 TokenTree(Subtree),
111} 122}
112 123
diff --git a/crates/ra_hir_def/src/body/scope.rs b/crates/ra_hir_def/src/body/scope.rs
index 5b36a7cc1..86f953c80 100644
--- a/crates/ra_hir_def/src/body/scope.rs
+++ b/crates/ra_hir_def/src/body/scope.rs
@@ -194,7 +194,7 @@ mod tests {
194 let (off, code) = extract_offset(code); 194 let (off, code) = extract_offset(code);
195 let code = { 195 let code = {
196 let mut buf = String::new(); 196 let mut buf = String::new();
197 let off = off.to_usize(); 197 let off: usize = off.into();
198 buf.push_str(&code[..off]); 198 buf.push_str(&code[..off]);
199 buf.push_str("marker"); 199 buf.push_str("marker");
200 buf.push_str(&code[off..]); 200 buf.push_str(&code[off..]);
diff --git a/crates/ra_hir_def/src/child_by_source.rs b/crates/ra_hir_def/src/child_by_source.rs
index 7009f21d1..a885ec96d 100644
--- a/crates/ra_hir_def/src/child_by_source.rs
+++ b/crates/ra_hir_def/src/child_by_source.rs
@@ -12,8 +12,8 @@ use crate::{
12 item_scope::ItemScope, 12 item_scope::ItemScope,
13 keys, 13 keys,
14 src::{HasChildSource, HasSource}, 14 src::{HasChildSource, HasSource},
15 AdtId, AssocItemId, DefWithBodyId, EnumId, EnumVariantId, ImplId, Lookup, ModuleDefId, 15 AdtId, AssocItemId, DefWithBodyId, EnumId, EnumVariantId, FieldId, ImplId, Lookup, ModuleDefId,
16 ModuleId, StructFieldId, TraitId, VariantId, 16 ModuleId, TraitId, VariantId,
17}; 17};
18 18
19pub trait ChildBySource { 19pub trait ChildBySource {
@@ -140,7 +140,7 @@ impl ChildBySource for VariantId {
140 let arena_map = self.child_source(db); 140 let arena_map = self.child_source(db);
141 let arena_map = arena_map.as_ref(); 141 let arena_map = arena_map.as_ref();
142 for (local_id, source) in arena_map.value.iter() { 142 for (local_id, source) in arena_map.value.iter() {
143 let id = StructFieldId { parent: *self, local_id }; 143 let id = FieldId { parent: *self, local_id };
144 match source { 144 match source {
145 Either::Left(source) => { 145 Either::Left(source) => {
146 res[keys::TUPLE_FIELD].insert(arena_map.with_value(source.clone()), id) 146 res[keys::TUPLE_FIELD].insert(arena_map.with_value(source.clone()), id)
diff --git a/crates/ra_hir_def/src/docs.rs b/crates/ra_hir_def/src/docs.rs
index 0539a77d4..b221ae1ce 100644
--- a/crates/ra_hir_def/src/docs.rs
+++ b/crates/ra_hir_def/src/docs.rs
@@ -43,7 +43,7 @@ impl Documentation {
43 let src = def_map[module.local_id].declaration_source(db)?; 43 let src = def_map[module.local_id].declaration_source(db)?;
44 docs_from_ast(&src.value) 44 docs_from_ast(&src.value)
45 } 45 }
46 AttrDefId::StructFieldId(it) => { 46 AttrDefId::FieldId(it) => {
47 let src = it.parent.child_source(db); 47 let src = it.parent.child_source(db);
48 match &src.value[it.local_id] { 48 match &src.value[it.local_id] {
49 Either::Left(_tuple) => None, 49 Either::Left(_tuple) => None,
diff --git a/crates/ra_hir_def/src/find_path.rs b/crates/ra_hir_def/src/find_path.rs
index 81eff5bfe..70dcb03e6 100644
--- a/crates/ra_hir_def/src/find_path.rs
+++ b/crates/ra_hir_def/src/find_path.rs
@@ -19,7 +19,7 @@ impl ModPath {
19 19
20 // When std library is present, paths starting with `std::` 20 // When std library is present, paths starting with `std::`
21 // should be preferred over paths starting with `core::` and `alloc::` 21 // should be preferred over paths starting with `core::` and `alloc::`
22 fn should_start_with_std(&self) -> bool { 22 fn can_start_with_std(&self) -> bool {
23 self.segments 23 self.segments
24 .first() 24 .first()
25 .filter(|&first_segment| { 25 .filter(|&first_segment| {
@@ -132,6 +132,9 @@ fn find_path_inner(
132 } 132 }
133 133
134 // - otherwise, look for modules containing (reexporting) it and import it from one of those 134 // - otherwise, look for modules containing (reexporting) it and import it from one of those
135 let crate_root = ModuleId { local_id: def_map.root, krate: from.krate };
136 let crate_attrs = db.attrs(crate_root.into());
137 let prefer_no_std = crate_attrs.by_key("no_std").exists();
135 let importable_locations = find_importable_locations(db, item, from); 138 let importable_locations = find_importable_locations(db, item, from);
136 let mut best_path = None; 139 let mut best_path = None;
137 let mut best_path_len = max_len; 140 let mut best_path_len = max_len;
@@ -147,21 +150,32 @@ fn find_path_inner(
147 }; 150 };
148 path.segments.push(name); 151 path.segments.push(name);
149 152
150 let new_path = 153 let new_path = if let Some(best_path) = best_path {
151 if let Some(best_path) = best_path { select_best_path(best_path, path) } else { path }; 154 select_best_path(best_path, path, prefer_no_std)
155 } else {
156 path
157 };
152 best_path_len = new_path.len(); 158 best_path_len = new_path.len();
153 best_path = Some(new_path); 159 best_path = Some(new_path);
154 } 160 }
155 best_path 161 best_path
156} 162}
157 163
158fn select_best_path(old_path: ModPath, new_path: ModPath) -> ModPath { 164fn select_best_path(old_path: ModPath, new_path: ModPath, prefer_no_std: bool) -> ModPath {
159 if old_path.starts_with_std() && new_path.should_start_with_std() { 165 if old_path.starts_with_std() && new_path.can_start_with_std() {
160 tested_by!(prefer_std_paths); 166 tested_by!(prefer_std_paths);
161 old_path 167 if prefer_no_std {
162 } else if new_path.starts_with_std() && old_path.should_start_with_std() { 168 new_path
169 } else {
170 old_path
171 }
172 } else if new_path.starts_with_std() && old_path.can_start_with_std() {
163 tested_by!(prefer_std_paths); 173 tested_by!(prefer_std_paths);
164 new_path 174 if prefer_no_std {
175 old_path
176 } else {
177 new_path
178 }
165 } else if new_path.len() < old_path.len() { 179 } else if new_path.len() < old_path.len() {
166 new_path 180 new_path
167 } else { 181 } else {
@@ -513,6 +527,54 @@ mod tests {
513 } 527 }
514 528
515 #[test] 529 #[test]
530 fn prefer_alloc_paths_over_std() {
531 covers!(prefer_std_paths);
532 let code = r#"
533 //- /main.rs crate:main deps:alloc,std
534 #![no_std]
535
536 <|>
537
538 //- /std.rs crate:std deps:alloc
539
540 pub mod sync {
541 pub use alloc::sync::Arc;
542 }
543
544 //- /zzz.rs crate:alloc
545
546 pub mod sync {
547 pub struct Arc;
548 }
549 "#;
550 check_found_path(code, "alloc::sync::Arc");
551 }
552
553 #[test]
554 fn prefer_core_paths_over_std() {
555 covers!(prefer_std_paths);
556 let code = r#"
557 //- /main.rs crate:main deps:core,std
558 #![no_std]
559
560 <|>
561
562 //- /std.rs crate:std deps:core
563
564 pub mod fmt {
565 pub use core::fmt::Error;
566 }
567
568 //- /zzz.rs crate:core
569
570 pub mod fmt {
571 pub struct Error;
572 }
573 "#;
574 check_found_path(code, "core::fmt::Error");
575 }
576
577 #[test]
516 fn prefer_shorter_paths_if_not_alloc() { 578 fn prefer_shorter_paths_if_not_alloc() {
517 let code = r#" 579 let code = r#"
518 //- /main.rs crate:main deps:megaalloc,std 580 //- /main.rs crate:main deps:megaalloc,std
diff --git a/crates/ra_hir_def/src/keys.rs b/crates/ra_hir_def/src/keys.rs
index 8cd70eb9a..a7349a21d 100644
--- a/crates/ra_hir_def/src/keys.rs
+++ b/crates/ra_hir_def/src/keys.rs
@@ -8,7 +8,7 @@ use rustc_hash::FxHashMap;
8 8
9use crate::{ 9use crate::{
10 dyn_map::{DynMap, Policy}, 10 dyn_map::{DynMap, Policy},
11 ConstId, EnumId, EnumVariantId, FunctionId, ImplId, StaticId, StructFieldId, StructId, TraitId, 11 ConstId, EnumId, EnumVariantId, FieldId, FunctionId, ImplId, StaticId, StructId, TraitId,
12 TypeAliasId, TypeParamId, UnionId, 12 TypeAliasId, TypeParamId, UnionId,
13}; 13};
14 14
@@ -25,8 +25,8 @@ pub const UNION: Key<ast::UnionDef, UnionId> = Key::new();
25pub const ENUM: Key<ast::EnumDef, EnumId> = Key::new(); 25pub const ENUM: Key<ast::EnumDef, EnumId> = Key::new();
26 26
27pub const ENUM_VARIANT: Key<ast::EnumVariant, EnumVariantId> = Key::new(); 27pub const ENUM_VARIANT: Key<ast::EnumVariant, EnumVariantId> = Key::new();
28pub const TUPLE_FIELD: Key<ast::TupleFieldDef, StructFieldId> = Key::new(); 28pub const TUPLE_FIELD: Key<ast::TupleFieldDef, FieldId> = Key::new();
29pub const RECORD_FIELD: Key<ast::RecordFieldDef, StructFieldId> = Key::new(); 29pub const RECORD_FIELD: Key<ast::RecordFieldDef, FieldId> = Key::new();
30pub const TYPE_PARAM: Key<ast::TypeParam, TypeParamId> = Key::new(); 30pub const TYPE_PARAM: Key<ast::TypeParam, TypeParamId> = Key::new();
31 31
32pub const MACRO: Key<ast::MacroCall, MacroDefId> = Key::new(); 32pub const MACRO: Key<ast::MacroCall, MacroDefId> = Key::new();
diff --git a/crates/ra_hir_def/src/lib.rs b/crates/ra_hir_def/src/lib.rs
index 2d27bbdf8..518772e8a 100644
--- a/crates/ra_hir_def/src/lib.rs
+++ b/crates/ra_hir_def/src/lib.rs
@@ -133,12 +133,12 @@ pub struct EnumVariantId {
133pub type LocalEnumVariantId = Idx<adt::EnumVariantData>; 133pub type LocalEnumVariantId = Idx<adt::EnumVariantData>;
134 134
135#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 135#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
136pub struct StructFieldId { 136pub struct FieldId {
137 pub parent: VariantId, 137 pub parent: VariantId,
138 pub local_id: LocalStructFieldId, 138 pub local_id: LocalFieldId,
139} 139}
140 140
141pub type LocalStructFieldId = Idx<adt::StructFieldData>; 141pub type LocalFieldId = Idx<adt::FieldData>;
142 142
143#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 143#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
144pub struct ConstId(salsa::InternId); 144pub struct ConstId(salsa::InternId);
@@ -299,7 +299,7 @@ impl From<AssocItemId> for GenericDefId {
299#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] 299#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
300pub enum AttrDefId { 300pub enum AttrDefId {
301 ModuleId(ModuleId), 301 ModuleId(ModuleId),
302 StructFieldId(StructFieldId), 302 FieldId(FieldId),
303 AdtId(AdtId), 303 AdtId(AdtId),
304 FunctionId(FunctionId), 304 FunctionId(FunctionId),
305 EnumVariantId(EnumVariantId), 305 EnumVariantId(EnumVariantId),
@@ -313,7 +313,7 @@ pub enum AttrDefId {
313 313
314impl_froms!( 314impl_froms!(
315 AttrDefId: ModuleId, 315 AttrDefId: ModuleId,
316 StructFieldId, 316 FieldId,
317 AdtId(StructId, EnumId, UnionId), 317 AdtId(StructId, EnumId, UnionId),
318 EnumVariantId, 318 EnumVariantId,
319 StaticId, 319 StaticId,
diff --git a/crates/ra_hir_expand/src/builtin_macro.rs b/crates/ra_hir_expand/src/builtin_macro.rs
index 3da137f2e..e0fef613d 100644
--- a/crates/ra_hir_expand/src/builtin_macro.rs
+++ b/crates/ra_hir_expand/src/builtin_macro.rs
@@ -2,7 +2,7 @@
2use crate::db::AstDatabase; 2use crate::db::AstDatabase;
3use crate::{ 3use crate::{
4 ast::{self, AstToken, HasStringValue}, 4 ast::{self, AstToken, HasStringValue},
5 name, AstId, CrateId, MacroDefId, MacroDefKind, TextUnit, 5 name, AstId, CrateId, MacroDefId, MacroDefKind, TextSize,
6}; 6};
7 7
8use crate::{quote, EagerMacroId, LazyMacroId, MacroCallId}; 8use crate::{quote, EagerMacroId, LazyMacroId, MacroCallId};
@@ -127,7 +127,7 @@ fn stringify_expand(
127 let arg = loc.kind.arg(db).ok_or_else(|| mbe::ExpandError::UnexpectedToken)?; 127 let arg = loc.kind.arg(db).ok_or_else(|| mbe::ExpandError::UnexpectedToken)?;
128 let macro_args = arg; 128 let macro_args = arg;
129 let text = macro_args.text(); 129 let text = macro_args.text();
130 let without_parens = TextUnit::of_char('(')..text.len() - TextUnit::of_char(')'); 130 let without_parens = TextSize::of('(')..text.len() - TextSize::of(')');
131 text.slice(without_parens).to_string() 131 text.slice(without_parens).to_string()
132 }; 132 };
133 133
@@ -358,7 +358,7 @@ fn env_expand(
358 // However, we cannot use an empty string here, because for 358 // However, we cannot use an empty string here, because for
359 // `include!(concat!(env!("OUT_DIR"), "/foo.rs"))` will become 359 // `include!(concat!(env!("OUT_DIR"), "/foo.rs"))` will become
360 // `include!("foo.rs"), which might go to infinite loop 360 // `include!("foo.rs"), which might go to infinite loop
361 let s = get_env_inner(db, arg_id, &key).unwrap_or("__RA_UNIMPLEMENTATED__".to_string()); 361 let s = get_env_inner(db, arg_id, &key).unwrap_or_else(|| "__RA_UNIMPLEMENTATED__".to_string());
362 let expanded = quote! { #s }; 362 let expanded = quote! { #s };
363 363
364 Ok((expanded, FragmentKind::Expr)) 364 Ok((expanded, FragmentKind::Expr))
diff --git a/crates/ra_hir_expand/src/lib.rs b/crates/ra_hir_expand/src/lib.rs
index 86299459f..754a0f005 100644
--- a/crates/ra_hir_expand/src/lib.rs
+++ b/crates/ra_hir_expand/src/lib.rs
@@ -22,7 +22,7 @@ use ra_db::{impl_intern_key, salsa, CrateId, FileId};
22use ra_syntax::{ 22use ra_syntax::{
23 algo, 23 algo,
24 ast::{self, AstNode}, 24 ast::{self, AstNode},
25 SyntaxNode, SyntaxToken, TextUnit, 25 SyntaxNode, SyntaxToken, TextSize,
26}; 26};
27 27
28use crate::ast_id_map::FileAstId; 28use crate::ast_id_map::FileAstId;
@@ -348,7 +348,7 @@ impl<N: AstNode> AstId<N> {
348/// 348///
349/// * `InFile<SyntaxNode>` -- syntax node in a file 349/// * `InFile<SyntaxNode>` -- syntax node in a file
350/// * `InFile<ast::FnDef>` -- ast node in a file 350/// * `InFile<ast::FnDef>` -- ast node in a file
351/// * `InFile<TextUnit>` -- offset in a file 351/// * `InFile<TextSize>` -- offset in a file
352#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)] 352#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
353pub struct InFile<T> { 353pub struct InFile<T> {
354 pub file_id: HirFileId, 354 pub file_id: HirFileId,
diff --git a/crates/ra_hir_ty/src/db.rs b/crates/ra_hir_ty/src/db.rs
index 9e5dfeab3..fdb49560b 100644
--- a/crates/ra_hir_ty/src/db.rs
+++ b/crates/ra_hir_ty/src/db.rs
@@ -3,7 +3,7 @@
3use std::sync::Arc; 3use std::sync::Arc;
4 4
5use hir_def::{ 5use hir_def::{
6 db::DefDatabase, DefWithBodyId, GenericDefId, ImplId, LocalStructFieldId, TraitId, TypeParamId, 6 db::DefDatabase, DefWithBodyId, GenericDefId, ImplId, LocalFieldId, TraitId, TypeParamId,
7 VariantId, 7 VariantId,
8}; 8};
9use ra_arena::map::ArenaMap; 9use ra_arena::map::ArenaMap;
@@ -43,7 +43,7 @@ pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
43 fn impl_trait(&self, def: ImplId) -> Option<Binders<TraitRef>>; 43 fn impl_trait(&self, def: ImplId) -> Option<Binders<TraitRef>>;
44 44
45 #[salsa::invoke(crate::lower::field_types_query)] 45 #[salsa::invoke(crate::lower::field_types_query)]
46 fn field_types(&self, var: VariantId) -> Arc<ArenaMap<LocalStructFieldId, Binders<Ty>>>; 46 fn field_types(&self, var: VariantId) -> Arc<ArenaMap<LocalFieldId, Binders<Ty>>>;
47 47
48 #[salsa::invoke(crate::callable_item_sig)] 48 #[salsa::invoke(crate::callable_item_sig)]
49 fn callable_item_signature(&self, def: CallableDef) -> PolyFnSig; 49 fn callable_item_signature(&self, def: CallableDef) -> PolyFnSig;
diff --git a/crates/ra_hir_ty/src/expr.rs b/crates/ra_hir_ty/src/expr.rs
index fd59f4320..f04968e14 100644
--- a/crates/ra_hir_ty/src/expr.rs
+++ b/crates/ra_hir_ty/src/expr.rs
@@ -24,7 +24,7 @@ pub use hir_def::{
24 ArithOp, Array, BinaryOp, BindingAnnotation, CmpOp, Expr, ExprId, Literal, LogicOp, 24 ArithOp, Array, BinaryOp, BindingAnnotation, CmpOp, Expr, ExprId, Literal, LogicOp,
25 MatchArm, Ordering, Pat, PatId, RecordFieldPat, RecordLitField, Statement, UnaryOp, 25 MatchArm, Ordering, Pat, PatId, RecordFieldPat, RecordLitField, Statement, UnaryOp,
26 }, 26 },
27 LocalStructFieldId, VariantId, 27 LocalFieldId, VariantId,
28}; 28};
29 29
30pub struct ExprValidator<'a, 'b: 'a> { 30pub struct ExprValidator<'a, 'b: 'a> {
@@ -83,7 +83,7 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
83 id: ExprId, 83 id: ExprId,
84 db: &dyn HirDatabase, 84 db: &dyn HirDatabase,
85 variant_def: VariantId, 85 variant_def: VariantId,
86 missed_fields: Vec<LocalStructFieldId>, 86 missed_fields: Vec<LocalFieldId>,
87 ) { 87 ) {
88 // XXX: only look at source_map if we do have missing fields 88 // XXX: only look at source_map if we do have missing fields
89 let (_, source_map) = db.body_with_source_map(self.func.into()); 89 let (_, source_map) = db.body_with_source_map(self.func.into());
@@ -112,7 +112,7 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
112 id: PatId, 112 id: PatId,
113 db: &dyn HirDatabase, 113 db: &dyn HirDatabase,
114 variant_def: VariantId, 114 variant_def: VariantId,
115 missed_fields: Vec<LocalStructFieldId>, 115 missed_fields: Vec<LocalFieldId>,
116 ) { 116 ) {
117 // XXX: only look at source_map if we do have missing fields 117 // XXX: only look at source_map if we do have missing fields
118 let (_, source_map) = db.body_with_source_map(self.func.into()); 118 let (_, source_map) = db.body_with_source_map(self.func.into());
@@ -256,7 +256,7 @@ pub fn record_literal_missing_fields(
256 infer: &InferenceResult, 256 infer: &InferenceResult,
257 id: ExprId, 257 id: ExprId,
258 expr: &Expr, 258 expr: &Expr,
259) -> Option<(VariantId, Vec<LocalStructFieldId>, /*exhaustive*/ bool)> { 259) -> Option<(VariantId, Vec<LocalFieldId>, /*exhaustive*/ bool)> {
260 let (fields, exhausitve) = match expr { 260 let (fields, exhausitve) = match expr {
261 Expr::RecordLit { path: _, fields, spread } => (fields, spread.is_none()), 261 Expr::RecordLit { path: _, fields, spread } => (fields, spread.is_none()),
262 _ => return None, 262 _ => return None,
@@ -270,7 +270,7 @@ pub fn record_literal_missing_fields(
270 let variant_data = variant_data(db.upcast(), variant_def); 270 let variant_data = variant_data(db.upcast(), variant_def);
271 271
272 let specified_fields: FxHashSet<_> = fields.iter().map(|f| &f.name).collect(); 272 let specified_fields: FxHashSet<_> = fields.iter().map(|f| &f.name).collect();
273 let missed_fields: Vec<LocalStructFieldId> = variant_data 273 let missed_fields: Vec<LocalFieldId> = variant_data
274 .fields() 274 .fields()
275 .iter() 275 .iter()
276 .filter_map(|(f, d)| if specified_fields.contains(&d.name) { None } else { Some(f) }) 276 .filter_map(|(f, d)| if specified_fields.contains(&d.name) { None } else { Some(f) })
@@ -286,7 +286,7 @@ pub fn record_pattern_missing_fields(
286 infer: &InferenceResult, 286 infer: &InferenceResult,
287 id: PatId, 287 id: PatId,
288 pat: &Pat, 288 pat: &Pat,
289) -> Option<(VariantId, Vec<LocalStructFieldId>, /*exhaustive*/ bool)> { 289) -> Option<(VariantId, Vec<LocalFieldId>, /*exhaustive*/ bool)> {
290 let (fields, exhaustive) = match pat { 290 let (fields, exhaustive) = match pat {
291 Pat::Record { path: _, args, ellipsis } => (args, !ellipsis), 291 Pat::Record { path: _, args, ellipsis } => (args, !ellipsis),
292 _ => return None, 292 _ => return None,
@@ -300,7 +300,7 @@ pub fn record_pattern_missing_fields(
300 let variant_data = variant_data(db.upcast(), variant_def); 300 let variant_data = variant_data(db.upcast(), variant_def);
301 301
302 let specified_fields: FxHashSet<_> = fields.iter().map(|f| &f.name).collect(); 302 let specified_fields: FxHashSet<_> = fields.iter().map(|f| &f.name).collect();
303 let missed_fields: Vec<LocalStructFieldId> = variant_data 303 let missed_fields: Vec<LocalFieldId> = variant_data
304 .fields() 304 .fields()
305 .iter() 305 .iter()
306 .filter_map(|(f, d)| if specified_fields.contains(&d.name) { None } else { Some(f) }) 306 .filter_map(|(f, d)| if specified_fields.contains(&d.name) { None } else { Some(f) })
diff --git a/crates/ra_hir_ty/src/infer.rs b/crates/ra_hir_ty/src/infer.rs
index dfb6a435f..6a53be621 100644
--- a/crates/ra_hir_ty/src/infer.rs
+++ b/crates/ra_hir_ty/src/infer.rs
@@ -28,7 +28,7 @@ use hir_def::{
28 path::{path, Path}, 28 path::{path, Path},
29 resolver::{HasResolver, Resolver, TypeNs}, 29 resolver::{HasResolver, Resolver, TypeNs},
30 type_ref::{Mutability, TypeRef}, 30 type_ref::{Mutability, TypeRef},
31 AdtId, AssocItemId, DefWithBodyId, FunctionId, StructFieldId, TraitId, TypeAliasId, VariantId, 31 AdtId, AssocItemId, DefWithBodyId, FieldId, FunctionId, TraitId, TypeAliasId, VariantId,
32}; 32};
33use hir_expand::{diagnostics::DiagnosticSink, name::name}; 33use hir_expand::{diagnostics::DiagnosticSink, name::name};
34use ra_arena::map::ArenaMap; 34use ra_arena::map::ArenaMap;
@@ -124,10 +124,10 @@ pub struct InferenceResult {
124 /// For each method call expr, records the function it resolves to. 124 /// For each method call expr, records the function it resolves to.
125 method_resolutions: FxHashMap<ExprId, FunctionId>, 125 method_resolutions: FxHashMap<ExprId, FunctionId>,
126 /// For each field access expr, records the field it resolves to. 126 /// For each field access expr, records the field it resolves to.
127 field_resolutions: FxHashMap<ExprId, StructFieldId>, 127 field_resolutions: FxHashMap<ExprId, FieldId>,
128 /// For each field in record literal, records the field it resolves to. 128 /// For each field in record literal, records the field it resolves to.
129 record_field_resolutions: FxHashMap<ExprId, StructFieldId>, 129 record_field_resolutions: FxHashMap<ExprId, FieldId>,
130 record_field_pat_resolutions: FxHashMap<PatId, StructFieldId>, 130 record_field_pat_resolutions: FxHashMap<PatId, FieldId>,
131 /// For each struct literal, records the variant it resolves to. 131 /// For each struct literal, records the variant it resolves to.
132 variant_resolutions: FxHashMap<ExprOrPatId, VariantId>, 132 variant_resolutions: FxHashMap<ExprOrPatId, VariantId>,
133 /// For each associated item record what it resolves to 133 /// For each associated item record what it resolves to
@@ -142,13 +142,13 @@ impl InferenceResult {
142 pub fn method_resolution(&self, expr: ExprId) -> Option<FunctionId> { 142 pub fn method_resolution(&self, expr: ExprId) -> Option<FunctionId> {
143 self.method_resolutions.get(&expr).copied() 143 self.method_resolutions.get(&expr).copied()
144 } 144 }
145 pub fn field_resolution(&self, expr: ExprId) -> Option<StructFieldId> { 145 pub fn field_resolution(&self, expr: ExprId) -> Option<FieldId> {
146 self.field_resolutions.get(&expr).copied() 146 self.field_resolutions.get(&expr).copied()
147 } 147 }
148 pub fn record_field_resolution(&self, expr: ExprId) -> Option<StructFieldId> { 148 pub fn record_field_resolution(&self, expr: ExprId) -> Option<FieldId> {
149 self.record_field_resolutions.get(&expr).copied() 149 self.record_field_resolutions.get(&expr).copied()
150 } 150 }
151 pub fn record_field_pat_resolution(&self, pat: PatId) -> Option<StructFieldId> { 151 pub fn record_field_pat_resolution(&self, pat: PatId) -> Option<FieldId> {
152 self.record_field_pat_resolutions.get(&pat).copied() 152 self.record_field_pat_resolutions.get(&pat).copied()
153 } 153 }
154 pub fn variant_resolution_for_expr(&self, id: ExprId) -> Option<VariantId> { 154 pub fn variant_resolution_for_expr(&self, id: ExprId) -> Option<VariantId> {
@@ -249,7 +249,7 @@ impl<'a> InferenceContext<'a> {
249 self.result.method_resolutions.insert(expr, func); 249 self.result.method_resolutions.insert(expr, func);
250 } 250 }
251 251
252 fn write_field_resolution(&mut self, expr: ExprId, field: StructFieldId) { 252 fn write_field_resolution(&mut self, expr: ExprId, field: FieldId) {
253 self.result.field_resolutions.insert(expr, field); 253 self.result.field_resolutions.insert(expr, field);
254 } 254 }
255 255
diff --git a/crates/ra_hir_ty/src/infer/expr.rs b/crates/ra_hir_ty/src/infer/expr.rs
index 1fdb235a0..83f946eee 100644
--- a/crates/ra_hir_ty/src/infer/expr.rs
+++ b/crates/ra_hir_ty/src/infer/expr.rs
@@ -8,7 +8,7 @@ use hir_def::{
8 expr::{Array, BinaryOp, Expr, ExprId, Literal, Statement, UnaryOp}, 8 expr::{Array, BinaryOp, Expr, ExprId, Literal, Statement, UnaryOp},
9 path::{GenericArg, GenericArgs}, 9 path::{GenericArg, GenericArgs},
10 resolver::resolver_for_expr, 10 resolver::resolver_for_expr,
11 AdtId, AssocContainerId, Lookup, StructFieldId, 11 AdtId, AssocContainerId, FieldId, Lookup,
12}; 12};
13use hir_expand::name::Name; 13use hir_expand::name::Name;
14use ra_syntax::ast::RangeOp; 14use ra_syntax::ast::RangeOp;
@@ -216,9 +216,7 @@ impl<'a> InferenceContext<'a> {
216 for (field_idx, field) in fields.iter().enumerate() { 216 for (field_idx, field) in fields.iter().enumerate() {
217 let field_def = 217 let field_def =
218 variant_data.as_ref().and_then(|it| match it.field(&field.name) { 218 variant_data.as_ref().and_then(|it| match it.field(&field.name) {
219 Some(local_id) => { 219 Some(local_id) => Some(FieldId { parent: def_id.unwrap(), local_id }),
220 Some(StructFieldId { parent: def_id.unwrap(), local_id })
221 }
222 None => { 220 None => {
223 self.push_diagnostic(InferenceDiagnostic::NoSuchField { 221 self.push_diagnostic(InferenceDiagnostic::NoSuchField {
224 expr: tgt_expr, 222 expr: tgt_expr,
@@ -257,7 +255,7 @@ impl<'a> InferenceContext<'a> {
257 .and_then(|idx| a_ty.parameters.0.get(idx).cloned()), 255 .and_then(|idx| a_ty.parameters.0.get(idx).cloned()),
258 TypeCtor::Adt(AdtId::StructId(s)) => { 256 TypeCtor::Adt(AdtId::StructId(s)) => {
259 self.db.struct_data(s).variant_data.field(name).map(|local_id| { 257 self.db.struct_data(s).variant_data.field(name).map(|local_id| {
260 let field = StructFieldId { parent: s.into(), local_id }; 258 let field = FieldId { parent: s.into(), local_id };
261 self.write_field_resolution(tgt_expr, field); 259 self.write_field_resolution(tgt_expr, field);
262 self.db.field_types(s.into())[field.local_id] 260 self.db.field_types(s.into())[field.local_id]
263 .clone() 261 .clone()
diff --git a/crates/ra_hir_ty/src/infer/pat.rs b/crates/ra_hir_ty/src/infer/pat.rs
index 7c2ad4384..54ec870df 100644
--- a/crates/ra_hir_ty/src/infer/pat.rs
+++ b/crates/ra_hir_ty/src/infer/pat.rs
@@ -7,7 +7,7 @@ use hir_def::{
7 expr::{BindingAnnotation, Pat, PatId, RecordFieldPat}, 7 expr::{BindingAnnotation, Pat, PatId, RecordFieldPat},
8 path::Path, 8 path::Path,
9 type_ref::Mutability, 9 type_ref::Mutability,
10 StructFieldId, 10 FieldId,
11}; 11};
12use hir_expand::name::Name; 12use hir_expand::name::Name;
13use test_utils::tested_by; 13use test_utils::tested_by;
@@ -69,7 +69,7 @@ impl<'a> InferenceContext<'a> {
69 for subpat in subpats { 69 for subpat in subpats {
70 let matching_field = var_data.as_ref().and_then(|it| it.field(&subpat.name)); 70 let matching_field = var_data.as_ref().and_then(|it| it.field(&subpat.name));
71 if let Some(local_id) = matching_field { 71 if let Some(local_id) = matching_field {
72 let field_def = StructFieldId { parent: def.unwrap(), local_id }; 72 let field_def = FieldId { parent: def.unwrap(), local_id };
73 self.result.record_field_pat_resolutions.insert(subpat.pat, field_def); 73 self.result.record_field_pat_resolutions.insert(subpat.pat, field_def);
74 } 74 }
75 75
diff --git a/crates/ra_hir_ty/src/lower.rs b/crates/ra_hir_ty/src/lower.rs
index c2812e178..b57214296 100644
--- a/crates/ra_hir_ty/src/lower.rs
+++ b/crates/ra_hir_ty/src/lower.rs
@@ -18,8 +18,8 @@ use hir_def::{
18 resolver::{HasResolver, Resolver, TypeNs}, 18 resolver::{HasResolver, Resolver, TypeNs},
19 type_ref::{TypeBound, TypeRef}, 19 type_ref::{TypeBound, TypeRef},
20 AdtId, AssocContainerId, ConstId, EnumId, EnumVariantId, FunctionId, GenericDefId, HasModule, 20 AdtId, AssocContainerId, ConstId, EnumId, EnumVariantId, FunctionId, GenericDefId, HasModule,
21 ImplId, LocalStructFieldId, Lookup, StaticId, StructId, TraitId, TypeAliasId, TypeParamId, 21 ImplId, LocalFieldId, Lookup, StaticId, StructId, TraitId, TypeAliasId, TypeParamId, UnionId,
22 UnionId, VariantId, 22 VariantId,
23}; 23};
24use ra_arena::map::ArenaMap; 24use ra_arena::map::ArenaMap;
25use ra_db::CrateId; 25use ra_db::CrateId;
@@ -682,7 +682,7 @@ pub fn callable_item_sig(db: &dyn HirDatabase, def: CallableDef) -> PolyFnSig {
682pub(crate) fn field_types_query( 682pub(crate) fn field_types_query(
683 db: &dyn HirDatabase, 683 db: &dyn HirDatabase,
684 variant_id: VariantId, 684 variant_id: VariantId,
685) -> Arc<ArenaMap<LocalStructFieldId, Binders<Ty>>> { 685) -> Arc<ArenaMap<LocalFieldId, Binders<Ty>>> {
686 let var_data = variant_data(db.upcast(), variant_id); 686 let var_data = variant_data(db.upcast(), variant_id);
687 let (resolver, def): (_, GenericDefId) = match variant_id { 687 let (resolver, def): (_, GenericDefId) = match variant_id {
688 VariantId::StructId(it) => (it.resolver(db.upcast()), it.into()), 688 VariantId::StructId(it) => (it.resolver(db.upcast()), it.into()),
diff --git a/crates/ra_hir_ty/src/tests.rs b/crates/ra_hir_ty/src/tests.rs
index 846005baa..b6a96bb5c 100644
--- a/crates/ra_hir_ty/src/tests.rs
+++ b/crates/ra_hir_ty/src/tests.rs
@@ -117,7 +117,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
117 let macro_prefix = if node.file_id != file_id.into() { "!" } else { "" }; 117 let macro_prefix = if node.file_id != file_id.into() { "!" } else { "" };
118 format_to!( 118 format_to!(
119 buf, 119 buf,
120 "{}{} '{}': {}\n", 120 "{}{:?} '{}': {}\n",
121 macro_prefix, 121 macro_prefix,
122 range, 122 range,
123 ellipsize(text, 15), 123 ellipsize(text, 15),
@@ -134,7 +134,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
134 let macro_prefix = if src_ptr.file_id != file_id.into() { "!" } else { "" }; 134 let macro_prefix = if src_ptr.file_id != file_id.into() { "!" } else { "" };
135 format_to!( 135 format_to!(
136 buf, 136 buf,
137 "{}{}: expected {}, got {}\n", 137 "{}{:?}: expected {}, got {}\n",
138 macro_prefix, 138 macro_prefix,
139 range, 139 range,
140 mismatch.expected.display(&db), 140 mismatch.expected.display(&db),
diff --git a/crates/ra_hir_ty/src/tests/coercion.rs b/crates/ra_hir_ty/src/tests/coercion.rs
index b2c971f02..e6fb3e123 100644
--- a/crates/ra_hir_ty/src/tests/coercion.rs
+++ b/crates/ra_hir_ty/src/tests/coercion.rs
@@ -29,10 +29,10 @@ fn test() {
29} 29}
30"#), 30"#),
31 @r###" 31 @r###"
32 [11; 41) '{ ...4 }; }': () 32 11..41 '{ ...4 }; }': ()
33 [21; 22) 'a': i32 33 21..22 'a': i32
34 [30; 38) '{ 1i64 }': i64 34 30..38 '{ 1i64 }': i64
35 [32; 36) '1i64': i64 35 32..36 '1i64': i64
36 "###); 36 "###);
37} 37}
38 38
@@ -63,50 +63,50 @@ fn test2() {
63} 63}
64"#), 64"#),
65 @r###" 65 @r###"
66 [31; 32) '_': &[T] 66 31..32 '_': &[T]
67 [45; 56) '{ loop {} }': T 67 45..56 '{ loop {} }': T
68 [47; 54) 'loop {}': ! 68 47..54 'loop {}': !
69 [52; 54) '{}': () 69 52..54 '{}': ()
70 [65; 66) '_': S<&[T]> 70 65..66 '_': S<&[T]>
71 [82; 93) '{ loop {} }': T 71 82..93 '{ loop {} }': T
72 [84; 91) 'loop {}': ! 72 84..91 'loop {}': !
73 [89; 91) '{}': () 73 89..91 '{}': ()
74 [122; 133) '{ loop {} }': *mut [T; _] 74 122..133 '{ loop {} }': *mut [T; _]
75 [124; 131) 'loop {}': ! 75 124..131 'loop {}': !
76 [129; 131) '{}': () 76 129..131 '{}': ()
77 [160; 173) '{ gen() }': *mut [U] 77 160..173 '{ gen() }': *mut [U]
78 [166; 169) 'gen': fn gen<U>() -> *mut [U; _] 78 166..169 'gen': fn gen<U>() -> *mut [U; _]
79 [166; 171) 'gen()': *mut [U; _] 79 166..171 'gen()': *mut [U; _]
80 [186; 420) '{ ...rr); }': () 80 186..420 '{ ...rr); }': ()
81 [196; 199) 'arr': &[u8; _] 81 196..199 'arr': &[u8; _]
82 [212; 216) '&[1]': &[u8; _] 82 212..216 '&[1]': &[u8; _]
83 [213; 216) '[1]': [u8; _] 83 213..216 '[1]': [u8; _]
84 [214; 215) '1': u8 84 214..215 '1': u8
85 [227; 228) 'a': &[u8] 85 227..228 'a': &[u8]
86 [237; 240) 'arr': &[u8; _] 86 237..240 'arr': &[u8; _]
87 [250; 251) 'b': u8 87 250..251 'b': u8
88 [254; 255) 'f': fn f<u8>(&[u8]) -> u8 88 254..255 'f': fn f<u8>(&[u8]) -> u8
89 [254; 260) 'f(arr)': u8 89 254..260 'f(arr)': u8
90 [256; 259) 'arr': &[u8; _] 90 256..259 'arr': &[u8; _]
91 [270; 271) 'c': &[u8] 91 270..271 'c': &[u8]
92 [280; 287) '{ arr }': &[u8] 92 280..287 '{ arr }': &[u8]
93 [282; 285) 'arr': &[u8; _] 93 282..285 'arr': &[u8; _]
94 [297; 298) 'd': u8 94 297..298 'd': u8
95 [301; 302) 'g': fn g<u8>(S<&[u8]>) -> u8 95 301..302 'g': fn g<u8>(S<&[u8]>) -> u8
96 [301; 316) 'g(S { a: arr })': u8 96 301..316 'g(S { a: arr })': u8
97 [303; 315) 'S { a: arr }': S<&[u8]> 97 303..315 'S { a: arr }': S<&[u8]>
98 [310; 313) 'arr': &[u8; _] 98 310..313 'arr': &[u8; _]
99 [326; 327) 'e': [&[u8]; _] 99 326..327 'e': [&[u8]; _]
100 [341; 346) '[arr]': [&[u8]; _] 100 341..346 '[arr]': [&[u8]; _]
101 [342; 345) 'arr': &[u8; _] 101 342..345 'arr': &[u8; _]
102 [356; 357) 'f': [&[u8]; _] 102 356..357 'f': [&[u8]; _]
103 [371; 379) '[arr; 2]': [&[u8]; _] 103 371..379 '[arr; 2]': [&[u8]; _]
104 [372; 375) 'arr': &[u8; _] 104 372..375 'arr': &[u8; _]
105 [377; 378) '2': usize 105 377..378 '2': usize
106 [389; 390) 'g': (&[u8], &[u8]) 106 389..390 'g': (&[u8], &[u8])
107 [407; 417) '(arr, arr)': (&[u8], &[u8]) 107 407..417 '(arr, arr)': (&[u8], &[u8])
108 [408; 411) 'arr': &[u8; _] 108 408..411 'arr': &[u8; _]
109 [413; 416) 'arr': &[u8; _] 109 413..416 'arr': &[u8; _]
110 "### 110 "###
111 ); 111 );
112} 112}
@@ -120,11 +120,11 @@ fn test() {
120} 120}
121"#), 121"#),
122 @r###" 122 @r###"
123 [11; 40) '{ ...[1]; }': () 123 11..40 '{ ...[1]; }': ()
124 [21; 22) 'x': &[i32] 124 21..22 'x': &[i32]
125 [33; 37) '&[1]': &[i32; _] 125 33..37 '&[1]': &[i32; _]
126 [34; 37) '[1]': [i32; _] 126 34..37 '[1]': [i32; _]
127 [35; 36) '1': i32 127 35..36 '1': i32
128 "###); 128 "###);
129} 129}
130 130
@@ -150,31 +150,31 @@ fn test(a: A<[u8; 2]>, b: B<[u8; 2]>, c: C<[u8; 2]>) {
150} 150}
151"#), 151"#),
152 @r###" 152 @r###"
153 [258; 259) 'x': A<[T]> 153 258..259 'x': A<[T]>
154 [279; 284) '{ x }': A<[T]> 154 279..284 '{ x }': A<[T]>
155 [281; 282) 'x': A<[T]> 155 281..282 'x': A<[T]>
156 [296; 297) 'x': B<[T]> 156 296..297 'x': B<[T]>
157 [317; 322) '{ x }': B<[T]> 157 317..322 '{ x }': B<[T]>
158 [319; 320) 'x': B<[T]> 158 319..320 'x': B<[T]>
159 [334; 335) 'x': C<[T]> 159 334..335 'x': C<[T]>
160 [355; 360) '{ x }': C<[T]> 160 355..360 '{ x }': C<[T]>
161 [357; 358) 'x': C<[T]> 161 357..358 'x': C<[T]>
162 [370; 371) 'a': A<[u8; _]> 162 370..371 'a': A<[u8; _]>
163 [385; 386) 'b': B<[u8; _]> 163 385..386 'b': B<[u8; _]>
164 [400; 401) 'c': C<[u8; _]> 164 400..401 'c': C<[u8; _]>
165 [415; 481) '{ ...(c); }': () 165 415..481 '{ ...(c); }': ()
166 [425; 426) 'd': A<[{unknown}]> 166 425..426 'd': A<[{unknown}]>
167 [429; 433) 'foo1': fn foo1<{unknown}>(A<[{unknown}]>) -> A<[{unknown}]> 167 429..433 'foo1': fn foo1<{unknown}>(A<[{unknown}]>) -> A<[{unknown}]>
168 [429; 436) 'foo1(a)': A<[{unknown}]> 168 429..436 'foo1(a)': A<[{unknown}]>
169 [434; 435) 'a': A<[u8; _]> 169 434..435 'a': A<[u8; _]>
170 [446; 447) 'e': B<[u8]> 170 446..447 'e': B<[u8]>
171 [450; 454) 'foo2': fn foo2<u8>(B<[u8]>) -> B<[u8]> 171 450..454 'foo2': fn foo2<u8>(B<[u8]>) -> B<[u8]>
172 [450; 457) 'foo2(b)': B<[u8]> 172 450..457 'foo2(b)': B<[u8]>
173 [455; 456) 'b': B<[u8; _]> 173 455..456 'b': B<[u8; _]>
174 [467; 468) 'f': C<[u8]> 174 467..468 'f': C<[u8]>
175 [471; 475) 'foo3': fn foo3<u8>(C<[u8]>) -> C<[u8]> 175 471..475 'foo3': fn foo3<u8>(C<[u8]>) -> C<[u8]>
176 [471; 478) 'foo3(c)': C<[u8]> 176 471..478 'foo3(c)': C<[u8]>
177 [476; 477) 'c': C<[u8; _]> 177 476..477 'c': C<[u8; _]>
178 "### 178 "###
179 ); 179 );
180} 180}
@@ -193,24 +193,24 @@ fn test() {
193} 193}
194"#), 194"#),
195 @r###" 195 @r###"
196 [11; 12) 'x': &[T] 196 11..12 'x': &[T]
197 [28; 39) '{ loop {} }': &[T] 197 28..39 '{ loop {} }': &[T]
198 [30; 37) 'loop {}': ! 198 30..37 'loop {}': !
199 [35; 37) '{}': () 199 35..37 '{}': ()
200 [50; 126) '{ ... }; }': () 200 50..126 '{ ... }; }': ()
201 [60; 61) 'x': &[i32] 201 60..61 'x': &[i32]
202 [64; 123) 'if tru... }': &[i32] 202 64..123 'if tru... }': &[i32]
203 [67; 71) 'true': bool 203 67..71 'true': bool
204 [72; 97) '{ ... }': &[i32] 204 72..97 '{ ... }': &[i32]
205 [82; 85) 'foo': fn foo<i32>(&[i32]) -> &[i32] 205 82..85 'foo': fn foo<i32>(&[i32]) -> &[i32]
206 [82; 91) 'foo(&[1])': &[i32] 206 82..91 'foo(&[1])': &[i32]
207 [86; 90) '&[1]': &[i32; _] 207 86..90 '&[1]': &[i32; _]
208 [87; 90) '[1]': [i32; _] 208 87..90 '[1]': [i32; _]
209 [88; 89) '1': i32 209 88..89 '1': i32
210 [103; 123) '{ ... }': &[i32; _] 210 103..123 '{ ... }': &[i32; _]
211 [113; 117) '&[1]': &[i32; _] 211 113..117 '&[1]': &[i32; _]
212 [114; 117) '[1]': [i32; _] 212 114..117 '[1]': [i32; _]
213 [115; 116) '1': i32 213 115..116 '1': i32
214 "### 214 "###
215 ); 215 );
216} 216}
@@ -229,24 +229,24 @@ fn test() {
229} 229}
230"#), 230"#),
231 @r###" 231 @r###"
232 [11; 12) 'x': &[T] 232 11..12 'x': &[T]
233 [28; 39) '{ loop {} }': &[T] 233 28..39 '{ loop {} }': &[T]
234 [30; 37) 'loop {}': ! 234 30..37 'loop {}': !
235 [35; 37) '{}': () 235 35..37 '{}': ()
236 [50; 126) '{ ... }; }': () 236 50..126 '{ ... }; }': ()
237 [60; 61) 'x': &[i32] 237 60..61 'x': &[i32]
238 [64; 123) 'if tru... }': &[i32] 238 64..123 'if tru... }': &[i32]
239 [67; 71) 'true': bool 239 67..71 'true': bool
240 [72; 92) '{ ... }': &[i32; _] 240 72..92 '{ ... }': &[i32; _]
241 [82; 86) '&[1]': &[i32; _] 241 82..86 '&[1]': &[i32; _]
242 [83; 86) '[1]': [i32; _] 242 83..86 '[1]': [i32; _]
243 [84; 85) '1': i32 243 84..85 '1': i32
244 [98; 123) '{ ... }': &[i32] 244 98..123 '{ ... }': &[i32]
245 [108; 111) 'foo': fn foo<i32>(&[i32]) -> &[i32] 245 108..111 'foo': fn foo<i32>(&[i32]) -> &[i32]
246 [108; 117) 'foo(&[1])': &[i32] 246 108..117 'foo(&[1])': &[i32]
247 [112; 116) '&[1]': &[i32; _] 247 112..116 '&[1]': &[i32; _]
248 [113; 116) '[1]': [i32; _] 248 113..116 '[1]': [i32; _]
249 [114; 115) '1': i32 249 114..115 '1': i32
250 "### 250 "###
251 ); 251 );
252} 252}
@@ -265,31 +265,31 @@ fn test(i: i32) {
265} 265}
266"#), 266"#),
267 @r###" 267 @r###"
268 [11; 12) 'x': &[T] 268 11..12 'x': &[T]
269 [28; 39) '{ loop {} }': &[T] 269 28..39 '{ loop {} }': &[T]
270 [30; 37) 'loop {}': ! 270 30..37 'loop {}': !
271 [35; 37) '{}': () 271 35..37 '{}': ()
272 [48; 49) 'i': i32 272 48..49 'i': i32
273 [56; 150) '{ ... }; }': () 273 56..150 '{ ... }; }': ()
274 [66; 67) 'x': &[i32] 274 66..67 'x': &[i32]
275 [70; 147) 'match ... }': &[i32] 275 70..147 'match ... }': &[i32]
276 [76; 77) 'i': i32 276 76..77 'i': i32
277 [88; 89) '2': i32 277 88..89 '2': i32
278 [88; 89) '2': i32 278 88..89 '2': i32
279 [93; 96) 'foo': fn foo<i32>(&[i32]) -> &[i32] 279 93..96 'foo': fn foo<i32>(&[i32]) -> &[i32]
280 [93; 102) 'foo(&[2])': &[i32] 280 93..102 'foo(&[2])': &[i32]
281 [97; 101) '&[2]': &[i32; _] 281 97..101 '&[2]': &[i32; _]
282 [98; 101) '[2]': [i32; _] 282 98..101 '[2]': [i32; _]
283 [99; 100) '2': i32 283 99..100 '2': i32
284 [112; 113) '1': i32 284 112..113 '1': i32
285 [112; 113) '1': i32 285 112..113 '1': i32
286 [117; 121) '&[1]': &[i32; _] 286 117..121 '&[1]': &[i32; _]
287 [118; 121) '[1]': [i32; _] 287 118..121 '[1]': [i32; _]
288 [119; 120) '1': i32 288 119..120 '1': i32
289 [131; 132) '_': i32 289 131..132 '_': i32
290 [136; 140) '&[3]': &[i32; _] 290 136..140 '&[3]': &[i32; _]
291 [137; 140) '[3]': [i32; _] 291 137..140 '[3]': [i32; _]
292 [138; 139) '3': i32 292 138..139 '3': i32
293 "### 293 "###
294 ); 294 );
295} 295}
@@ -308,31 +308,31 @@ fn test(i: i32) {
308} 308}
309"#), 309"#),
310 @r###" 310 @r###"
311 [11; 12) 'x': &[T] 311 11..12 'x': &[T]
312 [28; 39) '{ loop {} }': &[T] 312 28..39 '{ loop {} }': &[T]
313 [30; 37) 'loop {}': ! 313 30..37 'loop {}': !
314 [35; 37) '{}': () 314 35..37 '{}': ()
315 [48; 49) 'i': i32 315 48..49 'i': i32
316 [56; 150) '{ ... }; }': () 316 56..150 '{ ... }; }': ()
317 [66; 67) 'x': &[i32] 317 66..67 'x': &[i32]
318 [70; 147) 'match ... }': &[i32] 318 70..147 'match ... }': &[i32]
319 [76; 77) 'i': i32 319 76..77 'i': i32
320 [88; 89) '1': i32 320 88..89 '1': i32
321 [88; 89) '1': i32 321 88..89 '1': i32
322 [93; 97) '&[1]': &[i32; _] 322 93..97 '&[1]': &[i32; _]
323 [94; 97) '[1]': [i32; _] 323 94..97 '[1]': [i32; _]
324 [95; 96) '1': i32 324 95..96 '1': i32
325 [107; 108) '2': i32 325 107..108 '2': i32
326 [107; 108) '2': i32 326 107..108 '2': i32
327 [112; 115) 'foo': fn foo<i32>(&[i32]) -> &[i32] 327 112..115 'foo': fn foo<i32>(&[i32]) -> &[i32]
328 [112; 121) 'foo(&[2])': &[i32] 328 112..121 'foo(&[2])': &[i32]
329 [116; 120) '&[2]': &[i32; _] 329 116..120 '&[2]': &[i32; _]
330 [117; 120) '[2]': [i32; _] 330 117..120 '[2]': [i32; _]
331 [118; 119) '2': i32 331 118..119 '2': i32
332 [131; 132) '_': i32 332 131..132 '_': i32
333 [136; 140) '&[3]': &[i32; _] 333 136..140 '&[3]': &[i32; _]
334 [137; 140) '[3]': [i32; _] 334 137..140 '[3]': [i32; _]
335 [138; 139) '3': i32 335 138..139 '3': i32
336 "### 336 "###
337 ); 337 );
338} 338}
@@ -353,24 +353,24 @@ fn test() {
353} 353}
354"#), 354"#),
355 @r###" 355 @r###"
356 [11; 145) '{ ... }; }': () 356 11..145 '{ ... }; }': ()
357 [21; 22) 't': &mut i32 357 21..22 't': &mut i32
358 [25; 31) '&mut 1': &mut i32 358 25..31 '&mut 1': &mut i32
359 [30; 31) '1': i32 359 30..31 '1': i32
360 [41; 42) 'x': *const i32 360 41..42 'x': *const i32
361 [45; 142) 'match ... }': *const i32 361 45..142 'match ... }': *const i32
362 [51; 52) '1': i32 362 51..52 '1': i32
363 [63; 64) '1': i32 363 63..64 '1': i32
364 [63; 64) '1': i32 364 63..64 '1': i32
365 [68; 69) 't': &mut i32 365 68..69 't': &mut i32
366 [68; 81) 't as *mut i32': *mut i32 366 68..81 't as *mut i32': *mut i32
367 [91; 92) '2': i32 367 91..92 '2': i32
368 [91; 92) '2': i32 368 91..92 '2': i32
369 [96; 97) 't': &mut i32 369 96..97 't': &mut i32
370 [96; 105) 't as &i32': &i32 370 96..105 't as &i32': &i32
371 [115; 116) '_': i32 371 115..116 '_': i32
372 [120; 121) 't': &mut i32 372 120..121 't': &mut i32
373 [120; 135) 't as *const i32': *const i32 373 120..135 't as *const i32': *const i32
374 "### 374 "###
375 ); 375 );
376} 376}
@@ -384,9 +384,9 @@ fn foo() -> u32 {
384} 384}
385"#, true), 385"#, true),
386 @r###" 386 @r###"
387 [17; 40) '{ ...own; }': ! 387 17..40 '{ ...own; }': !
388 [23; 37) 'return unknown': ! 388 23..37 'return unknown': !
389 [30; 37) 'unknown': u32 389 30..37 'unknown': u32
390 "### 390 "###
391 ); 391 );
392} 392}
@@ -404,24 +404,24 @@ fn test() {
404} 404}
405"#, true), 405"#, true),
406 @r###" 406 @r###"
407 [30; 31) 'x': &Foo 407 30..31 'x': &Foo
408 [39; 41) '{}': () 408 39..41 '{}': ()
409 [52; 133) '{ ...oo); }': () 409 52..133 '{ ...oo); }': ()
410 [58; 71) 'takes_ref_foo': fn takes_ref_foo(&Foo) 410 58..71 'takes_ref_foo': fn takes_ref_foo(&Foo)
411 [58; 77) 'takes_...(&Foo)': () 411 58..77 'takes_...(&Foo)': ()
412 [72; 76) '&Foo': &Foo 412 72..76 '&Foo': &Foo
413 [73; 76) 'Foo': Foo 413 73..76 'Foo': Foo
414 [83; 96) 'takes_ref_foo': fn takes_ref_foo(&Foo) 414 83..96 'takes_ref_foo': fn takes_ref_foo(&Foo)
415 [83; 103) 'takes_...&&Foo)': () 415 83..103 'takes_...&&Foo)': ()
416 [97; 102) '&&Foo': &&Foo 416 97..102 '&&Foo': &&Foo
417 [98; 102) '&Foo': &Foo 417 98..102 '&Foo': &Foo
418 [99; 102) 'Foo': Foo 418 99..102 'Foo': Foo
419 [109; 122) 'takes_ref_foo': fn takes_ref_foo(&Foo) 419 109..122 'takes_ref_foo': fn takes_ref_foo(&Foo)
420 [109; 130) 'takes_...&&Foo)': () 420 109..130 'takes_...&&Foo)': ()
421 [123; 129) '&&&Foo': &&&Foo 421 123..129 '&&&Foo': &&&Foo
422 [124; 129) '&&Foo': &&Foo 422 124..129 '&&Foo': &&Foo
423 [125; 129) '&Foo': &Foo 423 125..129 '&Foo': &Foo
424 [126; 129) 'Foo': Foo 424 126..129 'Foo': Foo
425 "### 425 "###
426 ); 426 );
427} 427}
@@ -439,26 +439,26 @@ fn test() {
439} 439}
440"#, true), 440"#, true),
441 @r###" 441 @r###"
442 [29; 30) 'x': &T 442 29..30 'x': &T
443 [41; 47) '{ *x }': T 443 41..47 '{ *x }': T
444 [43; 45) '*x': T 444 43..45 '*x': T
445 [44; 45) 'x': &T 445 44..45 'x': &T
446 [58; 127) '{ ...oo); }': () 446 58..127 '{ ...oo); }': ()
447 [64; 73) 'takes_ref': fn takes_ref<Foo>(&Foo) -> Foo 447 64..73 'takes_ref': fn takes_ref<Foo>(&Foo) -> Foo
448 [64; 79) 'takes_ref(&Foo)': Foo 448 64..79 'takes_ref(&Foo)': Foo
449 [74; 78) '&Foo': &Foo 449 74..78 '&Foo': &Foo
450 [75; 78) 'Foo': Foo 450 75..78 'Foo': Foo
451 [85; 94) 'takes_ref': fn takes_ref<&Foo>(&&Foo) -> &Foo 451 85..94 'takes_ref': fn takes_ref<&Foo>(&&Foo) -> &Foo
452 [85; 101) 'takes_...&&Foo)': &Foo 452 85..101 'takes_...&&Foo)': &Foo
453 [95; 100) '&&Foo': &&Foo 453 95..100 '&&Foo': &&Foo
454 [96; 100) '&Foo': &Foo 454 96..100 '&Foo': &Foo
455 [97; 100) 'Foo': Foo 455 97..100 'Foo': Foo
456 [107; 116) 'takes_ref': fn takes_ref<&&Foo>(&&&Foo) -> &&Foo 456 107..116 'takes_ref': fn takes_ref<&&Foo>(&&&Foo) -> &&Foo
457 [107; 124) 'takes_...&&Foo)': &&Foo 457 107..124 'takes_...&&Foo)': &&Foo
458 [117; 123) '&&&Foo': &&&Foo 458 117..123 '&&&Foo': &&&Foo
459 [118; 123) '&&Foo': &&Foo 459 118..123 '&&Foo': &&Foo
460 [119; 123) '&Foo': &Foo 460 119..123 '&Foo': &Foo
461 [120; 123) 'Foo': Foo 461 120..123 'Foo': Foo
462 "### 462 "###
463 ); 463 );
464} 464}
@@ -478,18 +478,18 @@ fn test() {
478} 478}
479"#, true), 479"#, true),
480 @r###" 480 @r###"
481 [127; 128) 'x': &str 481 127..128 'x': &str
482 [136; 138) '{}': () 482 136..138 '{}': ()
483 [169; 180) '{ loop {} }': String 483 169..180 '{ loop {} }': String
484 [171; 178) 'loop {}': ! 484 171..178 'loop {}': !
485 [176; 178) '{}': () 485 176..178 '{}': ()
486 [191; 236) '{ ... }); }': () 486 191..236 '{ ... }); }': ()
487 [197; 210) 'takes_ref_str': fn takes_ref_str(&str) 487 197..210 'takes_ref_str': fn takes_ref_str(&str)
488 [197; 233) 'takes_...g() })': () 488 197..233 'takes_...g() })': ()
489 [211; 232) '&{ ret...ng() }': &String 489 211..232 '&{ ret...ng() }': &String
490 [212; 232) '{ retu...ng() }': String 490 212..232 '{ retu...ng() }': String
491 [214; 228) 'returns_string': fn returns_string() -> String 491 214..228 'returns_string': fn returns_string() -> String
492 [214; 230) 'return...ring()': String 492 214..230 'return...ring()': String
493 "### 493 "###
494 ); 494 );
495} 495}
@@ -508,19 +508,19 @@ fn foo() {
508} 508}
509"#, true), 509"#, true),
510 @r###" 510 @r###"
511 [10; 106) '{ ... }; }': () 511 10..106 '{ ... }; }': ()
512 [20; 21) 'x': || -> &u32 512 20..21 'x': || -> &u32
513 [24; 103) '|| { ... }': || -> &u32 513 24..103 '|| { ... }': || -> &u32
514 [27; 103) '{ ... }': &u32 514 27..103 '{ ... }': &u32
515 [37; 82) 'if tru... }': () 515 37..82 'if tru... }': ()
516 [40; 44) 'true': bool 516 40..44 'true': bool
517 [45; 82) '{ ... }': ! 517 45..82 '{ ... }': !
518 [59; 71) 'return &1u32': ! 518 59..71 'return &1u32': !
519 [66; 71) '&1u32': &u32 519 66..71 '&1u32': &u32
520 [67; 71) '1u32': u32 520 67..71 '1u32': u32
521 [91; 97) '&&1u32': &&u32 521 91..97 '&&1u32': &&u32
522 [92; 97) '&1u32': &u32 522 92..97 '&1u32': &u32
523 [93; 97) '1u32': u32 523 93..97 '1u32': u32
524 "### 524 "###
525 ); 525 );
526} 526}
@@ -535,12 +535,12 @@ fn test() {
535} 535}
536"#, true), 536"#, true),
537 @r###" 537 @r###"
538 [8; 9) 'x': u32 538 8..9 'x': u32
539 [25; 30) '{ 1 }': isize 539 25..30 '{ 1 }': isize
540 [27; 28) '1': isize 540 27..28 '1': isize
541 [41; 79) '{ ...foo; }': () 541 41..79 '{ ...foo; }': ()
542 [51; 52) 'f': fn(u32) -> isize 542 51..52 'f': fn(u32) -> isize
543 [73; 76) 'foo': fn foo(u32) -> isize 543 73..76 'foo': fn foo(u32) -> isize
544 "### 544 "###
545 ); 545 );
546} 546}
@@ -554,12 +554,12 @@ fn test() {
554} 554}
555"#, true), 555"#, true),
556 @r###" 556 @r###"
557 [11; 55) '{ ...1 }; }': () 557 11..55 '{ ...1 }; }': ()
558 [21; 22) 'f': fn(u32) -> isize 558 21..22 'f': fn(u32) -> isize
559 [43; 52) '|x| { 1 }': |u32| -> isize 559 43..52 '|x| { 1 }': |u32| -> isize
560 [44; 45) 'x': u32 560 44..45 'x': u32
561 [47; 52) '{ 1 }': isize 561 47..52 '{ 1 }': isize
562 [49; 50) '1': isize 562 49..50 '1': isize
563 "### 563 "###
564 ); 564 );
565} 565}
@@ -577,11 +577,11 @@ impl<TT> S<TT> {
577} 577}
578"#, true), 578"#, true),
579 @r###" 579 @r###"
580 [51; 55) 'self': &S<TT> 580 51..55 'self': &S<TT>
581 [64; 87) '{ ... }': &TT 581 64..87 '{ ... }': &TT
582 [74; 81) '&self.t': &TT 582 74..81 '&self.t': &TT
583 [75; 79) 'self': &S<TT> 583 75..79 'self': &S<TT>
584 [75; 81) 'self.t': TT 584 75..81 'self.t': TT
585 "### 585 "###
586 ); 586 );
587} 587}
@@ -602,13 +602,13 @@ fn test() {
602} 602}
603"#, true), 603"#, true),
604 @r###" 604 @r###"
605 [162; 199) '{ ... 3]; }': () 605 162..199 '{ ... 3]; }': ()
606 [172; 173) 'f': &[usize] 606 172..173 'f': &[usize]
607 [186; 196) '&[1, 2, 3]': &[usize; _] 607 186..196 '&[1, 2, 3]': &[usize; _]
608 [187; 196) '[1, 2, 3]': [usize; _] 608 187..196 '[1, 2, 3]': [usize; _]
609 [188; 189) '1': usize 609 188..189 '1': usize
610 [191; 192) '2': usize 610 191..192 '2': usize
611 [194; 195) '3': usize 611 194..195 '3': usize
612 "### 612 "###
613 ); 613 );
614} 614}
@@ -642,19 +642,19 @@ fn test() {
642} 642}
643"#, true), 643"#, true),
644 @r###" 644 @r###"
645 [388; 573) '{ ...bj2; }': () 645 388..573 '{ ...bj2; }': ()
646 [398; 401) 'obj': &dyn Baz<i8, i16> 646 398..401 'obj': &dyn Baz<i8, i16>
647 [423; 425) '&S': &S<i8, i16> 647 423..425 '&S': &S<i8, i16>
648 [424; 425) 'S': S<i8, i16> 648 424..425 'S': S<i8, i16>
649 [435; 438) 'obj': &dyn Bar<usize, i8, i16> 649 435..438 'obj': &dyn Bar<usize, i8, i16>
650 [460; 463) 'obj': &dyn Baz<i8, i16> 650 460..463 'obj': &dyn Baz<i8, i16>
651 [473; 476) 'obj': &dyn Foo<i8, usize> 651 473..476 'obj': &dyn Foo<i8, usize>
652 [495; 498) 'obj': &dyn Bar<usize, i8, i16> 652 495..498 'obj': &dyn Bar<usize, i8, i16>
653 [508; 512) 'obj2': &dyn Baz<i8, i16> 653 508..512 'obj2': &dyn Baz<i8, i16>
654 [534; 536) '&S': &S<i8, i16> 654 534..536 '&S': &S<i8, i16>
655 [535; 536) 'S': S<i8, i16> 655 535..536 'S': S<i8, i16>
656 [546; 547) '_': &dyn Foo<i8, usize> 656 546..547 '_': &dyn Foo<i8, usize>
657 [566; 570) 'obj2': &dyn Baz<i8, i16> 657 566..570 'obj2': &dyn Baz<i8, i16>
658 "### 658 "###
659 ); 659 );
660} 660}
@@ -687,12 +687,12 @@ fn test() {
687} 687}
688"#, true), 688"#, true),
689 @r###" 689 @r###"
690 [292; 348) '{ ...obj; }': () 690 292..348 '{ ...obj; }': ()
691 [302; 305) 'obj': &dyn D 691 302..305 'obj': &dyn D
692 [316; 318) '&S': &S 692 316..318 '&S': &S
693 [317; 318) 'S': S 693 317..318 'S': S
694 [328; 331) 'obj': &dyn A 694 328..331 'obj': &dyn A
695 [342; 345) 'obj': &dyn D 695 342..345 'obj': &dyn D
696 "### 696 "###
697 ); 697 );
698} 698}
diff --git a/crates/ra_hir_ty/src/tests/macros.rs b/crates/ra_hir_ty/src/tests/macros.rs
index f2a9b1c40..6b5267232 100644
--- a/crates/ra_hir_ty/src/tests/macros.rs
+++ b/crates/ra_hir_ty/src/tests/macros.rs
@@ -67,12 +67,12 @@ fn main() {
67} 67}
68"#), 68"#),
69 @r###" 69 @r###"
70 ![0; 17) '{Foo(v...,2,])}': Foo 70 !0..17 '{Foo(v...,2,])}': Foo
71 ![1; 4) 'Foo': Foo({unknown}) -> Foo 71 !1..4 'Foo': Foo({unknown}) -> Foo
72 ![1; 16) 'Foo(vec![1,2,])': Foo 72 !1..16 'Foo(vec![1,2,])': Foo
73 ![5; 15) 'vec![1,2,]': {unknown} 73 !5..15 'vec![1,2,]': {unknown}
74 [156; 182) '{ ...,2); }': () 74 156..182 '{ ...,2); }': ()
75 [166; 167) 'x': Foo 75 166..167 'x': Foo
76 "### 76 "###
77 ); 77 );
78} 78}
@@ -100,14 +100,14 @@ fn main() {
100} 100}
101"#), 101"#),
102 @r###" 102 @r###"
103 ![0; 17) '{Foo(v...,2,])}': Foo 103 !0..17 '{Foo(v...,2,])}': Foo
104 ![1; 4) 'Foo': Foo({unknown}) -> Foo 104 !1..4 'Foo': Foo({unknown}) -> Foo
105 ![1; 16) 'Foo(vec![1,2,])': Foo 105 !1..16 'Foo(vec![1,2,])': Foo
106 ![5; 15) 'vec![1,2,]': {unknown} 106 !5..15 'vec![1,2,]': {unknown}
107 [195; 251) '{ ...,2); }': () 107 195..251 '{ ...,2); }': ()
108 [205; 206) 'x': Foo 108 205..206 'x': Foo
109 [228; 229) 'y': {unknown} 109 228..229 'y': {unknown}
110 [232; 248) 'crate:...!(1,2)': {unknown} 110 232..248 'crate:...!(1,2)': {unknown}
111 "### 111 "###
112 ); 112 );
113} 113}
@@ -131,11 +131,11 @@ fn main() {
131} 131}
132"#), 132"#),
133 @r###" 133 @r###"
134 ![0; 5) '42i32': i32 134 !0..5 '42i32': i32
135 ![0; 5) '42i32': i32 135 !0..5 '42i32': i32
136 [111; 164) '{ ...!(); }': () 136 111..164 '{ ...!(); }': ()
137 [121; 122) 'x': i32 137 121..122 'x': i32
138 [148; 149) 'y': i32 138 148..149 'y': i32
139 "### 139 "###
140 ); 140 );
141} 141}
@@ -172,51 +172,51 @@ fn spam() {
172} 172}
173"#), 173"#),
174 @r###" 174 @r###"
175 ![0; 6) '1isize': isize 175 !0..6 '1isize': isize
176 ![0; 6) '1isize': isize 176 !0..6 '1isize': isize
177 ![0; 6) '1isize': isize 177 !0..6 '1isize': isize
178 ![0; 6) '1isize': isize 178 !0..6 '1isize': isize
179 ![0; 6) '1isize': isize 179 !0..6 '1isize': isize
180 ![0; 6) '1isize': isize 180 !0..6 '1isize': isize
181 ![0; 6) '1isize': isize 181 !0..6 '1isize': isize
182 ![0; 6) '1isize': isize 182 !0..6 '1isize': isize
183 ![0; 6) '1isize': isize 183 !0..6 '1isize': isize
184 ![0; 6) '1isize': isize 184 !0..6 '1isize': isize
185 ![0; 6) '1isize': isize 185 !0..6 '1isize': isize
186 ![0; 6) '1isize': isize 186 !0..6 '1isize': isize
187 ![0; 6) '1isize': isize 187 !0..6 '1isize': isize
188 ![0; 6) '1isize': isize 188 !0..6 '1isize': isize
189 ![0; 6) '1isize': isize 189 !0..6 '1isize': isize
190 ![0; 6) '1isize': isize 190 !0..6 '1isize': isize
191 ![0; 6) '1isize': isize 191 !0..6 '1isize': isize
192 ![0; 6) '1isize': isize 192 !0..6 '1isize': isize
193 ![0; 6) '1isize': isize 193 !0..6 '1isize': isize
194 ![0; 6) '1isize': isize 194 !0..6 '1isize': isize
195 ![0; 6) '1isize': isize 195 !0..6 '1isize': isize
196 ![0; 6) '1isize': isize 196 !0..6 '1isize': isize
197 ![0; 6) '1isize': isize 197 !0..6 '1isize': isize
198 ![0; 6) '1isize': isize 198 !0..6 '1isize': isize
199 ![0; 6) '1isize': isize 199 !0..6 '1isize': isize
200 [54; 457) '{ ...!(); }': ! 200 54..457 '{ ...!(); }': !
201 [88; 109) 'spam!(...am!())': {unknown} 201 88..109 'spam!(...am!())': {unknown}
202 [115; 134) 'for _ ...!() {}': () 202 115..134 'for _ ...!() {}': ()
203 [119; 120) '_': {unknown} 203 119..120 '_': {unknown}
204 [132; 134) '{}': () 204 132..134 '{}': ()
205 [139; 149) '|| spam!()': || -> isize 205 139..149 '|| spam!()': || -> isize
206 [155; 171) 'while ...!() {}': () 206 155..171 'while ...!() {}': ()
207 [169; 171) '{}': () 207 169..171 '{}': ()
208 [176; 189) 'break spam!()': ! 208 176..189 'break spam!()': !
209 [195; 209) 'return spam!()': ! 209 195..209 'return spam!()': !
210 [215; 269) 'match ... }': isize 210 215..269 'match ... }': isize
211 [239; 240) '_': isize 211 239..240 '_': isize
212 [274; 290) 'spam!(...am!())': {unknown} 212 274..290 'spam!(...am!())': {unknown}
213 [296; 318) 'Spam {...m!() }': {unknown} 213 296..318 'Spam {...m!() }': {unknown}
214 [324; 340) 'spam!(...am!()]': {unknown} 214 324..340 'spam!(...am!()]': {unknown}
215 [365; 381) 'spam!(... usize': usize 215 365..381 'spam!(... usize': usize
216 [387; 395) '&spam!()': &isize 216 387..395 '&spam!()': &isize
217 [401; 409) '-spam!()': isize 217 401..409 '-spam!()': isize
218 [415; 431) 'spam!(...pam!()': {unknown} 218 415..431 'spam!(...pam!()': {unknown}
219 [437; 454) 'spam!(...pam!()': isize 219 437..454 'spam!(...pam!()': isize
220 "### 220 "###
221 ); 221 );
222} 222}
@@ -244,9 +244,9 @@ fn foo() {
244} 244}
245"#), 245"#),
246 @r###" 246 @r###"
247 ![0; 5) '42i32': i32 247 !0..5 '42i32': i32
248 [171; 206) '{ ...32); }': () 248 171..206 '{ ...32); }': ()
249 [181; 184) 'foo': i32 249 181..184 'foo': i32
250 "### 250 "###
251 ); 251 );
252} 252}
@@ -357,12 +357,12 @@ fn main() {
357} 357}
358"#), 358"#),
359 @r###" 359 @r###"
360 [159; 164) '{ 0 }': u64 360 159..164 '{ 0 }': u64
361 [161; 162) '0': u64 361 161..162 '0': u64
362 [175; 197) '{ ...f(); }': () 362 175..197 '{ ...f(); }': ()
363 [185; 187) '_a': u64 363 185..187 '_a': u64
364 [191; 192) 'f': fn f() -> u64 364 191..192 'f': fn f() -> u64
365 [191; 194) 'f()': u64 365 191..194 'f()': u64
366 "### 366 "###
367 ); 367 );
368} 368}
@@ -379,10 +379,10 @@ fn main() {
379} 379}
380"#), 380"#),
381 @r###" 381 @r###"
382 ![0; 6) '1usize': usize 382 !0..6 '1usize': usize
383 [11; 90) '{ ...!(); }': () 383 11..90 '{ ...!(); }': ()
384 [17; 66) 'macro_... }': {unknown} 384 17..66 'macro_... }': {unknown}
385 [75; 77) '_a': usize 385 75..77 '_a': usize
386 "### 386 "###
387 ); 387 );
388} 388}
@@ -399,9 +399,9 @@ fn main() {
399} 399}
400"#), 400"#),
401 @r###" 401 @r###"
402 ![0; 1) '0': i32 402 !0..1 '0': i32
403 [64; 88) '{ ...!(); }': () 403 64..88 '{ ...!(); }': ()
404 [74; 75) 'x': i32 404 74..75 'x': i32
405 "### 405 "###
406 ); 406 );
407} 407}
@@ -418,9 +418,9 @@ fn main() {
418} 418}
419"#), 419"#),
420 @r###" 420 @r###"
421 ![0; 2) '""': &str 421 !0..2 '""': &str
422 [64; 88) '{ ...!(); }': () 422 64..88 '{ ...!(); }': ()
423 [74; 75) 'x': &str 423 74..75 'x': &str
424 "### 424 "###
425 ); 425 );
426} 426}
@@ -437,9 +437,9 @@ fn main() {
437} 437}
438"#), 438"#),
439 @r###" 439 @r###"
440 ![0; 1) '0': i32 440 !0..1 '0': i32
441 [66; 92) '{ ...!(); }': () 441 66..92 '{ ...!(); }': ()
442 [76; 77) 'x': i32 442 76..77 'x': i32
443 "### 443 "###
444 ); 444 );
445} 445}
@@ -456,9 +456,9 @@ fn main() {
456} 456}
457"#), 457"#),
458 @r###" 458 @r###"
459 ![0; 13) '"helloworld!"': &str 459 !0..13 '"helloworld!"': &str
460 [66; 122) '{ ...")); }': () 460 66..122 '{ ...")); }': ()
461 [76; 77) 'x': &str 461 76..77 'x': &str
462 "### 462 "###
463 ); 463 );
464} 464}
@@ -591,9 +591,9 @@ fn main() {
591} 591}
592"#), 592"#),
593 @r###" 593 @r###"
594 ![0; 13) '"helloworld!"': &str 594 !0..13 '"helloworld!"': &str
595 [104; 161) '{ ...")); }': () 595 104..161 '{ ...")); }': ()
596 [114; 115) 'x': &str 596 114..115 'x': &str
597 "### 597 "###
598 ); 598 );
599} 599}
@@ -611,9 +611,9 @@ fn main() {
611} 611}
612"#), 612"#),
613 @r###" 613 @r###"
614 ![0; 5) '"bar"': &str 614 !0..5 '"bar"': &str
615 [88; 116) '{ ...o"); }': () 615 88..116 '{ ...o"); }': ()
616 [98; 99) 'x': &str 616 98..99 'x': &str
617 "### 617 "###
618 ); 618 );
619} 619}
@@ -703,12 +703,12 @@ fn main() {
703} 703}
704"#), 704"#),
705 @r###" 705 @r###"
706 [52; 111) '{ ... }; }': () 706 52..111 '{ ... }; }': ()
707 [62; 63) 'x': u32 707 62..63 'x': u32
708 [66; 108) 'match ... }': u32 708 66..108 'match ... }': u32
709 [72; 74) '()': () 709 72..74 '()': ()
710 [85; 92) 'unit!()': () 710 85..92 'unit!()': ()
711 [96; 101) '92u32': u32 711 96..101 '92u32': u32
712 "### 712 "###
713 ); 713 );
714} 714}
diff --git a/crates/ra_hir_ty/src/tests/method_resolution.rs b/crates/ra_hir_ty/src/tests/method_resolution.rs
index af3e5b12c..ab87f598a 100644
--- a/crates/ra_hir_ty/src/tests/method_resolution.rs
+++ b/crates/ra_hir_ty/src/tests/method_resolution.rs
@@ -22,14 +22,14 @@ fn test() {
22} 22}
23"#), 23"#),
24 @r###" 24 @r###"
25 [45; 49) 'self': &[T] 25 45..49 'self': &[T]
26 [56; 79) '{ ... }': T 26 56..79 '{ ... }': T
27 [66; 73) 'loop {}': ! 27 66..73 'loop {}': !
28 [71; 73) '{}': () 28 71..73 '{}': ()
29 [133; 160) '{ ...o"); }': () 29 133..160 '{ ...o"); }': ()
30 [139; 149) '<[_]>::foo': fn foo<u8>(&[u8]) -> u8 30 139..149 '<[_]>::foo': fn foo<u8>(&[u8]) -> u8
31 [139; 157) '<[_]>:..."foo")': u8 31 139..157 '<[_]>:..."foo")': u8
32 [150; 156) 'b"foo"': &[u8] 32 150..156 'b"foo"': &[u8]
33 "### 33 "###
34 ); 34 );
35} 35}
@@ -51,15 +51,15 @@ fn test() {
51} 51}
52"#), 52"#),
53 @r###" 53 @r###"
54 [49; 75) '{ ... }': A 54 49..75 '{ ... }': A
55 [59; 69) 'A { x: 0 }': A 55 59..69 'A { x: 0 }': A
56 [66; 67) '0': u32 56 66..67 '0': u32
57 [88; 122) '{ ...a.x; }': () 57 88..122 '{ ...a.x; }': ()
58 [98; 99) 'a': A 58 98..99 'a': A
59 [102; 108) 'A::new': fn new() -> A 59 102..108 'A::new': fn new() -> A
60 [102; 110) 'A::new()': A 60 102..110 'A::new()': A
61 [116; 117) 'a': A 61 116..117 'a': A
62 [116; 119) 'a.x': u32 62 116..119 'a.x': u32
63 "### 63 "###
64 ); 64 );
65} 65}
@@ -86,19 +86,19 @@ fn test() {
86} 86}
87"#), 87"#),
88 @r###" 88 @r###"
89 [47; 67) '{ ... }': A 89 47..67 '{ ... }': A
90 [57; 61) 'A::B': A 90 57..61 'A::B': A
91 [88; 108) '{ ... }': A 91 88..108 '{ ... }': A
92 [98; 102) 'A::C': A 92 98..102 'A::C': A
93 [121; 178) '{ ... c; }': () 93 121..178 '{ ... c; }': ()
94 [131; 132) 'a': A 94 131..132 'a': A
95 [135; 139) 'A::b': fn b() -> A 95 135..139 'A::b': fn b() -> A
96 [135; 141) 'A::b()': A 96 135..141 'A::b()': A
97 [147; 148) 'a': A 97 147..148 'a': A
98 [158; 159) 'c': A 98 158..159 'c': A
99 [162; 166) 'A::c': fn c() -> A 99 162..166 'A::c': fn c() -> A
100 [162; 168) 'A::c()': A 100 162..168 'A::c()': A
101 [174; 175) 'c': A 101 174..175 'c': A
102 "### 102 "###
103 ); 103 );
104} 104}
@@ -130,22 +130,22 @@ fn test() {
130} 130}
131"#), 131"#),
132 @r###" 132 @r###"
133 [56; 64) '{ A {} }': A 133 56..64 '{ A {} }': A
134 [58; 62) 'A {}': A 134 58..62 'A {}': A
135 [126; 132) '{ 99 }': u32 135 126..132 '{ 99 }': u32
136 [128; 130) '99': u32 136 128..130 '99': u32
137 [202; 210) '{ C {} }': C 137 202..210 '{ C {} }': C
138 [204; 208) 'C {}': C 138 204..208 'C {}': C
139 [241; 325) '{ ...g(); }': () 139 241..325 '{ ...g(); }': ()
140 [251; 252) 'x': A 140 251..252 'x': A
141 [255; 266) 'a::A::thing': fn thing() -> A 141 255..266 'a::A::thing': fn thing() -> A
142 [255; 268) 'a::A::thing()': A 142 255..268 'a::A::thing()': A
143 [278; 279) 'y': u32 143 278..279 'y': u32
144 [282; 293) 'b::B::thing': fn thing() -> u32 144 282..293 'b::B::thing': fn thing() -> u32
145 [282; 295) 'b::B::thing()': u32 145 282..295 'b::B::thing()': u32
146 [305; 306) 'z': C 146 305..306 'z': C
147 [309; 320) 'c::C::thing': fn thing() -> C 147 309..320 'c::C::thing': fn thing() -> C
148 [309; 322) 'c::C::thing()': C 148 309..322 'c::C::thing()': C
149 "### 149 "###
150 ); 150 );
151} 151}
@@ -169,15 +169,15 @@ fn test() {
169} 169}
170"#), 170"#),
171 @r###" 171 @r###"
172 [64; 67) 'val': T 172 64..67 'val': T
173 [82; 109) '{ ... }': Gen<T> 173 82..109 '{ ... }': Gen<T>
174 [92; 103) 'Gen { val }': Gen<T> 174 92..103 'Gen { val }': Gen<T>
175 [98; 101) 'val': T 175 98..101 'val': T
176 [123; 155) '{ ...32); }': () 176 123..155 '{ ...32); }': ()
177 [133; 134) 'a': Gen<u32> 177 133..134 'a': Gen<u32>
178 [137; 146) 'Gen::make': fn make<u32>(u32) -> Gen<u32> 178 137..146 'Gen::make': fn make<u32>(u32) -> Gen<u32>
179 [137; 152) 'Gen::make(0u32)': Gen<u32> 179 137..152 'Gen::make(0u32)': Gen<u32>
180 [147; 151) '0u32': u32 180 147..151 '0u32': u32
181 "### 181 "###
182 ); 182 );
183} 183}
@@ -201,13 +201,13 @@ fn test() {
201} 201}
202"#), 202"#),
203 @r###" 203 @r###"
204 [80; 104) '{ ... }': Gen<T> 204 80..104 '{ ... }': Gen<T>
205 [90; 98) 'loop { }': ! 205 90..98 'loop { }': !
206 [95; 98) '{ }': () 206 95..98 '{ }': ()
207 [118; 146) '{ ...e(); }': () 207 118..146 '{ ...e(); }': ()
208 [128; 129) 'a': Gen<u32> 208 128..129 'a': Gen<u32>
209 [132; 141) 'Gen::make': fn make<u32>() -> Gen<u32> 209 132..141 'Gen::make': fn make<u32>() -> Gen<u32>
210 [132; 143) 'Gen::make()': Gen<u32> 210 132..143 'Gen::make()': Gen<u32>
211 "### 211 "###
212 ); 212 );
213} 213}
@@ -255,13 +255,13 @@ fn test() {
255} 255}
256"#), 256"#),
257 @r###" 257 @r###"
258 [76; 100) '{ ... }': Gen<T> 258 76..100 '{ ... }': Gen<T>
259 [86; 94) 'loop { }': ! 259 86..94 'loop { }': !
260 [91; 94) '{ }': () 260 91..94 '{ }': ()
261 [114; 149) '{ ...e(); }': () 261 114..149 '{ ...e(); }': ()
262 [124; 125) 'a': Gen<u32> 262 124..125 'a': Gen<u32>
263 [128; 144) 'Gen::<...::make': fn make<u32>() -> Gen<u32> 263 128..144 'Gen::<...::make': fn make<u32>() -> Gen<u32>
264 [128; 146) 'Gen::<...make()': Gen<u32> 264 128..146 'Gen::<...make()': Gen<u32>
265 "### 265 "###
266 ); 266 );
267} 267}
@@ -286,13 +286,13 @@ fn test() {
286} 286}
287"#), 287"#),
288 @r###" 288 @r###"
289 [102; 126) '{ ... }': Gen<u32, T> 289 102..126 '{ ... }': Gen<u32, T>
290 [112; 120) 'loop { }': ! 290 112..120 'loop { }': !
291 [117; 120) '{ }': () 291 117..120 '{ }': ()
292 [140; 180) '{ ...e(); }': () 292 140..180 '{ ...e(); }': ()
293 [150; 151) 'a': Gen<u32, u64> 293 150..151 'a': Gen<u32, u64>
294 [154; 175) 'Gen::<...::make': fn make<u64>() -> Gen<u32, u64> 294 154..175 'Gen::<...::make': fn make<u64>() -> Gen<u32, u64>
295 [154; 177) 'Gen::<...make()': Gen<u32, u64> 295 154..177 'Gen::<...make()': Gen<u32, u64>
296 "### 296 "###
297 ); 297 );
298} 298}
@@ -340,13 +340,13 @@ fn test() {
340} 340}
341"#), 341"#),
342 @r###" 342 @r###"
343 [31; 35) 'self': &Self 343 31..35 'self': &Self
344 [110; 114) 'self': &Self 344 110..114 'self': &Self
345 [170; 228) '{ ...i128 }': () 345 170..228 '{ ...i128 }': ()
346 [176; 178) 'S1': S1 346 176..178 'S1': S1
347 [176; 187) 'S1.method()': u32 347 176..187 'S1.method()': u32
348 [203; 205) 'S2': S2 348 203..205 'S2': S2
349 [203; 214) 'S2.method()': i128 349 203..214 'S2.method()': i128
350 "### 350 "###
351 ); 351 );
352} 352}
@@ -387,14 +387,14 @@ mod bar_test {
387} 387}
388"#), 388"#),
389 @r###" 389 @r###"
390 [63; 67) 'self': &Self 390 63..67 'self': &Self
391 [169; 173) 'self': &Self 391 169..173 'self': &Self
392 [300; 337) '{ ... }': () 392 300..337 '{ ... }': ()
393 [310; 311) 'S': S 393 310..311 'S': S
394 [310; 320) 'S.method()': u32 394 310..320 'S.method()': u32
395 [416; 454) '{ ... }': () 395 416..454 '{ ... }': ()
396 [426; 427) 'S': S 396 426..427 'S': S
397 [426; 436) 'S.method()': i128 397 426..436 'S.method()': i128
398 "### 398 "###
399 ); 399 );
400} 400}
@@ -414,10 +414,10 @@ fn test() {
414} 414}
415"#), 415"#),
416 @r###" 416 @r###"
417 [33; 37) 'self': &Self 417 33..37 'self': &Self
418 [92; 111) '{ ...d(); }': () 418 92..111 '{ ...d(); }': ()
419 [98; 99) 'S': S 419 98..99 'S': S
420 [98; 108) 'S.method()': u32 420 98..108 'S.method()': u32
421 "### 421 "###
422 ); 422 );
423} 423}
@@ -443,17 +443,17 @@ fn test() {
443} 443}
444"#), 444"#),
445 @r###" 445 @r###"
446 [43; 47) 'self': &Self 446 43..47 'self': &Self
447 [82; 86) 'self': &Self 447 82..86 'self': &Self
448 [210; 361) '{ ..., i8 }': () 448 210..361 '{ ..., i8 }': ()
449 [216; 218) 'S1': S1 449 216..218 'S1': S1
450 [216; 228) 'S1.method1()': (u8, u16, u32) 450 216..228 'S1.method1()': (u8, u16, u32)
451 [250; 252) 'S1': S1 451 250..252 'S1': S1
452 [250; 262) 'S1.method2()': (u32, u16, u8) 452 250..262 'S1.method2()': (u32, u16, u8)
453 [284; 286) 'S2': S2 453 284..286 'S2': S2
454 [284; 296) 'S2.method1()': (i8, i16, {unknown}) 454 284..296 'S2.method1()': (i8, i16, {unknown})
455 [324; 326) 'S2': S2 455 324..326 'S2': S2
456 [324; 336) 'S2.method2()': ({unknown}, i16, i8) 456 324..336 'S2.method2()': ({unknown}, i16, i8)
457 "### 457 "###
458 ); 458 );
459} 459}
@@ -473,12 +473,12 @@ fn test() {
473} 473}
474"#), 474"#),
475 @r###" 475 @r###"
476 [33; 37) 'self': &Self 476 33..37 'self': &Self
477 [102; 127) '{ ...d(); }': () 477 102..127 '{ ...d(); }': ()
478 [108; 109) 'S': S<u32>(u32) -> S<u32> 478 108..109 'S': S<u32>(u32) -> S<u32>
479 [108; 115) 'S(1u32)': S<u32> 479 108..115 'S(1u32)': S<u32>
480 [108; 124) 'S(1u32...thod()': u32 480 108..124 'S(1u32...thod()': u32
481 [110; 114) '1u32': u32 481 110..114 '1u32': u32
482 "### 482 "###
483 ); 483 );
484} 484}
@@ -499,16 +499,16 @@ fn test() {
499} 499}
500"#), 500"#),
501 @r###" 501 @r###"
502 [87; 193) '{ ...t(); }': () 502 87..193 '{ ...t(); }': ()
503 [97; 99) 's1': S 503 97..99 's1': S
504 [105; 121) 'Defaul...efault': fn default<S>() -> S 504 105..121 'Defaul...efault': fn default<S>() -> S
505 [105; 123) 'Defaul...ault()': S 505 105..123 'Defaul...ault()': S
506 [133; 135) 's2': S 506 133..135 's2': S
507 [138; 148) 'S::default': fn default<S>() -> S 507 138..148 'S::default': fn default<S>() -> S
508 [138; 150) 'S::default()': S 508 138..150 'S::default()': S
509 [160; 162) 's3': S 509 160..162 's3': S
510 [165; 188) '<S as ...efault': fn default<S>() -> S 510 165..188 '<S as ...efault': fn default<S>() -> S
511 [165; 190) '<S as ...ault()': S 511 165..190 '<S as ...ault()': S
512 "### 512 "###
513 ); 513 );
514} 514}
@@ -531,16 +531,16 @@ fn test() {
531} 531}
532"#), 532"#),
533 @r###" 533 @r###"
534 [127; 211) '{ ...e(); }': () 534 127..211 '{ ...e(); }': ()
535 [137; 138) 'a': u32 535 137..138 'a': u32
536 [141; 148) 'S::make': fn make<S, u32>() -> u32 536 141..148 'S::make': fn make<S, u32>() -> u32
537 [141; 150) 'S::make()': u32 537 141..150 'S::make()': u32
538 [160; 161) 'b': u64 538 160..161 'b': u64
539 [164; 178) 'G::<u64>::make': fn make<G<u64>, u64>() -> u64 539 164..178 'G::<u64>::make': fn make<G<u64>, u64>() -> u64
540 [164; 180) 'G::<u6...make()': u64 540 164..180 'G::<u6...make()': u64
541 [190; 191) 'c': f64 541 190..191 'c': f64
542 [199; 206) 'G::make': fn make<G<f64>, f64>() -> f64 542 199..206 'G::make': fn make<G<f64>, f64>() -> f64
543 [199; 208) 'G::make()': f64 543 199..208 'G::make()': f64
544 "### 544 "###
545 ); 545 );
546} 546}
@@ -565,22 +565,22 @@ fn test() {
565} 565}
566"#), 566"#),
567 @r###" 567 @r###"
568 [135; 313) '{ ...e(); }': () 568 135..313 '{ ...e(); }': ()
569 [145; 146) 'a': (u32, i64) 569 145..146 'a': (u32, i64)
570 [149; 163) 'S::make::<i64>': fn make<S, u32, i64>() -> (u32, i64) 570 149..163 'S::make::<i64>': fn make<S, u32, i64>() -> (u32, i64)
571 [149; 165) 'S::mak...i64>()': (u32, i64) 571 149..165 'S::mak...i64>()': (u32, i64)
572 [175; 176) 'b': (u32, i64) 572 175..176 'b': (u32, i64)
573 [189; 196) 'S::make': fn make<S, u32, i64>() -> (u32, i64) 573 189..196 'S::make': fn make<S, u32, i64>() -> (u32, i64)
574 [189; 198) 'S::make()': (u32, i64) 574 189..198 'S::make()': (u32, i64)
575 [208; 209) 'c': (u32, i64) 575 208..209 'c': (u32, i64)
576 [212; 233) 'G::<u3...:<i64>': fn make<G<u32>, u32, i64>() -> (u32, i64) 576 212..233 'G::<u3...:<i64>': fn make<G<u32>, u32, i64>() -> (u32, i64)
577 [212; 235) 'G::<u3...i64>()': (u32, i64) 577 212..235 'G::<u3...i64>()': (u32, i64)
578 [245; 246) 'd': (u32, i64) 578 245..246 'd': (u32, i64)
579 [259; 273) 'G::make::<i64>': fn make<G<u32>, u32, i64>() -> (u32, i64) 579 259..273 'G::make::<i64>': fn make<G<u32>, u32, i64>() -> (u32, i64)
580 [259; 275) 'G::mak...i64>()': (u32, i64) 580 259..275 'G::mak...i64>()': (u32, i64)
581 [285; 286) 'e': (u32, i64) 581 285..286 'e': (u32, i64)
582 [301; 308) 'G::make': fn make<G<u32>, u32, i64>() -> (u32, i64) 582 301..308 'G::make': fn make<G<u32>, u32, i64>() -> (u32, i64)
583 [301; 310) 'G::make()': (u32, i64) 583 301..310 'G::make()': (u32, i64)
584 "### 584 "###
585 ); 585 );
586} 586}
@@ -599,10 +599,10 @@ fn test() {
599} 599}
600"#), 600"#),
601 @r###" 601 @r###"
602 [101; 127) '{ ...e(); }': () 602 101..127 '{ ...e(); }': ()
603 [111; 112) 'a': (S<i32>, i64) 603 111..112 'a': (S<i32>, i64)
604 [115; 122) 'S::make': fn make<S<i32>, i64>() -> (S<i32>, i64) 604 115..122 'S::make': fn make<S<i32>, i64>() -> (S<i32>, i64)
605 [115; 124) 'S::make()': (S<i32>, i64) 605 115..124 'S::make()': (S<i32>, i64)
606 "### 606 "###
607 ); 607 );
608} 608}
@@ -623,13 +623,13 @@ fn test() {
623} 623}
624"#), 624"#),
625 @r###" 625 @r###"
626 [131; 203) '{ ...e(); }': () 626 131..203 '{ ...e(); }': ()
627 [141; 142) 'a': (S<u64>, i64) 627 141..142 'a': (S<u64>, i64)
628 [158; 165) 'S::make': fn make<S<u64>, i64>() -> (S<u64>, i64) 628 158..165 'S::make': fn make<S<u64>, i64>() -> (S<u64>, i64)
629 [158; 167) 'S::make()': (S<u64>, i64) 629 158..167 'S::make()': (S<u64>, i64)
630 [177; 178) 'b': (S<u32>, i32) 630 177..178 'b': (S<u32>, i32)
631 [191; 198) 'S::make': fn make<S<u32>, i32>() -> (S<u32>, i32) 631 191..198 'S::make': fn make<S<u32>, i32>() -> (S<u32>, i32)
632 [191; 200) 'S::make()': (S<u32>, i32) 632 191..200 'S::make()': (S<u32>, i32)
633 "### 633 "###
634 ); 634 );
635} 635}
@@ -649,13 +649,13 @@ fn test() {
649} 649}
650"#), 650"#),
651 @r###" 651 @r###"
652 [107; 211) '{ ...>(); }': () 652 107..211 '{ ...>(); }': ()
653 [117; 118) 'a': (S<u64>, i64, u8) 653 117..118 'a': (S<u64>, i64, u8)
654 [121; 150) '<S as ...::<u8>': fn make<S<u64>, i64, u8>() -> (S<u64>, i64, u8) 654 121..150 '<S as ...::<u8>': fn make<S<u64>, i64, u8>() -> (S<u64>, i64, u8)
655 [121; 152) '<S as ...<u8>()': (S<u64>, i64, u8) 655 121..152 '<S as ...<u8>()': (S<u64>, i64, u8)
656 [162; 163) 'b': (S<u64>, i64, u8) 656 162..163 'b': (S<u64>, i64, u8)
657 [182; 206) 'Trait:...::<u8>': fn make<S<u64>, i64, u8>() -> (S<u64>, i64, u8) 657 182..206 'Trait:...::<u8>': fn make<S<u64>, i64, u8>() -> (S<u64>, i64, u8)
658 [182; 208) 'Trait:...<u8>()': (S<u64>, i64, u8) 658 182..208 'Trait:...<u8>()': (S<u64>, i64, u8)
659 "### 659 "###
660 ); 660 );
661} 661}
@@ -672,11 +672,11 @@ fn test<T: Trait>(t: T) {
672} 672}
673"#), 673"#),
674 @r###" 674 @r###"
675 [30; 34) 'self': &Self 675 30..34 'self': &Self
676 [64; 65) 't': T 676 64..65 't': T
677 [70; 89) '{ ...d(); }': () 677 70..89 '{ ...d(); }': ()
678 [76; 77) 't': T 678 76..77 't': T
679 [76; 86) 't.method()': u32 679 76..86 't.method()': u32
680 "### 680 "###
681 ); 681 );
682} 682}
@@ -693,11 +693,11 @@ fn test<U, T: Trait<U>>(t: T) {
693} 693}
694"#), 694"#),
695 @r###" 695 @r###"
696 [33; 37) 'self': &Self 696 33..37 'self': &Self
697 [71; 72) 't': T 697 71..72 't': T
698 [77; 96) '{ ...d(); }': () 698 77..96 '{ ...d(); }': ()
699 [83; 84) 't': T 699 83..84 't': T
700 [83; 93) 't.method()': U 700 83..93 't.method()': U
701 "### 701 "###
702 ); 702 );
703} 703}
@@ -719,18 +719,18 @@ fn test() {
719} 719}
720"#), 720"#),
721 @r###" 721 @r###"
722 [29; 33) 'self': Self 722 29..33 'self': Self
723 [111; 202) '{ ...(S); }': () 723 111..202 '{ ...(S); }': ()
724 [121; 122) 'x': u32 724 121..122 'x': u32
725 [130; 131) 'S': S 725 130..131 'S': S
726 [130; 138) 'S.into()': u32 726 130..138 'S.into()': u32
727 [148; 149) 'y': u64 727 148..149 'y': u64
728 [157; 158) 'S': S 728 157..158 'S': S
729 [157; 165) 'S.into()': u64 729 157..165 'S.into()': u64
730 [175; 176) 'z': u64 730 175..176 'z': u64
731 [179; 196) 'Into::...::into': fn into<S, u64>(S) -> u64 731 179..196 'Into::...::into': fn into<S, u64>(S) -> u64
732 [179; 199) 'Into::...nto(S)': u64 732 179..199 'Into::...nto(S)': u64
733 [197; 198) 'S': S 733 197..198 'S': S
734 "### 734 "###
735 ); 735 );
736} 736}
diff --git a/crates/ra_hir_ty/src/tests/patterns.rs b/crates/ra_hir_ty/src/tests/patterns.rs
index 6ea51d5d3..af291092d 100644
--- a/crates/ra_hir_ty/src/tests/patterns.rs
+++ b/crates/ra_hir_ty/src/tests/patterns.rs
@@ -30,54 +30,54 @@ fn test(x: &i32) {
30} 30}
31"#), 31"#),
32 @r###" 32 @r###"
33 [9; 10) 'x': &i32 33 9..10 'x': &i32
34 [18; 369) '{ ...o_x; }': () 34 18..369 '{ ...o_x; }': ()
35 [28; 29) 'y': &i32 35 28..29 'y': &i32
36 [32; 33) 'x': &i32 36 32..33 'x': &i32
37 [43; 45) '&z': &i32 37 43..45 '&z': &i32
38 [44; 45) 'z': i32 38 44..45 'z': i32
39 [48; 49) 'x': &i32 39 48..49 'x': &i32
40 [59; 60) 'a': i32 40 59..60 'a': i32
41 [63; 64) 'z': i32 41 63..64 'z': i32
42 [74; 80) '(c, d)': (i32, &str) 42 74..80 '(c, d)': (i32, &str)
43 [75; 76) 'c': i32 43 75..76 'c': i32
44 [78; 79) 'd': &str 44 78..79 'd': &str
45 [83; 95) '(1, "hello")': (i32, &str) 45 83..95 '(1, "hello")': (i32, &str)
46 [84; 85) '1': i32 46 84..85 '1': i32
47 [87; 94) '"hello"': &str 47 87..94 '"hello"': &str
48 [102; 152) 'for (e... }': () 48 102..152 'for (e... }': ()
49 [106; 112) '(e, f)': ({unknown}, {unknown}) 49 106..112 '(e, f)': ({unknown}, {unknown})
50 [107; 108) 'e': {unknown} 50 107..108 'e': {unknown}
51 [110; 111) 'f': {unknown} 51 110..111 'f': {unknown}
52 [116; 125) 'some_iter': {unknown} 52 116..125 'some_iter': {unknown}
53 [126; 152) '{ ... }': () 53 126..152 '{ ... }': ()
54 [140; 141) 'g': {unknown} 54 140..141 'g': {unknown}
55 [144; 145) 'e': {unknown} 55 144..145 'e': {unknown}
56 [158; 205) 'if let... }': () 56 158..205 'if let... }': ()
57 [165; 170) '[val]': [{unknown}] 57 165..170 '[val]': [{unknown}]
58 [166; 169) 'val': {unknown} 58 166..169 'val': {unknown}
59 [173; 176) 'opt': [{unknown}] 59 173..176 'opt': [{unknown}]
60 [177; 205) '{ ... }': () 60 177..205 '{ ... }': ()
61 [191; 192) 'h': {unknown} 61 191..192 'h': {unknown}
62 [195; 198) 'val': {unknown} 62 195..198 'val': {unknown}
63 [215; 221) 'lambda': |u64, u64, i32| -> i32 63 215..221 'lambda': |u64, u64, i32| -> i32
64 [224; 256) '|a: u6...b; c }': |u64, u64, i32| -> i32 64 224..256 '|a: u6...b; c }': |u64, u64, i32| -> i32
65 [225; 226) 'a': u64 65 225..226 'a': u64
66 [233; 234) 'b': u64 66 233..234 'b': u64
67 [236; 237) 'c': i32 67 236..237 'c': i32
68 [244; 256) '{ a + b; c }': i32 68 244..256 '{ a + b; c }': i32
69 [246; 247) 'a': u64 69 246..247 'a': u64
70 [246; 251) 'a + b': u64 70 246..251 'a + b': u64
71 [250; 251) 'b': u64 71 250..251 'b': u64
72 [253; 254) 'c': i32 72 253..254 'c': i32
73 [267; 279) 'ref ref_to_x': &&i32 73 267..279 'ref ref_to_x': &&i32
74 [282; 283) 'x': &i32 74 282..283 'x': &i32
75 [293; 302) 'mut mut_x': &i32 75 293..302 'mut mut_x': &i32
76 [305; 306) 'x': &i32 76 305..306 'x': &i32
77 [316; 336) 'ref mu...f_to_x': &mut &i32 77 316..336 'ref mu...f_to_x': &mut &i32
78 [339; 340) 'x': &i32 78 339..340 'x': &i32
79 [350; 351) 'k': &mut &i32 79 350..351 'k': &mut &i32
80 [354; 366) 'mut_ref_to_x': &mut &i32 80 354..366 'mut_ref_to_x': &mut &i32
81 "### 81 "###
82 ); 82 );
83} 83}
@@ -97,47 +97,47 @@ fn test(x: &i32) {
97} 97}
98"#, true), 98"#, true),
99 @r###" 99 @r###"
100 [18; 29) '{ loop {} }': T 100 18..29 '{ loop {} }': T
101 [20; 27) 'loop {}': ! 101 20..27 'loop {}': !
102 [25; 27) '{}': () 102 25..27 '{}': ()
103 [38; 39) 'x': &i32 103 38..39 'x': &i32
104 [47; 209) '{ ...) {} }': () 104 47..209 '{ ...) {} }': ()
105 [53; 76) 'if let...y() {}': () 105 53..76 'if let...y() {}': ()
106 [60; 65) '"foo"': &str 106 60..65 '"foo"': &str
107 [60; 65) '"foo"': &str 107 60..65 '"foo"': &str
108 [68; 71) 'any': fn any<&str>() -> &str 108 68..71 'any': fn any<&str>() -> &str
109 [68; 73) 'any()': &str 109 68..73 'any()': &str
110 [74; 76) '{}': () 110 74..76 '{}': ()
111 [81; 100) 'if let...y() {}': () 111 81..100 'if let...y() {}': ()
112 [88; 89) '1': i32 112 88..89 '1': i32
113 [88; 89) '1': i32 113 88..89 '1': i32
114 [92; 95) 'any': fn any<i32>() -> i32 114 92..95 'any': fn any<i32>() -> i32
115 [92; 97) 'any()': i32 115 92..97 'any()': i32
116 [98; 100) '{}': () 116 98..100 '{}': ()
117 [105; 127) 'if let...y() {}': () 117 105..127 'if let...y() {}': ()
118 [112; 116) '1u32': u32 118 112..116 '1u32': u32
119 [112; 116) '1u32': u32 119 112..116 '1u32': u32
120 [119; 122) 'any': fn any<u32>() -> u32 120 119..122 'any': fn any<u32>() -> u32
121 [119; 124) 'any()': u32 121 119..124 'any()': u32
122 [125; 127) '{}': () 122 125..127 '{}': ()
123 [132; 154) 'if let...y() {}': () 123 132..154 'if let...y() {}': ()
124 [139; 143) '1f32': f32 124 139..143 '1f32': f32
125 [139; 143) '1f32': f32 125 139..143 '1f32': f32
126 [146; 149) 'any': fn any<f32>() -> f32 126 146..149 'any': fn any<f32>() -> f32
127 [146; 151) 'any()': f32 127 146..151 'any()': f32
128 [152; 154) '{}': () 128 152..154 '{}': ()
129 [159; 180) 'if let...y() {}': () 129 159..180 'if let...y() {}': ()
130 [166; 169) '1.0': f64 130 166..169 '1.0': f64
131 [166; 169) '1.0': f64 131 166..169 '1.0': f64
132 [172; 175) 'any': fn any<f64>() -> f64 132 172..175 'any': fn any<f64>() -> f64
133 [172; 177) 'any()': f64 133 172..177 'any()': f64
134 [178; 180) '{}': () 134 178..180 '{}': ()
135 [185; 207) 'if let...y() {}': () 135 185..207 'if let...y() {}': ()
136 [192; 196) 'true': bool 136 192..196 'true': bool
137 [192; 196) 'true': bool 137 192..196 'true': bool
138 [199; 202) 'any': fn any<bool>() -> bool 138 199..202 'any': fn any<bool>() -> bool
139 [199; 204) 'any()': bool 139 199..204 'any()': bool
140 [205; 207) '{}': () 140 205..207 '{}': ()
141 "### 141 "###
142 ); 142 );
143} 143}
@@ -152,16 +152,16 @@ fn test(x: &i32) {
152} 152}
153"#, true), 153"#, true),
154 @r###" 154 @r###"
155 [9; 10) 'x': &i32 155 9..10 'x': &i32
156 [18; 76) '{ ...2 {} }': () 156 18..76 '{ ...2 {} }': ()
157 [24; 46) 'if let...u32 {}': () 157 24..46 'if let...u32 {}': ()
158 [31; 36) '1..76': u32 158 31..36 '1..76': u32
159 [39; 43) '2u32': u32 159 39..43 '2u32': u32
160 [44; 46) '{}': () 160 44..46 '{}': ()
161 [51; 74) 'if let...u32 {}': () 161 51..74 'if let...u32 {}': ()
162 [58; 64) '1..=76': u32 162 58..64 '1..=76': u32
163 [67; 71) '2u32': u32 163 67..71 '2u32': u32
164 [72; 74) '{}': () 164 72..74 '{}': ()
165 "### 165 "###
166 ); 166 );
167} 167}
@@ -178,19 +178,19 @@ fn test() {
178} 178}
179"#), 179"#),
180 @r###" 180 @r###"
181 [28; 79) '{ ...(1); }': () 181 28..79 '{ ...(1); }': ()
182 [38; 42) 'A(n)': A<i32> 182 38..42 'A(n)': A<i32>
183 [40; 41) 'n': &i32 183 40..41 'n': &i32
184 [45; 50) '&A(1)': &A<i32> 184 45..50 '&A(1)': &A<i32>
185 [46; 47) 'A': A<i32>(i32) -> A<i32> 185 46..47 'A': A<i32>(i32) -> A<i32>
186 [46; 50) 'A(1)': A<i32> 186 46..50 'A(1)': A<i32>
187 [48; 49) '1': i32 187 48..49 '1': i32
188 [60; 64) 'A(n)': A<i32> 188 60..64 'A(n)': A<i32>
189 [62; 63) 'n': &mut i32 189 62..63 'n': &mut i32
190 [67; 76) '&mut A(1)': &mut A<i32> 190 67..76 '&mut A(1)': &mut A<i32>
191 [72; 73) 'A': A<i32>(i32) -> A<i32> 191 72..73 'A': A<i32>(i32) -> A<i32>
192 [72; 76) 'A(1)': A<i32> 192 72..76 'A(1)': A<i32>
193 [74; 75) '1': i32 193 74..75 '1': i32
194 "### 194 "###
195 ); 195 );
196} 196}
@@ -206,18 +206,18 @@ fn test() {
206} 206}
207"#), 207"#),
208 @r###" 208 @r###"
209 [11; 57) '{ ...= v; }': () 209 11..57 '{ ...= v; }': ()
210 [21; 22) 'v': &(i32, &i32) 210 21..22 'v': &(i32, &i32)
211 [25; 33) '&(1, &2)': &(i32, &i32) 211 25..33 '&(1, &2)': &(i32, &i32)
212 [26; 33) '(1, &2)': (i32, &i32) 212 26..33 '(1, &2)': (i32, &i32)
213 [27; 28) '1': i32 213 27..28 '1': i32
214 [30; 32) '&2': &i32 214 30..32 '&2': &i32
215 [31; 32) '2': i32 215 31..32 '2': i32
216 [43; 50) '(_, &w)': (i32, &i32) 216 43..50 '(_, &w)': (i32, &i32)
217 [44; 45) '_': i32 217 44..45 '_': i32
218 [47; 49) '&w': &i32 218 47..49 '&w': &i32
219 [48; 49) 'w': i32 219 48..49 'w': i32
220 [53; 54) 'v': &(i32, &i32) 220 53..54 'v': &(i32, &i32)
221 "### 221 "###
222 ); 222 );
223} 223}
@@ -242,30 +242,30 @@ fn test() {
242} 242}
243"#), 243"#),
244 @r###" 244 @r###"
245 [11; 210) '{ ... } }': () 245 11..210 '{ ... } }': ()
246 [21; 26) 'slice': &[f64] 246 21..26 'slice': &[f64]
247 [37; 43) '&[0.0]': &[f64; _] 247 37..43 '&[0.0]': &[f64; _]
248 [38; 43) '[0.0]': [f64; _] 248 38..43 '[0.0]': [f64; _]
249 [39; 42) '0.0': f64 249 39..42 '0.0': f64
250 [49; 208) 'match ... }': () 250 49..208 'match ... }': ()
251 [55; 60) 'slice': &[f64] 251 55..60 'slice': &[f64]
252 [71; 74) '&[]': &[f64] 252 71..74 '&[]': &[f64]
253 [72; 74) '[]': [f64] 253 72..74 '[]': [f64]
254 [78; 80) '{}': () 254 78..80 '{}': ()
255 [90; 94) '&[a]': &[f64] 255 90..94 '&[a]': &[f64]
256 [91; 94) '[a]': [f64] 256 91..94 '[a]': [f64]
257 [92; 93) 'a': f64 257 92..93 'a': f64
258 [98; 124) '{ ... }': () 258 98..124 '{ ... }': ()
259 [112; 113) 'a': f64 259 112..113 'a': f64
260 [134; 141) '&[b, c]': &[f64] 260 134..141 '&[b, c]': &[f64]
261 [135; 141) '[b, c]': [f64] 261 135..141 '[b, c]': [f64]
262 [136; 137) 'b': f64 262 136..137 'b': f64
263 [139; 140) 'c': f64 263 139..140 'c': f64
264 [145; 186) '{ ... }': () 264 145..186 '{ ... }': ()
265 [159; 160) 'b': f64 265 159..160 'b': f64
266 [174; 175) 'c': f64 266 174..175 'c': f64
267 [195; 196) '_': &[f64] 267 195..196 '_': &[f64]
268 [200; 202) '{}': () 268 200..202 '{}': ()
269 "### 269 "###
270 ); 270 );
271} 271}
@@ -288,25 +288,25 @@ fn test() {
288} 288}
289"#), 289"#),
290 @r###" 290 @r###"
291 [11; 180) '{ ... } }': () 291 11..180 '{ ... } }': ()
292 [21; 24) 'arr': [f64; _] 292 21..24 'arr': [f64; _]
293 [37; 47) '[0.0, 1.0]': [f64; _] 293 37..47 '[0.0, 1.0]': [f64; _]
294 [38; 41) '0.0': f64 294 38..41 '0.0': f64
295 [43; 46) '1.0': f64 295 43..46 '1.0': f64
296 [53; 178) 'match ... }': () 296 53..178 'match ... }': ()
297 [59; 62) 'arr': [f64; _] 297 59..62 'arr': [f64; _]
298 [73; 81) '[1.0, a]': [f64; _] 298 73..81 '[1.0, a]': [f64; _]
299 [74; 77) '1.0': f64 299 74..77 '1.0': f64
300 [74; 77) '1.0': f64 300 74..77 '1.0': f64
301 [79; 80) 'a': f64 301 79..80 'a': f64
302 [85; 111) '{ ... }': () 302 85..111 '{ ... }': ()
303 [99; 100) 'a': f64 303 99..100 'a': f64
304 [121; 127) '[b, c]': [f64; _] 304 121..127 '[b, c]': [f64; _]
305 [122; 123) 'b': f64 305 122..123 'b': f64
306 [125; 126) 'c': f64 306 125..126 'c': f64
307 [131; 172) '{ ... }': () 307 131..172 '{ ... }': ()
308 [145; 146) 'b': f64 308 145..146 'b': f64
309 [160; 161) 'c': f64 309 160..161 'c': f64
310 "### 310 "###
311 ); 311 );
312} 312}
@@ -339,31 +339,31 @@ fn test() {
339} 339}
340"#), 340"#),
341 @r###" 341 @r###"
342 [68; 289) '{ ... d; }': () 342 68..289 '{ ... d; }': ()
343 [78; 79) 'e': E 343 78..79 'e': E
344 [82; 95) 'E::A { x: 3 }': E 344 82..95 'E::A { x: 3 }': E
345 [92; 93) '3': usize 345 92..93 '3': usize
346 [106; 113) 'S(y, z)': S 346 106..113 'S(y, z)': S
347 [108; 109) 'y': u32 347 108..109 'y': u32
348 [111; 112) 'z': E 348 111..112 'z': E
349 [116; 119) 'foo': S 349 116..119 'foo': S
350 [129; 148) 'E::A {..._var }': E 350 129..148 'E::A {..._var }': E
351 [139; 146) 'new_var': usize 351 139..146 'new_var': usize
352 [151; 152) 'e': E 352 151..152 'e': E
353 [159; 245) 'match ... }': usize 353 159..245 'match ... }': usize
354 [165; 166) 'e': E 354 165..166 'e': E
355 [177; 187) 'E::A { x }': E 355 177..187 'E::A { x }': E
356 [184; 185) 'x': usize 356 184..185 'x': usize
357 [191; 192) 'x': usize 357 191..192 'x': usize
358 [202; 206) 'E::B': E 358 202..206 'E::B': E
359 [210; 213) 'foo': bool 359 210..213 'foo': bool
360 [217; 218) '1': usize 360 217..218 '1': usize
361 [228; 232) 'E::B': E 361 228..232 'E::B': E
362 [236; 238) '10': usize 362 236..238 '10': usize
363 [256; 275) 'ref d ...{ .. }': &E 363 256..275 'ref d ...{ .. }': &E
364 [264; 275) 'E::A { .. }': E 364 264..275 'E::A { .. }': E
365 [278; 279) 'e': E 365 278..279 'e': E
366 [285; 286) 'd': &E 366 285..286 'd': &E
367 "### 367 "###
368 ); 368 );
369} 369}
@@ -391,23 +391,23 @@ fn test(a1: A<u32>, o: Option<u64>) {
391} 391}
392"#), 392"#),
393 @r###" 393 @r###"
394 [79; 81) 'a1': A<u32> 394 79..81 'a1': A<u32>
395 [91; 92) 'o': Option<u64> 395 91..92 'o': Option<u64>
396 [107; 244) '{ ... }; }': () 396 107..244 '{ ... }; }': ()
397 [117; 128) 'A { x: x2 }': A<u32> 397 117..128 'A { x: x2 }': A<u32>
398 [124; 126) 'x2': u32 398 124..126 'x2': u32
399 [131; 133) 'a1': A<u32> 399 131..133 'a1': A<u32>
400 [143; 161) 'A::<i6...: x3 }': A<i64> 400 143..161 'A::<i6...: x3 }': A<i64>
401 [157; 159) 'x3': i64 401 157..159 'x3': i64
402 [164; 174) 'A { x: 1 }': A<i64> 402 164..174 'A { x: 1 }': A<i64>
403 [171; 172) '1': i64 403 171..172 '1': i64
404 [180; 241) 'match ... }': u64 404 180..241 'match ... }': u64
405 [186; 187) 'o': Option<u64> 405 186..187 'o': Option<u64>
406 [198; 213) 'Option::Some(t)': Option<u64> 406 198..213 'Option::Some(t)': Option<u64>
407 [211; 212) 't': u64 407 211..212 't': u64
408 [217; 218) 't': u64 408 217..218 't': u64
409 [228; 229) '_': Option<u64> 409 228..229 '_': Option<u64>
410 [233; 234) '1': u64 410 233..234 '1': u64
411 "### 411 "###
412 ); 412 );
413} 413}
@@ -431,27 +431,27 @@ fn test() {
431} 431}
432"#, true), 432"#, true),
433 @r###" 433 @r###"
434 [74; 75) '1': usize 434 74..75 '1': usize
435 [88; 310) '{ ...atch }': () 435 88..310 '{ ...atch }': ()
436 [98; 99) 'a': Option<u32> 436 98..99 'a': Option<u32>
437 [115; 119) 'None': Option<u32> 437 115..119 'None': Option<u32>
438 [129; 130) 'b': Option<i64> 438 129..130 'b': Option<i64>
439 [146; 183) 'match ... }': Option<i64> 439 146..183 'match ... }': Option<i64>
440 [152; 153) 'a': Option<u32> 440 152..153 'a': Option<u32>
441 [164; 168) 'None': Option<u32> 441 164..168 'None': Option<u32>
442 [172; 176) 'None': Option<i64> 442 172..176 'None': Option<i64>
443 [193; 194) '_': () 443 193..194 '_': ()
444 [201; 224) 'match ... Foo }': Foo 444 201..224 'match ... Foo }': Foo
445 [207; 209) '()': () 445 207..209 '()': ()
446 [212; 215) 'Foo': Foo 446 212..215 'Foo': Foo
447 [219; 222) 'Foo': Foo 447 219..222 'Foo': Foo
448 [255; 256) '_': () 448 255..256 '_': ()
449 [263; 286) 'match ... Bar }': usize 449 263..286 'match ... Bar }': usize
450 [269; 271) '()': () 450 269..271 '()': ()
451 [274; 277) 'Bar': usize 451 274..277 'Bar': usize
452 [281; 284) 'Bar': usize 452 281..284 'Bar': usize
453 [201; 224): expected (), got Foo 453 201..224: expected (), got Foo
454 [263; 286): expected (), got usize 454 263..286: expected (), got usize
455 "### 455 "###
456 ); 456 );
457} 457}
@@ -469,15 +469,15 @@ fn main() {
469 } 469 }
470} 470}
471 "#), @" 471 "#), @"
472 [28; 32) 'self': &S 472 28..32 'self': &S
473 [42; 51) '{ false }': bool 473 42..51 '{ false }': bool
474 [44; 49) 'false': bool 474 44..49 'false': bool
475 [65; 116) '{ ... } }': () 475 65..116 '{ ... } }': ()
476 [71; 114) 'match ... }': () 476 71..114 'match ... }': ()
477 [77; 78) 'S': S 477 77..78 'S': S
478 [89; 90) 's': S 478 89..90 's': S
479 [94; 95) 's': S 479 94..95 's': S
480 [94; 101) 's.foo()': bool 480 94..101 's.foo()': bool
481 [105; 107) '()': () 481 105..107 '()': ()
482 ") 482 ")
483} 483}
diff --git a/crates/ra_hir_ty/src/tests/regression.rs b/crates/ra_hir_ty/src/tests/regression.rs
index 61a6801fc..8a1292c7a 100644
--- a/crates/ra_hir_ty/src/tests/regression.rs
+++ b/crates/ra_hir_ty/src/tests/regression.rs
@@ -14,11 +14,11 @@ fn test() {
14} 14}
15"#), 15"#),
16 @r###" 16 @r###"
17 [11; 37) '{ l... {}; }': () 17 11..37 '{ l... {}; }': ()
18 [20; 21) 'x': () 18 20..21 'x': ()
19 [24; 34) 'if true {}': () 19 24..34 'if true {}': ()
20 [27; 31) 'true': bool 20 27..31 'true': bool
21 [32; 34) '{}': () 21 32..34 '{}': ()
22 "### 22 "###
23 ); 23 );
24} 24}
@@ -34,10 +34,10 @@ fn test(x: X) {
34} 34}
35"#), 35"#),
36 @r###" 36 @r###"
37 [20; 21) 'x': X 37 20..21 'x': X
38 [26; 47) '{ ...eld; }': () 38 26..47 '{ ...eld; }': ()
39 [32; 33) 'x': X 39 32..33 'x': X
40 [32; 44) 'x.some_field': {unknown} 40 32..44 'x.some_field': {unknown}
41 "### 41 "###
42 ); 42 );
43} 43}
@@ -55,14 +55,14 @@ fn test() {
55} 55}
56"#), 56"#),
57 @r###" 57 @r###"
58 [11; 89) '{ ... } }': () 58 11..89 '{ ... } }': ()
59 [17; 21) 'X {}': {unknown} 59 17..21 'X {}': {unknown}
60 [27; 87) 'match ... }': () 60 27..87 'match ... }': ()
61 [33; 34) 'x': {unknown} 61 33..34 'x': {unknown}
62 [45; 52) 'A::B {}': {unknown} 62 45..52 'A::B {}': {unknown}
63 [56; 58) '()': () 63 56..58 '()': ()
64 [68; 74) 'A::Y()': {unknown} 64 68..74 'A::Y()': {unknown}
65 [78; 80) '()': () 65 78..80 '()': ()
66 "### 66 "###
67 ); 67 );
68} 68}
@@ -77,12 +77,12 @@ fn quux() {
77} 77}
78"#), 78"#),
79 @r###" 79 @r###"
80 [11; 41) '{ ...+ y; }': () 80 11..41 '{ ...+ y; }': ()
81 [21; 22) 'y': i32 81 21..22 'y': i32
82 [25; 27) '92': i32 82 25..27 '92': i32
83 [33; 34) '1': i32 83 33..34 '1': i32
84 [33; 38) '1 + y': i32 84 33..38 '1 + y': i32
85 [37; 38) 'y': i32 85 37..38 'y': i32
86 "### 86 "###
87 ); 87 );
88} 88}
@@ -99,13 +99,13 @@ fn test() {
99} 99}
100"#), 100"#),
101 @r###" 101 @r###"
102 [11; 48) '{ ...&y]; }': () 102 11..48 '{ ...&y]; }': ()
103 [21; 22) 'y': &{unknown} 103 21..22 'y': &{unknown}
104 [25; 32) 'unknown': &{unknown} 104 25..32 'unknown': &{unknown}
105 [38; 45) '[y, &y]': [&&{unknown}; _] 105 38..45 '[y, &y]': [&&{unknown}; _]
106 [39; 40) 'y': &{unknown} 106 39..40 'y': &{unknown}
107 [42; 44) '&y': &&{unknown} 107 42..44 '&y': &&{unknown}
108 [43; 44) 'y': &{unknown} 108 43..44 'y': &{unknown}
109 "### 109 "###
110 ); 110 );
111} 111}
@@ -123,20 +123,20 @@ fn test() {
123} 123}
124"#), 124"#),
125 @r###" 125 @r###"
126 [11; 80) '{ ...x)]; }': () 126 11..80 '{ ...x)]; }': ()
127 [21; 22) 'x': &&{unknown} 127 21..22 'x': &&{unknown}
128 [25; 32) 'unknown': &&{unknown} 128 25..32 'unknown': &&{unknown}
129 [42; 43) 'y': &&{unknown} 129 42..43 'y': &&{unknown}
130 [46; 53) 'unknown': &&{unknown} 130 46..53 'unknown': &&{unknown}
131 [59; 77) '[(x, y..., &x)]': [(&&&{unknown}, &&&{unknown}); _] 131 59..77 '[(x, y..., &x)]': [(&&&{unknown}, &&&{unknown}); _]
132 [60; 66) '(x, y)': (&&&{unknown}, &&&{unknown}) 132 60..66 '(x, y)': (&&&{unknown}, &&&{unknown})
133 [61; 62) 'x': &&{unknown} 133 61..62 'x': &&{unknown}
134 [64; 65) 'y': &&{unknown} 134 64..65 'y': &&{unknown}
135 [68; 76) '(&y, &x)': (&&&{unknown}, &&&{unknown}) 135 68..76 '(&y, &x)': (&&&{unknown}, &&&{unknown})
136 [69; 71) '&y': &&&{unknown} 136 69..71 '&y': &&&{unknown}
137 [70; 71) 'y': &&{unknown} 137 70..71 'y': &&{unknown}
138 [73; 75) '&x': &&&{unknown} 138 73..75 '&x': &&&{unknown}
139 [74; 75) 'x': &&{unknown} 139 74..75 'x': &&{unknown}
140 "### 140 "###
141 ); 141 );
142} 142}
@@ -158,12 +158,12 @@ fn write() {
158} 158}
159"#), 159"#),
160 @r###" 160 @r###"
161 [54; 139) '{ ... } }': () 161 54..139 '{ ... } }': ()
162 [60; 137) 'match ... }': () 162 60..137 'match ... }': ()
163 [66; 83) 'someth...nknown': Maybe<{unknown}> 163 66..83 'someth...nknown': Maybe<{unknown}>
164 [94; 124) 'Maybe:...thing)': Maybe<{unknown}> 164 94..124 'Maybe:...thing)': Maybe<{unknown}>
165 [106; 123) 'ref mu...ething': &mut {unknown} 165 106..123 'ref mu...ething': &mut {unknown}
166 [128; 130) '()': () 166 128..130 '()': ()
167 "### 167 "###
168 ); 168 );
169} 169}
@@ -179,13 +179,13 @@ fn test_line_buffer() {
179} 179}
180"#), 180"#),
181 @r###" 181 @r###"
182 [23; 53) '{ ...n']; }': () 182 23..53 '{ ...n']; }': ()
183 [29; 50) '&[0, b...b'\n']': &[u8; _] 183 29..50 '&[0, b...b'\n']': &[u8; _]
184 [30; 50) '[0, b'...b'\n']': [u8; _] 184 30..50 '[0, b'...b'\n']': [u8; _]
185 [31; 32) '0': u8 185 31..32 '0': u8
186 [34; 39) 'b'\n'': u8 186 34..39 'b'\n'': u8
187 [41; 42) '1': u8 187 41..42 '1': u8
188 [44; 49) 'b'\n'': u8 188 44..49 'b'\n'': u8
189 "### 189 "###
190 ); 190 );
191} 191}
@@ -202,14 +202,14 @@ pub fn compute() {
202} 202}
203"#), 203"#),
204 @r###" 204 @r###"
205 [18; 108) '{ ... } }': () 205 18..108 '{ ... } }': ()
206 [24; 106) 'match ... }': () 206 24..106 'match ... }': ()
207 [30; 37) 'nope!()': {unknown} 207 30..37 'nope!()': {unknown}
208 [48; 94) 'SizeSk...tail }': {unknown} 208 48..94 'SizeSk...tail }': {unknown}
209 [82; 86) 'true': bool 209 82..86 'true': bool
210 [82; 86) 'true': bool 210 82..86 'true': bool
211 [88; 92) 'tail': {unknown} 211 88..92 'tail': {unknown}
212 [98; 100) '{}': () 212 98..100 '{}': ()
213 "### 213 "###
214 ); 214 );
215} 215}
@@ -226,14 +226,14 @@ pub fn primitive_type() {
226} 226}
227"#), 227"#),
228 @r###" 228 @r###"
229 [25; 106) '{ ... } }': () 229 25..106 '{ ... } }': ()
230 [31; 104) 'match ... }': () 230 31..104 'match ... }': ()
231 [37; 42) '*self': {unknown} 231 37..42 '*self': {unknown}
232 [38; 42) 'self': {unknown} 232 38..42 'self': {unknown}
233 [53; 91) 'Borrow...), ..}': {unknown} 233 53..91 'Borrow...), ..}': {unknown}
234 [74; 86) 'Primitive(p)': {unknown} 234 74..86 'Primitive(p)': {unknown}
235 [84; 85) 'p': {unknown} 235 84..85 'p': {unknown}
236 [95; 97) '{}': () 236 95..97 '{}': ()
237 "### 237 "###
238 ); 238 );
239} 239}
@@ -260,29 +260,29 @@ fn extra_compiler_flags() {
260} 260}
261"#), 261"#),
262 @r###" 262 @r###"
263 [27; 323) '{ ... } }': () 263 27..323 '{ ... } }': ()
264 [33; 321) 'for co... }': () 264 33..321 'for co... }': ()
265 [37; 44) 'content': &{unknown} 265 37..44 'content': &{unknown}
266 [48; 61) 'doesnt_matter': {unknown} 266 48..61 'doesnt_matter': {unknown}
267 [62; 321) '{ ... }': () 267 62..321 '{ ... }': ()
268 [76; 80) 'name': &&{unknown} 268 76..80 'name': &&{unknown}
269 [83; 167) 'if doe... }': &&{unknown} 269 83..167 'if doe... }': &&{unknown}
270 [86; 99) 'doesnt_matter': bool 270 86..99 'doesnt_matter': bool
271 [100; 129) '{ ... }': &&{unknown} 271 100..129 '{ ... }': &&{unknown}
272 [114; 119) 'first': &&{unknown} 272 114..119 'first': &&{unknown}
273 [135; 167) '{ ... }': &&{unknown} 273 135..167 '{ ... }': &&{unknown}
274 [149; 157) '&content': &&{unknown} 274 149..157 '&content': &&{unknown}
275 [150; 157) 'content': &{unknown} 275 150..157 'content': &{unknown}
276 [182; 189) 'content': &{unknown} 276 182..189 'content': &{unknown}
277 [192; 314) 'if ICE... }': &{unknown} 277 192..314 'if ICE... }': &{unknown}
278 [195; 232) 'ICE_RE..._VALUE': {unknown} 278 195..232 'ICE_RE..._VALUE': {unknown}
279 [195; 248) 'ICE_RE...&name)': bool 279 195..248 'ICE_RE...&name)': bool
280 [242; 247) '&name': &&&{unknown} 280 242..247 '&name': &&&{unknown}
281 [243; 247) 'name': &&{unknown} 281 243..247 'name': &&{unknown}
282 [249; 277) '{ ... }': &&{unknown} 282 249..277 '{ ... }': &&{unknown}
283 [263; 267) 'name': &&{unknown} 283 263..267 'name': &&{unknown}
284 [283; 314) '{ ... }': &{unknown} 284 283..314 '{ ... }': &{unknown}
285 [297; 304) 'content': &{unknown} 285 297..304 'content': &{unknown}
286 "### 286 "###
287 ); 287 );
288} 288}
@@ -303,11 +303,11 @@ fn test<R>(query_response: Canonical<QueryResponse<R>>) {
303} 303}
304"#), 304"#),
305 @r###" 305 @r###"
306 [92; 106) 'query_response': Canonical<QueryResponse<R>> 306 92..106 'query_response': Canonical<QueryResponse<R>>
307 [137; 167) '{ ...lue; }': () 307 137..167 '{ ...lue; }': ()
308 [143; 164) '&query....value': &QueryResponse<R> 308 143..164 '&query....value': &QueryResponse<R>
309 [144; 158) 'query_response': Canonical<QueryResponse<R>> 309 144..158 'query_response': Canonical<QueryResponse<R>>
310 [144; 164) 'query_....value': QueryResponse<R> 310 144..164 'query_....value': QueryResponse<R>
311 "### 311 "###
312 ); 312 );
313} 313}
@@ -322,9 +322,9 @@ fn test() {
322} 322}
323"#), 323"#),
324 @r###" 324 @r###"
325 ![0; 4) '0u32': u32 325 !0..4 '0u32': u32
326 [45; 70) '{ ...()); }': () 326 45..70 '{ ...()); }': ()
327 [55; 56) 'a': u32 327 55..56 'a': u32
328 "### 328 "###
329 ); 329 );
330} 330}
@@ -345,10 +345,10 @@ pub fn main_loop() {
345} 345}
346"#), 346"#),
347 @r###" 347 @r###"
348 [144; 146) '{}': () 348 144..146 '{}': ()
349 [169; 198) '{ ...t(); }': () 349 169..198 '{ ...t(); }': ()
350 [175; 193) 'FxHash...efault': fn default<{unknown}, FxHasher>() -> HashSet<{unknown}, FxHasher> 350 175..193 'FxHash...efault': fn default<{unknown}, FxHasher>() -> HashSet<{unknown}, FxHasher>
351 [175; 195) 'FxHash...ault()': HashSet<{unknown}, FxHasher> 351 175..195 'FxHash...ault()': HashSet<{unknown}, FxHasher>
352 "### 352 "###
353 ); 353 );
354} 354}
@@ -375,13 +375,13 @@ fn issue_2669() {
375 }"# 375 }"#
376 ), 376 ),
377 @r###" 377 @r###"
378 [147; 262) '{ ... }': () 378 147..262 '{ ... }': ()
379 [161; 164) 'end': fn end<{unknown}>() 379 161..164 'end': fn end<{unknown}>()
380 [161; 166) 'end()': () 380 161..166 'end()': ()
381 [199; 252) '{ ... }': () 381 199..252 '{ ... }': ()
382 [221; 223) '_x': ! 382 221..223 '_x': !
383 [230; 237) 'loop {}': ! 383 230..237 'loop {}': !
384 [235; 237) '{}': () 384 235..237 '{}': ()
385 "### 385 "###
386 ) 386 )
387} 387}
@@ -396,9 +396,9 @@ fn test() {
396} 396}
397"#), 397"#),
398 @r###" 398 @r###"
399 [26; 53) '{ ...oo() }': () 399 26..53 '{ ...oo() }': ()
400 [32; 49) '<Trait...>::foo': {unknown} 400 32..49 '<Trait...>::foo': {unknown}
401 [32; 51) '<Trait...:foo()': () 401 32..51 '<Trait...:foo()': ()
402 "### 402 "###
403 ); 403 );
404} 404}
@@ -496,13 +496,13 @@ fn foo(params: &[usize]) {
496} 496}
497"#), 497"#),
498 @r###" 498 @r###"
499 [8; 14) 'params': &[usize] 499 8..14 'params': &[usize]
500 [26; 81) '{ ... } }': () 500 26..81 '{ ... } }': ()
501 [32; 79) 'match ... }': () 501 32..79 'match ... }': ()
502 [38; 44) 'params': &[usize] 502 38..44 'params': &[usize]
503 [55; 67) '[ps @ .., _]': [usize] 503 55..67 '[ps @ .., _]': [usize]
504 [65; 66) '_': usize 504 65..66 '_': usize
505 [71; 73) '{}': () 505 71..73 '{}': ()
506 "### 506 "###
507 ); 507 );
508} 508}
@@ -523,13 +523,13 @@ fn foo(b: Bar) {
523} 523}
524"#), 524"#),
525 @r###" 525 @r###"
526 [36; 37) 'b': Bar 526 36..37 'b': Bar
527 [44; 96) '{ ... } }': () 527 44..96 '{ ... } }': ()
528 [50; 94) 'match ... }': () 528 50..94 'match ... }': ()
529 [56; 57) 'b': Bar 529 56..57 'b': Bar
530 [68; 81) 'Bar { a: .. }': Bar 530 68..81 'Bar { a: .. }': Bar
531 [77; 79) '..': bool 531 77..79 '..': bool
532 [85; 87) '{}': () 532 85..87 '{}': ()
533 "### 533 "###
534 ); 534 );
535} 535}
@@ -564,13 +564,13 @@ where
564} 564}
565"#), 565"#),
566 @r###" 566 @r###"
567 [66; 70) 'self': Self 567 66..70 'self': Self
568 [268; 272) 'self': Self 568 268..272 'self': Self
569 [467; 471) 'self': SelectStatement<F, S, D, W, O, LOf, {unknown}, {unknown}> 569 467..471 'self': SelectStatement<F, S, D, W, O, LOf, {unknown}, {unknown}>
570 [489; 523) '{ ... }': () 570 489..523 '{ ... }': ()
571 [499; 503) 'self': SelectStatement<F, S, D, W, O, LOf, {unknown}, {unknown}> 571 499..503 'self': SelectStatement<F, S, D, W, O, LOf, {unknown}, {unknown}>
572 [499; 509) 'self.order': O 572 499..509 'self.order': O
573 [499; 516) 'self.o...into()': dyn QueryFragment<DB> 573 499..516 'self.o...into()': dyn QueryFragment<DB>
574 "### 574 "###
575 ); 575 );
576} 576}
diff --git a/crates/ra_hir_ty/src/tests/simple.rs b/crates/ra_hir_ty/src/tests/simple.rs
index c2f1ded2f..56abc65b8 100644
--- a/crates/ra_hir_ty/src/tests/simple.rs
+++ b/crates/ra_hir_ty/src/tests/simple.rs
@@ -64,9 +64,9 @@ impl S<u32> {
64} 64}
65"#, 65"#,
66 ), @r###" 66 ), @r###"
67 [63; 93) '{ ... }': () 67 63..93 '{ ... }': ()
68 [73; 86) 'Self { x: 1 }': S<u32> 68 73..86 'Self { x: 1 }': S<u32>
69 [83; 84) '1': u32 69 83..84 '1': u32
70 "###); 70 "###);
71} 71}
72 72
@@ -85,9 +85,9 @@ fn foo() {
85 85
86"#, 86"#,
87 ), @r###" 87 ), @r###"
88 [64; 84) '{ ...1 }; }': () 88 64..84 '{ ...1 }; }': ()
89 [70; 81) 'SS { x: 1 }': S<u32> 89 70..81 'SS { x: 1 }': S<u32>
90 [78; 79) '1': u32 90 78..79 '1': u32
91 "###); 91 "###);
92} 92}
93 93
@@ -175,19 +175,19 @@ fn test(a: u32, b: isize, c: !, d: &str) {
175 1.0f32; 175 1.0f32;
176}"#), 176}"#),
177 @r###" 177 @r###"
178 [9; 10) 'a': u32 178 9..10 'a': u32
179 [17; 18) 'b': isize 179 17..18 'b': isize
180 [27; 28) 'c': ! 180 27..28 'c': !
181 [33; 34) 'd': &str 181 33..34 'd': &str
182 [42; 121) '{ ...f32; }': ! 182 42..121 '{ ...f32; }': !
183 [48; 49) 'a': u32 183 48..49 'a': u32
184 [55; 56) 'b': isize 184 55..56 'b': isize
185 [62; 63) 'c': ! 185 62..63 'c': !
186 [69; 70) 'd': &str 186 69..70 'd': &str
187 [76; 82) '1usize': usize 187 76..82 '1usize': usize
188 [88; 94) '1isize': isize 188 88..94 '1isize': isize
189 [100; 106) '"test"': &str 189 100..106 '"test"': &str
190 [112; 118) '1.0f32': f32 190 112..118 '1.0f32': f32
191 "### 191 "###
192 ); 192 );
193} 193}
@@ -206,17 +206,17 @@ fn test() {
206} 206}
207"#), 207"#),
208 @r###" 208 @r###"
209 [11; 118) '{ ...= e; }': () 209 11..118 '{ ...= e; }': ()
210 [21; 22) 'a': isize 210 21..22 'a': isize
211 [25; 31) '1isize': isize 211 25..31 '1isize': isize
212 [41; 42) 'b': usize 212 41..42 'b': usize
213 [52; 53) '1': usize 213 52..53 '1': usize
214 [63; 64) 'c': usize 214 63..64 'c': usize
215 [67; 68) 'b': usize 215 67..68 'b': usize
216 [78; 79) 'd': u32 216 78..79 'd': u32
217 [94; 95) 'e': i32 217 94..95 'e': i32
218 [105; 106) 'f': i32 218 105..106 'f': i32
219 [114; 115) 'e': i32 219 114..115 'e': i32
220 "### 220 "###
221 ); 221 );
222} 222}
@@ -237,15 +237,15 @@ fn test() {
237} 237}
238"#), 238"#),
239 @r###" 239 @r###"
240 [15; 20) '{ 1 }': u32 240 15..20 '{ 1 }': u32
241 [17; 18) '1': u32 241 17..18 '1': u32
242 [48; 53) '{ 1 }': u32 242 48..53 '{ 1 }': u32
243 [50; 51) '1': u32 243 50..51 '1': u32
244 [67; 91) '{ ...c(); }': () 244 67..91 '{ ...c(); }': ()
245 [73; 74) 'a': fn a() -> u32 245 73..74 'a': fn a() -> u32
246 [73; 76) 'a()': u32 246 73..76 'a()': u32
247 [82; 86) 'b::c': fn c() -> u32 247 82..86 'b::c': fn c() -> u32
248 [82; 88) 'b::c()': u32 248 82..88 'b::c()': u32
249 "### 249 "###
250 ); 250 );
251} 251}
@@ -266,13 +266,13 @@ fn test() {
266} 266}
267"#), 267"#),
268 @r###" 268 @r###"
269 [41; 46) '{ 1 }': i32 269 41..46 '{ 1 }': i32
270 [43; 44) '1': i32 270 43..44 '1': i32
271 [60; 93) '{ ...o(); }': () 271 60..93 '{ ...o(); }': ()
272 [66; 72) 'S::foo': fn foo() -> i32 272 66..72 'S::foo': fn foo() -> i32
273 [66; 74) 'S::foo()': i32 273 66..74 'S::foo()': i32
274 [80; 88) '<S>::foo': fn foo() -> i32 274 80..88 '<S>::foo': fn foo() -> i32
275 [80; 90) '<S>::foo()': i32 275 80..90 '<S>::foo()': i32
276 "### 276 "###
277 ); 277 );
278} 278}
@@ -297,22 +297,22 @@ fn test() {
297} 297}
298"#), 298"#),
299 @r###" 299 @r###"
300 [72; 154) '{ ...a.c; }': () 300 72..154 '{ ...a.c; }': ()
301 [82; 83) 'c': C 301 82..83 'c': C
302 [86; 87) 'C': C(usize) -> C 302 86..87 'C': C(usize) -> C
303 [86; 90) 'C(1)': C 303 86..90 'C(1)': C
304 [88; 89) '1': usize 304 88..89 '1': usize
305 [96; 97) 'B': B 305 96..97 'B': B
306 [107; 108) 'a': A 306 107..108 'a': A
307 [114; 133) 'A { b:...C(1) }': A 307 114..133 'A { b:...C(1) }': A
308 [121; 122) 'B': B 308 121..122 'B': B
309 [127; 128) 'C': C(usize) -> C 309 127..128 'C': C(usize) -> C
310 [127; 131) 'C(1)': C 310 127..131 'C(1)': C
311 [129; 130) '1': usize 311 129..130 '1': usize
312 [139; 140) 'a': A 312 139..140 'a': A
313 [139; 142) 'a.b': B 313 139..142 'a.b': B
314 [148; 149) 'a': A 314 148..149 'a': A
315 [148; 151) 'a.c': C 315 148..151 'a.c': C
316 "### 316 "###
317 ); 317 );
318} 318}
@@ -330,10 +330,10 @@ fn test() {
330 E::V2; 330 E::V2;
331}"#), 331}"#),
332 @r###" 332 @r###"
333 [48; 82) '{ E:...:V2; }': () 333 48..82 '{ E:...:V2; }': ()
334 [52; 70) 'E::V1 ...d: 1 }': E 334 52..70 'E::V1 ...d: 1 }': E
335 [67; 68) '1': u32 335 67..68 '1': u32
336 [74; 79) 'E::V2': E 336 74..79 'E::V2': E
337 "### 337 "###
338 ); 338 );
339} 339}
@@ -357,29 +357,29 @@ fn test(a: &u32, b: &mut u32, c: *const u32, d: *mut u32) {
357} 357}
358"#), 358"#),
359 @r###" 359 @r###"
360 [9; 10) 'a': &u32 360 9..10 'a': &u32
361 [18; 19) 'b': &mut u32 361 18..19 'b': &mut u32
362 [31; 32) 'c': *const u32 362 31..32 'c': *const u32
363 [46; 47) 'd': *mut u32 363 46..47 'd': *mut u32
364 [59; 150) '{ ... *d; }': () 364 59..150 '{ ... *d; }': ()
365 [65; 66) 'a': &u32 365 65..66 'a': &u32
366 [72; 74) '*a': u32 366 72..74 '*a': u32
367 [73; 74) 'a': &u32 367 73..74 'a': &u32
368 [80; 82) '&a': &&u32 368 80..82 '&a': &&u32
369 [81; 82) 'a': &u32 369 81..82 'a': &u32
370 [88; 94) '&mut a': &mut &u32 370 88..94 '&mut a': &mut &u32
371 [93; 94) 'a': &u32 371 93..94 'a': &u32
372 [100; 101) 'b': &mut u32 372 100..101 'b': &mut u32
373 [107; 109) '*b': u32 373 107..109 '*b': u32
374 [108; 109) 'b': &mut u32 374 108..109 'b': &mut u32
375 [115; 117) '&b': &&mut u32 375 115..117 '&b': &&mut u32
376 [116; 117) 'b': &mut u32 376 116..117 'b': &mut u32
377 [123; 124) 'c': *const u32 377 123..124 'c': *const u32
378 [130; 132) '*c': u32 378 130..132 '*c': u32
379 [131; 132) 'c': *const u32 379 131..132 'c': *const u32
380 [138; 139) 'd': *mut u32 380 138..139 'd': *mut u32
381 [145; 147) '*d': u32 381 145..147 '*d': u32
382 [146; 147) 'd': *mut u32 382 146..147 'd': *mut u32
383 "### 383 "###
384 ); 384 );
385} 385}
@@ -409,20 +409,20 @@ fn test() {
409} 409}
410"##), 410"##),
411 @r###" 411 @r###"
412 [11; 221) '{ ...o"#; }': () 412 11..221 '{ ...o"#; }': ()
413 [17; 21) '5i32': i32 413 17..21 '5i32': i32
414 [27; 31) '5f32': f32 414 27..31 '5f32': f32
415 [37; 41) '5f64': f64 415 37..41 '5f64': f64
416 [47; 54) '"hello"': &str 416 47..54 '"hello"': &str
417 [60; 68) 'b"bytes"': &[u8] 417 60..68 'b"bytes"': &[u8]
418 [74; 77) ''c'': char 418 74..77 ''c'': char
419 [83; 87) 'b'b'': u8 419 83..87 'b'b'': u8
420 [93; 97) '3.14': f64 420 93..97 '3.14': f64
421 [103; 107) '5000': i32 421 103..107 '5000': i32
422 [113; 118) 'false': bool 422 113..118 'false': bool
423 [124; 128) 'true': bool 423 124..128 'true': bool
424 [134; 202) 'r#" ... "#': &str 424 134..202 'r#" ... "#': &str
425 [208; 218) 'br#"yolo"#': &[u8] 425 208..218 'br#"yolo"#': &[u8]
426 "### 426 "###
427 ); 427 );
428} 428}
@@ -452,47 +452,47 @@ fn test(x: SomeType) {
452} 452}
453"#), 453"#),
454 @r###" 454 @r###"
455 [27; 28) 'x': SomeType 455 27..28 'x': SomeType
456 [40; 272) '{ ...lo"; }': () 456 40..272 '{ ...lo"; }': ()
457 [50; 51) 'b': bool 457 50..51 'b': bool
458 [54; 59) 'false': bool 458 54..59 'false': bool
459 [69; 70) 'c': bool 459 69..70 'c': bool
460 [73; 75) '!b': bool 460 73..75 '!b': bool
461 [74; 75) 'b': bool 461 74..75 'b': bool
462 [85; 86) 'a': i128 462 85..86 'a': i128
463 [89; 92) '100': i128 463 89..92 '100': i128
464 [102; 103) 'd': i128 464 102..103 'd': i128
465 [112; 114) '-a': i128 465 112..114 '-a': i128
466 [113; 114) 'a': i128 466 113..114 'a': i128
467 [124; 125) 'e': i32 467 124..125 'e': i32
468 [128; 132) '-100': i32 468 128..132 '-100': i32
469 [129; 132) '100': i32 469 129..132 '100': i32
470 [142; 143) 'f': bool 470 142..143 'f': bool
471 [146; 153) '!!!true': bool 471 146..153 '!!!true': bool
472 [147; 153) '!!true': bool 472 147..153 '!!true': bool
473 [148; 153) '!true': bool 473 148..153 '!true': bool
474 [149; 153) 'true': bool 474 149..153 'true': bool
475 [163; 164) 'g': i32 475 163..164 'g': i32
476 [167; 170) '!42': i32 476 167..170 '!42': i32
477 [168; 170) '42': i32 477 168..170 '42': i32
478 [180; 181) 'h': u32 478 180..181 'h': u32
479 [184; 190) '!10u32': u32 479 184..190 '!10u32': u32
480 [185; 190) '10u32': u32 480 185..190 '10u32': u32
481 [200; 201) 'j': i128 481 200..201 'j': i128
482 [204; 206) '!a': i128 482 204..206 '!a': i128
483 [205; 206) 'a': i128 483 205..206 'a': i128
484 [212; 217) '-3.14': f64 484 212..217 '-3.14': f64
485 [213; 217) '3.14': f64 485 213..217 '3.14': f64
486 [223; 225) '!3': i32 486 223..225 '!3': i32
487 [224; 225) '3': i32 487 224..225 '3': i32
488 [231; 233) '-x': {unknown} 488 231..233 '-x': {unknown}
489 [232; 233) 'x': SomeType 489 232..233 'x': SomeType
490 [239; 241) '!x': {unknown} 490 239..241 '!x': {unknown}
491 [240; 241) 'x': SomeType 491 240..241 'x': SomeType
492 [247; 255) '-"hello"': {unknown} 492 247..255 '-"hello"': {unknown}
493 [248; 255) '"hello"': &str 493 248..255 '"hello"': &str
494 [261; 269) '!"hello"': {unknown} 494 261..269 '!"hello"': {unknown}
495 [262; 269) '"hello"': &str 495 262..269 '"hello"': &str
496 "### 496 "###
497 ); 497 );
498} 498}
@@ -515,26 +515,26 @@ fn test() -> &mut &f64 {
515} 515}
516"#), 516"#),
517 @r###" 517 @r###"
518 [14; 15) 'x': u32 518 14..15 'x': u32
519 [22; 24) '{}': () 519 22..24 '{}': ()
520 [78; 231) '{ ...t &c }': &mut &f64 520 78..231 '{ ...t &c }': &mut &f64
521 [88; 89) 'a': u32 521 88..89 'a': u32
522 [92; 108) 'unknow...nction': {unknown} 522 92..108 'unknow...nction': {unknown}
523 [92; 110) 'unknow...tion()': u32 523 92..110 'unknow...tion()': u32
524 [116; 125) 'takes_u32': fn takes_u32(u32) 524 116..125 'takes_u32': fn takes_u32(u32)
525 [116; 128) 'takes_u32(a)': () 525 116..128 'takes_u32(a)': ()
526 [126; 127) 'a': u32 526 126..127 'a': u32
527 [138; 139) 'b': i32 527 138..139 'b': i32
528 [142; 158) 'unknow...nction': {unknown} 528 142..158 'unknow...nction': {unknown}
529 [142; 160) 'unknow...tion()': i32 529 142..160 'unknow...tion()': i32
530 [166; 184) 'S { i3...d: b }': S 530 166..184 'S { i3...d: b }': S
531 [181; 182) 'b': i32 531 181..182 'b': i32
532 [194; 195) 'c': f64 532 194..195 'c': f64
533 [198; 214) 'unknow...nction': {unknown} 533 198..214 'unknow...nction': {unknown}
534 [198; 216) 'unknow...tion()': f64 534 198..216 'unknow...tion()': f64
535 [222; 229) '&mut &c': &mut &f64 535 222..229 '&mut &c': &mut &f64
536 [227; 229) '&c': &f64 536 227..229 '&c': &f64
537 [228; 229) 'c': f64 537 228..229 'c': f64
538 "### 538 "###
539 ); 539 );
540} 540}
@@ -561,16 +561,16 @@ impl S {
561} 561}
562"#), 562"#),
563 @r###" 563 @r###"
564 [34; 38) 'self': &S 564 34..38 'self': &S
565 [40; 61) '{ ... }': () 565 40..61 '{ ... }': ()
566 [50; 54) 'self': &S 566 50..54 'self': &S
567 [75; 79) 'self': &S 567 75..79 'self': &S
568 [88; 109) '{ ... }': () 568 88..109 '{ ... }': ()
569 [98; 102) 'self': &S 569 98..102 'self': &S
570 [133; 153) '{ ... }': S 570 133..153 '{ ... }': S
571 [143; 147) 'S {}': S 571 143..147 'S {}': S
572 [177; 200) '{ ... }': S 572 177..200 '{ ... }': S
573 [187; 194) 'Self {}': S 573 187..194 'Self {}': S
574 "### 574 "###
575 ); 575 );
576} 576}
@@ -600,56 +600,56 @@ fn test() -> bool {
600} 600}
601"#), 601"#),
602 @r###" 602 @r###"
603 [6; 7) 'x': bool 603 6..7 'x': bool
604 [22; 34) '{ 0i32 }': i32 604 22..34 '{ 0i32 }': i32
605 [28; 32) '0i32': i32 605 28..32 '0i32': i32
606 [54; 370) '{ ... < 3 }': bool 606 54..370 '{ ... < 3 }': bool
607 [64; 65) 'x': bool 607 64..65 'x': bool
608 [68; 69) 'a': bool 608 68..69 'a': bool
609 [68; 74) 'a && b': bool 609 68..74 'a && b': bool
610 [73; 74) 'b': bool 610 73..74 'b': bool
611 [84; 85) 'y': bool 611 84..85 'y': bool
612 [88; 92) 'true': bool 612 88..92 'true': bool
613 [88; 101) 'true || false': bool 613 88..101 'true || false': bool
614 [96; 101) 'false': bool 614 96..101 'false': bool
615 [111; 112) 'z': bool 615 111..112 'z': bool
616 [115; 116) 'x': bool 616 115..116 'x': bool
617 [115; 121) 'x == y': bool 617 115..121 'x == y': bool
618 [120; 121) 'y': bool 618 120..121 'y': bool
619 [131; 132) 't': bool 619 131..132 't': bool
620 [135; 136) 'x': bool 620 135..136 'x': bool
621 [135; 141) 'x != y': bool 621 135..141 'x != y': bool
622 [140; 141) 'y': bool 622 140..141 'y': bool
623 [151; 162) 'minus_forty': isize 623 151..162 'minus_forty': isize
624 [172; 180) '-40isize': isize 624 172..180 '-40isize': isize
625 [173; 180) '40isize': isize 625 173..180 '40isize': isize
626 [190; 191) 'h': bool 626 190..191 'h': bool
627 [194; 205) 'minus_forty': isize 627 194..205 'minus_forty': isize
628 [194; 216) 'minus_...ONST_2': bool 628 194..216 'minus_...ONST_2': bool
629 [209; 216) 'CONST_2': isize 629 209..216 'CONST_2': isize
630 [226; 227) 'c': i32 630 226..227 'c': i32
631 [230; 231) 'f': fn f(bool) -> i32 631 230..231 'f': fn f(bool) -> i32
632 [230; 239) 'f(z || y)': i32 632 230..239 'f(z || y)': i32
633 [230; 243) 'f(z || y) + 5': i32 633 230..243 'f(z || y) + 5': i32
634 [232; 233) 'z': bool 634 232..233 'z': bool
635 [232; 238) 'z || y': bool 635 232..238 'z || y': bool
636 [237; 238) 'y': bool 636 237..238 'y': bool
637 [242; 243) '5': i32 637 242..243 '5': i32
638 [253; 254) 'd': {unknown} 638 253..254 'd': {unknown}
639 [257; 258) 'b': {unknown} 639 257..258 'b': {unknown}
640 [268; 269) 'g': () 640 268..269 'g': ()
641 [272; 283) 'minus_forty': isize 641 272..283 'minus_forty': isize
642 [272; 288) 'minus_...y ^= i': () 642 272..288 'minus_...y ^= i': ()
643 [287; 288) 'i': isize 643 287..288 'i': isize
644 [298; 301) 'ten': usize 644 298..301 'ten': usize
645 [311; 313) '10': usize 645 311..313 '10': usize
646 [323; 336) 'ten_is_eleven': bool 646 323..336 'ten_is_eleven': bool
647 [339; 342) 'ten': usize 647 339..342 'ten': usize
648 [339; 354) 'ten == some_num': bool 648 339..354 'ten == some_num': bool
649 [346; 354) 'some_num': usize 649 346..354 'some_num': usize
650 [361; 364) 'ten': usize 650 361..364 'ten': usize
651 [361; 368) 'ten < 3': bool 651 361..368 'ten < 3': bool
652 [367; 368) '3': usize 652 367..368 '3': usize
653 "### 653 "###
654 ); 654 );
655} 655}
@@ -664,13 +664,13 @@ fn test() {
664} 664}
665"#), 665"#),
666 @r###" 666 @r###"
667 [11; 48) '{ ...5u8; }': () 667 11..48 '{ ...5u8; }': ()
668 [17; 21) '1u32': u32 668 17..21 '1u32': u32
669 [17; 28) '1u32 << 5u8': u32 669 17..28 '1u32 << 5u8': u32
670 [25; 28) '5u8': u8 670 25..28 '5u8': u8
671 [34; 38) '1u32': u32 671 34..38 '1u32': u32
672 [34; 45) '1u32 >> 5u8': u32 672 34..45 '1u32 >> 5u8': u32
673 [42; 45) '5u8': u8 673 42..45 '5u8': u8
674 "### 674 "###
675 ); 675 );
676} 676}
@@ -703,49 +703,49 @@ fn test2(a1: *const A, a2: *mut A) {
703} 703}
704"#), 704"#),
705 @r###" 705 @r###"
706 [44; 45) 'a': A 706 44..45 'a': A
707 [50; 213) '{ ...5.b; }': () 707 50..213 '{ ...5.b; }': ()
708 [60; 62) 'a1': A 708 60..62 'a1': A
709 [65; 66) 'a': A 709 65..66 'a': A
710 [72; 74) 'a1': A 710 72..74 'a1': A
711 [72; 76) 'a1.b': B 711 72..76 'a1.b': B
712 [86; 88) 'a2': &A 712 86..88 'a2': &A
713 [91; 93) '&a': &A 713 91..93 '&a': &A
714 [92; 93) 'a': A 714 92..93 'a': A
715 [99; 101) 'a2': &A 715 99..101 'a2': &A
716 [99; 103) 'a2.b': B 716 99..103 'a2.b': B
717 [113; 115) 'a3': &mut A 717 113..115 'a3': &mut A
718 [118; 124) '&mut a': &mut A 718 118..124 '&mut a': &mut A
719 [123; 124) 'a': A 719 123..124 'a': A
720 [130; 132) 'a3': &mut A 720 130..132 'a3': &mut A
721 [130; 134) 'a3.b': B 721 130..134 'a3.b': B
722 [144; 146) 'a4': &&&&&&&A 722 144..146 'a4': &&&&&&&A
723 [149; 157) '&&&&&&&a': &&&&&&&A 723 149..157 '&&&&&&&a': &&&&&&&A
724 [150; 157) '&&&&&&a': &&&&&&A 724 150..157 '&&&&&&a': &&&&&&A
725 [151; 157) '&&&&&a': &&&&&A 725 151..157 '&&&&&a': &&&&&A
726 [152; 157) '&&&&a': &&&&A 726 152..157 '&&&&a': &&&&A
727 [153; 157) '&&&a': &&&A 727 153..157 '&&&a': &&&A
728 [154; 157) '&&a': &&A 728 154..157 '&&a': &&A
729 [155; 157) '&a': &A 729 155..157 '&a': &A
730 [156; 157) 'a': A 730 156..157 'a': A
731 [163; 165) 'a4': &&&&&&&A 731 163..165 'a4': &&&&&&&A
732 [163; 167) 'a4.b': B 732 163..167 'a4.b': B
733 [177; 179) 'a5': &mut &&mut &&mut A 733 177..179 'a5': &mut &&mut &&mut A
734 [182; 200) '&mut &...&mut a': &mut &&mut &&mut A 734 182..200 '&mut &...&mut a': &mut &&mut &&mut A
735 [187; 200) '&&mut &&mut a': &&mut &&mut A 735 187..200 '&&mut &&mut a': &&mut &&mut A
736 [188; 200) '&mut &&mut a': &mut &&mut A 736 188..200 '&mut &&mut a': &mut &&mut A
737 [193; 200) '&&mut a': &&mut A 737 193..200 '&&mut a': &&mut A
738 [194; 200) '&mut a': &mut A 738 194..200 '&mut a': &mut A
739 [199; 200) 'a': A 739 199..200 'a': A
740 [206; 208) 'a5': &mut &&mut &&mut A 740 206..208 'a5': &mut &&mut &&mut A
741 [206; 210) 'a5.b': B 741 206..210 'a5.b': B
742 [224; 226) 'a1': *const A 742 224..226 'a1': *const A
743 [238; 240) 'a2': *mut A 743 238..240 'a2': *mut A
744 [250; 273) '{ ...2.b; }': () 744 250..273 '{ ...2.b; }': ()
745 [256; 258) 'a1': *const A 745 256..258 'a1': *const A
746 [256; 260) 'a1.b': B 746 256..260 'a1.b': B
747 [266; 268) 'a2': *mut A 747 266..268 'a2': *mut A
748 [266; 270) 'a2.b': B 748 266..270 'a2.b': B
749 "### 749 "###
750 ); 750 );
751} 751}
@@ -782,30 +782,30 @@ fn test() {
782} 782}
783"#), 783"#),
784 @r###" 784 @r###"
785 [68; 72) 'self': &Self 785 68..72 'self': &Self
786 [139; 143) 'self': &A<T> 786 139..143 'self': &A<T>
787 [151; 174) '{ ... }': &T 787 151..174 '{ ... }': &T
788 [161; 168) '&self.0': &T 788 161..168 '&self.0': &T
789 [162; 166) 'self': &A<T> 789 162..166 'self': &A<T>
790 [162; 168) 'self.0': T 790 162..168 'self.0': T
791 [255; 259) 'self': &B<T> 791 255..259 'self': &B<T>
792 [278; 301) '{ ... }': &T 792 278..301 '{ ... }': &T
793 [288; 295) '&self.0': &T 793 288..295 '&self.0': &T
794 [289; 293) 'self': &B<T> 794 289..293 'self': &B<T>
795 [289; 295) 'self.0': T 795 289..295 'self.0': T
796 [315; 353) '{ ...))); }': () 796 315..353 '{ ...))); }': ()
797 [325; 326) 't': &i32 797 325..326 't': &i32
798 [329; 335) 'A::foo': fn foo<i32>(&A<i32>) -> &i32 798 329..335 'A::foo': fn foo<i32>(&A<i32>) -> &i32
799 [329; 350) 'A::foo...42))))': &i32 799 329..350 'A::foo...42))))': &i32
800 [336; 349) '&&B(B(A(42)))': &&B<B<A<i32>>> 800 336..349 '&&B(B(A(42)))': &&B<B<A<i32>>>
801 [337; 349) '&B(B(A(42)))': &B<B<A<i32>>> 801 337..349 '&B(B(A(42)))': &B<B<A<i32>>>
802 [338; 339) 'B': B<B<A<i32>>>(B<A<i32>>) -> B<B<A<i32>>> 802 338..339 'B': B<B<A<i32>>>(B<A<i32>>) -> B<B<A<i32>>>
803 [338; 349) 'B(B(A(42)))': B<B<A<i32>>> 803 338..349 'B(B(A(42)))': B<B<A<i32>>>
804 [340; 341) 'B': B<A<i32>>(A<i32>) -> B<A<i32>> 804 340..341 'B': B<A<i32>>(A<i32>) -> B<A<i32>>
805 [340; 348) 'B(A(42))': B<A<i32>> 805 340..348 'B(A(42))': B<A<i32>>
806 [342; 343) 'A': A<i32>(i32) -> A<i32> 806 342..343 'A': A<i32>(i32) -> A<i32>
807 [342; 347) 'A(42)': A<i32> 807 342..347 'A(42)': A<i32>
808 [344; 346) '42': i32 808 344..346 '42': i32
809 "### 809 "###
810 ); 810 );
811} 811}
@@ -842,34 +842,34 @@ fn test(a: A<i32>) {
842} 842}
843"#), 843"#),
844 @r###" 844 @r###"
845 [68; 72) 'self': &Self 845 68..72 'self': &Self
846 [144; 148) 'self': &A<T> 846 144..148 'self': &A<T>
847 [150; 151) 'x': &A<T> 847 150..151 'x': &A<T>
848 [166; 187) '{ ... }': &T 848 166..187 '{ ... }': &T
849 [176; 181) '&*x.0': &T 849 176..181 '&*x.0': &T
850 [177; 181) '*x.0': T 850 177..181 '*x.0': T
851 [178; 179) 'x': &A<T> 851 178..179 'x': &A<T>
852 [178; 181) 'x.0': *mut T 852 178..181 'x.0': *mut T
853 [268; 272) 'self': &B<T> 853 268..272 'self': &B<T>
854 [291; 314) '{ ... }': &T 854 291..314 '{ ... }': &T
855 [301; 308) '&self.0': &T 855 301..308 '&self.0': &T
856 [302; 306) 'self': &B<T> 856 302..306 'self': &B<T>
857 [302; 308) 'self.0': T 857 302..308 'self.0': T
858 [326; 327) 'a': A<i32> 858 326..327 'a': A<i32>
859 [337; 383) '{ ...))); }': () 859 337..383 '{ ...))); }': ()
860 [347; 348) 't': &i32 860 347..348 't': &i32
861 [351; 352) 'A': A<i32>(*mut i32) -> A<i32> 861 351..352 'A': A<i32>(*mut i32) -> A<i32>
862 [351; 365) 'A(0 as *mut _)': A<i32> 862 351..365 'A(0 as *mut _)': A<i32>
863 [351; 380) 'A(0 as...B(a)))': &i32 863 351..380 'A(0 as...B(a)))': &i32
864 [353; 354) '0': i32 864 353..354 '0': i32
865 [353; 364) '0 as *mut _': *mut i32 865 353..364 '0 as *mut _': *mut i32
866 [370; 379) '&&B(B(a))': &&B<B<A<i32>>> 866 370..379 '&&B(B(a))': &&B<B<A<i32>>>
867 [371; 379) '&B(B(a))': &B<B<A<i32>>> 867 371..379 '&B(B(a))': &B<B<A<i32>>>
868 [372; 373) 'B': B<B<A<i32>>>(B<A<i32>>) -> B<B<A<i32>>> 868 372..373 'B': B<B<A<i32>>>(B<A<i32>>) -> B<B<A<i32>>>
869 [372; 379) 'B(B(a))': B<B<A<i32>>> 869 372..379 'B(B(a))': B<B<A<i32>>>
870 [374; 375) 'B': B<A<i32>>(A<i32>) -> B<A<i32>> 870 374..375 'B': B<A<i32>>(A<i32>) -> B<A<i32>>
871 [374; 378) 'B(a)': B<A<i32>> 871 374..378 'B(a)': B<A<i32>>
872 [376; 377) 'a': A<i32> 872 376..377 'a': A<i32>
873 "### 873 "###
874 ); 874 );
875} 875}
@@ -888,16 +888,16 @@ fn main(foo: Foo) {
888} 888}
889"#), 889"#),
890 @r###" 890 @r###"
891 [35; 38) 'foo': Foo 891 35..38 'foo': Foo
892 [45; 109) '{ ... } }': () 892 45..109 '{ ... } }': ()
893 [51; 107) 'if tru... }': () 893 51..107 'if tru... }': ()
894 [54; 58) 'true': bool 894 54..58 'true': bool
895 [59; 67) '{ }': () 895 59..67 '{ }': ()
896 [73; 107) 'if fal... }': () 896 73..107 'if fal... }': ()
897 [76; 81) 'false': bool 897 76..81 'false': bool
898 [82; 107) '{ ... }': i32 898 82..107 '{ ... }': i32
899 [92; 95) 'foo': Foo 899 92..95 'foo': Foo
900 [92; 101) 'foo.field': i32 900 92..101 'foo.field': i32
901 "### 901 "###
902 ) 902 )
903} 903}
@@ -929,38 +929,38 @@ fn foo() {
929 }; 929 };
930}"#), 930}"#),
931 @r###" 931 @r###"
932 [10; 323) '{ ... }; }': () 932 10..323 '{ ... }; }': ()
933 [20; 23) '_x1': i32 933 20..23 '_x1': i32
934 [26; 80) 'if tru... }': i32 934 26..80 'if tru... }': i32
935 [29; 33) 'true': bool 935 29..33 'true': bool
936 [34; 51) '{ ... }': i32 936 34..51 '{ ... }': i32
937 [44; 45) '1': i32 937 44..45 '1': i32
938 [57; 80) '{ ... }': ! 938 57..80 '{ ... }': !
939 [67; 73) 'return': ! 939 67..73 'return': !
940 [90; 93) '_x2': i32 940 90..93 '_x2': i32
941 [96; 149) 'if tru... }': i32 941 96..149 'if tru... }': i32
942 [99; 103) 'true': bool 942 99..103 'true': bool
943 [104; 121) '{ ... }': i32 943 104..121 '{ ... }': i32
944 [114; 115) '2': i32 944 114..115 '2': i32
945 [127; 149) '{ ... }': ! 945 127..149 '{ ... }': !
946 [137; 143) 'return': ! 946 137..143 'return': !
947 [159; 162) '_x3': i32 947 159..162 '_x3': i32
948 [165; 247) 'match ... }': i32 948 165..247 'match ... }': i32
949 [171; 175) 'true': bool 949 171..175 'true': bool
950 [186; 190) 'true': bool 950 186..190 'true': bool
951 [186; 190) 'true': bool 951 186..190 'true': bool
952 [194; 195) '3': i32 952 194..195 '3': i32
953 [205; 206) '_': bool 953 205..206 '_': bool
954 [210; 241) '{ ... }': ! 954 210..241 '{ ... }': !
955 [224; 230) 'return': ! 955 224..230 'return': !
956 [257; 260) '_x4': i32 956 257..260 '_x4': i32
957 [263; 320) 'match ... }': i32 957 263..320 'match ... }': i32
958 [269; 273) 'true': bool 958 269..273 'true': bool
959 [284; 288) 'true': bool 959 284..288 'true': bool
960 [284; 288) 'true': bool 960 284..288 'true': bool
961 [292; 293) '4': i32 961 292..293 '4': i32
962 [303; 304) '_': bool 962 303..304 '_': bool
963 [308; 314) 'return': ! 963 308..314 'return': !
964 "### 964 "###
965 ) 965 )
966} 966}
@@ -988,24 +988,24 @@ fn test(a: A) {
988} 988}
989"#), 989"#),
990 @r###" 990 @r###"
991 [32; 36) 'self': A 991 32..36 'self': A
992 [38; 39) 'x': u32 992 38..39 'x': u32
993 [53; 55) '{}': () 993 53..55 '{}': ()
994 [103; 107) 'self': &A 994 103..107 'self': &A
995 [109; 110) 'x': u64 995 109..110 'x': u64
996 [124; 126) '{}': () 996 124..126 '{}': ()
997 [144; 145) 'a': A 997 144..145 'a': A
998 [150; 198) '{ ...(1); }': () 998 150..198 '{ ...(1); }': ()
999 [156; 157) 'a': A 999 156..157 'a': A
1000 [156; 164) 'a.foo(1)': i32 1000 156..164 'a.foo(1)': i32
1001 [162; 163) '1': u32 1001 162..163 '1': u32
1002 [170; 181) '(&a).bar(1)': i64 1002 170..181 '(&a).bar(1)': i64
1003 [171; 173) '&a': &A 1003 171..173 '&a': &A
1004 [172; 173) 'a': A 1004 172..173 'a': A
1005 [179; 180) '1': u64 1005 179..180 '1': u64
1006 [187; 188) 'a': A 1006 187..188 'a': A
1007 [187; 195) 'a.bar(1)': i64 1007 187..195 'a.bar(1)': i64
1008 [193; 194) '1': u64 1008 193..194 '1': u64
1009 "### 1009 "###
1010 ); 1010 );
1011} 1011}
@@ -1024,11 +1024,11 @@ fn test() {
1024} 1024}
1025"#), 1025"#),
1026 @r###" 1026 @r###"
1027 [40; 44) 'self': &str 1027 40..44 'self': &str
1028 [53; 55) '{}': () 1028 53..55 '{}': ()
1029 [69; 89) '{ ...o(); }': () 1029 69..89 '{ ...o(); }': ()
1030 [75; 80) '"foo"': &str 1030 75..80 '"foo"': &str
1031 [75; 86) '"foo".foo()': i32 1031 75..86 '"foo".foo()': i32
1032 "### 1032 "###
1033 ); 1033 );
1034} 1034}
@@ -1047,33 +1047,33 @@ fn test(x: &str, y: isize) {
1047} 1047}
1048"#), 1048"#),
1049 @r###" 1049 @r###"
1050 [9; 10) 'x': &str 1050 9..10 'x': &str
1051 [18; 19) 'y': isize 1051 18..19 'y': isize
1052 [28; 170) '{ ...d"); }': () 1052 28..170 '{ ...d"); }': ()
1053 [38; 39) 'a': (u32, &str) 1053 38..39 'a': (u32, &str)
1054 [55; 63) '(1, "a")': (u32, &str) 1054 55..63 '(1, "a")': (u32, &str)
1055 [56; 57) '1': u32 1055 56..57 '1': u32
1056 [59; 62) '"a"': &str 1056 59..62 '"a"': &str
1057 [73; 74) 'b': ((u32, &str), &str) 1057 73..74 'b': ((u32, &str), &str)
1058 [77; 83) '(a, x)': ((u32, &str), &str) 1058 77..83 '(a, x)': ((u32, &str), &str)
1059 [78; 79) 'a': (u32, &str) 1059 78..79 'a': (u32, &str)
1060 [81; 82) 'x': &str 1060 81..82 'x': &str
1061 [93; 94) 'c': (isize, &str) 1061 93..94 'c': (isize, &str)
1062 [97; 103) '(y, x)': (isize, &str) 1062 97..103 '(y, x)': (isize, &str)
1063 [98; 99) 'y': isize 1063 98..99 'y': isize
1064 [101; 102) 'x': &str 1064 101..102 'x': &str
1065 [113; 114) 'd': ((isize, &str), &str) 1065 113..114 'd': ((isize, &str), &str)
1066 [117; 123) '(c, x)': ((isize, &str), &str) 1066 117..123 '(c, x)': ((isize, &str), &str)
1067 [118; 119) 'c': (isize, &str) 1067 118..119 'c': (isize, &str)
1068 [121; 122) 'x': &str 1068 121..122 'x': &str
1069 [133; 134) 'e': (i32, &str) 1069 133..134 'e': (i32, &str)
1070 [137; 145) '(1, "e")': (i32, &str) 1070 137..145 '(1, "e")': (i32, &str)
1071 [138; 139) '1': i32 1071 138..139 '1': i32
1072 [141; 144) '"e"': &str 1072 141..144 '"e"': &str
1073 [155; 156) 'f': ((i32, &str), &str) 1073 155..156 'f': ((i32, &str), &str)
1074 [159; 167) '(e, "d")': ((i32, &str), &str) 1074 159..167 '(e, "d")': ((i32, &str), &str)
1075 [160; 161) 'e': (i32, &str) 1075 160..161 'e': (i32, &str)
1076 [163; 166) '"d"': &str 1076 163..166 '"d"': &str
1077 "### 1077 "###
1078 ); 1078 );
1079} 1079}
@@ -1101,58 +1101,58 @@ fn test(x: &str, y: isize) {
1101} 1101}
1102"#), 1102"#),
1103 @r###" 1103 @r###"
1104 [9; 10) 'x': &str 1104 9..10 'x': &str
1105 [18; 19) 'y': isize 1105 18..19 'y': isize
1106 [28; 293) '{ ... []; }': () 1106 28..293 '{ ... []; }': ()
1107 [38; 39) 'a': [&str; _] 1107 38..39 'a': [&str; _]
1108 [42; 45) '[x]': [&str; _] 1108 42..45 '[x]': [&str; _]
1109 [43; 44) 'x': &str 1109 43..44 'x': &str
1110 [55; 56) 'b': [[&str; _]; _] 1110 55..56 'b': [[&str; _]; _]
1111 [59; 65) '[a, a]': [[&str; _]; _] 1111 59..65 '[a, a]': [[&str; _]; _]
1112 [60; 61) 'a': [&str; _] 1112 60..61 'a': [&str; _]
1113 [63; 64) 'a': [&str; _] 1113 63..64 'a': [&str; _]
1114 [75; 76) 'c': [[[&str; _]; _]; _] 1114 75..76 'c': [[[&str; _]; _]; _]
1115 [79; 85) '[b, b]': [[[&str; _]; _]; _] 1115 79..85 '[b, b]': [[[&str; _]; _]; _]
1116 [80; 81) 'b': [[&str; _]; _] 1116 80..81 'b': [[&str; _]; _]
1117 [83; 84) 'b': [[&str; _]; _] 1117 83..84 'b': [[&str; _]; _]
1118 [96; 97) 'd': [isize; _] 1118 96..97 'd': [isize; _]
1119 [100; 112) '[y, 1, 2, 3]': [isize; _] 1119 100..112 '[y, 1, 2, 3]': [isize; _]
1120 [101; 102) 'y': isize 1120 101..102 'y': isize
1121 [104; 105) '1': isize 1121 104..105 '1': isize
1122 [107; 108) '2': isize 1122 107..108 '2': isize
1123 [110; 111) '3': isize 1123 110..111 '3': isize
1124 [122; 123) 'd': [isize; _] 1124 122..123 'd': [isize; _]
1125 [126; 138) '[1, y, 2, 3]': [isize; _] 1125 126..138 '[1, y, 2, 3]': [isize; _]
1126 [127; 128) '1': isize 1126 127..128 '1': isize
1127 [130; 131) 'y': isize 1127 130..131 'y': isize
1128 [133; 134) '2': isize 1128 133..134 '2': isize
1129 [136; 137) '3': isize 1129 136..137 '3': isize
1130 [148; 149) 'e': [isize; _] 1130 148..149 'e': [isize; _]
1131 [152; 155) '[y]': [isize; _] 1131 152..155 '[y]': [isize; _]
1132 [153; 154) 'y': isize 1132 153..154 'y': isize
1133 [165; 166) 'f': [[isize; _]; _] 1133 165..166 'f': [[isize; _]; _]
1134 [169; 175) '[d, d]': [[isize; _]; _] 1134 169..175 '[d, d]': [[isize; _]; _]
1135 [170; 171) 'd': [isize; _] 1135 170..171 'd': [isize; _]
1136 [173; 174) 'd': [isize; _] 1136 173..174 'd': [isize; _]
1137 [185; 186) 'g': [[isize; _]; _] 1137 185..186 'g': [[isize; _]; _]
1138 [189; 195) '[e, e]': [[isize; _]; _] 1138 189..195 '[e, e]': [[isize; _]; _]
1139 [190; 191) 'e': [isize; _] 1139 190..191 'e': [isize; _]
1140 [193; 194) 'e': [isize; _] 1140 193..194 'e': [isize; _]
1141 [206; 207) 'h': [i32; _] 1141 206..207 'h': [i32; _]
1142 [210; 216) '[1, 2]': [i32; _] 1142 210..216 '[1, 2]': [i32; _]
1143 [211; 212) '1': i32 1143 211..212 '1': i32
1144 [214; 215) '2': i32 1144 214..215 '2': i32
1145 [226; 227) 'i': [&str; _] 1145 226..227 'i': [&str; _]
1146 [230; 240) '["a", "b"]': [&str; _] 1146 230..240 '["a", "b"]': [&str; _]
1147 [231; 234) '"a"': &str 1147 231..234 '"a"': &str
1148 [236; 239) '"b"': &str 1148 236..239 '"b"': &str
1149 [251; 252) 'b': [[&str; _]; _] 1149 251..252 'b': [[&str; _]; _]
1150 [255; 265) '[a, ["b"]]': [[&str; _]; _] 1150 255..265 '[a, ["b"]]': [[&str; _]; _]
1151 [256; 257) 'a': [&str; _] 1151 256..257 'a': [&str; _]
1152 [259; 264) '["b"]': [&str; _] 1152 259..264 '["b"]': [&str; _]
1153 [260; 263) '"b"': &str 1153 260..263 '"b"': &str
1154 [275; 276) 'x': [u8; _] 1154 275..276 'x': [u8; _]
1155 [288; 290) '[]': [u8; _] 1155 288..290 '[]': [u8; _]
1156 "### 1156 "###
1157 ); 1157 );
1158} 1158}
@@ -1174,21 +1174,21 @@ fn test(a1: A<u32>, i: i32) {
1174} 1174}
1175"#), 1175"#),
1176 @r###" 1176 @r###"
1177 [36; 38) 'a1': A<u32> 1177 36..38 'a1': A<u32>
1178 [48; 49) 'i': i32 1178 48..49 'i': i32
1179 [56; 147) '{ ...3.x; }': () 1179 56..147 '{ ...3.x; }': ()
1180 [62; 64) 'a1': A<u32> 1180 62..64 'a1': A<u32>
1181 [62; 66) 'a1.x': u32 1181 62..66 'a1.x': u32
1182 [76; 78) 'a2': A<i32> 1182 76..78 'a2': A<i32>
1183 [81; 91) 'A { x: i }': A<i32> 1183 81..91 'A { x: i }': A<i32>
1184 [88; 89) 'i': i32 1184 88..89 'i': i32
1185 [97; 99) 'a2': A<i32> 1185 97..99 'a2': A<i32>
1186 [97; 101) 'a2.x': i32 1186 97..101 'a2.x': i32
1187 [111; 113) 'a3': A<i128> 1187 111..113 'a3': A<i128>
1188 [116; 134) 'A::<i1...x: 1 }': A<i128> 1188 116..134 'A::<i1...x: 1 }': A<i128>
1189 [131; 132) '1': i128 1189 131..132 '1': i128
1190 [140; 142) 'a3': A<i128> 1190 140..142 'a3': A<i128>
1191 [140; 144) 'a3.x': i128 1191 140..144 'a3.x': i128
1192 "### 1192 "###
1193 ); 1193 );
1194} 1194}
@@ -1211,22 +1211,22 @@ fn test() {
1211} 1211}
1212"#), 1212"#),
1213 @r###" 1213 @r###"
1214 [76; 184) '{ ...one; }': () 1214 76..184 '{ ...one; }': ()
1215 [82; 83) 'A': A<i32>(i32) -> A<i32> 1215 82..83 'A': A<i32>(i32) -> A<i32>
1216 [82; 87) 'A(42)': A<i32> 1216 82..87 'A(42)': A<i32>
1217 [84; 86) '42': i32 1217 84..86 '42': i32
1218 [93; 94) 'A': A<u128>(u128) -> A<u128> 1218 93..94 'A': A<u128>(u128) -> A<u128>
1219 [93; 102) 'A(42u128)': A<u128> 1219 93..102 'A(42u128)': A<u128>
1220 [95; 101) '42u128': u128 1220 95..101 '42u128': u128
1221 [108; 112) 'Some': Some<&str>(&str) -> Option<&str> 1221 108..112 'Some': Some<&str>(&str) -> Option<&str>
1222 [108; 117) 'Some("x")': Option<&str> 1222 108..117 'Some("x")': Option<&str>
1223 [113; 116) '"x"': &str 1223 113..116 '"x"': &str
1224 [123; 135) 'Option::Some': Some<&str>(&str) -> Option<&str> 1224 123..135 'Option::Some': Some<&str>(&str) -> Option<&str>
1225 [123; 140) 'Option...e("x")': Option<&str> 1225 123..140 'Option...e("x")': Option<&str>
1226 [136; 139) '"x"': &str 1226 136..139 '"x"': &str
1227 [146; 150) 'None': Option<{unknown}> 1227 146..150 'None': Option<{unknown}>
1228 [160; 161) 'x': Option<i64> 1228 160..161 'x': Option<i64>
1229 [177; 181) 'None': Option<i64> 1229 177..181 'None': Option<i64>
1230 "### 1230 "###
1231 ); 1231 );
1232} 1232}
@@ -1244,20 +1244,20 @@ fn test() {
1244} 1244}
1245"#), 1245"#),
1246 @r###" 1246 @r###"
1247 [10; 11) 't': T 1247 10..11 't': T
1248 [21; 26) '{ t }': T 1248 21..26 '{ t }': T
1249 [23; 24) 't': T 1249 23..24 't': T
1250 [38; 98) '{ ...(1); }': () 1250 38..98 '{ ...(1); }': ()
1251 [44; 46) 'id': fn id<u32>(u32) -> u32 1251 44..46 'id': fn id<u32>(u32) -> u32
1252 [44; 52) 'id(1u32)': u32 1252 44..52 'id(1u32)': u32
1253 [47; 51) '1u32': u32 1253 47..51 '1u32': u32
1254 [58; 68) 'id::<i128>': fn id<i128>(i128) -> i128 1254 58..68 'id::<i128>': fn id<i128>(i128) -> i128
1255 [58; 71) 'id::<i128>(1)': i128 1255 58..71 'id::<i128>(1)': i128
1256 [69; 70) '1': i128 1256 69..70 '1': i128
1257 [81; 82) 'x': u64 1257 81..82 'x': u64
1258 [90; 92) 'id': fn id<u64>(u64) -> u64 1258 90..92 'id': fn id<u64>(u64) -> u64
1259 [90; 95) 'id(1)': u64 1259 90..95 'id(1)': u64
1260 [93; 94) '1': u64 1260 93..94 '1': u64
1261 "### 1261 "###
1262 ); 1262 );
1263} 1263}
@@ -1291,38 +1291,38 @@ fn test() -> i128 {
1291} 1291}
1292"#), 1292"#),
1293 @r###" 1293 @r###"
1294 [74; 78) 'self': A<X, Y> 1294 74..78 'self': A<X, Y>
1295 [85; 107) '{ ... }': X 1295 85..107 '{ ... }': X
1296 [95; 99) 'self': A<X, Y> 1296 95..99 'self': A<X, Y>
1297 [95; 101) 'self.x': X 1297 95..101 'self.x': X
1298 [117; 121) 'self': A<X, Y> 1298 117..121 'self': A<X, Y>
1299 [128; 150) '{ ... }': Y 1299 128..150 '{ ... }': Y
1300 [138; 142) 'self': A<X, Y> 1300 138..142 'self': A<X, Y>
1301 [138; 144) 'self.y': Y 1301 138..144 'self.y': Y
1302 [163; 167) 'self': A<X, Y> 1302 163..167 'self': A<X, Y>
1303 [169; 170) 't': T 1303 169..170 't': T
1304 [188; 223) '{ ... }': (X, Y, T) 1304 188..223 '{ ... }': (X, Y, T)
1305 [198; 217) '(self.....y, t)': (X, Y, T) 1305 198..217 '(self.....y, t)': (X, Y, T)
1306 [199; 203) 'self': A<X, Y> 1306 199..203 'self': A<X, Y>
1307 [199; 205) 'self.x': X 1307 199..205 'self.x': X
1308 [207; 211) 'self': A<X, Y> 1308 207..211 'self': A<X, Y>
1309 [207; 213) 'self.y': Y 1309 207..213 'self.y': Y
1310 [215; 216) 't': T 1310 215..216 't': T
1311 [245; 342) '{ ...(1); }': () 1311 245..342 '{ ...(1); }': ()
1312 [255; 256) 'a': A<u64, i64> 1312 255..256 'a': A<u64, i64>
1313 [259; 281) 'A { x:...1i64 }': A<u64, i64> 1313 259..281 'A { x:...1i64 }': A<u64, i64>
1314 [266; 270) '1u64': u64 1314 266..270 '1u64': u64
1315 [275; 279) '1i64': i64 1315 275..279 '1i64': i64
1316 [287; 288) 'a': A<u64, i64> 1316 287..288 'a': A<u64, i64>
1317 [287; 292) 'a.x()': u64 1317 287..292 'a.x()': u64
1318 [298; 299) 'a': A<u64, i64> 1318 298..299 'a': A<u64, i64>
1319 [298; 303) 'a.y()': i64 1319 298..303 'a.y()': i64
1320 [309; 310) 'a': A<u64, i64> 1320 309..310 'a': A<u64, i64>
1321 [309; 319) 'a.z(1i128)': (u64, i64, i128) 1321 309..319 'a.z(1i128)': (u64, i64, i128)
1322 [313; 318) '1i128': i128 1322 313..318 '1i128': i128
1323 [325; 326) 'a': A<u64, i64> 1323 325..326 'a': A<u64, i64>
1324 [325; 339) 'a.z::<u128>(1)': (u64, i64, u128) 1324 325..339 'a.z::<u128>(1)': (u64, i64, u128)
1325 [337; 338) '1': u128 1325 337..338 '1': u128
1326 "### 1326 "###
1327 ); 1327 );
1328} 1328}
@@ -1344,15 +1344,15 @@ fn test(o: Option<u32>) {
1344} 1344}
1345"#), 1345"#),
1346 @r###" 1346 @r###"
1347 [78; 82) 'self': &Option<T> 1347 78..82 'self': &Option<T>
1348 [98; 100) '{}': () 1348 98..100 '{}': ()
1349 [111; 112) 'o': Option<u32> 1349 111..112 'o': Option<u32>
1350 [127; 165) '{ ...f(); }': () 1350 127..165 '{ ...f(); }': ()
1351 [133; 146) '(&o).as_ref()': Option<&u32> 1351 133..146 '(&o).as_ref()': Option<&u32>
1352 [134; 136) '&o': &Option<u32> 1352 134..136 '&o': &Option<u32>
1353 [135; 136) 'o': Option<u32> 1353 135..136 'o': Option<u32>
1354 [152; 153) 'o': Option<u32> 1354 152..153 'o': Option<u32>
1355 [152; 162) 'o.as_ref()': Option<&u32> 1355 152..162 'o.as_ref()': Option<&u32>
1356 "### 1356 "###
1357 ); 1357 );
1358} 1358}
@@ -1381,35 +1381,35 @@ fn test() -> i128 {
1381} 1381}
1382"#), 1382"#),
1383 @r###" 1383 @r###"
1384 [53; 57) 'self': A<T2> 1384 53..57 'self': A<T2>
1385 [65; 87) '{ ... }': T2 1385 65..87 '{ ... }': T2
1386 [75; 79) 'self': A<T2> 1386 75..79 'self': A<T2>
1387 [75; 81) 'self.x': T2 1387 75..81 'self.x': T2
1388 [99; 100) 't': T 1388 99..100 't': T
1389 [110; 115) '{ t }': T 1389 110..115 '{ t }': T
1390 [112; 113) 't': T 1390 112..113 't': T
1391 [135; 261) '{ ....x() }': i128 1391 135..261 '{ ....x() }': i128
1392 [146; 147) 'x': i128 1392 146..147 'x': i128
1393 [150; 151) '1': i128 1393 150..151 '1': i128
1394 [162; 163) 'y': i128 1394 162..163 'y': i128
1395 [166; 168) 'id': fn id<i128>(i128) -> i128 1395 166..168 'id': fn id<i128>(i128) -> i128
1396 [166; 171) 'id(x)': i128 1396 166..171 'id(x)': i128
1397 [169; 170) 'x': i128 1397 169..170 'x': i128
1398 [182; 183) 'a': A<i128> 1398 182..183 'a': A<i128>
1399 [186; 200) 'A { x: id(y) }': A<i128> 1399 186..200 'A { x: id(y) }': A<i128>
1400 [193; 195) 'id': fn id<i128>(i128) -> i128 1400 193..195 'id': fn id<i128>(i128) -> i128
1401 [193; 198) 'id(y)': i128 1401 193..198 'id(y)': i128
1402 [196; 197) 'y': i128 1402 196..197 'y': i128
1403 [211; 212) 'z': i128 1403 211..212 'z': i128
1404 [215; 217) 'id': fn id<i128>(i128) -> i128 1404 215..217 'id': fn id<i128>(i128) -> i128
1405 [215; 222) 'id(a.x)': i128 1405 215..222 'id(a.x)': i128
1406 [218; 219) 'a': A<i128> 1406 218..219 'a': A<i128>
1407 [218; 221) 'a.x': i128 1407 218..221 'a.x': i128
1408 [233; 234) 'b': A<i128> 1408 233..234 'b': A<i128>
1409 [237; 247) 'A { x: z }': A<i128> 1409 237..247 'A { x: z }': A<i128>
1410 [244; 245) 'z': i128 1410 244..245 'z': i128
1411 [254; 255) 'b': A<i128> 1411 254..255 'b': A<i128>
1412 [254; 259) 'b.x()': i128 1412 254..259 'b.x()': i128
1413 "### 1413 "###
1414 ); 1414 );
1415} 1415}
@@ -1447,16 +1447,16 @@ fn test() {
1447} 1447}
1448"#), 1448"#),
1449 @r###" 1449 @r###"
1450 [52; 53) '1': u32 1450 52..53 '1': u32
1451 [105; 106) '2': u32 1451 105..106 '2': u32
1452 [213; 214) '5': u32 1452 213..214 '5': u32
1453 [229; 307) '{ ...:ID; }': () 1453 229..307 '{ ...:ID; }': ()
1454 [239; 240) 'x': u32 1454 239..240 'x': u32
1455 [243; 254) 'Struct::FOO': u32 1455 243..254 'Struct::FOO': u32
1456 [264; 265) 'y': u32 1456 264..265 'y': u32
1457 [268; 277) 'Enum::BAR': u32 1457 268..277 'Enum::BAR': u32
1458 [287; 288) 'z': u32 1458 287..288 'z': u32
1459 [291; 304) 'TraitTest::ID': u32 1459 291..304 'TraitTest::ID': u32
1460 "### 1460 "###
1461 ); 1461 );
1462} 1462}
@@ -1479,22 +1479,22 @@ fn test(x: Foo, y: Bar<&str>, z: Baz<i8, u8>) {
1479} 1479}
1480"#), 1480"#),
1481 @r###" 1481 @r###"
1482 [116; 117) 'x': A<u32, i128> 1482 116..117 'x': A<u32, i128>
1483 [124; 125) 'y': A<&str, u128> 1483 124..125 'y': A<&str, u128>
1484 [138; 139) 'z': A<u8, i8> 1484 138..139 'z': A<u8, i8>
1485 [154; 211) '{ ...z.y; }': () 1485 154..211 '{ ...z.y; }': ()
1486 [160; 161) 'x': A<u32, i128> 1486 160..161 'x': A<u32, i128>
1487 [160; 163) 'x.x': u32 1487 160..163 'x.x': u32
1488 [169; 170) 'x': A<u32, i128> 1488 169..170 'x': A<u32, i128>
1489 [169; 172) 'x.y': i128 1489 169..172 'x.y': i128
1490 [178; 179) 'y': A<&str, u128> 1490 178..179 'y': A<&str, u128>
1491 [178; 181) 'y.x': &str 1491 178..181 'y.x': &str
1492 [187; 188) 'y': A<&str, u128> 1492 187..188 'y': A<&str, u128>
1493 [187; 190) 'y.y': u128 1493 187..190 'y.y': u128
1494 [196; 197) 'z': A<u8, i8> 1494 196..197 'z': A<u8, i8>
1495 [196; 199) 'z.x': u8 1495 196..199 'z.x': u8
1496 [205; 206) 'z': A<u8, i8> 1496 205..206 'z': A<u8, i8>
1497 [205; 208) 'z.y': i8 1497 205..208 'z.y': i8
1498 "### 1498 "###
1499 ) 1499 )
1500} 1500}
@@ -1509,8 +1509,8 @@ type Bar = A<Bar>;
1509fn test(x: Foo) {} 1509fn test(x: Foo) {}
1510"#), 1510"#),
1511 @r###" 1511 @r###"
1512 [59; 60) 'x': {unknown} 1512 59..60 'x': {unknown}
1513 [67; 69) '{}': () 1513 67..69 '{}': ()
1514 "### 1514 "###
1515 ) 1515 )
1516} 1516}
@@ -1535,26 +1535,26 @@ fn test() {
1535} 1535}
1536"#), 1536"#),
1537 @r###" 1537 @r###"
1538 [10; 11) 'x': T 1538 10..11 'x': T
1539 [21; 30) '{ x }': T 1539 21..30 '{ x }': T
1540 [27; 28) 'x': T 1540 27..28 'x': T
1541 [44; 45) 'x': &T 1541 44..45 'x': &T
1542 [56; 66) '{ *x }': T 1542 56..66 '{ *x }': T
1543 [62; 64) '*x': T 1543 62..64 '*x': T
1544 [63; 64) 'x': &T 1544 63..64 'x': &T
1545 [78; 158) '{ ...(1); }': () 1545 78..158 '{ ...(1); }': ()
1546 [88; 89) 'y': u32 1546 88..89 'y': u32
1547 [92; 97) '10u32': u32 1547 92..97 '10u32': u32
1548 [103; 105) 'id': fn id<u32>(u32) -> u32 1548 103..105 'id': fn id<u32>(u32) -> u32
1549 [103; 108) 'id(y)': u32 1549 103..108 'id(y)': u32
1550 [106; 107) 'y': u32 1550 106..107 'y': u32
1551 [118; 119) 'x': bool 1551 118..119 'x': bool
1552 [128; 133) 'clone': fn clone<bool>(&bool) -> bool 1552 128..133 'clone': fn clone<bool>(&bool) -> bool
1553 [128; 136) 'clone(z)': bool 1553 128..136 'clone(z)': bool
1554 [134; 135) 'z': &bool 1554 134..135 'z': &bool
1555 [142; 152) 'id::<i128>': fn id<i128>(i128) -> i128 1555 142..152 'id::<i128>': fn id<i128>(i128) -> i128
1556 [142; 155) 'id::<i128>(1)': i128 1556 142..155 'id::<i128>(1)': i128
1557 [153; 154) '1': i128 1557 153..154 '1': i128
1558 "### 1558 "###
1559 ); 1559 );
1560} 1560}
@@ -1574,16 +1574,16 @@ fn test() {
1574} 1574}
1575"#), 1575"#),
1576 @r###" 1576 @r###"
1577 [49; 50) '0': u32 1577 49..50 '0': u32
1578 [80; 83) '101': u32 1578 80..83 '101': u32
1579 [95; 213) '{ ...NST; }': () 1579 95..213 '{ ...NST; }': ()
1580 [138; 139) 'x': u32 1580 138..139 'x': u32
1581 [142; 153) 'LOCAL_CONST': u32 1581 142..153 'LOCAL_CONST': u32
1582 [163; 164) 'z': u32 1582 163..164 'z': u32
1583 [167; 179) 'GLOBAL_CONST': u32 1583 167..179 'GLOBAL_CONST': u32
1584 [189; 191) 'id': u32 1584 189..191 'id': u32
1585 [194; 210) 'Foo::A..._CONST': u32 1585 194..210 'Foo::A..._CONST': u32
1586 [126; 128) '99': u32 1586 126..128 '99': u32
1587 "### 1587 "###
1588 ); 1588 );
1589} 1589}
@@ -1604,19 +1604,19 @@ fn test() {
1604} 1604}
1605"#), 1605"#),
1606 @r###" 1606 @r###"
1607 [29; 32) '101': u32 1607 29..32 '101': u32
1608 [70; 73) '101': u32 1608 70..73 '101': u32
1609 [85; 280) '{ ...MUT; }': () 1609 85..280 '{ ...MUT; }': ()
1610 [173; 174) 'x': u32 1610 173..174 'x': u32
1611 [177; 189) 'LOCAL_STATIC': u32 1611 177..189 'LOCAL_STATIC': u32
1612 [199; 200) 'y': u32 1612 199..200 'y': u32
1613 [203; 219) 'LOCAL_...IC_MUT': u32 1613 203..219 'LOCAL_...IC_MUT': u32
1614 [229; 230) 'z': u32 1614 229..230 'z': u32
1615 [233; 246) 'GLOBAL_STATIC': u32 1615 233..246 'GLOBAL_STATIC': u32
1616 [256; 257) 'w': u32 1616 256..257 'w': u32
1617 [260; 277) 'GLOBAL...IC_MUT': u32 1617 260..277 'GLOBAL...IC_MUT': u32
1618 [118; 120) '99': u32 1618 118..120 '99': u32
1619 [161; 163) '99': u32 1619 161..163 '99': u32
1620 "### 1620 "###
1621 ); 1621 );
1622} 1622}
@@ -1684,12 +1684,12 @@ fn foo() -> u32 {
1684} 1684}
1685"#), 1685"#),
1686 @r###" 1686 @r###"
1687 [17; 59) '{ ...; }; }': () 1687 17..59 '{ ...; }; }': ()
1688 [27; 28) 'x': || -> usize 1688 27..28 'x': || -> usize
1689 [31; 56) '|| -> ...n 1; }': || -> usize 1689 31..56 '|| -> ...n 1; }': || -> usize
1690 [43; 56) '{ return 1; }': ! 1690 43..56 '{ return 1; }': !
1691 [45; 53) 'return 1': ! 1691 45..53 'return 1': !
1692 [52; 53) '1': usize 1692 52..53 '1': usize
1693 "### 1693 "###
1694 ); 1694 );
1695} 1695}
@@ -1703,11 +1703,11 @@ fn foo() -> u32 {
1703} 1703}
1704"#), 1704"#),
1705 @r###" 1705 @r###"
1706 [17; 48) '{ ...; }; }': () 1706 17..48 '{ ...; }; }': ()
1707 [27; 28) 'x': || -> () 1707 27..28 'x': || -> ()
1708 [31; 45) '|| { return; }': || -> () 1708 31..45 '|| { return; }': || -> ()
1709 [34; 45) '{ return; }': ! 1709 34..45 '{ return; }': !
1710 [36; 42) 'return': ! 1710 36..42 'return': !
1711 "### 1711 "###
1712 ); 1712 );
1713} 1713}
@@ -1721,11 +1721,11 @@ fn foo() -> u32 {
1721} 1721}
1722"#), 1722"#),
1723 @r###" 1723 @r###"
1724 [17; 47) '{ ..." }; }': () 1724 17..47 '{ ..." }; }': ()
1725 [27; 28) 'x': || -> &str 1725 27..28 'x': || -> &str
1726 [31; 44) '|| { "test" }': || -> &str 1726 31..44 '|| { "test" }': || -> &str
1727 [34; 44) '{ "test" }': &str 1727 34..44 '{ "test" }': &str
1728 [36; 42) '"test"': &str 1728 36..42 '"test"': &str
1729 "### 1729 "###
1730 ); 1730 );
1731} 1731}
@@ -1744,14 +1744,14 @@ fn main() {
1744} 1744}
1745"#), 1745"#),
1746 @r###" 1746 @r###"
1747 [48; 121) '{ ...hod; }': () 1747 48..121 '{ ...hod; }': ()
1748 [58; 64) 'vtable': Vtable 1748 58..64 'vtable': Vtable
1749 [67; 91) 'Vtable...| {} }': Vtable 1749 67..91 'Vtable...| {} }': Vtable
1750 [84; 89) '|| {}': || -> () 1750 84..89 '|| {}': || -> ()
1751 [87; 89) '{}': () 1751 87..89 '{}': ()
1752 [101; 102) 'm': fn() 1752 101..102 'm': fn()
1753 [105; 111) 'vtable': Vtable 1753 105..111 'vtable': Vtable
1754 [105; 118) 'vtable.method': fn() 1754 105..118 'vtable.method': fn()
1755 "### 1755 "###
1756 ); 1756 );
1757} 1757}
diff --git a/crates/ra_hir_ty/src/tests/traits.rs b/crates/ra_hir_ty/src/tests/traits.rs
index a46f03b7f..f51cdd496 100644
--- a/crates/ra_hir_ty/src/tests/traits.rs
+++ b/crates/ra_hir_ty/src/tests/traits.rs
@@ -256,16 +256,16 @@ fn test() {
256} 256}
257"#), 257"#),
258 @r###" 258 @r###"
259 [86; 87) 't': T 259 86..87 't': T
260 [92; 94) '{}': () 260 92..94 '{}': ()
261 [105; 144) '{ ...(s); }': () 261 105..144 '{ ...(s); }': ()
262 [115; 116) 's': S<u32> 262 115..116 's': S<u32>
263 [119; 120) 'S': S<u32>(u32) -> S<u32> 263 119..120 'S': S<u32>(u32) -> S<u32>
264 [119; 129) 'S(unknown)': S<u32> 264 119..129 'S(unknown)': S<u32>
265 [121; 128) 'unknown': u32 265 121..128 'unknown': u32
266 [135; 138) 'foo': fn foo<S<u32>>(S<u32>) 266 135..138 'foo': fn foo<S<u32>>(S<u32>)
267 [135; 141) 'foo(s)': () 267 135..141 'foo(s)': ()
268 [139; 140) 's': S<u32> 268 139..140 's': S<u32>
269 "### 269 "###
270 ); 270 );
271} 271}
@@ -284,17 +284,17 @@ fn test() {
284} 284}
285"#), 285"#),
286 @r###" 286 @r###"
287 [87; 88) 't': T 287 87..88 't': T
288 [98; 100) '{}': () 288 98..100 '{}': ()
289 [111; 163) '{ ...(s); }': () 289 111..163 '{ ...(s); }': ()
290 [121; 122) 's': S<u32> 290 121..122 's': S<u32>
291 [125; 126) 'S': S<u32>(u32) -> S<u32> 291 125..126 'S': S<u32>(u32) -> S<u32>
292 [125; 135) 'S(unknown)': S<u32> 292 125..135 'S(unknown)': S<u32>
293 [127; 134) 'unknown': u32 293 127..134 'unknown': u32
294 [145; 146) 'x': u32 294 145..146 'x': u32
295 [154; 157) 'foo': fn foo<u32, S<u32>>(S<u32>) -> u32 295 154..157 'foo': fn foo<u32, S<u32>>(S<u32>) -> u32
296 [154; 160) 'foo(s)': u32 296 154..160 'foo(s)': u32
297 [158; 159) 's': S<u32> 297 158..159 's': S<u32>
298 "### 298 "###
299 ); 299 );
300} 300}
@@ -312,12 +312,12 @@ trait Trait {
312} 312}
313"#), 313"#),
314 @r###" 314 @r###"
315 [27; 31) 'self': &Self 315 27..31 'self': &Self
316 [53; 57) 'self': &Self 316 53..57 'self': &Self
317 [62; 97) '{ ... }': () 317 62..97 '{ ... }': ()
318 [76; 77) 'x': i64 318 76..77 'x': i64
319 [80; 84) 'self': &Self 319 80..84 'self': &Self
320 [80; 90) 'self.foo()': i64 320 80..90 'self.foo()': i64
321 "### 321 "###
322 ); 322 );
323} 323}
@@ -337,12 +337,12 @@ trait Trait: SuperTrait {
337} 337}
338"#), 338"#),
339 @r###" 339 @r###"
340 [32; 36) 'self': &Self 340 32..36 'self': &Self
341 [86; 90) 'self': &Self 341 86..90 'self': &Self
342 [95; 130) '{ ... }': () 342 95..130 '{ ... }': ()
343 [109; 110) 'x': i64 343 109..110 'x': i64
344 [113; 117) 'self': &Self 344 113..117 'self': &Self
345 [113; 123) 'self.foo()': i64 345 113..123 'self.foo()': i64
346 "### 346 "###
347 ); 347 );
348} 348}
@@ -364,15 +364,15 @@ fn test<T: Iterable>() {
364} 364}
365"#), 365"#),
366 @r###" 366 @r###"
367 [108; 261) '{ ...ter; }': () 367 108..261 '{ ...ter; }': ()
368 [118; 119) 'x': u32 368 118..119 'x': u32
369 [145; 146) '1': u32 369 145..146 '1': u32
370 [156; 157) 'y': Iterable::Item<T> 370 156..157 'y': Iterable::Item<T>
371 [183; 192) 'no_matter': Iterable::Item<T> 371 183..192 'no_matter': Iterable::Item<T>
372 [202; 203) 'z': Iterable::Item<T> 372 202..203 'z': Iterable::Item<T>
373 [215; 224) 'no_matter': Iterable::Item<T> 373 215..224 'no_matter': Iterable::Item<T>
374 [234; 235) 'a': Iterable::Item<T> 374 234..235 'a': Iterable::Item<T>
375 [249; 258) 'no_matter': Iterable::Item<T> 375 249..258 'no_matter': Iterable::Item<T>
376 "### 376 "###
377 ); 377 );
378} 378}
@@ -396,25 +396,25 @@ fn test() {
396} 396}
397"#), 397"#),
398 @r###" 398 @r###"
399 [106; 107) 't': T 399 106..107 't': T
400 [123; 125) '{}': () 400 123..125 '{}': ()
401 [147; 148) 't': T 401 147..148 't': T
402 [178; 180) '{}': () 402 178..180 '{}': ()
403 [202; 203) 't': T 403 202..203 't': T
404 [221; 223) '{}': () 404 221..223 '{}': ()
405 [234; 300) '{ ...(S); }': () 405 234..300 '{ ...(S); }': ()
406 [244; 245) 'x': u32 406 244..245 'x': u32
407 [248; 252) 'foo1': fn foo1<S>(S) -> <S as Iterable>::Item 407 248..252 'foo1': fn foo1<S>(S) -> <S as Iterable>::Item
408 [248; 255) 'foo1(S)': u32 408 248..255 'foo1(S)': u32
409 [253; 254) 'S': S 409 253..254 'S': S
410 [265; 266) 'y': u32 410 265..266 'y': u32
411 [269; 273) 'foo2': fn foo2<S>(S) -> <S as Iterable>::Item 411 269..273 'foo2': fn foo2<S>(S) -> <S as Iterable>::Item
412 [269; 276) 'foo2(S)': u32 412 269..276 'foo2(S)': u32
413 [274; 275) 'S': S 413 274..275 'S': S
414 [286; 287) 'z': u32 414 286..287 'z': u32
415 [290; 294) 'foo3': fn foo3<S>(S) -> <S as Iterable>::Item 415 290..294 'foo3': fn foo3<S>(S) -> <S as Iterable>::Item
416 [290; 297) 'foo3(S)': u32 416 290..297 'foo3(S)': u32
417 [295; 296) 'S': S 417 295..296 'S': S
418 "### 418 "###
419 ); 419 );
420} 420}
@@ -431,9 +431,9 @@ fn test<T: Iterable<Item=u32>>() {
431} 431}
432"#), 432"#),
433 @r###" 433 @r###"
434 [67; 100) '{ ...own; }': () 434 67..100 '{ ...own; }': ()
435 [77; 78) 'y': u32 435 77..78 'y': u32
436 [90; 97) 'unknown': u32 436 90..97 'unknown': u32
437 "### 437 "###
438 ); 438 );
439} 439}
@@ -446,13 +446,13 @@ const A: u32 = 1 + 1;
446static B: u64 = { let x = 1; x }; 446static B: u64 = { let x = 1; x };
447"#), 447"#),
448 @r###" 448 @r###"
449 [16; 17) '1': u32 449 16..17 '1': u32
450 [16; 21) '1 + 1': u32 450 16..21 '1 + 1': u32
451 [20; 21) '1': u32 451 20..21 '1': u32
452 [39; 55) '{ let ...1; x }': u64 452 39..55 '{ let ...1; x }': u64
453 [45; 46) 'x': u64 453 45..46 'x': u64
454 [49; 50) '1': u64 454 49..50 '1': u64
455 [52; 53) 'x': u64 455 52..53 'x': u64
456 "### 456 "###
457 ); 457 );
458} 458}
@@ -469,17 +469,17 @@ fn test() -> u64 {
469} 469}
470"#), 470"#),
471 @r###" 471 @r###"
472 [38; 87) '{ ... a.1 }': u64 472 38..87 '{ ... a.1 }': u64
473 [48; 49) 'a': S 473 48..49 'a': S
474 [52; 53) 'S': S(i32, u64) -> S 474 52..53 'S': S(i32, u64) -> S
475 [52; 59) 'S(4, 6)': S 475 52..59 'S(4, 6)': S
476 [54; 55) '4': i32 476 54..55 '4': i32
477 [57; 58) '6': u64 477 57..58 '6': u64
478 [69; 70) 'b': i32 478 69..70 'b': i32
479 [73; 74) 'a': S 479 73..74 'a': S
480 [73; 76) 'a.0': i32 480 73..76 'a.0': i32
481 [82; 83) 'a': S 481 82..83 'a': S
482 [82; 85) 'a.1': u64 482 82..85 'a.1': u64
483 "### 483 "###
484 ); 484 );
485} 485}
@@ -496,24 +496,24 @@ fn test() -> u64 {
496} 496}
497"#), 497"#),
498 @r###" 498 @r###"
499 [44; 102) '{ ...0(2) }': u64 499 44..102 '{ ...0(2) }': u64
500 [54; 55) 'a': S 500 54..55 'a': S
501 [58; 59) 'S': S(fn(u32) -> u64) -> S 501 58..59 'S': S(fn(u32) -> u64) -> S
502 [58; 68) 'S(|i| 2*i)': S 502 58..68 'S(|i| 2*i)': S
503 [60; 67) '|i| 2*i': |u32| -> u64 503 60..67 '|i| 2*i': |u32| -> u64
504 [61; 62) 'i': u32 504 61..62 'i': u32
505 [64; 65) '2': u32 505 64..65 '2': u32
506 [64; 67) '2*i': u32 506 64..67 '2*i': u32
507 [66; 67) 'i': u32 507 66..67 'i': u32
508 [78; 79) 'b': u64 508 78..79 'b': u64
509 [82; 83) 'a': S 509 82..83 'a': S
510 [82; 85) 'a.0': fn(u32) -> u64 510 82..85 'a.0': fn(u32) -> u64
511 [82; 88) 'a.0(4)': u64 511 82..88 'a.0(4)': u64
512 [86; 87) '4': u32 512 86..87 '4': u32
513 [94; 95) 'a': S 513 94..95 'a': S
514 [94; 97) 'a.0': fn(u32) -> u64 514 94..97 'a.0': fn(u32) -> u64
515 [94; 100) 'a.0(2)': u64 515 94..100 'a.0(2)': u64
516 [98; 99) '2': u32 516 98..99 '2': u32
517 "### 517 "###
518 ); 518 );
519} 519}
@@ -523,12 +523,12 @@ fn indexing_arrays() {
523 assert_snapshot!( 523 assert_snapshot!(
524 infer("fn main() { &mut [9][2]; }"), 524 infer("fn main() { &mut [9][2]; }"),
525 @r###" 525 @r###"
526 [10; 26) '{ &mut...[2]; }': () 526 10..26 '{ &mut...[2]; }': ()
527 [12; 23) '&mut [9][2]': &mut {unknown} 527 12..23 '&mut [9][2]': &mut {unknown}
528 [17; 20) '[9]': [i32; _] 528 17..20 '[9]': [i32; _]
529 [17; 23) '[9][2]': {unknown} 529 17..23 '[9][2]': {unknown}
530 [18; 19) '9': i32 530 18..19 '9': i32
531 [21; 22) '2': i32 531 21..22 '2': i32
532 "### 532 "###
533 ) 533 )
534} 534}
@@ -944,34 +944,34 @@ fn test(x: impl Trait<u64>, y: &impl Trait<u32>) {
944} 944}
945"#, true), 945"#, true),
946 @r###" 946 @r###"
947 [30; 34) 'self': &Self 947 30..34 'self': &Self
948 [55; 59) 'self': &Self 948 55..59 'self': &Self
949 [78; 79) 'x': impl Trait<u16> 949 78..79 'x': impl Trait<u16>
950 [98; 100) '{}': () 950 98..100 '{}': ()
951 [155; 156) 'x': impl Trait<u64> 951 155..156 'x': impl Trait<u64>
952 [175; 176) 'y': &impl Trait<u32> 952 175..176 'y': &impl Trait<u32>
953 [196; 324) '{ ...2(); }': () 953 196..324 '{ ...2(); }': ()
954 [202; 203) 'x': impl Trait<u64> 954 202..203 'x': impl Trait<u64>
955 [209; 210) 'y': &impl Trait<u32> 955 209..210 'y': &impl Trait<u32>
956 [220; 221) 'z': S<u16> 956 220..221 'z': S<u16>
957 [224; 225) 'S': S<u16>(u16) -> S<u16> 957 224..225 'S': S<u16>(u16) -> S<u16>
958 [224; 228) 'S(1)': S<u16> 958 224..228 'S(1)': S<u16>
959 [226; 227) '1': u16 959 226..227 '1': u16
960 [234; 237) 'bar': fn bar(S<u16>) 960 234..237 'bar': fn bar(S<u16>)
961 [234; 240) 'bar(z)': () 961 234..240 'bar(z)': ()
962 [238; 239) 'z': S<u16> 962 238..239 'z': S<u16>
963 [246; 247) 'x': impl Trait<u64> 963 246..247 'x': impl Trait<u64>
964 [246; 253) 'x.foo()': u64 964 246..253 'x.foo()': u64
965 [259; 260) 'y': &impl Trait<u32> 965 259..260 'y': &impl Trait<u32>
966 [259; 266) 'y.foo()': u32 966 259..266 'y.foo()': u32
967 [272; 273) 'z': S<u16> 967 272..273 'z': S<u16>
968 [272; 279) 'z.foo()': u16 968 272..279 'z.foo()': u16
969 [285; 286) 'x': impl Trait<u64> 969 285..286 'x': impl Trait<u64>
970 [285; 293) 'x.foo2()': i64 970 285..293 'x.foo2()': i64
971 [299; 300) 'y': &impl Trait<u32> 971 299..300 'y': &impl Trait<u32>
972 [299; 307) 'y.foo2()': i64 972 299..307 'y.foo2()': i64
973 [313; 314) 'z': S<u16> 973 313..314 'z': S<u16>
974 [313; 321) 'z.foo2()': i64 974 313..321 'z.foo2()': i64
975 "### 975 "###
976 ); 976 );
977} 977}
@@ -1005,39 +1005,39 @@ fn test() {
1005} 1005}
1006"#, true), 1006"#, true),
1007 @r###" 1007 @r###"
1008 [156; 157) 'x': impl Trait 1008 156..157 'x': impl Trait
1009 [176; 187) '{ loop {} }': T 1009 176..187 '{ loop {} }': T
1010 [178; 185) 'loop {}': ! 1010 178..185 'loop {}': !
1011 [183; 185) '{}': () 1011 183..185 '{}': ()
1012 [200; 201) 'x': impl Trait 1012 200..201 'x': impl Trait
1013 [220; 231) '{ loop {} }': T 1013 220..231 '{ loop {} }': T
1014 [222; 229) 'loop {}': ! 1014 222..229 'loop {}': !
1015 [227; 229) '{}': () 1015 227..229 '{}': ()
1016 [301; 510) '{ ... i32 }': () 1016 301..510 '{ ... i32 }': ()
1017 [307; 315) 'Foo::bar': fn bar<{unknown}, {unknown}>(S) -> {unknown} 1017 307..315 'Foo::bar': fn bar<{unknown}, {unknown}>(S) -> {unknown}
1018 [307; 318) 'Foo::bar(S)': {unknown} 1018 307..318 'Foo::bar(S)': {unknown}
1019 [316; 317) 'S': S 1019 316..317 'S': S
1020 [324; 339) '<F as Foo>::bar': fn bar<F, {unknown}>(S) -> {unknown} 1020 324..339 '<F as Foo>::bar': fn bar<F, {unknown}>(S) -> {unknown}
1021 [324; 342) '<F as ...bar(S)': {unknown} 1021 324..342 '<F as ...bar(S)': {unknown}
1022 [340; 341) 'S': S 1022 340..341 'S': S
1023 [348; 354) 'F::bar': fn bar<F, {unknown}>(S) -> {unknown} 1023 348..354 'F::bar': fn bar<F, {unknown}>(S) -> {unknown}
1024 [348; 357) 'F::bar(S)': {unknown} 1024 348..357 'F::bar(S)': {unknown}
1025 [355; 356) 'S': S 1025 355..356 'S': S
1026 [363; 378) 'Foo::bar::<u32>': fn bar<{unknown}, u32>(S) -> u32 1026 363..378 'Foo::bar::<u32>': fn bar<{unknown}, u32>(S) -> u32
1027 [363; 381) 'Foo::b...32>(S)': u32 1027 363..381 'Foo::b...32>(S)': u32
1028 [379; 380) 'S': S 1028 379..380 'S': S
1029 [387; 409) '<F as ...:<u32>': fn bar<F, u32>(S) -> u32 1029 387..409 '<F as ...:<u32>': fn bar<F, u32>(S) -> u32
1030 [387; 412) '<F as ...32>(S)': u32 1030 387..412 '<F as ...32>(S)': u32
1031 [410; 411) 'S': S 1031 410..411 'S': S
1032 [419; 422) 'foo': fn foo<{unknown}>(S) -> {unknown} 1032 419..422 'foo': fn foo<{unknown}>(S) -> {unknown}
1033 [419; 425) 'foo(S)': {unknown} 1033 419..425 'foo(S)': {unknown}
1034 [423; 424) 'S': S 1034 423..424 'S': S
1035 [431; 441) 'foo::<u32>': fn foo<u32>(S) -> u32 1035 431..441 'foo::<u32>': fn foo<u32>(S) -> u32
1036 [431; 444) 'foo::<u32>(S)': u32 1036 431..444 'foo::<u32>(S)': u32
1037 [442; 443) 'S': S 1037 442..443 'S': S
1038 [450; 465) 'foo::<u32, i32>': fn foo<u32>(S) -> u32 1038 450..465 'foo::<u32, i32>': fn foo<u32>(S) -> u32
1039 [450; 468) 'foo::<...32>(S)': u32 1039 450..468 'foo::<...32>(S)': u32
1040 [466; 467) 'S': S 1040 466..467 'S': S
1041 "### 1041 "###
1042 ); 1042 );
1043} 1043}
@@ -1062,24 +1062,24 @@ fn test() {
1062} 1062}
1063"#, true), 1063"#, true),
1064 @r###" 1064 @r###"
1065 [88; 92) 'self': F<T> 1065 88..92 'self': F<T>
1066 [94; 95) 'x': impl Trait 1066 94..95 'x': impl Trait
1067 [119; 130) '{ loop {} }': (T, U) 1067 119..130 '{ loop {} }': (T, U)
1068 [121; 128) 'loop {}': ! 1068 121..128 'loop {}': !
1069 [126; 128) '{}': () 1069 126..128 '{}': ()
1070 [144; 284) '{ ...ored }': () 1070 144..284 '{ ...ored }': ()
1071 [150; 151) 'F': F<{unknown}> 1071 150..151 'F': F<{unknown}>
1072 [150; 158) 'F.foo(S)': ({unknown}, {unknown}) 1072 150..158 'F.foo(S)': ({unknown}, {unknown})
1073 [156; 157) 'S': S 1073 156..157 'S': S
1074 [164; 172) 'F::<u32>': F<u32> 1074 164..172 'F::<u32>': F<u32>
1075 [164; 179) 'F::<u32>.foo(S)': (u32, {unknown}) 1075 164..179 'F::<u32>.foo(S)': (u32, {unknown})
1076 [177; 178) 'S': S 1076 177..178 'S': S
1077 [185; 193) 'F::<u32>': F<u32> 1077 185..193 'F::<u32>': F<u32>
1078 [185; 207) 'F::<u3...32>(S)': (u32, i32) 1078 185..207 'F::<u3...32>(S)': (u32, i32)
1079 [205; 206) 'S': S 1079 205..206 'S': S
1080 [213; 221) 'F::<u32>': F<u32> 1080 213..221 'F::<u32>': F<u32>
1081 [213; 240) 'F::<u3...32>(S)': (u32, i32) 1081 213..240 'F::<u3...32>(S)': (u32, i32)
1082 [238; 239) 'S': S 1082 238..239 'S': S
1083 "### 1083 "###
1084 ); 1084 );
1085} 1085}
@@ -1098,13 +1098,13 @@ fn test() {
1098} 1098}
1099"#, true), 1099"#, true),
1100 @r###" 1100 @r###"
1101 [23; 24) 'x': impl Trait 1101 23..24 'x': impl Trait
1102 [38; 49) '{ loop {} }': () 1102 38..49 '{ loop {} }': ()
1103 [40; 47) 'loop {}': ! 1103 40..47 'loop {}': !
1104 [45; 47) '{}': () 1104 45..47 '{}': ()
1105 [91; 124) '{ ...foo; }': () 1105 91..124 '{ ...foo; }': ()
1106 [101; 102) 'f': fn(S) 1106 101..102 'f': fn(S)
1107 [118; 121) 'foo': fn foo(S) 1107 118..121 'foo': fn foo(S)
1108 "### 1108 "###
1109 ); 1109 );
1110} 1110}
@@ -1133,29 +1133,29 @@ fn test(x: impl Trait<u64>, y: &impl Trait<u64>) {
1133} 1133}
1134"#), 1134"#),
1135 @r###" 1135 @r###"
1136 [30; 34) 'self': &Self 1136 30..34 'self': &Self
1137 [55; 59) 'self': &Self 1137 55..59 'self': &Self
1138 [99; 101) '{}': () 1138 99..101 '{}': ()
1139 [111; 112) 'x': impl Trait<u64> 1139 111..112 'x': impl Trait<u64>
1140 [131; 132) 'y': &impl Trait<u64> 1140 131..132 'y': &impl Trait<u64>
1141 [152; 269) '{ ...2(); }': () 1141 152..269 '{ ...2(); }': ()
1142 [158; 159) 'x': impl Trait<u64> 1142 158..159 'x': impl Trait<u64>
1143 [165; 166) 'y': &impl Trait<u64> 1143 165..166 'y': &impl Trait<u64>
1144 [176; 177) 'z': impl Trait<u64> 1144 176..177 'z': impl Trait<u64>
1145 [180; 183) 'bar': fn bar() -> impl Trait<u64> 1145 180..183 'bar': fn bar() -> impl Trait<u64>
1146 [180; 185) 'bar()': impl Trait<u64> 1146 180..185 'bar()': impl Trait<u64>
1147 [191; 192) 'x': impl Trait<u64> 1147 191..192 'x': impl Trait<u64>
1148 [191; 198) 'x.foo()': u64 1148 191..198 'x.foo()': u64
1149 [204; 205) 'y': &impl Trait<u64> 1149 204..205 'y': &impl Trait<u64>
1150 [204; 211) 'y.foo()': u64 1150 204..211 'y.foo()': u64
1151 [217; 218) 'z': impl Trait<u64> 1151 217..218 'z': impl Trait<u64>
1152 [217; 224) 'z.foo()': u64 1152 217..224 'z.foo()': u64
1153 [230; 231) 'x': impl Trait<u64> 1153 230..231 'x': impl Trait<u64>
1154 [230; 238) 'x.foo2()': i64 1154 230..238 'x.foo2()': i64
1155 [244; 245) 'y': &impl Trait<u64> 1155 244..245 'y': &impl Trait<u64>
1156 [244; 252) 'y.foo2()': i64 1156 244..252 'y.foo2()': i64
1157 [258; 259) 'z': impl Trait<u64> 1157 258..259 'z': impl Trait<u64>
1158 [258; 266) 'z.foo2()': i64 1158 258..266 'z.foo2()': i64
1159 "### 1159 "###
1160 ); 1160 );
1161} 1161}
@@ -1183,29 +1183,29 @@ fn test(x: dyn Trait<u64>, y: &dyn Trait<u64>) {
1183} 1183}
1184"#), 1184"#),
1185 @r###" 1185 @r###"
1186 [30; 34) 'self': &Self 1186 30..34 'self': &Self
1187 [55; 59) 'self': &Self 1187 55..59 'self': &Self
1188 [98; 100) '{}': () 1188 98..100 '{}': ()
1189 [110; 111) 'x': dyn Trait<u64> 1189 110..111 'x': dyn Trait<u64>
1190 [129; 130) 'y': &dyn Trait<u64> 1190 129..130 'y': &dyn Trait<u64>
1191 [149; 266) '{ ...2(); }': () 1191 149..266 '{ ...2(); }': ()
1192 [155; 156) 'x': dyn Trait<u64> 1192 155..156 'x': dyn Trait<u64>
1193 [162; 163) 'y': &dyn Trait<u64> 1193 162..163 'y': &dyn Trait<u64>
1194 [173; 174) 'z': dyn Trait<u64> 1194 173..174 'z': dyn Trait<u64>
1195 [177; 180) 'bar': fn bar() -> dyn Trait<u64> 1195 177..180 'bar': fn bar() -> dyn Trait<u64>
1196 [177; 182) 'bar()': dyn Trait<u64> 1196 177..182 'bar()': dyn Trait<u64>
1197 [188; 189) 'x': dyn Trait<u64> 1197 188..189 'x': dyn Trait<u64>
1198 [188; 195) 'x.foo()': u64 1198 188..195 'x.foo()': u64
1199 [201; 202) 'y': &dyn Trait<u64> 1199 201..202 'y': &dyn Trait<u64>
1200 [201; 208) 'y.foo()': u64 1200 201..208 'y.foo()': u64
1201 [214; 215) 'z': dyn Trait<u64> 1201 214..215 'z': dyn Trait<u64>
1202 [214; 221) 'z.foo()': u64 1202 214..221 'z.foo()': u64
1203 [227; 228) 'x': dyn Trait<u64> 1203 227..228 'x': dyn Trait<u64>
1204 [227; 235) 'x.foo2()': i64 1204 227..235 'x.foo2()': i64
1205 [241; 242) 'y': &dyn Trait<u64> 1205 241..242 'y': &dyn Trait<u64>
1206 [241; 249) 'y.foo2()': i64 1206 241..249 'y.foo2()': i64
1207 [255; 256) 'z': dyn Trait<u64> 1207 255..256 'z': dyn Trait<u64>
1208 [255; 263) 'z.foo2()': i64 1208 255..263 'z.foo2()': i64
1209 "### 1209 "###
1210 ); 1210 );
1211} 1211}
@@ -1231,17 +1231,17 @@ fn test(s: S<u32, i32>) {
1231} 1231}
1232"#), 1232"#),
1233 @r###" 1233 @r###"
1234 [33; 37) 'self': &Self 1234 33..37 'self': &Self
1235 [103; 107) 'self': &S<T, U> 1235 103..107 'self': &S<T, U>
1236 [129; 140) '{ loop {} }': &dyn Trait<T, U> 1236 129..140 '{ loop {} }': &dyn Trait<T, U>
1237 [131; 138) 'loop {}': ! 1237 131..138 'loop {}': !
1238 [136; 138) '{}': () 1238 136..138 '{}': ()
1239 [176; 180) 'self': &Self 1239 176..180 'self': &Self
1240 [252; 253) 's': S<u32, i32> 1240 252..253 's': S<u32, i32>
1241 [268; 290) '{ ...z(); }': () 1241 268..290 '{ ...z(); }': ()
1242 [274; 275) 's': S<u32, i32> 1242 274..275 's': S<u32, i32>
1243 [274; 281) 's.bar()': &dyn Trait<u32, i32> 1243 274..281 's.bar()': &dyn Trait<u32, i32>
1244 [274; 287) 's.bar().baz()': (u32, i32) 1244 274..287 's.bar().baz()': (u32, i32)
1245 "### 1245 "###
1246 ); 1246 );
1247} 1247}
@@ -1265,22 +1265,22 @@ fn test(x: Trait, y: &Trait) -> u64 {
1265} 1265}
1266"#), 1266"#),
1267 @r###" 1267 @r###"
1268 [27; 31) 'self': &Self 1268 27..31 'self': &Self
1269 [61; 63) '{}': () 1269 61..63 '{}': ()
1270 [73; 74) 'x': dyn Trait 1270 73..74 'x': dyn Trait
1271 [83; 84) 'y': &dyn Trait 1271 83..84 'y': &dyn Trait
1272 [101; 176) '{ ...o(); }': () 1272 101..176 '{ ...o(); }': ()
1273 [107; 108) 'x': dyn Trait 1273 107..108 'x': dyn Trait
1274 [114; 115) 'y': &dyn Trait 1274 114..115 'y': &dyn Trait
1275 [125; 126) 'z': dyn Trait 1275 125..126 'z': dyn Trait
1276 [129; 132) 'bar': fn bar() -> dyn Trait 1276 129..132 'bar': fn bar() -> dyn Trait
1277 [129; 134) 'bar()': dyn Trait 1277 129..134 'bar()': dyn Trait
1278 [140; 141) 'x': dyn Trait 1278 140..141 'x': dyn Trait
1279 [140; 147) 'x.foo()': u64 1279 140..147 'x.foo()': u64
1280 [153; 154) 'y': &dyn Trait 1280 153..154 'y': &dyn Trait
1281 [153; 160) 'y.foo()': u64 1281 153..160 'y.foo()': u64
1282 [166; 167) 'z': dyn Trait 1282 166..167 'z': dyn Trait
1283 [166; 173) 'z.foo()': u64 1283 166..173 'z.foo()': u64
1284 "### 1284 "###
1285 ); 1285 );
1286} 1286}
@@ -1294,13 +1294,13 @@ fn test(a: impl Trait + 'lifetime, b: impl 'lifetime, c: impl (Trait), d: impl (
1294} 1294}
1295"#), 1295"#),
1296 @r###" 1296 @r###"
1297 [24; 25) 'a': impl Trait + {error} 1297 24..25 'a': impl Trait + {error}
1298 [51; 52) 'b': impl {error} 1298 51..52 'b': impl {error}
1299 [70; 71) 'c': impl Trait 1299 70..71 'c': impl Trait
1300 [87; 88) 'd': impl {error} 1300 87..88 'd': impl {error}
1301 [108; 109) 'e': impl {error} 1301 108..109 'e': impl {error}
1302 [124; 125) 'f': impl Trait + {error} 1302 124..125 'f': impl Trait + {error}
1303 [148; 151) '{ }': () 1303 148..151 '{ }': ()
1304 "### 1304 "###
1305 ); 1305 );
1306} 1306}
@@ -1349,41 +1349,41 @@ fn test<T: Trait<Type = u32>>(x: T, y: impl Trait<Type = i64>) {
1349} 1349}
1350"#), 1350"#),
1351 @r###" 1351 @r###"
1352 [50; 51) 't': T 1352 50..51 't': T
1353 [78; 80) '{}': () 1353 78..80 '{}': ()
1354 [112; 113) 't': T 1354 112..113 't': T
1355 [123; 125) '{}': () 1355 123..125 '{}': ()
1356 [155; 156) 't': T 1356 155..156 't': T
1357 [166; 169) '{t}': T 1357 166..169 '{t}': T
1358 [167; 168) 't': T 1358 167..168 't': T
1359 [257; 258) 'x': T 1359 257..258 'x': T
1360 [263; 264) 'y': impl Trait<Type = i64> 1360 263..264 'y': impl Trait<Type = i64>
1361 [290; 398) '{ ...r>); }': () 1361 290..398 '{ ...r>); }': ()
1362 [296; 299) 'get': fn get<T>(T) -> <T as Trait>::Type 1362 296..299 'get': fn get<T>(T) -> <T as Trait>::Type
1363 [296; 302) 'get(x)': u32 1363 296..302 'get(x)': u32
1364 [300; 301) 'x': T 1364 300..301 'x': T
1365 [308; 312) 'get2': fn get2<u32, T>(T) -> u32 1365 308..312 'get2': fn get2<u32, T>(T) -> u32
1366 [308; 315) 'get2(x)': u32 1366 308..315 'get2(x)': u32
1367 [313; 314) 'x': T 1367 313..314 'x': T
1368 [321; 324) 'get': fn get<impl Trait<Type = i64>>(impl Trait<Type = i64>) -> <impl Trait<Type = i64> as Trait>::Type 1368 321..324 'get': fn get<impl Trait<Type = i64>>(impl Trait<Type = i64>) -> <impl Trait<Type = i64> as Trait>::Type
1369 [321; 327) 'get(y)': i64 1369 321..327 'get(y)': i64
1370 [325; 326) 'y': impl Trait<Type = i64> 1370 325..326 'y': impl Trait<Type = i64>
1371 [333; 337) 'get2': fn get2<i64, impl Trait<Type = i64>>(impl Trait<Type = i64>) -> i64 1371 333..337 'get2': fn get2<i64, impl Trait<Type = i64>>(impl Trait<Type = i64>) -> i64
1372 [333; 340) 'get2(y)': i64 1372 333..340 'get2(y)': i64
1373 [338; 339) 'y': impl Trait<Type = i64> 1373 338..339 'y': impl Trait<Type = i64>
1374 [346; 349) 'get': fn get<S<u64>>(S<u64>) -> <S<u64> as Trait>::Type 1374 346..349 'get': fn get<S<u64>>(S<u64>) -> <S<u64> as Trait>::Type
1375 [346; 357) 'get(set(S))': u64 1375 346..357 'get(set(S))': u64
1376 [350; 353) 'set': fn set<S<u64>>(S<u64>) -> S<u64> 1376 350..353 'set': fn set<S<u64>>(S<u64>) -> S<u64>
1377 [350; 356) 'set(S)': S<u64> 1377 350..356 'set(S)': S<u64>
1378 [354; 355) 'S': S<u64> 1378 354..355 'S': S<u64>
1379 [363; 367) 'get2': fn get2<u64, S<u64>>(S<u64>) -> u64 1379 363..367 'get2': fn get2<u64, S<u64>>(S<u64>) -> u64
1380 [363; 375) 'get2(set(S))': u64 1380 363..375 'get2(set(S))': u64
1381 [368; 371) 'set': fn set<S<u64>>(S<u64>) -> S<u64> 1381 368..371 'set': fn set<S<u64>>(S<u64>) -> S<u64>
1382 [368; 374) 'set(S)': S<u64> 1382 368..374 'set(S)': S<u64>
1383 [372; 373) 'S': S<u64> 1383 372..373 'S': S<u64>
1384 [381; 385) 'get2': fn get2<str, S<str>>(S<str>) -> str 1384 381..385 'get2': fn get2<str, S<str>>(S<str>) -> str
1385 [381; 395) 'get2(S::<str>)': str 1385 381..395 'get2(S::<str>)': str
1386 [386; 394) 'S::<str>': S<str> 1386 386..394 'S::<str>': S<str>
1387 "### 1387 "###
1388 ); 1388 );
1389} 1389}
@@ -1448,11 +1448,11 @@ fn test<T: Trait1<Type = u32>>(x: T) {
1448} 1448}
1449"#), 1449"#),
1450 @r###" 1450 @r###"
1451 [62; 66) 'self': Self 1451 62..66 'self': Self
1452 [164; 165) 'x': T 1452 164..165 'x': T
1453 [170; 186) '{ ...o(); }': () 1453 170..186 '{ ...o(); }': ()
1454 [176; 177) 'x': T 1454 176..177 'x': T
1455 [176; 183) 'x.foo()': u32 1455 176..183 'x.foo()': u32
1456 "### 1456 "###
1457 ); 1457 );
1458} 1458}
@@ -1494,15 +1494,15 @@ fn test<T: Trait1, U: Trait2>(x: T, y: U) {
1494} 1494}
1495"#), 1495"#),
1496 @r###" 1496 @r###"
1497 [50; 54) 'self': &Self 1497 50..54 'self': &Self
1498 [63; 65) '{}': () 1498 63..65 '{}': ()
1499 [182; 183) 'x': T 1499 182..183 'x': T
1500 [188; 189) 'y': U 1500 188..189 'y': U
1501 [194; 223) '{ ...o(); }': () 1501 194..223 '{ ...o(); }': ()
1502 [200; 201) 'x': T 1502 200..201 'x': T
1503 [200; 207) 'x.foo()': u32 1503 200..207 'x.foo()': u32
1504 [213; 214) 'y': U 1504 213..214 'y': U
1505 [213; 220) 'y.foo()': u32 1505 213..220 'y.foo()': u32
1506 "### 1506 "###
1507 ); 1507 );
1508} 1508}
@@ -1523,12 +1523,12 @@ fn test(x: &impl Trait1) {
1523} 1523}
1524"#), 1524"#),
1525 @r###" 1525 @r###"
1526 [50; 54) 'self': &Self 1526 50..54 'self': &Self
1527 [63; 65) '{}': () 1527 63..65 '{}': ()
1528 [116; 117) 'x': &impl Trait1 1528 116..117 'x': &impl Trait1
1529 [133; 149) '{ ...o(); }': () 1529 133..149 '{ ...o(); }': ()
1530 [139; 140) 'x': &impl Trait1 1530 139..140 'x': &impl Trait1
1531 [139; 146) 'x.foo()': u32 1531 139..146 'x.foo()': u32
1532 "### 1532 "###
1533 ); 1533 );
1534} 1534}
@@ -1546,10 +1546,10 @@ fn test<T: A>(x: T) {
1546} 1546}
1547"#), 1547"#),
1548 @r###" 1548 @r###"
1549 [44; 45) 'x': T 1549 44..45 'x': T
1550 [50; 66) '{ ...o(); }': () 1550 50..66 '{ ...o(); }': ()
1551 [56; 57) 'x': T 1551 56..57 'x': T
1552 [56; 63) 'x.foo()': {unknown} 1552 56..63 'x.foo()': {unknown}
1553 "### 1553 "###
1554 ); 1554 );
1555} 1555}
@@ -1573,17 +1573,17 @@ fn test() {
1573} 1573}
1574"#), 1574"#),
1575 @r###" 1575 @r###"
1576 [103; 104) 't': T 1576 103..104 't': T
1577 [114; 116) '{}': () 1577 114..116 '{}': ()
1578 [146; 147) 't': T 1578 146..147 't': T
1579 [157; 160) '{t}': T 1579 157..160 '{t}': T
1580 [158; 159) 't': T 1580 158..159 't': T
1581 [259; 280) '{ ...S)); }': () 1581 259..280 '{ ...S)); }': ()
1582 [265; 269) 'get2': fn get2<u64, S<u64>>(S<u64>) -> u64 1582 265..269 'get2': fn get2<u64, S<u64>>(S<u64>) -> u64
1583 [265; 277) 'get2(set(S))': u64 1583 265..277 'get2(set(S))': u64
1584 [270; 273) 'set': fn set<S<u64>>(S<u64>) -> S<u64> 1584 270..273 'set': fn set<S<u64>>(S<u64>) -> S<u64>
1585 [270; 276) 'set(S)': S<u64> 1585 270..276 'set(S)': S<u64>
1586 [274; 275) 'S': S<u64> 1586 274..275 'S': S<u64>
1587 "### 1587 "###
1588 ); 1588 );
1589} 1589}
@@ -1603,15 +1603,15 @@ fn test<F: FnOnce(u32, u64) -> u128>(f: F) {
1603} 1603}
1604"#), 1604"#),
1605 @r###" 1605 @r###"
1606 [57; 61) 'self': Self 1606 57..61 'self': Self
1607 [63; 67) 'args': Args 1607 63..67 'args': Args
1608 [150; 151) 'f': F 1608 150..151 'f': F
1609 [156; 184) '{ ...2)); }': () 1609 156..184 '{ ...2)); }': ()
1610 [162; 163) 'f': F 1610 162..163 'f': F
1611 [162; 181) 'f.call...1, 2))': u128 1611 162..181 'f.call...1, 2))': u128
1612 [174; 180) '(1, 2)': (u32, u64) 1612 174..180 '(1, 2)': (u32, u64)
1613 [175; 176) '1': u32 1613 175..176 '1': u32
1614 [178; 179) '2': u64 1614 178..179 '2': u64
1615 "### 1615 "###
1616 ); 1616 );
1617} 1617}
@@ -1638,32 +1638,32 @@ fn test() {
1638} 1638}
1639"#), 1639"#),
1640 @r###" 1640 @r###"
1641 [148; 152) 'self': Option<T> 1641 148..152 'self': Option<T>
1642 [154; 155) 'f': F 1642 154..155 'f': F
1643 [173; 175) '{}': () 1643 173..175 '{}': ()
1644 [189; 308) '{ ... 1); }': () 1644 189..308 '{ ... 1); }': ()
1645 [199; 200) 'x': Option<u32> 1645 199..200 'x': Option<u32>
1646 [203; 215) 'Option::Some': Some<u32>(u32) -> Option<u32> 1646 203..215 'Option::Some': Some<u32>(u32) -> Option<u32>
1647 [203; 221) 'Option...(1u32)': Option<u32> 1647 203..221 'Option...(1u32)': Option<u32>
1648 [216; 220) '1u32': u32 1648 216..220 '1u32': u32
1649 [227; 228) 'x': Option<u32> 1649 227..228 'x': Option<u32>
1650 [227; 243) 'x.map(...v + 1)': Option<u32> 1650 227..243 'x.map(...v + 1)': Option<u32>
1651 [233; 242) '|v| v + 1': |u32| -> u32 1651 233..242 '|v| v + 1': |u32| -> u32
1652 [234; 235) 'v': u32 1652 234..235 'v': u32
1653 [237; 238) 'v': u32 1653 237..238 'v': u32
1654 [237; 242) 'v + 1': u32 1654 237..242 'v + 1': u32
1655 [241; 242) '1': u32 1655 241..242 '1': u32
1656 [249; 250) 'x': Option<u32> 1656 249..250 'x': Option<u32>
1657 [249; 265) 'x.map(... 1u64)': Option<u64> 1657 249..265 'x.map(... 1u64)': Option<u64>
1658 [255; 264) '|_v| 1u64': |u32| -> u64 1658 255..264 '|_v| 1u64': |u32| -> u64
1659 [256; 258) '_v': u32 1659 256..258 '_v': u32
1660 [260; 264) '1u64': u64 1660 260..264 '1u64': u64
1661 [275; 276) 'y': Option<i64> 1661 275..276 'y': Option<i64>
1662 [292; 293) 'x': Option<u32> 1662 292..293 'x': Option<u32>
1663 [292; 305) 'x.map(|_v| 1)': Option<i64> 1663 292..305 'x.map(|_v| 1)': Option<i64>
1664 [298; 304) '|_v| 1': |u32| -> i64 1664 298..304 '|_v| 1': |u32| -> i64
1665 [299; 301) '_v': u32 1665 299..301 '_v': u32
1666 [303; 304) '1': i64 1666 303..304 '1': i64
1667 "### 1667 "###
1668 ); 1668 );
1669} 1669}
@@ -1684,26 +1684,26 @@ fn test<F: FnOnce(u32) -> u64>(f: F) {
1684} 1684}
1685"#), 1685"#),
1686 @r###" 1686 @r###"
1687 [73; 74) 'f': F 1687 73..74 'f': F
1688 [79; 155) '{ ...+ v; }': () 1688 79..155 '{ ...+ v; }': ()
1689 [85; 86) 'f': F 1689 85..86 'f': F
1690 [85; 89) 'f(1)': {unknown} 1690 85..89 'f(1)': {unknown}
1691 [87; 88) '1': i32 1691 87..88 '1': i32
1692 [99; 100) 'g': |u64| -> i32 1692 99..100 'g': |u64| -> i32
1693 [103; 112) '|v| v + 1': |u64| -> i32 1693 103..112 '|v| v + 1': |u64| -> i32
1694 [104; 105) 'v': u64 1694 104..105 'v': u64
1695 [107; 108) 'v': u64 1695 107..108 'v': u64
1696 [107; 112) 'v + 1': i32 1696 107..112 'v + 1': i32
1697 [111; 112) '1': i32 1697 111..112 '1': i32
1698 [118; 119) 'g': |u64| -> i32 1698 118..119 'g': |u64| -> i32
1699 [118; 125) 'g(1u64)': i32 1699 118..125 'g(1u64)': i32
1700 [120; 124) '1u64': u64 1700 120..124 '1u64': u64
1701 [135; 136) 'h': |u128| -> u128 1701 135..136 'h': |u128| -> u128
1702 [139; 152) '|v| 1u128 + v': |u128| -> u128 1702 139..152 '|v| 1u128 + v': |u128| -> u128
1703 [140; 141) 'v': u128 1703 140..141 'v': u128
1704 [143; 148) '1u128': u128 1704 143..148 '1u128': u128
1705 [143; 152) '1u128 + v': u128 1705 143..152 '1u128 + v': u128
1706 [151; 152) 'v': u128 1706 151..152 'v': u128
1707 "### 1707 "###
1708 ); 1708 );
1709} 1709}
@@ -1736,54 +1736,54 @@ fn test() {
1736} 1736}
1737"#), 1737"#),
1738 @r###" 1738 @r###"
1739 [95; 96) 'x': T 1739 95..96 'x': T
1740 [101; 102) 'f': F 1740 101..102 'f': F
1741 [112; 114) '{}': () 1741 112..114 '{}': ()
1742 [148; 149) 'f': F 1742 148..149 'f': F
1743 [154; 155) 'x': T 1743 154..155 'x': T
1744 [165; 167) '{}': () 1744 165..167 '{}': ()
1745 [202; 206) 'self': S 1745 202..206 'self': S
1746 [254; 258) 'self': S 1746 254..258 'self': S
1747 [260; 261) 'x': T 1747 260..261 'x': T
1748 [266; 267) 'f': F 1748 266..267 'f': F
1749 [277; 279) '{}': () 1749 277..279 '{}': ()
1750 [317; 321) 'self': S 1750 317..321 'self': S
1751 [323; 324) 'f': F 1751 323..324 'f': F
1752 [329; 330) 'x': T 1752 329..330 'x': T
1753 [340; 342) '{}': () 1753 340..342 '{}': ()
1754 [356; 515) '{ ... S); }': () 1754 356..515 '{ ... S); }': ()
1755 [366; 368) 'x1': u64 1755 366..368 'x1': u64
1756 [371; 375) 'foo1': fn foo1<S, u64, |S| -> u64>(S, |S| -> u64) -> u64 1756 371..375 'foo1': fn foo1<S, u64, |S| -> u64>(S, |S| -> u64) -> u64
1757 [371; 394) 'foo1(S...hod())': u64 1757 371..394 'foo1(S...hod())': u64
1758 [376; 377) 'S': S 1758 376..377 'S': S
1759 [379; 393) '|s| s.method()': |S| -> u64 1759 379..393 '|s| s.method()': |S| -> u64
1760 [380; 381) 's': S 1760 380..381 's': S
1761 [383; 384) 's': S 1761 383..384 's': S
1762 [383; 393) 's.method()': u64 1762 383..393 's.method()': u64
1763 [404; 406) 'x2': u64 1763 404..406 'x2': u64
1764 [409; 413) 'foo2': fn foo2<S, u64, |S| -> u64>(|S| -> u64, S) -> u64 1764 409..413 'foo2': fn foo2<S, u64, |S| -> u64>(|S| -> u64, S) -> u64
1765 [409; 432) 'foo2(|...(), S)': u64 1765 409..432 'foo2(|...(), S)': u64
1766 [414; 428) '|s| s.method()': |S| -> u64 1766 414..428 '|s| s.method()': |S| -> u64
1767 [415; 416) 's': S 1767 415..416 's': S
1768 [418; 419) 's': S 1768 418..419 's': S
1769 [418; 428) 's.method()': u64 1769 418..428 's.method()': u64
1770 [430; 431) 'S': S 1770 430..431 'S': S
1771 [442; 444) 'x3': u64 1771 442..444 'x3': u64
1772 [447; 448) 'S': S 1772 447..448 'S': S
1773 [447; 472) 'S.foo1...hod())': u64 1773 447..472 'S.foo1...hod())': u64
1774 [454; 455) 'S': S 1774 454..455 'S': S
1775 [457; 471) '|s| s.method()': |S| -> u64 1775 457..471 '|s| s.method()': |S| -> u64
1776 [458; 459) 's': S 1776 458..459 's': S
1777 [461; 462) 's': S 1777 461..462 's': S
1778 [461; 471) 's.method()': u64 1778 461..471 's.method()': u64
1779 [482; 484) 'x4': u64 1779 482..484 'x4': u64
1780 [487; 488) 'S': S 1780 487..488 'S': S
1781 [487; 512) 'S.foo2...(), S)': u64 1781 487..512 'S.foo2...(), S)': u64
1782 [494; 508) '|s| s.method()': |S| -> u64 1782 494..508 '|s| s.method()': |S| -> u64
1783 [495; 496) 's': S 1783 495..496 's': S
1784 [498; 499) 's': S 1784 498..499 's': S
1785 [498; 508) 's.method()': u64 1785 498..508 's.method()': u64
1786 [510; 511) 'S': S 1786 510..511 'S': S
1787 "### 1787 "###
1788 ); 1788 );
1789} 1789}
@@ -1858,18 +1858,18 @@ impl Trait for S2 {
1858} 1858}
1859"#, 1859"#,
1860 ), @r###" 1860 ), @r###"
1861 [54; 58) 'self': &Self 1861 54..58 'self': &Self
1862 [60; 61) 'x': Trait::Item<Self> 1862 60..61 'x': Trait::Item<Self>
1863 [140; 144) 'self': &S 1863 140..144 'self': &S
1864 [146; 147) 'x': u32 1864 146..147 'x': u32
1865 [161; 175) '{ let y = x; }': () 1865 161..175 '{ let y = x; }': ()
1866 [167; 168) 'y': u32 1866 167..168 'y': u32
1867 [171; 172) 'x': u32 1867 171..172 'x': u32
1868 [242; 246) 'self': &S2 1868 242..246 'self': &S2
1869 [248; 249) 'x': i32 1869 248..249 'x': i32
1870 [265; 279) '{ let y = x; }': () 1870 265..279 '{ let y = x; }': ()
1871 [271; 272) 'y': i32 1871 271..272 'y': i32
1872 [275; 276) 'x': i32 1872 275..276 'x': i32
1873 "###); 1873 "###);
1874} 1874}
1875 1875
@@ -2077,15 +2077,15 @@ impl TokenStream for Rustc {
2077} 2077}
2078"#, true), 2078"#, true),
2079 @r###" 2079 @r###"
2080 [1115; 1126) '{ loop {} }': T 2080 1115..1126 '{ loop {} }': T
2081 [1117; 1124) 'loop {}': ! 2081 1117..1124 'loop {}': !
2082 [1122; 1124) '{}': () 2082 1122..1124 '{}': ()
2083 [1190; 1253) '{ ... }': {unknown} 2083 1190..1253 '{ ... }': {unknown}
2084 [1204; 1209) 'group': {unknown} 2084 1204..1209 'group': {unknown}
2085 [1225; 1229) 'make': fn make<{unknown}>() -> {unknown} 2085 1225..1229 'make': fn make<{unknown}>() -> {unknown}
2086 [1225; 1231) 'make()': {unknown} 2086 1225..1231 'make()': {unknown}
2087 [1241; 1245) 'make': fn make<{unknown}>() -> {unknown} 2087 1241..1245 'make': fn make<{unknown}>() -> {unknown}
2088 [1241; 1247) 'make()': {unknown} 2088 1241..1247 'make()': {unknown}
2089 "### 2089 "###
2090 ); 2090 );
2091} 2091}
@@ -2112,37 +2112,37 @@ fn test() -> impl Trait<i32> {
2112} 2112}
2113"#, true), 2113"#, true),
2114 @r###" 2114 @r###"
2115 [27; 28) 'x': impl Trait<u32> 2115 27..28 'x': impl Trait<u32>
2116 [47; 58) '{ loop {} }': () 2116 47..58 '{ loop {} }': ()
2117 [49; 56) 'loop {}': ! 2117 49..56 'loop {}': !
2118 [54; 56) '{}': () 2118 54..56 '{}': ()
2119 [69; 70) 'x': impl Trait<T> 2119 69..70 'x': impl Trait<T>
2120 [92; 103) '{ loop {} }': T 2120 92..103 '{ loop {} }': T
2121 [94; 101) 'loop {}': ! 2121 94..101 'loop {}': !
2122 [99; 101) '{}': () 2122 99..101 '{}': ()
2123 [172; 183) '{ loop {} }': T 2123 172..183 '{ loop {} }': T
2124 [174; 181) 'loop {}': ! 2124 174..181 'loop {}': !
2125 [179; 181) '{}': () 2125 179..181 '{}': ()
2126 [214; 310) '{ ...t()) }': S<{unknown}> 2126 214..310 '{ ...t()) }': S<{unknown}>
2127 [224; 226) 's1': S<u32> 2127 224..226 's1': S<u32>
2128 [229; 230) 'S': S<u32>(u32) -> S<u32> 2128 229..230 'S': S<u32>(u32) -> S<u32>
2129 [229; 241) 'S(default())': S<u32> 2129 229..241 'S(default())': S<u32>
2130 [231; 238) 'default': fn default<u32>() -> u32 2130 231..238 'default': fn default<u32>() -> u32
2131 [231; 240) 'default()': u32 2131 231..240 'default()': u32
2132 [247; 250) 'foo': fn foo(S<u32>) 2132 247..250 'foo': fn foo(S<u32>)
2133 [247; 254) 'foo(s1)': () 2133 247..254 'foo(s1)': ()
2134 [251; 253) 's1': S<u32> 2134 251..253 's1': S<u32>
2135 [264; 265) 'x': i32 2135 264..265 'x': i32
2136 [273; 276) 'bar': fn bar<i32>(S<i32>) -> i32 2136 273..276 'bar': fn bar<i32>(S<i32>) -> i32
2137 [273; 290) 'bar(S(...lt()))': i32 2137 273..290 'bar(S(...lt()))': i32
2138 [277; 278) 'S': S<i32>(i32) -> S<i32> 2138 277..278 'S': S<i32>(i32) -> S<i32>
2139 [277; 289) 'S(default())': S<i32> 2139 277..289 'S(default())': S<i32>
2140 [279; 286) 'default': fn default<i32>() -> i32 2140 279..286 'default': fn default<i32>() -> i32
2141 [279; 288) 'default()': i32 2141 279..288 'default()': i32
2142 [296; 297) 'S': S<{unknown}>({unknown}) -> S<{unknown}> 2142 296..297 'S': S<{unknown}>({unknown}) -> S<{unknown}>
2143 [296; 308) 'S(default())': S<{unknown}> 2143 296..308 'S(default())': S<{unknown}>
2144 [298; 305) 'default': fn default<{unknown}>() -> {unknown} 2144 298..305 'default': fn default<{unknown}>() -> {unknown}
2145 [298; 307) 'default()': {unknown} 2145 298..307 'default()': {unknown}
2146 "### 2146 "###
2147 ); 2147 );
2148} 2148}
@@ -2176,15 +2176,15 @@ fn main() {
2176} 2176}
2177"#), 2177"#),
2178 @r###" 2178 @r###"
2179 [147; 149) '_v': F 2179 147..149 '_v': F
2180 [192; 195) '{ }': () 2180 192..195 '{ }': ()
2181 [207; 238) '{ ... }); }': () 2181 207..238 '{ ... }); }': ()
2182 [213; 223) 'f::<(), _>': fn f<(), |&()| -> ()>(|&()| -> ()) 2182 213..223 'f::<(), _>': fn f<(), |&()| -> ()>(|&()| -> ())
2183 [213; 235) 'f::<()... z; })': () 2183 213..235 'f::<()... z; })': ()
2184 [224; 234) '|z| { z; }': |&()| -> () 2184 224..234 '|z| { z; }': |&()| -> ()
2185 [225; 226) 'z': &() 2185 225..226 'z': &()
2186 [228; 234) '{ z; }': () 2186 228..234 '{ z; }': ()
2187 [230; 231) 'z': &() 2187 230..231 'z': &()
2188 "### 2188 "###
2189 ); 2189 );
2190} 2190}
@@ -2337,46 +2337,46 @@ fn main() {
2337} 2337}
2338"#), 2338"#),
2339 @r###" 2339 @r###"
2340 [240; 244) 'self': Self 2340 240..244 'self': Self
2341 [246; 247) 'f': F 2341 246..247 'f': F
2342 [331; 342) '{ loop {} }': FilterMap<Self, F> 2342 331..342 '{ loop {} }': FilterMap<Self, F>
2343 [333; 340) 'loop {}': ! 2343 333..340 'loop {}': !
2344 [338; 340) '{}': () 2344 338..340 '{}': ()
2345 [363; 367) 'self': Self 2345 363..367 'self': Self
2346 [369; 370) 'f': F 2346 369..370 'f': F
2347 [419; 430) '{ loop {} }': () 2347 419..430 '{ loop {} }': ()
2348 [421; 428) 'loop {}': ! 2348 421..428 'loop {}': !
2349 [426; 428) '{}': () 2349 426..428 '{}': ()
2350 [539; 543) 'self': Self 2350 539..543 'self': Self
2351 [868; 872) 'self': I 2351 868..872 'self': I
2352 [879; 899) '{ ... }': I 2352 879..899 '{ ... }': I
2353 [889; 893) 'self': I 2353 889..893 'self': I
2354 [958; 969) '{ loop {} }': Vec<T> 2354 958..969 '{ loop {} }': Vec<T>
2355 [960; 967) 'loop {}': ! 2355 960..967 'loop {}': !
2356 [965; 967) '{}': () 2356 965..967 '{}': ()
2357 [1156; 1287) '{ ... }); }': () 2357 1156..1287 '{ ... }); }': ()
2358 [1162; 1177) 'Vec::<i32>::new': fn new<i32>() -> Vec<i32> 2358 1162..1177 'Vec::<i32>::new': fn new<i32>() -> Vec<i32>
2359 [1162; 1179) 'Vec::<...:new()': Vec<i32> 2359 1162..1179 'Vec::<...:new()': Vec<i32>
2360 [1162; 1191) 'Vec::<...iter()': IntoIter<i32> 2360 1162..1191 'Vec::<...iter()': IntoIter<i32>
2361 [1162; 1256) 'Vec::<...one })': FilterMap<IntoIter<i32>, |i32| -> Option<u32>> 2361 1162..1256 'Vec::<...one })': FilterMap<IntoIter<i32>, |i32| -> Option<u32>>
2362 [1162; 1284) 'Vec::<... y; })': () 2362 1162..1284 'Vec::<... y; })': ()
2363 [1210; 1255) '|x| if...None }': |i32| -> Option<u32> 2363 1210..1255 '|x| if...None }': |i32| -> Option<u32>
2364 [1211; 1212) 'x': i32 2364 1211..1212 'x': i32
2365 [1214; 1255) 'if x >...None }': Option<u32> 2365 1214..1255 'if x >...None }': Option<u32>
2366 [1217; 1218) 'x': i32 2366 1217..1218 'x': i32
2367 [1217; 1222) 'x > 0': bool 2367 1217..1222 'x > 0': bool
2368 [1221; 1222) '0': i32 2368 1221..1222 '0': i32
2369 [1223; 1241) '{ Some...u32) }': Option<u32> 2369 1223..1241 '{ Some...u32) }': Option<u32>
2370 [1225; 1229) 'Some': Some<u32>(u32) -> Option<u32> 2370 1225..1229 'Some': Some<u32>(u32) -> Option<u32>
2371 [1225; 1239) 'Some(x as u32)': Option<u32> 2371 1225..1239 'Some(x as u32)': Option<u32>
2372 [1230; 1231) 'x': i32 2372 1230..1231 'x': i32
2373 [1230; 1238) 'x as u32': u32 2373 1230..1238 'x as u32': u32
2374 [1247; 1255) '{ None }': Option<u32> 2374 1247..1255 '{ None }': Option<u32>
2375 [1249; 1253) 'None': Option<u32> 2375 1249..1253 'None': Option<u32>
2376 [1273; 1283) '|y| { y; }': |u32| -> () 2376 1273..1283 '|y| { y; }': |u32| -> ()
2377 [1274; 1275) 'y': u32 2377 1274..1275 'y': u32
2378 [1277; 1283) '{ y; }': () 2378 1277..1283 '{ y; }': ()
2379 [1279; 1280) 'y': u32 2379 1279..1280 'y': u32
2380 "### 2380 "###
2381 ); 2381 );
2382} 2382}
@@ -2428,13 +2428,13 @@ fn test(x: &dyn Foo) {
2428} 2428}
2429"#, true), 2429"#, true),
2430 @r###" 2430 @r###"
2431 [22; 23) 'x': &dyn Foo 2431 22..23 'x': &dyn Foo
2432 [35; 37) '{}': () 2432 35..37 '{}': ()
2433 [47; 48) 'x': &dyn Foo 2433 47..48 'x': &dyn Foo
2434 [60; 75) '{ foo(x); }': () 2434 60..75 '{ foo(x); }': ()
2435 [66; 69) 'foo': fn foo(&dyn Foo) 2435 66..69 'foo': fn foo(&dyn Foo)
2436 [66; 72) 'foo(x)': () 2436 66..72 'foo(x)': ()
2437 [70; 71) 'x': &dyn Foo 2437 70..71 'x': &dyn Foo
2438 "### 2438 "###
2439 ); 2439 );
2440} 2440}
diff --git a/crates/ra_ide/src/assists.rs b/crates/ra_ide/src/assists.rs
index 40d56a4f7..2b5d11681 100644
--- a/crates/ra_ide/src/assists.rs
+++ b/crates/ra_ide/src/assists.rs
@@ -37,6 +37,10 @@ fn action_to_edit(
37 file_id: FileId, 37 file_id: FileId,
38 assist_label: &AssistLabel, 38 assist_label: &AssistLabel,
39) -> SourceChange { 39) -> SourceChange {
40 let file_id = match action.file {
41 ra_assists::AssistFile::TargetFile(it) => it,
42 _ => file_id,
43 };
40 let file_edit = SourceFileEdit { file_id, edit: action.edit }; 44 let file_edit = SourceFileEdit { file_id, edit: action.edit };
41 SourceChange::source_file_edit(assist_label.label.clone(), file_edit) 45 SourceChange::source_file_edit(assist_label.label.clone(), file_edit)
42 .with_cursor_opt(action.cursor_position.map(|offset| FilePosition { offset, file_id })) 46 .with_cursor_opt(action.cursor_position.map(|offset| FilePosition { offset, file_id }))
diff --git a/crates/ra_ide/src/call_hierarchy.rs b/crates/ra_ide/src/call_hierarchy.rs
index b00b6d431..85d1f0cb1 100644
--- a/crates/ra_ide/src/call_hierarchy.rs
+++ b/crates/ra_ide/src/call_hierarchy.rs
@@ -183,8 +183,8 @@ mod tests {
183 call<|>ee(); 183 call<|>ee();
184 } 184 }
185 "#, 185 "#,
186 "callee FN_DEF FileId(1) [0; 14) [3; 9)", 186 "callee FN_DEF FileId(1) 0..14 3..9",
187 &["caller FN_DEF FileId(1) [15; 44) [18; 24) : [[33; 39)]"], 187 &["caller FN_DEF FileId(1) 15..44 18..24 : [33..39]"],
188 &[], 188 &[],
189 ); 189 );
190 } 190 }
@@ -199,8 +199,8 @@ mod tests {
199 callee(); 199 callee();
200 } 200 }
201 "#, 201 "#,
202 "callee FN_DEF FileId(1) [0; 14) [3; 9)", 202 "callee FN_DEF FileId(1) 0..14 3..9",
203 &["caller FN_DEF FileId(1) [15; 44) [18; 24) : [[33; 39)]"], 203 &["caller FN_DEF FileId(1) 15..44 18..24 : [33..39]"],
204 &[], 204 &[],
205 ); 205 );
206 } 206 }
@@ -216,8 +216,8 @@ mod tests {
216 callee(); 216 callee();
217 } 217 }
218 "#, 218 "#,
219 "callee FN_DEF FileId(1) [0; 14) [3; 9)", 219 "callee FN_DEF FileId(1) 0..14 3..9",
220 &["caller FN_DEF FileId(1) [15; 58) [18; 24) : [[33; 39), [47; 53)]"], 220 &["caller FN_DEF FileId(1) 15..58 18..24 : [33..39, 47..53]"],
221 &[], 221 &[],
222 ); 222 );
223 } 223 }
@@ -236,10 +236,10 @@ mod tests {
236 callee(); 236 callee();
237 } 237 }
238 "#, 238 "#,
239 "callee FN_DEF FileId(1) [0; 14) [3; 9)", 239 "callee FN_DEF FileId(1) 0..14 3..9",
240 &[ 240 &[
241 "caller1 FN_DEF FileId(1) [15; 45) [18; 25) : [[34; 40)]", 241 "caller1 FN_DEF FileId(1) 15..45 18..25 : [34..40]",
242 "caller2 FN_DEF FileId(1) [46; 76) [49; 56) : [[65; 71)]", 242 "caller2 FN_DEF FileId(1) 46..76 49..56 : [65..71]",
243 ], 243 ],
244 &[], 244 &[],
245 ); 245 );
@@ -260,8 +260,8 @@ mod tests {
260 //- /foo/mod.rs 260 //- /foo/mod.rs
261 pub fn callee() {} 261 pub fn callee() {}
262 "#, 262 "#,
263 "callee FN_DEF FileId(2) [0; 18) [7; 13)", 263 "callee FN_DEF FileId(2) 0..18 7..13",
264 &["caller FN_DEF FileId(1) [26; 55) [29; 35) : [[44; 50)]"], 264 &["caller FN_DEF FileId(1) 26..55 29..35 : [44..50]"],
265 &[], 265 &[],
266 ); 266 );
267 } 267 }
@@ -277,9 +277,9 @@ mod tests {
277 callee(); 277 callee();
278 } 278 }
279 "#, 279 "#,
280 "caller FN_DEF FileId(1) [15; 58) [18; 24)", 280 "caller FN_DEF FileId(1) 15..58 18..24",
281 &[], 281 &[],
282 &["callee FN_DEF FileId(1) [0; 14) [3; 9) : [[33; 39), [47; 53)]"], 282 &["callee FN_DEF FileId(1) 0..14 3..9 : [33..39, 47..53]"],
283 ); 283 );
284 } 284 }
285 285
@@ -298,9 +298,9 @@ mod tests {
298 //- /foo/mod.rs 298 //- /foo/mod.rs
299 pub fn callee() {} 299 pub fn callee() {}
300 "#, 300 "#,
301 "caller FN_DEF FileId(1) [26; 55) [29; 35)", 301 "caller FN_DEF FileId(1) 26..55 29..35",
302 &[], 302 &[],
303 &["callee FN_DEF FileId(2) [0; 18) [7; 13) : [[44; 50)]"], 303 &["callee FN_DEF FileId(2) 0..18 7..13 : [44..50]"],
304 ); 304 );
305 } 305 }
306 306
@@ -321,9 +321,9 @@ mod tests {
321 321
322 } 322 }
323 "#, 323 "#,
324 "caller2 FN_DEF FileId(1) [32; 63) [35; 42)", 324 "caller2 FN_DEF FileId(1) 32..63 35..42",
325 &["caller1 FN_DEF FileId(1) [0; 31) [3; 10) : [[19; 26)]"], 325 &["caller1 FN_DEF FileId(1) 0..31 3..10 : [19..26]"],
326 &["caller3 FN_DEF FileId(1) [64; 80) [67; 74) : [[51; 58)]"], 326 &["caller3 FN_DEF FileId(1) 64..80 67..74 : [51..58]"],
327 ); 327 );
328 } 328 }
329} 329}
diff --git a/crates/ra_ide/src/call_info.rs b/crates/ra_ide/src/call_info.rs
index 5da254a6e..780a03c13 100644
--- a/crates/ra_ide/src/call_info.rs
+++ b/crates/ra_ide/src/call_info.rs
@@ -126,7 +126,7 @@ impl FnCallNode {
126 ast::CallExpr(it) => Some(FnCallNode::CallExpr(it)), 126 ast::CallExpr(it) => Some(FnCallNode::CallExpr(it)),
127 ast::MethodCallExpr(it) => { 127 ast::MethodCallExpr(it) => {
128 let arg_list = it.arg_list()?; 128 let arg_list = it.arg_list()?;
129 if !syntax.text_range().is_subrange(&arg_list.syntax().text_range()) { 129 if !arg_list.syntax().text_range().contains_range(syntax.text_range()) {
130 return None; 130 return None;
131 } 131 }
132 Some(FnCallNode::MethodCallExpr(it)) 132 Some(FnCallNode::MethodCallExpr(it))
diff --git a/crates/ra_ide/src/completion.rs b/crates/ra_ide/src/completion.rs
index f0e02180b..4ca0fdf4f 100644
--- a/crates/ra_ide/src/completion.rs
+++ b/crates/ra_ide/src/completion.rs
@@ -5,6 +5,7 @@ mod completion_item;
5mod completion_context; 5mod completion_context;
6mod presentation; 6mod presentation;
7 7
8mod complete_attribute;
8mod complete_dot; 9mod complete_dot;
9mod complete_record; 10mod complete_record;
10mod complete_pattern; 11mod complete_pattern;
@@ -78,6 +79,7 @@ pub(crate) fn completions(
78 complete_postfix::complete_postfix(&mut acc, &ctx); 79 complete_postfix::complete_postfix(&mut acc, &ctx);
79 complete_macro_in_item_position::complete_macro_in_item_position(&mut acc, &ctx); 80 complete_macro_in_item_position::complete_macro_in_item_position(&mut acc, &ctx);
80 complete_trait_impl::complete_trait_impl(&mut acc, &ctx); 81 complete_trait_impl::complete_trait_impl(&mut acc, &ctx);
82 complete_attribute::complete_attribute(&mut acc, &ctx);
81 83
82 Some(acc) 84 Some(acc)
83} 85}
diff --git a/crates/ra_ide/src/completion/complete_attribute.rs b/crates/ra_ide/src/completion/complete_attribute.rs
new file mode 100644
index 000000000..8bf952798
--- /dev/null
+++ b/crates/ra_ide/src/completion/complete_attribute.rs
@@ -0,0 +1,587 @@
1//! Completion for attributes
2//!
3//! This module uses a bit of static metadata to provide completions
4//! for built-in attributes.
5
6use super::completion_context::CompletionContext;
7use super::completion_item::{CompletionItem, CompletionItemKind, CompletionKind, Completions};
8use ra_syntax::{
9 ast::{Attr, AttrKind},
10 AstNode,
11};
12
13pub(super) fn complete_attribute(acc: &mut Completions, ctx: &CompletionContext) {
14 if !ctx.is_attribute {
15 return;
16 }
17
18 let is_inner = ctx
19 .original_token
20 .ancestors()
21 .find_map(Attr::cast)
22 .map(|attr| attr.kind() == AttrKind::Inner)
23 .unwrap_or(false);
24
25 for attr_completion in ATTRIBUTES {
26 let mut item = CompletionItem::new(
27 CompletionKind::Attribute,
28 ctx.source_range(),
29 attr_completion.label,
30 )
31 .kind(CompletionItemKind::Attribute);
32
33 match (attr_completion.snippet, ctx.config.snippet_cap) {
34 (Some(snippet), Some(cap)) => {
35 item = item.insert_snippet(cap, snippet);
36 }
37 _ => {}
38 }
39
40 if is_inner || !attr_completion.should_be_inner {
41 acc.add(item);
42 }
43 }
44}
45
46struct AttrCompletion {
47 label: &'static str,
48 snippet: Option<&'static str>,
49 should_be_inner: bool,
50}
51
52const ATTRIBUTES: &[AttrCompletion] = &[
53 AttrCompletion { label: "allow", snippet: Some("allow(${0:lint})"), should_be_inner: false },
54 AttrCompletion {
55 label: "cfg_attr",
56 snippet: Some("cfg_attr(${1:predicate}, ${0:attr})"),
57 should_be_inner: false,
58 },
59 AttrCompletion { label: "cfg", snippet: Some("cfg(${0:predicate})"), should_be_inner: false },
60 AttrCompletion { label: "deny", snippet: Some("deny(${0:lint})"), should_be_inner: false },
61 AttrCompletion {
62 label: "deprecated",
63 snippet: Some(r#"deprecated = "${0:reason}""#),
64 should_be_inner: false,
65 },
66 AttrCompletion {
67 label: "derive",
68 snippet: Some(r#"derive(${0:Debug})"#),
69 should_be_inner: false,
70 },
71 AttrCompletion { label: "doc", snippet: Some(r#"doc = "${0:docs}""#), should_be_inner: false },
72 AttrCompletion { label: "feature", snippet: Some("feature(${0:flag})"), should_be_inner: true },
73 AttrCompletion { label: "forbid", snippet: Some("forbid(${0:lint})"), should_be_inner: false },
74 // FIXME: resolve through macro resolution?
75 AttrCompletion { label: "global_allocator", snippet: None, should_be_inner: true },
76 AttrCompletion { label: "ignore", snippet: Some("ignore(${0:lint})"), should_be_inner: false },
77 AttrCompletion { label: "inline", snippet: Some("inline(${0:lint})"), should_be_inner: false },
78 AttrCompletion {
79 label: "link_name",
80 snippet: Some(r#"link_name = "${0:symbol_name}""#),
81 should_be_inner: false,
82 },
83 AttrCompletion { label: "link", snippet: None, should_be_inner: false },
84 AttrCompletion { label: "macro_export", snippet: None, should_be_inner: false },
85 AttrCompletion { label: "macro_use", snippet: None, should_be_inner: false },
86 AttrCompletion {
87 label: "must_use",
88 snippet: Some(r#"must_use = "${0:reason}""#),
89 should_be_inner: false,
90 },
91 AttrCompletion { label: "no_mangle", snippet: None, should_be_inner: false },
92 AttrCompletion { label: "no_std", snippet: None, should_be_inner: true },
93 AttrCompletion { label: "non_exhaustive", snippet: None, should_be_inner: false },
94 AttrCompletion { label: "panic_handler", snippet: None, should_be_inner: true },
95 AttrCompletion { label: "path", snippet: Some("path =\"${0:path}\""), should_be_inner: false },
96 AttrCompletion { label: "proc_macro", snippet: None, should_be_inner: false },
97 AttrCompletion { label: "proc_macro_attribute", snippet: None, should_be_inner: false },
98 AttrCompletion {
99 label: "proc_macro_derive",
100 snippet: Some("proc_macro_derive(${0:Trait})"),
101 should_be_inner: false,
102 },
103 AttrCompletion {
104 label: "recursion_limit",
105 snippet: Some("recursion_limit = ${0:128}"),
106 should_be_inner: true,
107 },
108 AttrCompletion { label: "repr", snippet: Some("repr(${0:C})"), should_be_inner: false },
109 AttrCompletion {
110 label: "should_panic",
111 snippet: Some(r#"expected = "${0:reason}""#),
112 should_be_inner: false,
113 },
114 AttrCompletion {
115 label: "target_feature",
116 snippet: Some("target_feature = \"${0:feature}\""),
117 should_be_inner: false,
118 },
119 AttrCompletion { label: "test", snippet: None, should_be_inner: false },
120 AttrCompletion { label: "used", snippet: None, should_be_inner: false },
121 AttrCompletion { label: "warn", snippet: Some("warn(${0:lint})"), should_be_inner: false },
122 AttrCompletion {
123 label: "windows_subsystem",
124 snippet: Some(r#"windows_subsystem = "${0:subsystem}""#),
125 should_be_inner: true,
126 },
127];
128
129#[cfg(test)]
130mod tests {
131 use crate::completion::{test_utils::do_completion, CompletionItem, CompletionKind};
132 use insta::assert_debug_snapshot;
133
134 fn do_attr_completion(code: &str) -> Vec<CompletionItem> {
135 do_completion(code, CompletionKind::Attribute)
136 }
137
138 #[test]
139 fn test_attribute_completion() {
140 assert_debug_snapshot!(
141 do_attr_completion(
142 r"
143 #[<|>]
144 ",
145 ),
146 @r###"
147 [
148 CompletionItem {
149 label: "allow",
150 source_range: 19..19,
151 delete: 19..19,
152 insert: "allow(${0:lint})",
153 kind: Attribute,
154 },
155 CompletionItem {
156 label: "cfg",
157 source_range: 19..19,
158 delete: 19..19,
159 insert: "cfg(${0:predicate})",
160 kind: Attribute,
161 },
162 CompletionItem {
163 label: "cfg_attr",
164 source_range: 19..19,
165 delete: 19..19,
166 insert: "cfg_attr(${1:predicate}, ${0:attr})",
167 kind: Attribute,
168 },
169 CompletionItem {
170 label: "deny",
171 source_range: 19..19,
172 delete: 19..19,
173 insert: "deny(${0:lint})",
174 kind: Attribute,
175 },
176 CompletionItem {
177 label: "deprecated",
178 source_range: 19..19,
179 delete: 19..19,
180 insert: "deprecated = \"${0:reason}\"",
181 kind: Attribute,
182 },
183 CompletionItem {
184 label: "derive",
185 source_range: 19..19,
186 delete: 19..19,
187 insert: "derive(${0:Debug})",
188 kind: Attribute,
189 },
190 CompletionItem {
191 label: "doc",
192 source_range: 19..19,
193 delete: 19..19,
194 insert: "doc = \"${0:docs}\"",
195 kind: Attribute,
196 },
197 CompletionItem {
198 label: "forbid",
199 source_range: 19..19,
200 delete: 19..19,
201 insert: "forbid(${0:lint})",
202 kind: Attribute,
203 },
204 CompletionItem {
205 label: "ignore",
206 source_range: 19..19,
207 delete: 19..19,
208 insert: "ignore(${0:lint})",
209 kind: Attribute,
210 },
211 CompletionItem {
212 label: "inline",
213 source_range: 19..19,
214 delete: 19..19,
215 insert: "inline(${0:lint})",
216 kind: Attribute,
217 },
218 CompletionItem {
219 label: "link",
220 source_range: 19..19,
221 delete: 19..19,
222 insert: "link",
223 kind: Attribute,
224 },
225 CompletionItem {
226 label: "link_name",
227 source_range: 19..19,
228 delete: 19..19,
229 insert: "link_name = \"${0:symbol_name}\"",
230 kind: Attribute,
231 },
232 CompletionItem {
233 label: "macro_export",
234 source_range: 19..19,
235 delete: 19..19,
236 insert: "macro_export",
237 kind: Attribute,
238 },
239 CompletionItem {
240 label: "macro_use",
241 source_range: 19..19,
242 delete: 19..19,
243 insert: "macro_use",
244 kind: Attribute,
245 },
246 CompletionItem {
247 label: "must_use",
248 source_range: 19..19,
249 delete: 19..19,
250 insert: "must_use = \"${0:reason}\"",
251 kind: Attribute,
252 },
253 CompletionItem {
254 label: "no_mangle",
255 source_range: 19..19,
256 delete: 19..19,
257 insert: "no_mangle",
258 kind: Attribute,
259 },
260 CompletionItem {
261 label: "non_exhaustive",
262 source_range: 19..19,
263 delete: 19..19,
264 insert: "non_exhaustive",
265 kind: Attribute,
266 },
267 CompletionItem {
268 label: "path",
269 source_range: 19..19,
270 delete: 19..19,
271 insert: "path =\"${0:path}\"",
272 kind: Attribute,
273 },
274 CompletionItem {
275 label: "proc_macro",
276 source_range: 19..19,
277 delete: 19..19,
278 insert: "proc_macro",
279 kind: Attribute,
280 },
281 CompletionItem {
282 label: "proc_macro_attribute",
283 source_range: 19..19,
284 delete: 19..19,
285 insert: "proc_macro_attribute",
286 kind: Attribute,
287 },
288 CompletionItem {
289 label: "proc_macro_derive",
290 source_range: 19..19,
291 delete: 19..19,
292 insert: "proc_macro_derive(${0:Trait})",
293 kind: Attribute,
294 },
295 CompletionItem {
296 label: "repr",
297 source_range: 19..19,
298 delete: 19..19,
299 insert: "repr(${0:C})",
300 kind: Attribute,
301 },
302 CompletionItem {
303 label: "should_panic",
304 source_range: 19..19,
305 delete: 19..19,
306 insert: "expected = \"${0:reason}\"",
307 kind: Attribute,
308 },
309 CompletionItem {
310 label: "target_feature",
311 source_range: 19..19,
312 delete: 19..19,
313 insert: "target_feature = \"${0:feature}\"",
314 kind: Attribute,
315 },
316 CompletionItem {
317 label: "test",
318 source_range: 19..19,
319 delete: 19..19,
320 insert: "test",
321 kind: Attribute,
322 },
323 CompletionItem {
324 label: "used",
325 source_range: 19..19,
326 delete: 19..19,
327 insert: "used",
328 kind: Attribute,
329 },
330 CompletionItem {
331 label: "warn",
332 source_range: 19..19,
333 delete: 19..19,
334 insert: "warn(${0:lint})",
335 kind: Attribute,
336 },
337 ]
338 "###
339 );
340 }
341
342 #[test]
343 fn test_inner_attribute_completion() {
344 assert_debug_snapshot!(
345 do_attr_completion(
346 r"
347 #![<|>]
348 ",
349 ),
350 @r###"
351 [
352 CompletionItem {
353 label: "allow",
354 source_range: 20..20,
355 delete: 20..20,
356 insert: "allow(${0:lint})",
357 kind: Attribute,
358 },
359 CompletionItem {
360 label: "cfg",
361 source_range: 20..20,
362 delete: 20..20,
363 insert: "cfg(${0:predicate})",
364 kind: Attribute,
365 },
366 CompletionItem {
367 label: "cfg_attr",
368 source_range: 20..20,
369 delete: 20..20,
370 insert: "cfg_attr(${1:predicate}, ${0:attr})",
371 kind: Attribute,
372 },
373 CompletionItem {
374 label: "deny",
375 source_range: 20..20,
376 delete: 20..20,
377 insert: "deny(${0:lint})",
378 kind: Attribute,
379 },
380 CompletionItem {
381 label: "deprecated",
382 source_range: 20..20,
383 delete: 20..20,
384 insert: "deprecated = \"${0:reason}\"",
385 kind: Attribute,
386 },
387 CompletionItem {
388 label: "derive",
389 source_range: 20..20,
390 delete: 20..20,
391 insert: "derive(${0:Debug})",
392 kind: Attribute,
393 },
394 CompletionItem {
395 label: "doc",
396 source_range: 20..20,
397 delete: 20..20,
398 insert: "doc = \"${0:docs}\"",
399 kind: Attribute,
400 },
401 CompletionItem {
402 label: "feature",
403 source_range: 20..20,
404 delete: 20..20,
405 insert: "feature(${0:flag})",
406 kind: Attribute,
407 },
408 CompletionItem {
409 label: "forbid",
410 source_range: 20..20,
411 delete: 20..20,
412 insert: "forbid(${0:lint})",
413 kind: Attribute,
414 },
415 CompletionItem {
416 label: "global_allocator",
417 source_range: 20..20,
418 delete: 20..20,
419 insert: "global_allocator",
420 kind: Attribute,
421 },
422 CompletionItem {
423 label: "ignore",
424 source_range: 20..20,
425 delete: 20..20,
426 insert: "ignore(${0:lint})",
427 kind: Attribute,
428 },
429 CompletionItem {
430 label: "inline",
431 source_range: 20..20,
432 delete: 20..20,
433 insert: "inline(${0:lint})",
434 kind: Attribute,
435 },
436 CompletionItem {
437 label: "link",
438 source_range: 20..20,
439 delete: 20..20,
440 insert: "link",
441 kind: Attribute,
442 },
443 CompletionItem {
444 label: "link_name",
445 source_range: 20..20,
446 delete: 20..20,
447 insert: "link_name = \"${0:symbol_name}\"",
448 kind: Attribute,
449 },
450 CompletionItem {
451 label: "macro_export",
452 source_range: 20..20,
453 delete: 20..20,
454 insert: "macro_export",
455 kind: Attribute,
456 },
457 CompletionItem {
458 label: "macro_use",
459 source_range: 20..20,
460 delete: 20..20,
461 insert: "macro_use",
462 kind: Attribute,
463 },
464 CompletionItem {
465 label: "must_use",
466 source_range: 20..20,
467 delete: 20..20,
468 insert: "must_use = \"${0:reason}\"",
469 kind: Attribute,
470 },
471 CompletionItem {
472 label: "no_mangle",
473 source_range: 20..20,
474 delete: 20..20,
475 insert: "no_mangle",
476 kind: Attribute,
477 },
478 CompletionItem {
479 label: "no_std",
480 source_range: 20..20,
481 delete: 20..20,
482 insert: "no_std",
483 kind: Attribute,
484 },
485 CompletionItem {
486 label: "non_exhaustive",
487 source_range: 20..20,
488 delete: 20..20,
489 insert: "non_exhaustive",
490 kind: Attribute,
491 },
492 CompletionItem {
493 label: "panic_handler",
494 source_range: 20..20,
495 delete: 20..20,
496 insert: "panic_handler",
497 kind: Attribute,
498 },
499 CompletionItem {
500 label: "path",
501 source_range: 20..20,
502 delete: 20..20,
503 insert: "path =\"${0:path}\"",
504 kind: Attribute,
505 },
506 CompletionItem {
507 label: "proc_macro",
508 source_range: 20..20,
509 delete: 20..20,
510 insert: "proc_macro",
511 kind: Attribute,
512 },
513 CompletionItem {
514 label: "proc_macro_attribute",
515 source_range: 20..20,
516 delete: 20..20,
517 insert: "proc_macro_attribute",
518 kind: Attribute,
519 },
520 CompletionItem {
521 label: "proc_macro_derive",
522 source_range: 20..20,
523 delete: 20..20,
524 insert: "proc_macro_derive(${0:Trait})",
525 kind: Attribute,
526 },
527 CompletionItem {
528 label: "recursion_limit",
529 source_range: 20..20,
530 delete: 20..20,
531 insert: "recursion_limit = ${0:128}",
532 kind: Attribute,
533 },
534 CompletionItem {
535 label: "repr",
536 source_range: 20..20,
537 delete: 20..20,
538 insert: "repr(${0:C})",
539 kind: Attribute,
540 },
541 CompletionItem {
542 label: "should_panic",
543 source_range: 20..20,
544 delete: 20..20,
545 insert: "expected = \"${0:reason}\"",
546 kind: Attribute,
547 },
548 CompletionItem {
549 label: "target_feature",
550 source_range: 20..20,
551 delete: 20..20,
552 insert: "target_feature = \"${0:feature}\"",
553 kind: Attribute,
554 },
555 CompletionItem {
556 label: "test",
557 source_range: 20..20,
558 delete: 20..20,
559 insert: "test",
560 kind: Attribute,
561 },
562 CompletionItem {
563 label: "used",
564 source_range: 20..20,
565 delete: 20..20,
566 insert: "used",
567 kind: Attribute,
568 },
569 CompletionItem {
570 label: "warn",
571 source_range: 20..20,
572 delete: 20..20,
573 insert: "warn(${0:lint})",
574 kind: Attribute,
575 },
576 CompletionItem {
577 label: "windows_subsystem",
578 source_range: 20..20,
579 delete: 20..20,
580 insert: "windows_subsystem = \"${0:subsystem}\"",
581 kind: Attribute,
582 },
583 ]
584 "###
585 );
586 }
587}
diff --git a/crates/ra_ide/src/completion/complete_dot.rs b/crates/ra_ide/src/completion/complete_dot.rs
index b93153b48..814354ffa 100644
--- a/crates/ra_ide/src/completion/complete_dot.rs
+++ b/crates/ra_ide/src/completion/complete_dot.rs
@@ -94,8 +94,8 @@ mod tests {
94 [ 94 [
95 CompletionItem { 95 CompletionItem {
96 label: "the_field", 96 label: "the_field",
97 source_range: [94; 94), 97 source_range: 94..94,
98 delete: [94; 94), 98 delete: 94..94,
99 insert: "the_field", 99 insert: "the_field",
100 kind: Field, 100 kind: Field,
101 detail: "u32", 101 detail: "u32",
@@ -125,8 +125,8 @@ mod tests {
125 [ 125 [
126 CompletionItem { 126 CompletionItem {
127 label: "foo()", 127 label: "foo()",
128 source_range: [187; 187), 128 source_range: 187..187,
129 delete: [187; 187), 129 delete: 187..187,
130 insert: "foo()$0", 130 insert: "foo()$0",
131 kind: Method, 131 kind: Method,
132 lookup: "foo", 132 lookup: "foo",
@@ -134,8 +134,8 @@ mod tests {
134 }, 134 },
135 CompletionItem { 135 CompletionItem {
136 label: "the_field", 136 label: "the_field",
137 source_range: [187; 187), 137 source_range: 187..187,
138 delete: [187; 187), 138 delete: 187..187,
139 insert: "the_field", 139 insert: "the_field",
140 kind: Field, 140 kind: Field,
141 detail: "(u32,)", 141 detail: "(u32,)",
@@ -165,8 +165,8 @@ mod tests {
165 [ 165 [
166 CompletionItem { 166 CompletionItem {
167 label: "foo()", 167 label: "foo()",
168 source_range: [126; 126), 168 source_range: 126..126,
169 delete: [126; 126), 169 delete: 126..126,
170 insert: "foo()$0", 170 insert: "foo()$0",
171 kind: Method, 171 kind: Method,
172 lookup: "foo", 172 lookup: "foo",
@@ -174,8 +174,8 @@ mod tests {
174 }, 174 },
175 CompletionItem { 175 CompletionItem {
176 label: "the_field", 176 label: "the_field",
177 source_range: [126; 126), 177 source_range: 126..126,
178 delete: [126; 126), 178 delete: 126..126,
179 insert: "the_field", 179 insert: "the_field",
180 kind: Field, 180 kind: Field,
181 detail: "(u32, i32)", 181 detail: "(u32, i32)",
@@ -222,24 +222,24 @@ mod tests {
222 [ 222 [
223 CompletionItem { 223 CompletionItem {
224 label: "crate_field", 224 label: "crate_field",
225 source_range: [313; 313), 225 source_range: 313..313,
226 delete: [313; 313), 226 delete: 313..313,
227 insert: "crate_field", 227 insert: "crate_field",
228 kind: Field, 228 kind: Field,
229 detail: "u32", 229 detail: "u32",
230 }, 230 },
231 CompletionItem { 231 CompletionItem {
232 label: "pub_field", 232 label: "pub_field",
233 source_range: [313; 313), 233 source_range: 313..313,
234 delete: [313; 313), 234 delete: 313..313,
235 insert: "pub_field", 235 insert: "pub_field",
236 kind: Field, 236 kind: Field,
237 detail: "u32", 237 detail: "u32",
238 }, 238 },
239 CompletionItem { 239 CompletionItem {
240 label: "super_field", 240 label: "super_field",
241 source_range: [313; 313), 241 source_range: 313..313,
242 delete: [313; 313), 242 delete: 313..313,
243 insert: "super_field", 243 insert: "super_field",
244 kind: Field, 244 kind: Field,
245 detail: "u32", 245 detail: "u32",
@@ -267,8 +267,8 @@ mod tests {
267 [ 267 [
268 CompletionItem { 268 CompletionItem {
269 label: "the_method()", 269 label: "the_method()",
270 source_range: [144; 144), 270 source_range: 144..144,
271 delete: [144; 144), 271 delete: 144..144,
272 insert: "the_method()$0", 272 insert: "the_method()$0",
273 kind: Method, 273 kind: Method,
274 lookup: "the_method", 274 lookup: "the_method",
@@ -300,8 +300,8 @@ mod tests {
300 [ 300 [
301 CompletionItem { 301 CompletionItem {
302 label: "the_method()", 302 label: "the_method()",
303 source_range: [243; 243), 303 source_range: 243..243,
304 delete: [243; 243), 304 delete: 243..243,
305 insert: "the_method()$0", 305 insert: "the_method()$0",
306 kind: Method, 306 kind: Method,
307 lookup: "the_method", 307 lookup: "the_method",
@@ -333,8 +333,8 @@ mod tests {
333 [ 333 [
334 CompletionItem { 334 CompletionItem {
335 label: "the_method()", 335 label: "the_method()",
336 source_range: [256; 256), 336 source_range: 256..256,
337 delete: [256; 256), 337 delete: 256..256,
338 insert: "the_method()$0", 338 insert: "the_method()$0",
339 kind: Method, 339 kind: Method,
340 lookup: "the_method", 340 lookup: "the_method",
@@ -362,8 +362,8 @@ mod tests {
362 [ 362 [
363 CompletionItem { 363 CompletionItem {
364 label: "the_method()", 364 label: "the_method()",
365 source_range: [151; 151), 365 source_range: 151..151,
366 delete: [151; 151), 366 delete: 151..151,
367 insert: "the_method()$0", 367 insert: "the_method()$0",
368 kind: Method, 368 kind: Method,
369 lookup: "the_method", 369 lookup: "the_method",
@@ -391,8 +391,8 @@ mod tests {
391 [ 391 [
392 CompletionItem { 392 CompletionItem {
393 label: "the_method()", 393 label: "the_method()",
394 source_range: [155; 155), 394 source_range: 155..155,
395 delete: [155; 155), 395 delete: 155..155,
396 insert: "the_method()$0", 396 insert: "the_method()$0",
397 kind: Method, 397 kind: Method,
398 lookup: "the_method", 398 lookup: "the_method",
@@ -423,8 +423,8 @@ mod tests {
423 [ 423 [
424 CompletionItem { 424 CompletionItem {
425 label: "the_method()", 425 label: "the_method()",
426 source_range: [219; 219), 426 source_range: 219..219,
427 delete: [219; 219), 427 delete: 219..219,
428 insert: "the_method()$0", 428 insert: "the_method()$0",
429 kind: Method, 429 kind: Method,
430 lookup: "the_method", 430 lookup: "the_method",
@@ -475,8 +475,8 @@ mod tests {
475 [ 475 [
476 CompletionItem { 476 CompletionItem {
477 label: "the_method()", 477 label: "the_method()",
478 source_range: [249; 249), 478 source_range: 249..249,
479 delete: [249; 249), 479 delete: 249..249,
480 insert: "the_method()$0", 480 insert: "the_method()$0",
481 kind: Method, 481 kind: Method,
482 lookup: "the_method", 482 lookup: "the_method",
@@ -502,16 +502,16 @@ mod tests {
502 [ 502 [
503 CompletionItem { 503 CompletionItem {
504 label: "0", 504 label: "0",
505 source_range: [75; 75), 505 source_range: 75..75,
506 delete: [75; 75), 506 delete: 75..75,
507 insert: "0", 507 insert: "0",
508 kind: Field, 508 kind: Field,
509 detail: "i32", 509 detail: "i32",
510 }, 510 },
511 CompletionItem { 511 CompletionItem {
512 label: "1", 512 label: "1",
513 source_range: [75; 75), 513 source_range: 75..75,
514 delete: [75; 75), 514 delete: 75..75,
515 insert: "1", 515 insert: "1",
516 kind: Field, 516 kind: Field,
517 detail: "f64", 517 detail: "f64",
@@ -545,8 +545,8 @@ mod tests {
545 [ 545 [
546 CompletionItem { 546 CompletionItem {
547 label: "blah()", 547 label: "blah()",
548 source_range: [299; 300), 548 source_range: 299..300,
549 delete: [299; 300), 549 delete: 299..300,
550 insert: "blah()$0", 550 insert: "blah()$0",
551 kind: Method, 551 kind: Method,
552 lookup: "blah", 552 lookup: "blah",
@@ -572,8 +572,8 @@ mod tests {
572 [ 572 [
573 CompletionItem { 573 CompletionItem {
574 label: "the_field", 574 label: "the_field",
575 source_range: [106; 106), 575 source_range: 106..106,
576 delete: [106; 106), 576 delete: 106..106,
577 insert: "the_field", 577 insert: "the_field",
578 kind: Field, 578 kind: Field,
579 detail: "u32", 579 detail: "u32",
@@ -606,8 +606,8 @@ mod tests {
606 [ 606 [
607 CompletionItem { 607 CompletionItem {
608 label: "await", 608 label: "await",
609 source_range: [74; 74), 609 source_range: 74..74,
610 delete: [74; 74), 610 delete: 74..74,
611 insert: "await", 611 insert: "await",
612 detail: "expr.await", 612 detail: "expr.await",
613 }, 613 },
@@ -638,15 +638,15 @@ mod tests {
638 [ 638 [
639 CompletionItem { 639 CompletionItem {
640 label: "A", 640 label: "A",
641 source_range: [217; 217), 641 source_range: 217..217,
642 delete: [217; 217), 642 delete: 217..217,
643 insert: "A", 643 insert: "A",
644 kind: Const, 644 kind: Const,
645 }, 645 },
646 CompletionItem { 646 CompletionItem {
647 label: "b", 647 label: "b",
648 source_range: [217; 217), 648 source_range: 217..217,
649 delete: [217; 217), 649 delete: 217..217,
650 insert: "b", 650 insert: "b",
651 kind: Module, 651 kind: Module,
652 }, 652 },
@@ -671,8 +671,8 @@ mod tests {
671 [ 671 [
672 CompletionItem { 672 CompletionItem {
673 label: "the_field", 673 label: "the_field",
674 source_range: [156; 157), 674 source_range: 156..157,
675 delete: [156; 157), 675 delete: 156..157,
676 insert: "the_field", 676 insert: "the_field",
677 kind: Field, 677 kind: Field,
678 detail: "u32", 678 detail: "u32",
@@ -698,8 +698,8 @@ mod tests {
698 [ 698 [
699 CompletionItem { 699 CompletionItem {
700 label: "the_field", 700 label: "the_field",
701 source_range: [156; 157), 701 source_range: 156..157,
702 delete: [156; 157), 702 delete: 156..157,
703 insert: "the_field", 703 insert: "the_field",
704 kind: Field, 704 kind: Field,
705 detail: "u32", 705 detail: "u32",
@@ -726,8 +726,8 @@ mod tests {
726 [ 726 [
727 CompletionItem { 727 CompletionItem {
728 label: "the_field", 728 label: "the_field",
729 source_range: [156; 156), 729 source_range: 156..156,
730 delete: [156; 156), 730 delete: 156..156,
731 insert: "the_field", 731 insert: "the_field",
732 kind: Field, 732 kind: Field,
733 detail: "u32", 733 detail: "u32",
@@ -753,8 +753,8 @@ mod tests {
753 [ 753 [
754 CompletionItem { 754 CompletionItem {
755 label: "the_field", 755 label: "the_field",
756 source_range: [162; 163), 756 source_range: 162..163,
757 delete: [162; 163), 757 delete: 162..163,
758 insert: "the_field", 758 insert: "the_field",
759 kind: Field, 759 kind: Field,
760 detail: "u32", 760 detail: "u32",
@@ -790,8 +790,8 @@ mod tests {
790 [ 790 [
791 CompletionItem { 791 CompletionItem {
792 label: "the_field", 792 label: "the_field",
793 source_range: [552; 552), 793 source_range: 552..552,
794 delete: [552; 552), 794 delete: 552..552,
795 insert: "the_field", 795 insert: "the_field",
796 kind: Field, 796 kind: Field,
797 detail: "u32", 797 detail: "u32",
@@ -820,8 +820,8 @@ mod tests {
820 [ 820 [
821 CompletionItem { 821 CompletionItem {
822 label: "the_method()", 822 label: "the_method()",
823 source_range: [201; 201), 823 source_range: 201..201,
824 delete: [201; 201), 824 delete: 201..201,
825 insert: "the_method()$0", 825 insert: "the_method()$0",
826 kind: Method, 826 kind: Method,
827 lookup: "the_method", 827 lookup: "the_method",
diff --git a/crates/ra_ide/src/completion/complete_fn_param.rs b/crates/ra_ide/src/completion/complete_fn_param.rs
index f84b559fc..a661932a3 100644
--- a/crates/ra_ide/src/completion/complete_fn_param.rs
+++ b/crates/ra_ide/src/completion/complete_fn_param.rs
@@ -75,8 +75,8 @@ mod tests {
75 [ 75 [
76 CompletionItem { 76 CompletionItem {
77 label: "file_id: FileId", 77 label: "file_id: FileId",
78 source_range: [110; 114), 78 source_range: 110..114,
79 delete: [110; 114), 79 delete: 110..114,
80 insert: "file_id: FileId", 80 insert: "file_id: FileId",
81 lookup: "file_id", 81 lookup: "file_id",
82 }, 82 },
@@ -99,8 +99,8 @@ mod tests {
99 [ 99 [
100 CompletionItem { 100 CompletionItem {
101 label: "file_id: FileId", 101 label: "file_id: FileId",
102 source_range: [110; 114), 102 source_range: 110..114,
103 delete: [110; 114), 103 delete: 110..114,
104 insert: "file_id: FileId", 104 insert: "file_id: FileId",
105 lookup: "file_id", 105 lookup: "file_id",
106 }, 106 },
@@ -126,8 +126,8 @@ mod tests {
126 [ 126 [
127 CompletionItem { 127 CompletionItem {
128 label: "file_id: FileId", 128 label: "file_id: FileId",
129 source_range: [289; 293), 129 source_range: 289..293,
130 delete: [289; 293), 130 delete: 289..293,
131 insert: "file_id: FileId", 131 insert: "file_id: FileId",
132 lookup: "file_id", 132 lookup: "file_id",
133 }, 133 },
diff --git a/crates/ra_ide/src/completion/complete_keyword.rs b/crates/ra_ide/src/completion/complete_keyword.rs
index adefb290e..fd95bc410 100644
--- a/crates/ra_ide/src/completion/complete_keyword.rs
+++ b/crates/ra_ide/src/completion/complete_keyword.rs
@@ -97,7 +97,7 @@ fn is_in_loop_body(leaf: &SyntaxToken) -> bool {
97 } 97 }
98 }; 98 };
99 if let Some(body) = loop_body { 99 if let Some(body) = loop_body {
100 if leaf.text_range().is_subrange(&body.syntax().text_range()) { 100 if body.syntax().text_range().contains_range(leaf.text_range()) {
101 return true; 101 return true;
102 } 102 }
103 } 103 }
@@ -140,22 +140,22 @@ mod tests {
140 [ 140 [
141 CompletionItem { 141 CompletionItem {
142 label: "crate", 142 label: "crate",
143 source_range: [21; 21), 143 source_range: 21..21,
144 delete: [21; 21), 144 delete: 21..21,
145 insert: "crate::", 145 insert: "crate::",
146 kind: Keyword, 146 kind: Keyword,
147 }, 147 },
148 CompletionItem { 148 CompletionItem {
149 label: "self", 149 label: "self",
150 source_range: [21; 21), 150 source_range: 21..21,
151 delete: [21; 21), 151 delete: 21..21,
152 insert: "self", 152 insert: "self",
153 kind: Keyword, 153 kind: Keyword,
154 }, 154 },
155 CompletionItem { 155 CompletionItem {
156 label: "super", 156 label: "super",
157 source_range: [21; 21), 157 source_range: 21..21,
158 delete: [21; 21), 158 delete: 21..21,
159 insert: "super::", 159 insert: "super::",
160 kind: Keyword, 160 kind: Keyword,
161 }, 161 },
@@ -173,15 +173,15 @@ mod tests {
173 [ 173 [
174 CompletionItem { 174 CompletionItem {
175 label: "self", 175 label: "self",
176 source_range: [24; 24), 176 source_range: 24..24,
177 delete: [24; 24), 177 delete: 24..24,
178 insert: "self", 178 insert: "self",
179 kind: Keyword, 179 kind: Keyword,
180 }, 180 },
181 CompletionItem { 181 CompletionItem {
182 label: "super", 182 label: "super",
183 source_range: [24; 24), 183 source_range: 24..24,
184 delete: [24; 24), 184 delete: 24..24,
185 insert: "super::", 185 insert: "super::",
186 kind: Keyword, 186 kind: Keyword,
187 }, 187 },
@@ -199,15 +199,15 @@ mod tests {
199 [ 199 [
200 CompletionItem { 200 CompletionItem {
201 label: "self", 201 label: "self",
202 source_range: [28; 28), 202 source_range: 28..28,
203 delete: [28; 28), 203 delete: 28..28,
204 insert: "self", 204 insert: "self",
205 kind: Keyword, 205 kind: Keyword,
206 }, 206 },
207 CompletionItem { 207 CompletionItem {
208 label: "super", 208 label: "super",
209 source_range: [28; 28), 209 source_range: 28..28,
210 delete: [28; 28), 210 delete: 28..28,
211 insert: "super::", 211 insert: "super::",
212 kind: Keyword, 212 kind: Keyword,
213 }, 213 },
@@ -230,36 +230,36 @@ mod tests {
230 [ 230 [
231 CompletionItem { 231 CompletionItem {
232 label: "if", 232 label: "if",
233 source_range: [49; 49), 233 source_range: 49..49,
234 delete: [49; 49), 234 delete: 49..49,
235 insert: "if $0 {}", 235 insert: "if $0 {}",
236 kind: Keyword, 236 kind: Keyword,
237 }, 237 },
238 CompletionItem { 238 CompletionItem {
239 label: "loop", 239 label: "loop",
240 source_range: [49; 49), 240 source_range: 49..49,
241 delete: [49; 49), 241 delete: 49..49,
242 insert: "loop {$0}", 242 insert: "loop {$0}",
243 kind: Keyword, 243 kind: Keyword,
244 }, 244 },
245 CompletionItem { 245 CompletionItem {
246 label: "match", 246 label: "match",
247 source_range: [49; 49), 247 source_range: 49..49,
248 delete: [49; 49), 248 delete: 49..49,
249 insert: "match $0 {}", 249 insert: "match $0 {}",
250 kind: Keyword, 250 kind: Keyword,
251 }, 251 },
252 CompletionItem { 252 CompletionItem {
253 label: "return", 253 label: "return",
254 source_range: [49; 49), 254 source_range: 49..49,
255 delete: [49; 49), 255 delete: 49..49,
256 insert: "return;", 256 insert: "return;",
257 kind: Keyword, 257 kind: Keyword,
258 }, 258 },
259 CompletionItem { 259 CompletionItem {
260 label: "while", 260 label: "while",
261 source_range: [49; 49), 261 source_range: 49..49,
262 delete: [49; 49), 262 delete: 49..49,
263 insert: "while $0 {}", 263 insert: "while $0 {}",
264 kind: Keyword, 264 kind: Keyword,
265 }, 265 },
@@ -284,50 +284,50 @@ mod tests {
284 [ 284 [
285 CompletionItem { 285 CompletionItem {
286 label: "else", 286 label: "else",
287 source_range: [108; 108), 287 source_range: 108..108,
288 delete: [108; 108), 288 delete: 108..108,
289 insert: "else {$0}", 289 insert: "else {$0}",
290 kind: Keyword, 290 kind: Keyword,
291 }, 291 },
292 CompletionItem { 292 CompletionItem {
293 label: "else if", 293 label: "else if",
294 source_range: [108; 108), 294 source_range: 108..108,
295 delete: [108; 108), 295 delete: 108..108,
296 insert: "else if $0 {}", 296 insert: "else if $0 {}",
297 kind: Keyword, 297 kind: Keyword,
298 }, 298 },
299 CompletionItem { 299 CompletionItem {
300 label: "if", 300 label: "if",
301 source_range: [108; 108), 301 source_range: 108..108,
302 delete: [108; 108), 302 delete: 108..108,
303 insert: "if $0 {}", 303 insert: "if $0 {}",
304 kind: Keyword, 304 kind: Keyword,
305 }, 305 },
306 CompletionItem { 306 CompletionItem {
307 label: "loop", 307 label: "loop",
308 source_range: [108; 108), 308 source_range: 108..108,
309 delete: [108; 108), 309 delete: 108..108,
310 insert: "loop {$0}", 310 insert: "loop {$0}",
311 kind: Keyword, 311 kind: Keyword,
312 }, 312 },
313 CompletionItem { 313 CompletionItem {
314 label: "match", 314 label: "match",
315 source_range: [108; 108), 315 source_range: 108..108,
316 delete: [108; 108), 316 delete: 108..108,
317 insert: "match $0 {}", 317 insert: "match $0 {}",
318 kind: Keyword, 318 kind: Keyword,
319 }, 319 },
320 CompletionItem { 320 CompletionItem {
321 label: "return", 321 label: "return",
322 source_range: [108; 108), 322 source_range: 108..108,
323 delete: [108; 108), 323 delete: 108..108,
324 insert: "return;", 324 insert: "return;",
325 kind: Keyword, 325 kind: Keyword,
326 }, 326 },
327 CompletionItem { 327 CompletionItem {
328 label: "while", 328 label: "while",
329 source_range: [108; 108), 329 source_range: 108..108,
330 delete: [108; 108), 330 delete: 108..108,
331 insert: "while $0 {}", 331 insert: "while $0 {}",
332 kind: Keyword, 332 kind: Keyword,
333 }, 333 },
@@ -351,36 +351,36 @@ mod tests {
351 [ 351 [
352 CompletionItem { 352 CompletionItem {
353 label: "if", 353 label: "if",
354 source_range: [56; 56), 354 source_range: 56..56,
355 delete: [56; 56), 355 delete: 56..56,
356 insert: "if $0 {}", 356 insert: "if $0 {}",
357 kind: Keyword, 357 kind: Keyword,
358 }, 358 },
359 CompletionItem { 359 CompletionItem {
360 label: "loop", 360 label: "loop",
361 source_range: [56; 56), 361 source_range: 56..56,
362 delete: [56; 56), 362 delete: 56..56,
363 insert: "loop {$0}", 363 insert: "loop {$0}",
364 kind: Keyword, 364 kind: Keyword,
365 }, 365 },
366 CompletionItem { 366 CompletionItem {
367 label: "match", 367 label: "match",
368 source_range: [56; 56), 368 source_range: 56..56,
369 delete: [56; 56), 369 delete: 56..56,
370 insert: "match $0 {}", 370 insert: "match $0 {}",
371 kind: Keyword, 371 kind: Keyword,
372 }, 372 },
373 CompletionItem { 373 CompletionItem {
374 label: "return", 374 label: "return",
375 source_range: [56; 56), 375 source_range: 56..56,
376 delete: [56; 56), 376 delete: 56..56,
377 insert: "return $0;", 377 insert: "return $0;",
378 kind: Keyword, 378 kind: Keyword,
379 }, 379 },
380 CompletionItem { 380 CompletionItem {
381 label: "while", 381 label: "while",
382 source_range: [56; 56), 382 source_range: 56..56,
383 delete: [56; 56), 383 delete: 56..56,
384 insert: "while $0 {}", 384 insert: "while $0 {}",
385 kind: Keyword, 385 kind: Keyword,
386 }, 386 },
@@ -400,36 +400,36 @@ mod tests {
400 [ 400 [
401 CompletionItem { 401 CompletionItem {
402 label: "if", 402 label: "if",
403 source_range: [49; 49), 403 source_range: 49..49,
404 delete: [49; 49), 404 delete: 49..49,
405 insert: "if $0 {}", 405 insert: "if $0 {}",
406 kind: Keyword, 406 kind: Keyword,
407 }, 407 },
408 CompletionItem { 408 CompletionItem {
409 label: "loop", 409 label: "loop",
410 source_range: [49; 49), 410 source_range: 49..49,
411 delete: [49; 49), 411 delete: 49..49,
412 insert: "loop {$0}", 412 insert: "loop {$0}",
413 kind: Keyword, 413 kind: Keyword,
414 }, 414 },
415 CompletionItem { 415 CompletionItem {
416 label: "match", 416 label: "match",
417 source_range: [49; 49), 417 source_range: 49..49,
418 delete: [49; 49), 418 delete: 49..49,
419 insert: "match $0 {}", 419 insert: "match $0 {}",
420 kind: Keyword, 420 kind: Keyword,
421 }, 421 },
422 CompletionItem { 422 CompletionItem {
423 label: "return", 423 label: "return",
424 source_range: [49; 49), 424 source_range: 49..49,
425 delete: [49; 49), 425 delete: 49..49,
426 insert: "return;", 426 insert: "return;",
427 kind: Keyword, 427 kind: Keyword,
428 }, 428 },
429 CompletionItem { 429 CompletionItem {
430 label: "while", 430 label: "while",
431 source_range: [49; 49), 431 source_range: 49..49,
432 delete: [49; 49), 432 delete: 49..49,
433 insert: "while $0 {}", 433 insert: "while $0 {}",
434 kind: Keyword, 434 kind: Keyword,
435 }, 435 },
@@ -454,36 +454,36 @@ mod tests {
454 [ 454 [
455 CompletionItem { 455 CompletionItem {
456 label: "if", 456 label: "if",
457 source_range: [97; 97), 457 source_range: 97..97,
458 delete: [97; 97), 458 delete: 97..97,
459 insert: "if $0 {}", 459 insert: "if $0 {}",
460 kind: Keyword, 460 kind: Keyword,
461 }, 461 },
462 CompletionItem { 462 CompletionItem {
463 label: "loop", 463 label: "loop",
464 source_range: [97; 97), 464 source_range: 97..97,
465 delete: [97; 97), 465 delete: 97..97,
466 insert: "loop {$0}", 466 insert: "loop {$0}",
467 kind: Keyword, 467 kind: Keyword,
468 }, 468 },
469 CompletionItem { 469 CompletionItem {
470 label: "match", 470 label: "match",
471 source_range: [97; 97), 471 source_range: 97..97,
472 delete: [97; 97), 472 delete: 97..97,
473 insert: "match $0 {}", 473 insert: "match $0 {}",
474 kind: Keyword, 474 kind: Keyword,
475 }, 475 },
476 CompletionItem { 476 CompletionItem {
477 label: "return", 477 label: "return",
478 source_range: [97; 97), 478 source_range: 97..97,
479 delete: [97; 97), 479 delete: 97..97,
480 insert: "return $0", 480 insert: "return $0",
481 kind: Keyword, 481 kind: Keyword,
482 }, 482 },
483 CompletionItem { 483 CompletionItem {
484 label: "while", 484 label: "while",
485 source_range: [97; 97), 485 source_range: 97..97,
486 delete: [97; 97), 486 delete: 97..97,
487 insert: "while $0 {}", 487 insert: "while $0 {}",
488 kind: Keyword, 488 kind: Keyword,
489 }, 489 },
@@ -508,36 +508,36 @@ mod tests {
508 [ 508 [
509 CompletionItem { 509 CompletionItem {
510 label: "if", 510 label: "if",
511 source_range: [95; 95), 511 source_range: 95..95,
512 delete: [95; 95), 512 delete: 95..95,
513 insert: "if $0 {}", 513 insert: "if $0 {}",
514 kind: Keyword, 514 kind: Keyword,
515 }, 515 },
516 CompletionItem { 516 CompletionItem {
517 label: "loop", 517 label: "loop",
518 source_range: [95; 95), 518 source_range: 95..95,
519 delete: [95; 95), 519 delete: 95..95,
520 insert: "loop {$0}", 520 insert: "loop {$0}",
521 kind: Keyword, 521 kind: Keyword,
522 }, 522 },
523 CompletionItem { 523 CompletionItem {
524 label: "match", 524 label: "match",
525 source_range: [95; 95), 525 source_range: 95..95,
526 delete: [95; 95), 526 delete: 95..95,
527 insert: "match $0 {}", 527 insert: "match $0 {}",
528 kind: Keyword, 528 kind: Keyword,
529 }, 529 },
530 CompletionItem { 530 CompletionItem {
531 label: "return", 531 label: "return",
532 source_range: [95; 95), 532 source_range: 95..95,
533 delete: [95; 95), 533 delete: 95..95,
534 insert: "return $0;", 534 insert: "return $0;",
535 kind: Keyword, 535 kind: Keyword,
536 }, 536 },
537 CompletionItem { 537 CompletionItem {
538 label: "while", 538 label: "while",
539 source_range: [95; 95), 539 source_range: 95..95,
540 delete: [95; 95), 540 delete: 95..95,
541 insert: "while $0 {}", 541 insert: "while $0 {}",
542 kind: Keyword, 542 kind: Keyword,
543 }, 543 },
@@ -560,36 +560,36 @@ mod tests {
560 [ 560 [
561 CompletionItem { 561 CompletionItem {
562 label: "if", 562 label: "if",
563 source_range: [95; 95), 563 source_range: 95..95,
564 delete: [95; 95), 564 delete: 95..95,
565 insert: "if $0 {}", 565 insert: "if $0 {}",
566 kind: Keyword, 566 kind: Keyword,
567 }, 567 },
568 CompletionItem { 568 CompletionItem {
569 label: "loop", 569 label: "loop",
570 source_range: [95; 95), 570 source_range: 95..95,
571 delete: [95; 95), 571 delete: 95..95,
572 insert: "loop {$0}", 572 insert: "loop {$0}",
573 kind: Keyword, 573 kind: Keyword,
574 }, 574 },
575 CompletionItem { 575 CompletionItem {
576 label: "match", 576 label: "match",
577 source_range: [95; 95), 577 source_range: 95..95,
578 delete: [95; 95), 578 delete: 95..95,
579 insert: "match $0 {}", 579 insert: "match $0 {}",
580 kind: Keyword, 580 kind: Keyword,
581 }, 581 },
582 CompletionItem { 582 CompletionItem {
583 label: "return", 583 label: "return",
584 source_range: [95; 95), 584 source_range: 95..95,
585 delete: [95; 95), 585 delete: 95..95,
586 insert: "return $0;", 586 insert: "return $0;",
587 kind: Keyword, 587 kind: Keyword,
588 }, 588 },
589 CompletionItem { 589 CompletionItem {
590 label: "while", 590 label: "while",
591 source_range: [95; 95), 591 source_range: 95..95,
592 delete: [95; 95), 592 delete: 95..95,
593 insert: "while $0 {}", 593 insert: "while $0 {}",
594 kind: Keyword, 594 kind: Keyword,
595 }, 595 },
@@ -612,50 +612,50 @@ mod tests {
612 [ 612 [
613 CompletionItem { 613 CompletionItem {
614 label: "break", 614 label: "break",
615 source_range: [63; 63), 615 source_range: 63..63,
616 delete: [63; 63), 616 delete: 63..63,
617 insert: "break;", 617 insert: "break;",
618 kind: Keyword, 618 kind: Keyword,
619 }, 619 },
620 CompletionItem { 620 CompletionItem {
621 label: "continue", 621 label: "continue",
622 source_range: [63; 63), 622 source_range: 63..63,
623 delete: [63; 63), 623 delete: 63..63,
624 insert: "continue;", 624 insert: "continue;",
625 kind: Keyword, 625 kind: Keyword,
626 }, 626 },
627 CompletionItem { 627 CompletionItem {
628 label: "if", 628 label: "if",
629 source_range: [63; 63), 629 source_range: 63..63,
630 delete: [63; 63), 630 delete: 63..63,
631 insert: "if $0 {}", 631 insert: "if $0 {}",
632 kind: Keyword, 632 kind: Keyword,
633 }, 633 },
634 CompletionItem { 634 CompletionItem {
635 label: "loop", 635 label: "loop",
636 source_range: [63; 63), 636 source_range: 63..63,
637 delete: [63; 63), 637 delete: 63..63,
638 insert: "loop {$0}", 638 insert: "loop {$0}",
639 kind: Keyword, 639 kind: Keyword,
640 }, 640 },
641 CompletionItem { 641 CompletionItem {
642 label: "match", 642 label: "match",
643 source_range: [63; 63), 643 source_range: 63..63,
644 delete: [63; 63), 644 delete: 63..63,
645 insert: "match $0 {}", 645 insert: "match $0 {}",
646 kind: Keyword, 646 kind: Keyword,
647 }, 647 },
648 CompletionItem { 648 CompletionItem {
649 label: "return", 649 label: "return",
650 source_range: [63; 63), 650 source_range: 63..63,
651 delete: [63; 63), 651 delete: 63..63,
652 insert: "return $0;", 652 insert: "return $0;",
653 kind: Keyword, 653 kind: Keyword,
654 }, 654 },
655 CompletionItem { 655 CompletionItem {
656 label: "while", 656 label: "while",
657 source_range: [63; 63), 657 source_range: 63..63,
658 delete: [63; 63), 658 delete: 63..63,
659 insert: "while $0 {}", 659 insert: "while $0 {}",
660 kind: Keyword, 660 kind: Keyword,
661 }, 661 },
@@ -676,36 +676,36 @@ mod tests {
676 [ 676 [
677 CompletionItem { 677 CompletionItem {
678 label: "if", 678 label: "if",
679 source_range: [68; 68), 679 source_range: 68..68,
680 delete: [68; 68), 680 delete: 68..68,
681 insert: "if $0 {}", 681 insert: "if $0 {}",
682 kind: Keyword, 682 kind: Keyword,
683 }, 683 },
684 CompletionItem { 684 CompletionItem {
685 label: "loop", 685 label: "loop",
686 source_range: [68; 68), 686 source_range: 68..68,
687 delete: [68; 68), 687 delete: 68..68,
688 insert: "loop {$0}", 688 insert: "loop {$0}",
689 kind: Keyword, 689 kind: Keyword,
690 }, 690 },
691 CompletionItem { 691 CompletionItem {
692 label: "match", 692 label: "match",
693 source_range: [68; 68), 693 source_range: 68..68,
694 delete: [68; 68), 694 delete: 68..68,
695 insert: "match $0 {}", 695 insert: "match $0 {}",
696 kind: Keyword, 696 kind: Keyword,
697 }, 697 },
698 CompletionItem { 698 CompletionItem {
699 label: "return", 699 label: "return",
700 source_range: [68; 68), 700 source_range: 68..68,
701 delete: [68; 68), 701 delete: 68..68,
702 insert: "return $0;", 702 insert: "return $0;",
703 kind: Keyword, 703 kind: Keyword,
704 }, 704 },
705 CompletionItem { 705 CompletionItem {
706 label: "while", 706 label: "while",
707 source_range: [68; 68), 707 source_range: 68..68,
708 delete: [68; 68), 708 delete: 68..68,
709 insert: "while $0 {}", 709 insert: "while $0 {}",
710 kind: Keyword, 710 kind: Keyword,
711 }, 711 },
@@ -732,50 +732,50 @@ mod tests {
732 [ 732 [
733 CompletionItem { 733 CompletionItem {
734 label: "break", 734 label: "break",
735 source_range: [122; 124), 735 source_range: 122..124,
736 delete: [122; 124), 736 delete: 122..124,
737 insert: "break", 737 insert: "break",
738 kind: Keyword, 738 kind: Keyword,
739 }, 739 },
740 CompletionItem { 740 CompletionItem {
741 label: "continue", 741 label: "continue",
742 source_range: [122; 124), 742 source_range: 122..124,
743 delete: [122; 124), 743 delete: 122..124,
744 insert: "continue", 744 insert: "continue",
745 kind: Keyword, 745 kind: Keyword,
746 }, 746 },
747 CompletionItem { 747 CompletionItem {
748 label: "if", 748 label: "if",
749 source_range: [122; 124), 749 source_range: 122..124,
750 delete: [122; 124), 750 delete: 122..124,
751 insert: "if $0 {}", 751 insert: "if $0 {}",
752 kind: Keyword, 752 kind: Keyword,
753 }, 753 },
754 CompletionItem { 754 CompletionItem {
755 label: "loop", 755 label: "loop",
756 source_range: [122; 124), 756 source_range: 122..124,
757 delete: [122; 124), 757 delete: 122..124,
758 insert: "loop {$0}", 758 insert: "loop {$0}",
759 kind: Keyword, 759 kind: Keyword,
760 }, 760 },
761 CompletionItem { 761 CompletionItem {
762 label: "match", 762 label: "match",
763 source_range: [122; 124), 763 source_range: 122..124,
764 delete: [122; 124), 764 delete: 122..124,
765 insert: "match $0 {}", 765 insert: "match $0 {}",
766 kind: Keyword, 766 kind: Keyword,
767 }, 767 },
768 CompletionItem { 768 CompletionItem {
769 label: "return", 769 label: "return",
770 source_range: [122; 124), 770 source_range: 122..124,
771 delete: [122; 124), 771 delete: 122..124,
772 insert: "return", 772 insert: "return",
773 kind: Keyword, 773 kind: Keyword,
774 }, 774 },
775 CompletionItem { 775 CompletionItem {
776 label: "while", 776 label: "while",
777 source_range: [122; 124), 777 source_range: 122..124,
778 delete: [122; 124), 778 delete: 122..124,
779 insert: "while $0 {}", 779 insert: "while $0 {}",
780 kind: Keyword, 780 kind: Keyword,
781 }, 781 },
diff --git a/crates/ra_ide/src/completion/complete_macro_in_item_position.rs b/crates/ra_ide/src/completion/complete_macro_in_item_position.rs
index 270e96df0..d9bb5fd25 100644
--- a/crates/ra_ide/src/completion/complete_macro_in_item_position.rs
+++ b/crates/ra_ide/src/completion/complete_macro_in_item_position.rs
@@ -41,9 +41,9 @@ mod tests {
41 @r###" 41 @r###"
42 [ 42 [
43 CompletionItem { 43 CompletionItem {
44 label: "foo!", 44 label: "foo!(…)",
45 source_range: [46; 46), 45 source_range: 46..46,
46 delete: [46; 46), 46 delete: 46..46,
47 insert: "foo!($0)", 47 insert: "foo!($0)",
48 kind: Macro, 48 kind: Macro,
49 detail: "macro_rules! foo", 49 detail: "macro_rules! foo",
@@ -81,9 +81,9 @@ mod tests {
81 @r###" 81 @r###"
82 [ 82 [
83 CompletionItem { 83 CompletionItem {
84 label: "vec!", 84 label: "vec![…]",
85 source_range: [280; 280), 85 source_range: 280..280,
86 delete: [280; 280), 86 delete: 280..280,
87 insert: "vec![$0]", 87 insert: "vec![$0]",
88 kind: Macro, 88 kind: Macro,
89 detail: "macro_rules! vec", 89 detail: "macro_rules! vec",
@@ -118,9 +118,9 @@ mod tests {
118 @r###" 118 @r###"
119 [ 119 [
120 CompletionItem { 120 CompletionItem {
121 label: "foo!", 121 label: "foo! {…}",
122 source_range: [163; 163), 122 source_range: 163..163,
123 delete: [163; 163), 123 delete: 163..163,
124 insert: "foo! {$0}", 124 insert: "foo! {$0}",
125 kind: Macro, 125 kind: Macro,
126 detail: "macro_rules! foo", 126 detail: "macro_rules! foo",
@@ -130,8 +130,8 @@ mod tests {
130 }, 130 },
131 CompletionItem { 131 CompletionItem {
132 label: "main()", 132 label: "main()",
133 source_range: [163; 163), 133 source_range: 163..163,
134 delete: [163; 163), 134 delete: 163..163,
135 insert: "main()$0", 135 insert: "main()$0",
136 kind: Function, 136 kind: Function,
137 lookup: "main", 137 lookup: "main",
diff --git a/crates/ra_ide/src/completion/complete_pattern.rs b/crates/ra_ide/src/completion/complete_pattern.rs
index a8b4ce114..fdd9e928b 100644
--- a/crates/ra_ide/src/completion/complete_pattern.rs
+++ b/crates/ra_ide/src/completion/complete_pattern.rs
@@ -63,37 +63,37 @@ mod tests {
63 [ 63 [
64 CompletionItem { 64 CompletionItem {
65 label: "Bar", 65 label: "Bar",
66 source_range: [246; 246), 66 source_range: 246..246,
67 delete: [246; 246), 67 delete: 246..246,
68 insert: "Bar", 68 insert: "Bar",
69 kind: Struct, 69 kind: Struct,
70 }, 70 },
71 CompletionItem { 71 CompletionItem {
72 label: "E", 72 label: "E",
73 source_range: [246; 246), 73 source_range: 246..246,
74 delete: [246; 246), 74 delete: 246..246,
75 insert: "E", 75 insert: "E",
76 kind: Enum, 76 kind: Enum,
77 }, 77 },
78 CompletionItem { 78 CompletionItem {
79 label: "X", 79 label: "X",
80 source_range: [246; 246), 80 source_range: 246..246,
81 delete: [246; 246), 81 delete: 246..246,
82 insert: "X", 82 insert: "X",
83 kind: EnumVariant, 83 kind: EnumVariant,
84 detail: "()", 84 detail: "()",
85 }, 85 },
86 CompletionItem { 86 CompletionItem {
87 label: "Z", 87 label: "Z",
88 source_range: [246; 246), 88 source_range: 246..246,
89 delete: [246; 246), 89 delete: 246..246,
90 insert: "Z", 90 insert: "Z",
91 kind: Const, 91 kind: Const,
92 }, 92 },
93 CompletionItem { 93 CompletionItem {
94 label: "m", 94 label: "m",
95 source_range: [246; 246), 95 source_range: 246..246,
96 delete: [246; 246), 96 delete: 246..246,
97 insert: "m", 97 insert: "m",
98 kind: Module, 98 kind: Module,
99 }, 99 },
@@ -119,15 +119,15 @@ mod tests {
119 [ 119 [
120 CompletionItem { 120 CompletionItem {
121 label: "E", 121 label: "E",
122 source_range: [151; 151), 122 source_range: 151..151,
123 delete: [151; 151), 123 delete: 151..151,
124 insert: "E", 124 insert: "E",
125 kind: Enum, 125 kind: Enum,
126 }, 126 },
127 CompletionItem { 127 CompletionItem {
128 label: "m!", 128 label: "m!(…)",
129 source_range: [151; 151), 129 source_range: 151..151,
130 delete: [151; 151), 130 delete: 151..151,
131 insert: "m!($0)", 131 insert: "m!($0)",
132 kind: Macro, 132 kind: Macro,
133 detail: "macro_rules! m", 133 detail: "macro_rules! m",
diff --git a/crates/ra_ide/src/completion/complete_postfix.rs b/crates/ra_ide/src/completion/complete_postfix.rs
index 8d397b0fe..6a0f0c72e 100644
--- a/crates/ra_ide/src/completion/complete_postfix.rs
+++ b/crates/ra_ide/src/completion/complete_postfix.rs
@@ -2,7 +2,7 @@
2 2
3use ra_syntax::{ 3use ra_syntax::{
4 ast::{self, AstNode}, 4 ast::{self, AstNode},
5 TextRange, TextUnit, 5 TextRange, TextSize,
6}; 6};
7use ra_text_edit::TextEdit; 7use ra_text_edit::TextEdit;
8 8
@@ -115,7 +115,7 @@ pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
115fn get_receiver_text(receiver: &ast::Expr, receiver_is_ambiguous_float_literal: bool) -> String { 115fn get_receiver_text(receiver: &ast::Expr, receiver_is_ambiguous_float_literal: bool) -> String {
116 if receiver_is_ambiguous_float_literal { 116 if receiver_is_ambiguous_float_literal {
117 let text = receiver.syntax().text(); 117 let text = receiver.syntax().text();
118 let without_dot = ..text.len() - TextUnit::of_char('.'); 118 let without_dot = ..text.len() - TextSize::of('.');
119 text.slice(without_dot).to_string() 119 text.slice(without_dot).to_string()
120 } else { 120 } else {
121 receiver.to_string() 121 receiver.to_string()
@@ -143,7 +143,7 @@ fn postfix_snippet(
143 let edit = { 143 let edit = {
144 let receiver_syntax = receiver.syntax(); 144 let receiver_syntax = receiver.syntax();
145 let receiver_range = ctx.sema.original_range(receiver_syntax).range; 145 let receiver_range = ctx.sema.original_range(receiver_syntax).range;
146 let delete_range = TextRange::from_to(receiver_range.start(), ctx.source_range().end()); 146 let delete_range = TextRange::new(receiver_range.start(), ctx.source_range().end());
147 TextEdit::replace(delete_range, snippet.to_string()) 147 TextEdit::replace(delete_range, snippet.to_string())
148 }; 148 };
149 CompletionItem::new(CompletionKind::Postfix, ctx.source_range(), label) 149 CompletionItem::new(CompletionKind::Postfix, ctx.source_range(), label)
@@ -176,57 +176,57 @@ mod tests {
176 [ 176 [
177 CompletionItem { 177 CompletionItem {
178 label: "box", 178 label: "box",
179 source_range: [89; 89), 179 source_range: 89..89,
180 delete: [85; 89), 180 delete: 85..89,
181 insert: "Box::new(bar)", 181 insert: "Box::new(bar)",
182 detail: "Box::new(expr)", 182 detail: "Box::new(expr)",
183 }, 183 },
184 CompletionItem { 184 CompletionItem {
185 label: "dbg", 185 label: "dbg",
186 source_range: [89; 89), 186 source_range: 89..89,
187 delete: [85; 89), 187 delete: 85..89,
188 insert: "dbg!(bar)", 188 insert: "dbg!(bar)",
189 detail: "dbg!(expr)", 189 detail: "dbg!(expr)",
190 }, 190 },
191 CompletionItem { 191 CompletionItem {
192 label: "if", 192 label: "if",
193 source_range: [89; 89), 193 source_range: 89..89,
194 delete: [85; 89), 194 delete: 85..89,
195 insert: "if bar {$0}", 195 insert: "if bar {$0}",
196 detail: "if expr {}", 196 detail: "if expr {}",
197 }, 197 },
198 CompletionItem { 198 CompletionItem {
199 label: "match", 199 label: "match",
200 source_range: [89; 89), 200 source_range: 89..89,
201 delete: [85; 89), 201 delete: 85..89,
202 insert: "match bar {\n ${1:_} => {$0\\},\n}", 202 insert: "match bar {\n ${1:_} => {$0\\},\n}",
203 detail: "match expr {}", 203 detail: "match expr {}",
204 }, 204 },
205 CompletionItem { 205 CompletionItem {
206 label: "not", 206 label: "not",
207 source_range: [89; 89), 207 source_range: 89..89,
208 delete: [85; 89), 208 delete: 85..89,
209 insert: "!bar", 209 insert: "!bar",
210 detail: "!expr", 210 detail: "!expr",
211 }, 211 },
212 CompletionItem { 212 CompletionItem {
213 label: "ref", 213 label: "ref",
214 source_range: [89; 89), 214 source_range: 89..89,
215 delete: [85; 89), 215 delete: 85..89,
216 insert: "&bar", 216 insert: "&bar",
217 detail: "&expr", 217 detail: "&expr",
218 }, 218 },
219 CompletionItem { 219 CompletionItem {
220 label: "refm", 220 label: "refm",
221 source_range: [89; 89), 221 source_range: 89..89,
222 delete: [85; 89), 222 delete: 85..89,
223 insert: "&mut bar", 223 insert: "&mut bar",
224 detail: "&mut expr", 224 detail: "&mut expr",
225 }, 225 },
226 CompletionItem { 226 CompletionItem {
227 label: "while", 227 label: "while",
228 source_range: [89; 89), 228 source_range: 89..89,
229 delete: [85; 89), 229 delete: 85..89,
230 insert: "while bar {\n$0\n}", 230 insert: "while bar {\n$0\n}",
231 detail: "while expr {}", 231 detail: "while expr {}",
232 }, 232 },
@@ -250,43 +250,43 @@ mod tests {
250 [ 250 [
251 CompletionItem { 251 CompletionItem {
252 label: "box", 252 label: "box",
253 source_range: [91; 91), 253 source_range: 91..91,
254 delete: [87; 91), 254 delete: 87..91,
255 insert: "Box::new(bar)", 255 insert: "Box::new(bar)",
256 detail: "Box::new(expr)", 256 detail: "Box::new(expr)",
257 }, 257 },
258 CompletionItem { 258 CompletionItem {
259 label: "dbg", 259 label: "dbg",
260 source_range: [91; 91), 260 source_range: 91..91,
261 delete: [87; 91), 261 delete: 87..91,
262 insert: "dbg!(bar)", 262 insert: "dbg!(bar)",
263 detail: "dbg!(expr)", 263 detail: "dbg!(expr)",
264 }, 264 },
265 CompletionItem { 265 CompletionItem {
266 label: "match", 266 label: "match",
267 source_range: [91; 91), 267 source_range: 91..91,
268 delete: [87; 91), 268 delete: 87..91,
269 insert: "match bar {\n ${1:_} => {$0\\},\n}", 269 insert: "match bar {\n ${1:_} => {$0\\},\n}",
270 detail: "match expr {}", 270 detail: "match expr {}",
271 }, 271 },
272 CompletionItem { 272 CompletionItem {
273 label: "not", 273 label: "not",
274 source_range: [91; 91), 274 source_range: 91..91,
275 delete: [87; 91), 275 delete: 87..91,
276 insert: "!bar", 276 insert: "!bar",
277 detail: "!expr", 277 detail: "!expr",
278 }, 278 },
279 CompletionItem { 279 CompletionItem {
280 label: "ref", 280 label: "ref",
281 source_range: [91; 91), 281 source_range: 91..91,
282 delete: [87; 91), 282 delete: 87..91,
283 insert: "&bar", 283 insert: "&bar",
284 detail: "&expr", 284 detail: "&expr",
285 }, 285 },
286 CompletionItem { 286 CompletionItem {
287 label: "refm", 287 label: "refm",
288 source_range: [91; 91), 288 source_range: 91..91,
289 delete: [87; 91), 289 delete: 87..91,
290 insert: "&mut bar", 290 insert: "&mut bar",
291 detail: "&mut expr", 291 detail: "&mut expr",
292 }, 292 },
@@ -309,43 +309,43 @@ mod tests {
309 [ 309 [
310 CompletionItem { 310 CompletionItem {
311 label: "box", 311 label: "box",
312 source_range: [52; 52), 312 source_range: 52..52,
313 delete: [49; 52), 313 delete: 49..52,
314 insert: "Box::new(42)", 314 insert: "Box::new(42)",
315 detail: "Box::new(expr)", 315 detail: "Box::new(expr)",
316 }, 316 },
317 CompletionItem { 317 CompletionItem {
318 label: "dbg", 318 label: "dbg",
319 source_range: [52; 52), 319 source_range: 52..52,
320 delete: [49; 52), 320 delete: 49..52,
321 insert: "dbg!(42)", 321 insert: "dbg!(42)",
322 detail: "dbg!(expr)", 322 detail: "dbg!(expr)",
323 }, 323 },
324 CompletionItem { 324 CompletionItem {
325 label: "match", 325 label: "match",
326 source_range: [52; 52), 326 source_range: 52..52,
327 delete: [49; 52), 327 delete: 49..52,
328 insert: "match 42 {\n ${1:_} => {$0\\},\n}", 328 insert: "match 42 {\n ${1:_} => {$0\\},\n}",
329 detail: "match expr {}", 329 detail: "match expr {}",
330 }, 330 },
331 CompletionItem { 331 CompletionItem {
332 label: "not", 332 label: "not",
333 source_range: [52; 52), 333 source_range: 52..52,
334 delete: [49; 52), 334 delete: 49..52,
335 insert: "!42", 335 insert: "!42",
336 detail: "!expr", 336 detail: "!expr",
337 }, 337 },
338 CompletionItem { 338 CompletionItem {
339 label: "ref", 339 label: "ref",
340 source_range: [52; 52), 340 source_range: 52..52,
341 delete: [49; 52), 341 delete: 49..52,
342 insert: "&42", 342 insert: "&42",
343 detail: "&expr", 343 detail: "&expr",
344 }, 344 },
345 CompletionItem { 345 CompletionItem {
346 label: "refm", 346 label: "refm",
347 source_range: [52; 52), 347 source_range: 52..52,
348 delete: [49; 52), 348 delete: 49..52,
349 insert: "&mut 42", 349 insert: "&mut 42",
350 detail: "&mut expr", 350 detail: "&mut expr",
351 }, 351 },
@@ -370,43 +370,43 @@ mod tests {
370 [ 370 [
371 CompletionItem { 371 CompletionItem {
372 label: "box", 372 label: "box",
373 source_range: [149; 150), 373 source_range: 149..150,
374 delete: [145; 150), 374 delete: 145..150,
375 insert: "Box::new(bar)", 375 insert: "Box::new(bar)",
376 detail: "Box::new(expr)", 376 detail: "Box::new(expr)",
377 }, 377 },
378 CompletionItem { 378 CompletionItem {
379 label: "dbg", 379 label: "dbg",
380 source_range: [149; 150), 380 source_range: 149..150,
381 delete: [145; 150), 381 delete: 145..150,
382 insert: "dbg!(bar)", 382 insert: "dbg!(bar)",
383 detail: "dbg!(expr)", 383 detail: "dbg!(expr)",
384 }, 384 },
385 CompletionItem { 385 CompletionItem {
386 label: "match", 386 label: "match",
387 source_range: [149; 150), 387 source_range: 149..150,
388 delete: [145; 150), 388 delete: 145..150,
389 insert: "match bar {\n ${1:_} => {$0\\},\n}", 389 insert: "match bar {\n ${1:_} => {$0\\},\n}",
390 detail: "match expr {}", 390 detail: "match expr {}",
391 }, 391 },
392 CompletionItem { 392 CompletionItem {
393 label: "not", 393 label: "not",
394 source_range: [149; 150), 394 source_range: 149..150,
395 delete: [145; 150), 395 delete: 145..150,
396 insert: "!bar", 396 insert: "!bar",
397 detail: "!expr", 397 detail: "!expr",
398 }, 398 },
399 CompletionItem { 399 CompletionItem {
400 label: "ref", 400 label: "ref",
401 source_range: [149; 150), 401 source_range: 149..150,
402 delete: [145; 150), 402 delete: 145..150,
403 insert: "&bar", 403 insert: "&bar",
404 detail: "&expr", 404 detail: "&expr",
405 }, 405 },
406 CompletionItem { 406 CompletionItem {
407 label: "refm", 407 label: "refm",
408 source_range: [149; 150), 408 source_range: 149..150,
409 delete: [145; 150), 409 delete: 145..150,
410 insert: "&mut bar", 410 insert: "&mut bar",
411 detail: "&mut expr", 411 detail: "&mut expr",
412 }, 412 },
@@ -429,43 +429,43 @@ mod tests {
429 [ 429 [
430 CompletionItem { 430 CompletionItem {
431 label: "box", 431 label: "box",
432 source_range: [56; 56), 432 source_range: 56..56,
433 delete: [49; 56), 433 delete: 49..56,
434 insert: "Box::new(&&&&42)", 434 insert: "Box::new(&&&&42)",
435 detail: "Box::new(expr)", 435 detail: "Box::new(expr)",
436 }, 436 },
437 CompletionItem { 437 CompletionItem {
438 label: "dbg", 438 label: "dbg",
439 source_range: [56; 56), 439 source_range: 56..56,
440 delete: [49; 56), 440 delete: 49..56,
441 insert: "dbg!(&&&&42)", 441 insert: "dbg!(&&&&42)",
442 detail: "dbg!(expr)", 442 detail: "dbg!(expr)",
443 }, 443 },
444 CompletionItem { 444 CompletionItem {
445 label: "match", 445 label: "match",
446 source_range: [56; 56), 446 source_range: 56..56,
447 delete: [49; 56), 447 delete: 49..56,
448 insert: "match &&&&42 {\n ${1:_} => {$0\\},\n}", 448 insert: "match &&&&42 {\n ${1:_} => {$0\\},\n}",
449 detail: "match expr {}", 449 detail: "match expr {}",
450 }, 450 },
451 CompletionItem { 451 CompletionItem {
452 label: "not", 452 label: "not",
453 source_range: [56; 56), 453 source_range: 56..56,
454 delete: [53; 56), 454 delete: 53..56,
455 insert: "!42", 455 insert: "!42",
456 detail: "!expr", 456 detail: "!expr",
457 }, 457 },
458 CompletionItem { 458 CompletionItem {
459 label: "ref", 459 label: "ref",
460 source_range: [56; 56), 460 source_range: 56..56,
461 delete: [53; 56), 461 delete: 53..56,
462 insert: "&42", 462 insert: "&42",
463 detail: "&expr", 463 detail: "&expr",
464 }, 464 },
465 CompletionItem { 465 CompletionItem {
466 label: "refm", 466 label: "refm",
467 source_range: [56; 56), 467 source_range: 56..56,
468 delete: [53; 56), 468 delete: 53..56,
469 insert: "&mut 42", 469 insert: "&mut 42",
470 detail: "&mut expr", 470 detail: "&mut expr",
471 }, 471 },
diff --git a/crates/ra_ide/src/completion/complete_qualified_path.rs b/crates/ra_ide/src/completion/complete_qualified_path.rs
index d98523406..dd10f74e6 100644
--- a/crates/ra_ide/src/completion/complete_qualified_path.rs
+++ b/crates/ra_ide/src/completion/complete_qualified_path.rs
@@ -57,9 +57,7 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
57 } 57 }
58 match item { 58 match item {
59 hir::AssocItem::Function(func) => { 59 hir::AssocItem::Function(func) => {
60 if !func.has_self_param(ctx.db) { 60 acc.add_function(ctx, func, None);
61 acc.add_function(ctx, func, None);
62 }
63 } 61 }
64 hir::AssocItem::Const(ct) => acc.add_const(ctx, ct), 62 hir::AssocItem::Const(ct) => acc.add_const(ctx, ct),
65 hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty), 63 hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty),
@@ -86,9 +84,7 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
86 } 84 }
87 match item { 85 match item {
88 hir::AssocItem::Function(func) => { 86 hir::AssocItem::Function(func) => {
89 if !func.has_self_param(ctx.db) { 87 acc.add_function(ctx, func, None);
90 acc.add_function(ctx, func, None);
91 }
92 } 88 }
93 hir::AssocItem::Const(ct) => acc.add_const(ctx, ct), 89 hir::AssocItem::Const(ct) => acc.add_const(ctx, ct),
94 hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty), 90 hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty),
@@ -166,8 +162,8 @@ mod tests {
166 [ 162 [
167 CompletionItem { 163 CompletionItem {
168 label: "my", 164 label: "my",
169 source_range: [27; 29), 165 source_range: 27..29,
170 delete: [27; 29), 166 delete: 27..29,
171 insert: "my", 167 insert: "my",
172 kind: Module, 168 kind: Module,
173 documentation: Documentation( 169 documentation: Documentation(
@@ -197,15 +193,15 @@ mod tests {
197 [ 193 [
198 CompletionItem { 194 CompletionItem {
199 label: "Foo", 195 label: "Foo",
200 source_range: [31; 31), 196 source_range: 31..31,
201 delete: [31; 31), 197 delete: 31..31,
202 insert: "Foo", 198 insert: "Foo",
203 kind: Struct, 199 kind: Struct,
204 }, 200 },
205 CompletionItem { 201 CompletionItem {
206 label: "PublicBar", 202 label: "PublicBar",
207 source_range: [31; 31), 203 source_range: 31..31,
208 delete: [31; 31), 204 delete: 31..31,
209 insert: "PublicBar", 205 insert: "PublicBar",
210 kind: Struct, 206 kind: Struct,
211 }, 207 },
@@ -230,8 +226,8 @@ mod tests {
230 [ 226 [
231 CompletionItem { 227 CompletionItem {
232 label: "Bar", 228 label: "Bar",
233 source_range: [30; 30), 229 source_range: 30..30,
234 delete: [30; 30), 230 delete: 30..30,
235 insert: "Bar", 231 insert: "Bar",
236 kind: Struct, 232 kind: Struct,
237 }, 233 },
@@ -256,15 +252,15 @@ mod tests {
256 [ 252 [
257 CompletionItem { 253 CompletionItem {
258 label: "Spam", 254 label: "Spam",
259 source_range: [11; 13), 255 source_range: 11..13,
260 delete: [11; 13), 256 delete: 11..13,
261 insert: "Spam", 257 insert: "Spam",
262 kind: Struct, 258 kind: Struct,
263 }, 259 },
264 CompletionItem { 260 CompletionItem {
265 label: "foo", 261 label: "foo",
266 source_range: [11; 13), 262 source_range: 11..13,
267 delete: [11; 13), 263 delete: 11..13,
268 insert: "foo", 264 insert: "foo",
269 kind: Module, 265 kind: Module,
270 }, 266 },
@@ -289,15 +285,15 @@ mod tests {
289 [ 285 [
290 CompletionItem { 286 CompletionItem {
291 label: "Spam", 287 label: "Spam",
292 source_range: [12; 14), 288 source_range: 12..14,
293 delete: [12; 14), 289 delete: 12..14,
294 insert: "Spam", 290 insert: "Spam",
295 kind: Struct, 291 kind: Struct,
296 }, 292 },
297 CompletionItem { 293 CompletionItem {
298 label: "foo", 294 label: "foo",
299 source_range: [12; 14), 295 source_range: 12..14,
300 delete: [12; 14), 296 delete: 12..14,
301 insert: "foo", 297 insert: "foo",
302 kind: Module, 298 kind: Module,
303 }, 299 },
@@ -326,8 +322,8 @@ mod tests {
326 [ 322 [
327 CompletionItem { 323 CompletionItem {
328 label: "Spam", 324 label: "Spam",
329 source_range: [23; 25), 325 source_range: 23..25,
330 delete: [23; 25), 326 delete: 23..25,
331 insert: "Spam", 327 insert: "Spam",
332 kind: Struct, 328 kind: Struct,
333 }, 329 },
@@ -356,8 +352,8 @@ mod tests {
356 [ 352 [
357 CompletionItem { 353 CompletionItem {
358 label: "Bar(…)", 354 label: "Bar(…)",
359 source_range: [116; 116), 355 source_range: 116..116,
360 delete: [116; 116), 356 delete: 116..116,
361 insert: "Bar($0)", 357 insert: "Bar($0)",
362 kind: EnumVariant, 358 kind: EnumVariant,
363 lookup: "Bar", 359 lookup: "Bar",
@@ -369,8 +365,8 @@ mod tests {
369 }, 365 },
370 CompletionItem { 366 CompletionItem {
371 label: "Foo", 367 label: "Foo",
372 source_range: [116; 116), 368 source_range: 116..116,
373 delete: [116; 116), 369 delete: 116..116,
374 insert: "Foo", 370 insert: "Foo",
375 kind: EnumVariant, 371 kind: EnumVariant,
376 detail: "()", 372 detail: "()",
@@ -406,8 +402,8 @@ mod tests {
406 [ 402 [
407 CompletionItem { 403 CompletionItem {
408 label: "Bar(…)", 404 label: "Bar(…)",
409 source_range: [180; 180), 405 source_range: 180..180,
410 delete: [180; 180), 406 delete: 180..180,
411 insert: "Bar($0)", 407 insert: "Bar($0)",
412 kind: EnumVariant, 408 kind: EnumVariant,
413 lookup: "Bar", 409 lookup: "Bar",
@@ -419,8 +415,8 @@ mod tests {
419 }, 415 },
420 CompletionItem { 416 CompletionItem {
421 label: "Foo", 417 label: "Foo",
422 source_range: [180; 180), 418 source_range: 180..180,
423 delete: [180; 180), 419 delete: 180..180,
424 insert: "Foo", 420 insert: "Foo",
425 kind: EnumVariant, 421 kind: EnumVariant,
426 detail: "()", 422 detail: "()",
@@ -430,8 +426,8 @@ mod tests {
430 }, 426 },
431 CompletionItem { 427 CompletionItem {
432 label: "S(…)", 428 label: "S(…)",
433 source_range: [180; 180), 429 source_range: 180..180,
434 delete: [180; 180), 430 delete: 180..180,
435 insert: "S($0)", 431 insert: "S($0)",
436 kind: EnumVariant, 432 kind: EnumVariant,
437 lookup: "S", 433 lookup: "S",
@@ -467,8 +463,8 @@ mod tests {
467 [ 463 [
468 CompletionItem { 464 CompletionItem {
469 label: "m()", 465 label: "m()",
470 source_range: [100; 100), 466 source_range: 100..100,
471 delete: [100; 100), 467 delete: 100..100,
472 insert: "m()$0", 468 insert: "m()$0",
473 kind: Function, 469 kind: Function,
474 lookup: "m", 470 lookup: "m",
@@ -483,6 +479,42 @@ mod tests {
483 } 479 }
484 480
485 #[test] 481 #[test]
482 fn completes_struct_associated_method_with_self() {
483 assert_debug_snapshot!(
484 do_reference_completion(
485 "
486 //- /lib.rs
487 /// A Struct
488 struct S;
489
490 impl S {
491 /// An associated method
492 fn m(&self) { }
493 }
494
495 fn foo() { let _ = S::<|> }
496 "
497 ),
498 @r###"
499 [
500 CompletionItem {
501 label: "m()",
502 source_range: 105..105,
503 delete: 105..105,
504 insert: "m()$0",
505 kind: Method,
506 lookup: "m",
507 detail: "fn m(&self)",
508 documentation: Documentation(
509 "An associated method",
510 ),
511 },
512 ]
513 "###
514 );
515 }
516
517 #[test]
486 fn completes_struct_associated_const() { 518 fn completes_struct_associated_const() {
487 assert_debug_snapshot!( 519 assert_debug_snapshot!(
488 do_reference_completion( 520 do_reference_completion(
@@ -503,8 +535,8 @@ mod tests {
503 [ 535 [
504 CompletionItem { 536 CompletionItem {
505 label: "C", 537 label: "C",
506 source_range: [107; 107), 538 source_range: 107..107,
507 delete: [107; 107), 539 delete: 107..107,
508 insert: "C", 540 insert: "C",
509 kind: Const, 541 kind: Const,
510 detail: "const C: i32 = 42;", 542 detail: "const C: i32 = 42;",
@@ -538,8 +570,8 @@ mod tests {
538 [ 570 [
539 CompletionItem { 571 CompletionItem {
540 label: "T", 572 label: "T",
541 source_range: [101; 101), 573 source_range: 101..101,
542 delete: [101; 101), 574 delete: 101..101,
543 insert: "T", 575 insert: "T",
544 kind: TypeAlias, 576 kind: TypeAlias,
545 detail: "type T = i32;", 577 detail: "type T = i32;",
@@ -578,24 +610,24 @@ mod tests {
578 [ 610 [
579 CompletionItem { 611 CompletionItem {
580 label: "PUBLIC_CONST", 612 label: "PUBLIC_CONST",
581 source_range: [302; 302), 613 source_range: 302..302,
582 delete: [302; 302), 614 delete: 302..302,
583 insert: "PUBLIC_CONST", 615 insert: "PUBLIC_CONST",
584 kind: Const, 616 kind: Const,
585 detail: "pub(super) const PUBLIC_CONST: u32 = 1;", 617 detail: "pub(super) const PUBLIC_CONST: u32 = 1;",
586 }, 618 },
587 CompletionItem { 619 CompletionItem {
588 label: "PublicType", 620 label: "PublicType",
589 source_range: [302; 302), 621 source_range: 302..302,
590 delete: [302; 302), 622 delete: 302..302,
591 insert: "PublicType", 623 insert: "PublicType",
592 kind: TypeAlias, 624 kind: TypeAlias,
593 detail: "pub(super) type PublicType = u32;", 625 detail: "pub(super) type PublicType = u32;",
594 }, 626 },
595 CompletionItem { 627 CompletionItem {
596 label: "public_method()", 628 label: "public_method()",
597 source_range: [302; 302), 629 source_range: 302..302,
598 delete: [302; 302), 630 delete: 302..302,
599 insert: "public_method()$0", 631 insert: "public_method()$0",
600 kind: Function, 632 kind: Function,
601 lookup: "public_method", 633 lookup: "public_method",
@@ -627,8 +659,8 @@ mod tests {
627 [ 659 [
628 CompletionItem { 660 CompletionItem {
629 label: "m()", 661 label: "m()",
630 source_range: [100; 100), 662 source_range: 100..100,
631 delete: [100; 100), 663 delete: 100..100,
632 insert: "m()$0", 664 insert: "m()$0",
633 kind: Function, 665 kind: Function,
634 lookup: "m", 666 lookup: "m",
@@ -663,8 +695,8 @@ mod tests {
663 [ 695 [
664 CompletionItem { 696 CompletionItem {
665 label: "m()", 697 label: "m()",
666 source_range: [101; 101), 698 source_range: 101..101,
667 delete: [101; 101), 699 delete: 101..101,
668 insert: "m()$0", 700 insert: "m()$0",
669 kind: Function, 701 kind: Function,
670 lookup: "m", 702 lookup: "m",
@@ -696,8 +728,8 @@ mod tests {
696 [ 728 [
697 CompletionItem { 729 CompletionItem {
698 label: "bar", 730 label: "bar",
699 source_range: [9; 9), 731 source_range: 9..9,
700 delete: [9; 9), 732 delete: 9..9,
701 insert: "bar", 733 insert: "bar",
702 kind: Module, 734 kind: Module,
703 }, 735 },
@@ -724,8 +756,8 @@ mod tests {
724 [ 756 [
725 CompletionItem { 757 CompletionItem {
726 label: "m()", 758 label: "m()",
727 source_range: [73; 73), 759 source_range: 73..73,
728 delete: [73; 73), 760 delete: 73..73,
729 insert: "m()$0", 761 insert: "m()$0",
730 kind: Function, 762 kind: Function,
731 lookup: "m", 763 lookup: "m",
@@ -760,8 +792,8 @@ mod tests {
760 [ 792 [
761 CompletionItem { 793 CompletionItem {
762 label: "m()", 794 label: "m()",
763 source_range: [99; 99), 795 source_range: 99..99,
764 delete: [99; 99), 796 delete: 99..99,
765 insert: "m()$0", 797 insert: "m()$0",
766 kind: Function, 798 kind: Function,
767 lookup: "m", 799 lookup: "m",
@@ -796,8 +828,8 @@ mod tests {
796 [ 828 [
797 CompletionItem { 829 CompletionItem {
798 label: "m()", 830 label: "m()",
799 source_range: [110; 110), 831 source_range: 110..110,
800 delete: [110; 110), 832 delete: 110..110,
801 insert: "m()$0", 833 insert: "m()$0",
802 kind: Function, 834 kind: Function,
803 lookup: "m", 835 lookup: "m",
@@ -830,8 +862,8 @@ mod tests {
830 [ 862 [
831 CompletionItem { 863 CompletionItem {
832 label: "bar()", 864 label: "bar()",
833 source_range: [185; 185), 865 source_range: 185..185,
834 delete: [185; 185), 866 delete: 185..185,
835 insert: "bar()$0", 867 insert: "bar()$0",
836 kind: Function, 868 kind: Function,
837 lookup: "bar", 869 lookup: "bar",
@@ -839,8 +871,8 @@ mod tests {
839 }, 871 },
840 CompletionItem { 872 CompletionItem {
841 label: "foo()", 873 label: "foo()",
842 source_range: [185; 185), 874 source_range: 185..185,
843 delete: [185; 185), 875 delete: 185..185,
844 insert: "foo()$0", 876 insert: "foo()$0",
845 kind: Function, 877 kind: Function,
846 lookup: "foo", 878 lookup: "foo",
@@ -869,17 +901,17 @@ mod tests {
869 @r###" 901 @r###"
870 [ 902 [
871 CompletionItem { 903 CompletionItem {
872 label: "foo!", 904 label: "foo!(…)",
873 source_range: [179; 179), 905 source_range: 179..179,
874 delete: [179; 179), 906 delete: 179..179,
875 insert: "foo!($0)", 907 insert: "foo!($0)",
876 kind: Macro, 908 kind: Macro,
877 detail: "#[macro_export]\nmacro_rules! foo", 909 detail: "#[macro_export]\nmacro_rules! foo",
878 }, 910 },
879 CompletionItem { 911 CompletionItem {
880 label: "main()", 912 label: "main()",
881 source_range: [179; 179), 913 source_range: 179..179,
882 delete: [179; 179), 914 delete: 179..179,
883 insert: "main()$0", 915 insert: "main()$0",
884 kind: Function, 916 kind: Function,
885 lookup: "main", 917 lookup: "main",
@@ -915,22 +947,22 @@ mod tests {
915 [ 947 [
916 CompletionItem { 948 CompletionItem {
917 label: "RIGHT_CONST", 949 label: "RIGHT_CONST",
918 source_range: [57; 57), 950 source_range: 57..57,
919 delete: [57; 57), 951 delete: 57..57,
920 insert: "RIGHT_CONST", 952 insert: "RIGHT_CONST",
921 kind: Const, 953 kind: Const,
922 }, 954 },
923 CompletionItem { 955 CompletionItem {
924 label: "RightType", 956 label: "RightType",
925 source_range: [57; 57), 957 source_range: 57..57,
926 delete: [57; 57), 958 delete: 57..57,
927 insert: "RightType", 959 insert: "RightType",
928 kind: Struct, 960 kind: Struct,
929 }, 961 },
930 CompletionItem { 962 CompletionItem {
931 label: "right_fn()", 963 label: "right_fn()",
932 source_range: [57; 57), 964 source_range: 57..57,
933 delete: [57; 57), 965 delete: 57..57,
934 insert: "right_fn()$0", 966 insert: "right_fn()$0",
935 kind: Function, 967 kind: Function,
936 lookup: "right_fn", 968 lookup: "right_fn",
@@ -954,8 +986,8 @@ mod tests {
954 [ 986 [
955 CompletionItem { 987 CompletionItem {
956 label: "foo()", 988 label: "foo()",
957 source_range: [93; 94), 989 source_range: 93..94,
958 delete: [93; 94), 990 delete: 93..94,
959 insert: "foo()$0", 991 insert: "foo()$0",
960 kind: Function, 992 kind: Function,
961 lookup: "foo", 993 lookup: "foo",
@@ -963,8 +995,8 @@ mod tests {
963 }, 995 },
964 CompletionItem { 996 CompletionItem {
965 label: "main()", 997 label: "main()",
966 source_range: [93; 94), 998 source_range: 93..94,
967 delete: [93; 94), 999 delete: 93..94,
968 insert: "main()$0", 1000 insert: "main()$0",
969 kind: Function, 1001 kind: Function,
970 lookup: "main", 1002 lookup: "main",
@@ -993,15 +1025,15 @@ mod tests {
993 [ 1025 [
994 CompletionItem { 1026 CompletionItem {
995 label: "z", 1027 label: "z",
996 source_range: [57; 57), 1028 source_range: 57..57,
997 delete: [57; 57), 1029 delete: 57..57,
998 insert: "z", 1030 insert: "z",
999 kind: Module, 1031 kind: Module,
1000 }, 1032 },
1001 CompletionItem { 1033 CompletionItem {
1002 label: "z()", 1034 label: "z()",
1003 source_range: [57; 57), 1035 source_range: 57..57,
1004 delete: [57; 57), 1036 delete: 57..57,
1005 insert: "z()$0", 1037 insert: "z()$0",
1006 kind: Function, 1038 kind: Function,
1007 lookup: "z", 1039 lookup: "z",
@@ -1032,8 +1064,8 @@ mod tests {
1032 [ 1064 [
1033 CompletionItem { 1065 CompletionItem {
1034 label: "new()", 1066 label: "new()",
1035 source_range: [292; 292), 1067 source_range: 292..292,
1036 delete: [292; 292), 1068 delete: 292..292,
1037 insert: "new()$0", 1069 insert: "new()$0",
1038 kind: Function, 1070 kind: Function,
1039 lookup: "new", 1071 lookup: "new",
diff --git a/crates/ra_ide/src/completion/complete_record.rs b/crates/ra_ide/src/completion/complete_record.rs
index 83a553155..b7ab654c5 100644
--- a/crates/ra_ide/src/completion/complete_record.rs
+++ b/crates/ra_ide/src/completion/complete_record.rs
@@ -44,8 +44,8 @@ mod tests {
44 [ 44 [
45 CompletionItem { 45 CompletionItem {
46 label: "foo", 46 label: "foo",
47 source_range: [117; 118), 47 source_range: 117..118,
48 delete: [117; 118), 48 delete: 117..118,
49 insert: "foo", 49 insert: "foo",
50 kind: Field, 50 kind: Field,
51 detail: "u32", 51 detail: "u32",
@@ -73,16 +73,16 @@ mod tests {
73 [ 73 [
74 CompletionItem { 74 CompletionItem {
75 label: "bar", 75 label: "bar",
76 source_range: [161; 161), 76 source_range: 161..161,
77 delete: [161; 161), 77 delete: 161..161,
78 insert: "bar", 78 insert: "bar",
79 kind: Field, 79 kind: Field,
80 detail: "()", 80 detail: "()",
81 }, 81 },
82 CompletionItem { 82 CompletionItem {
83 label: "foo", 83 label: "foo",
84 source_range: [161; 161), 84 source_range: 161..161,
85 delete: [161; 161), 85 delete: 161..161,
86 insert: "foo", 86 insert: "foo",
87 kind: Field, 87 kind: Field,
88 detail: "u32", 88 detail: "u32",
@@ -109,8 +109,8 @@ mod tests {
109 [ 109 [
110 CompletionItem { 110 CompletionItem {
111 label: "foo", 111 label: "foo",
112 source_range: [171; 172), 112 source_range: 171..172,
113 delete: [171; 172), 113 delete: 171..172,
114 insert: "foo", 114 insert: "foo",
115 kind: Field, 115 kind: Field,
116 detail: "u32", 116 detail: "u32",
@@ -145,16 +145,16 @@ mod tests {
145 [ 145 [
146 CompletionItem { 146 CompletionItem {
147 label: "bar", 147 label: "bar",
148 source_range: [372; 372), 148 source_range: 372..372,
149 delete: [372; 372), 149 delete: 372..372,
150 insert: "bar", 150 insert: "bar",
151 kind: Field, 151 kind: Field,
152 detail: "u32", 152 detail: "u32",
153 }, 153 },
154 CompletionItem { 154 CompletionItem {
155 label: "baz", 155 label: "baz",
156 source_range: [372; 372), 156 source_range: 372..372,
157 delete: [372; 372), 157 delete: 372..372,
158 insert: "baz", 158 insert: "baz",
159 kind: Field, 159 kind: Field,
160 detail: "u32", 160 detail: "u32",
@@ -190,8 +190,8 @@ mod tests {
190 [ 190 [
191 CompletionItem { 191 CompletionItem {
192 label: "the_field", 192 label: "the_field",
193 source_range: [142; 145), 193 source_range: 142..145,
194 delete: [142; 145), 194 delete: 142..145,
195 insert: "the_field", 195 insert: "the_field",
196 kind: Field, 196 kind: Field,
197 detail: "u32", 197 detail: "u32",
@@ -215,8 +215,8 @@ mod tests {
215 [ 215 [
216 CompletionItem { 216 CompletionItem {
217 label: "the_field", 217 label: "the_field",
218 source_range: [83; 86), 218 source_range: 83..86,
219 delete: [83; 86), 219 delete: 83..86,
220 insert: "the_field", 220 insert: "the_field",
221 kind: Field, 221 kind: Field,
222 detail: "u32", 222 detail: "u32",
@@ -241,8 +241,8 @@ mod tests {
241 [ 241 [
242 CompletionItem { 242 CompletionItem {
243 label: "a", 243 label: "a",
244 source_range: [119; 119), 244 source_range: 119..119,
245 delete: [119; 119), 245 delete: 119..119,
246 insert: "a", 246 insert: "a",
247 kind: Field, 247 kind: Field,
248 detail: "u32", 248 detail: "u32",
@@ -267,8 +267,8 @@ mod tests {
267 [ 267 [
268 CompletionItem { 268 CompletionItem {
269 label: "b", 269 label: "b",
270 source_range: [119; 119), 270 source_range: 119..119,
271 delete: [119; 119), 271 delete: 119..119,
272 insert: "b", 272 insert: "b",
273 kind: Field, 273 kind: Field,
274 detail: "u32", 274 detail: "u32",
@@ -292,8 +292,8 @@ mod tests {
292 [ 292 [
293 CompletionItem { 293 CompletionItem {
294 label: "a", 294 label: "a",
295 source_range: [93; 93), 295 source_range: 93..93,
296 delete: [93; 93), 296 delete: 93..93,
297 insert: "a", 297 insert: "a",
298 kind: Field, 298 kind: Field,
299 detail: "u32", 299 detail: "u32",
@@ -317,8 +317,8 @@ mod tests {
317 [ 317 [
318 CompletionItem { 318 CompletionItem {
319 label: "the_field", 319 label: "the_field",
320 source_range: [137; 140), 320 source_range: 137..140,
321 delete: [137; 140), 321 delete: 137..140,
322 insert: "the_field", 322 insert: "the_field",
323 kind: Field, 323 kind: Field,
324 detail: "u32", 324 detail: "u32",
@@ -352,16 +352,16 @@ mod tests {
352 [ 352 [
353 CompletionItem { 353 CompletionItem {
354 label: "bar", 354 label: "bar",
355 source_range: [302; 302), 355 source_range: 302..302,
356 delete: [302; 302), 356 delete: 302..302,
357 insert: "bar", 357 insert: "bar",
358 kind: Field, 358 kind: Field,
359 detail: "u32", 359 detail: "u32",
360 }, 360 },
361 CompletionItem { 361 CompletionItem {
362 label: "baz", 362 label: "baz",
363 source_range: [302; 302), 363 source_range: 302..302,
364 delete: [302; 302), 364 delete: 302..302,
365 insert: "baz", 365 insert: "baz",
366 kind: Field, 366 kind: Field,
367 detail: "u32", 367 detail: "u32",
@@ -393,8 +393,8 @@ mod tests {
393 [ 393 [
394 CompletionItem { 394 CompletionItem {
395 label: "foo2", 395 label: "foo2",
396 source_range: [221; 221), 396 source_range: 221..221,
397 delete: [221; 221), 397 delete: 221..221,
398 insert: "foo2", 398 insert: "foo2",
399 kind: Field, 399 kind: Field,
400 detail: "u32", 400 detail: "u32",
diff --git a/crates/ra_ide/src/completion/complete_snippet.rs b/crates/ra_ide/src/completion/complete_snippet.rs
index 4bccfbfed..a3f5d1b6a 100644
--- a/crates/ra_ide/src/completion/complete_snippet.rs
+++ b/crates/ra_ide/src/completion/complete_snippet.rs
@@ -67,15 +67,15 @@ mod tests {
67 [ 67 [
68 CompletionItem { 68 CompletionItem {
69 label: "pd", 69 label: "pd",
70 source_range: [17; 17), 70 source_range: 17..17,
71 delete: [17; 17), 71 delete: 17..17,
72 insert: "eprintln!(\"$0 = {:?}\", $0);", 72 insert: "eprintln!(\"$0 = {:?}\", $0);",
73 kind: Snippet, 73 kind: Snippet,
74 }, 74 },
75 CompletionItem { 75 CompletionItem {
76 label: "ppd", 76 label: "ppd",
77 source_range: [17; 17), 77 source_range: 17..17,
78 delete: [17; 17), 78 delete: 17..17,
79 insert: "eprintln!(\"$0 = {:#?}\", $0);", 79 insert: "eprintln!(\"$0 = {:#?}\", $0);",
80 kind: Snippet, 80 kind: Snippet,
81 }, 81 },
@@ -111,23 +111,23 @@ mod tests {
111 [ 111 [
112 CompletionItem { 112 CompletionItem {
113 label: "Test function", 113 label: "Test function",
114 source_range: [78; 78), 114 source_range: 78..78,
115 delete: [78; 78), 115 delete: 78..78,
116 insert: "#[test]\nfn ${1:feature}() {\n $0\n}", 116 insert: "#[test]\nfn ${1:feature}() {\n $0\n}",
117 kind: Snippet, 117 kind: Snippet,
118 lookup: "tfn", 118 lookup: "tfn",
119 }, 119 },
120 CompletionItem { 120 CompletionItem {
121 label: "macro_rules", 121 label: "macro_rules",
122 source_range: [78; 78), 122 source_range: 78..78,
123 delete: [78; 78), 123 delete: 78..78,
124 insert: "macro_rules! $1 {\n\t($2) => {\n\t\t$0\n\t};\n}", 124 insert: "macro_rules! $1 {\n\t($2) => {\n\t\t$0\n\t};\n}",
125 kind: Snippet, 125 kind: Snippet,
126 }, 126 },
127 CompletionItem { 127 CompletionItem {
128 label: "pub(crate)", 128 label: "pub(crate)",
129 source_range: [78; 78), 129 source_range: 78..78,
130 delete: [78; 78), 130 delete: 78..78,
131 insert: "pub(crate) $0", 131 insert: "pub(crate) $0",
132 kind: Snippet, 132 kind: Snippet,
133 }, 133 },
diff --git a/crates/ra_ide/src/completion/complete_trait_impl.rs b/crates/ra_ide/src/completion/complete_trait_impl.rs
index c39943252..ee32d1ff6 100644
--- a/crates/ra_ide/src/completion/complete_trait_impl.rs
+++ b/crates/ra_ide/src/completion/complete_trait_impl.rs
@@ -141,7 +141,7 @@ fn add_function_impl(
141 } else { 141 } else {
142 CompletionItemKind::Function 142 CompletionItemKind::Function
143 }; 143 };
144 let range = TextRange::from_to(fn_def_node.text_range().start(), ctx.source_range().end()); 144 let range = TextRange::new(fn_def_node.text_range().start(), ctx.source_range().end());
145 145
146 match ctx.config.snippet_cap { 146 match ctx.config.snippet_cap {
147 Some(cap) => { 147 Some(cap) => {
@@ -167,7 +167,7 @@ fn add_type_alias_impl(
167 167
168 let snippet = format!("type {} = ", alias_name); 168 let snippet = format!("type {} = ", alias_name);
169 169
170 let range = TextRange::from_to(type_def_node.text_range().start(), ctx.source_range().end()); 170 let range = TextRange::new(type_def_node.text_range().start(), ctx.source_range().end());
171 171
172 CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) 172 CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone())
173 .text_edit(TextEdit::replace(range, snippet)) 173 .text_edit(TextEdit::replace(range, snippet))
@@ -188,8 +188,7 @@ fn add_const_impl(
188 if let Some(const_name) = const_name { 188 if let Some(const_name) = const_name {
189 let snippet = make_const_compl_syntax(&const_.source(ctx.db).value); 189 let snippet = make_const_compl_syntax(&const_.source(ctx.db).value);
190 190
191 let range = 191 let range = TextRange::new(const_def_node.text_range().start(), ctx.source_range().end());
192 TextRange::from_to(const_def_node.text_range().start(), ctx.source_range().end());
193 192
194 CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) 193 CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone())
195 .text_edit(TextEdit::replace(range, snippet)) 194 .text_edit(TextEdit::replace(range, snippet))
@@ -216,7 +215,7 @@ fn make_const_compl_syntax(const_: &ast::ConstDef) -> String {
216 .map_or(const_end, |f| f.text_range().start()); 215 .map_or(const_end, |f| f.text_range().start());
217 216
218 let len = end - start; 217 let len = end - start;
219 let range = TextRange::from_to(0.into(), len); 218 let range = TextRange::new(0.into(), len);
220 219
221 let syntax = const_.syntax().text().slice(range).to_string(); 220 let syntax = const_.syntax().text().slice(range).to_string();
222 221
@@ -254,24 +253,24 @@ mod tests {
254 [ 253 [
255 CompletionItem { 254 CompletionItem {
256 label: "const TEST_CONST: u16 = ", 255 label: "const TEST_CONST: u16 = ",
257 source_range: [209; 210), 256 source_range: 209..210,
258 delete: [209; 210), 257 delete: 209..210,
259 insert: "const TEST_CONST: u16 = ", 258 insert: "const TEST_CONST: u16 = ",
260 kind: Const, 259 kind: Const,
261 lookup: "TEST_CONST", 260 lookup: "TEST_CONST",
262 }, 261 },
263 CompletionItem { 262 CompletionItem {
264 label: "fn test()", 263 label: "fn test()",
265 source_range: [209; 210), 264 source_range: 209..210,
266 delete: [209; 210), 265 delete: 209..210,
267 insert: "fn test() {\n $0\n}", 266 insert: "fn test() {\n $0\n}",
268 kind: Function, 267 kind: Function,
269 lookup: "test", 268 lookup: "test",
270 }, 269 },
271 CompletionItem { 270 CompletionItem {
272 label: "type TestType = ", 271 label: "type TestType = ",
273 source_range: [209; 210), 272 source_range: 209..210,
274 delete: [209; 210), 273 delete: 209..210,
275 insert: "type TestType = ", 274 insert: "type TestType = ",
276 kind: TypeAlias, 275 kind: TypeAlias,
277 lookup: "TestType", 276 lookup: "TestType",
@@ -320,8 +319,8 @@ mod tests {
320 [ 319 [
321 CompletionItem { 320 CompletionItem {
322 label: "fn test()", 321 label: "fn test()",
323 source_range: [139; 140), 322 source_range: 139..140,
324 delete: [139; 140), 323 delete: 139..140,
325 insert: "fn test() {\n $0\n}", 324 insert: "fn test() {\n $0\n}",
326 kind: Function, 325 kind: Function,
327 lookup: "test", 326 lookup: "test",
@@ -349,8 +348,8 @@ mod tests {
349 [ 348 [
350 CompletionItem { 349 CompletionItem {
351 label: "fn foo()", 350 label: "fn foo()",
352 source_range: [141; 142), 351 source_range: 141..142,
353 delete: [138; 142), 352 delete: 138..142,
354 insert: "fn foo() {\n $0\n}", 353 insert: "fn foo() {\n $0\n}",
355 kind: Function, 354 kind: Function,
356 lookup: "foo", 355 lookup: "foo",
@@ -381,8 +380,8 @@ mod tests {
381 [ 380 [
382 CompletionItem { 381 CompletionItem {
383 label: "fn foo_bar()", 382 label: "fn foo_bar()",
384 source_range: [200; 201), 383 source_range: 200..201,
385 delete: [197; 201), 384 delete: 197..201,
386 insert: "fn foo_bar() {\n $0\n}", 385 insert: "fn foo_bar() {\n $0\n}",
387 kind: Function, 386 kind: Function,
388 lookup: "foo_bar", 387 lookup: "foo_bar",
@@ -432,8 +431,8 @@ mod tests {
432 [ 431 [
433 CompletionItem { 432 CompletionItem {
434 label: "fn foo()", 433 label: "fn foo()",
435 source_range: [144; 145), 434 source_range: 144..145,
436 delete: [141; 145), 435 delete: 141..145,
437 insert: "fn foo<T>() {\n $0\n}", 436 insert: "fn foo<T>() {\n $0\n}",
438 kind: Function, 437 kind: Function,
439 lookup: "foo", 438 lookup: "foo",
@@ -461,8 +460,8 @@ mod tests {
461 [ 460 [
462 CompletionItem { 461 CompletionItem {
463 label: "fn foo()", 462 label: "fn foo()",
464 source_range: [166; 167), 463 source_range: 166..167,
465 delete: [163; 167), 464 delete: 163..167,
466 insert: "fn foo<T>()\nwhere T: Into<String> {\n $0\n}", 465 insert: "fn foo<T>()\nwhere T: Into<String> {\n $0\n}",
467 kind: Function, 466 kind: Function,
468 lookup: "foo", 467 lookup: "foo",
@@ -488,8 +487,8 @@ mod tests {
488 [ 487 [
489 CompletionItem { 488 CompletionItem {
490 label: "type SomeType = ", 489 label: "type SomeType = ",
491 source_range: [124; 125), 490 source_range: 124..125,
492 delete: [119; 125), 491 delete: 119..125,
493 insert: "type SomeType = ", 492 insert: "type SomeType = ",
494 kind: TypeAlias, 493 kind: TypeAlias,
495 lookup: "SomeType", 494 lookup: "SomeType",
@@ -515,8 +514,8 @@ mod tests {
515 [ 514 [
516 CompletionItem { 515 CompletionItem {
517 label: "const SOME_CONST: u16 = ", 516 label: "const SOME_CONST: u16 = ",
518 source_range: [133; 134), 517 source_range: 133..134,
519 delete: [127; 134), 518 delete: 127..134,
520 insert: "const SOME_CONST: u16 = ", 519 insert: "const SOME_CONST: u16 = ",
521 kind: Const, 520 kind: Const,
522 lookup: "SOME_CONST", 521 lookup: "SOME_CONST",
@@ -542,8 +541,8 @@ mod tests {
542 [ 541 [
543 CompletionItem { 542 CompletionItem {
544 label: "const SOME_CONST: u16 = ", 543 label: "const SOME_CONST: u16 = ",
545 source_range: [138; 139), 544 source_range: 138..139,
546 delete: [132; 139), 545 delete: 132..139,
547 insert: "const SOME_CONST: u16 = ", 546 insert: "const SOME_CONST: u16 = ",
548 kind: Const, 547 kind: Const,
549 lookup: "SOME_CONST", 548 lookup: "SOME_CONST",
diff --git a/crates/ra_ide/src/completion/complete_unqualified_path.rs b/crates/ra_ide/src/completion/complete_unqualified_path.rs
index ad00154a3..56cd086c6 100644
--- a/crates/ra_ide/src/completion/complete_unqualified_path.rs
+++ b/crates/ra_ide/src/completion/complete_unqualified_path.rs
@@ -38,7 +38,15 @@ fn complete_enum_variants(acc: &mut Completions, ctx: &CompletionContext) {
38 if let Some(ty) = ctx.expected_type_of(&ctx.token.parent()) { 38 if let Some(ty) = ctx.expected_type_of(&ctx.token.parent()) {
39 if let Some(Adt::Enum(enum_data)) = ty.as_adt() { 39 if let Some(Adt::Enum(enum_data)) = ty.as_adt() {
40 let variants = enum_data.variants(ctx.db); 40 let variants = enum_data.variants(ctx.db);
41 let module = enum_data.module(ctx.db); 41
42 let module = if let Some(module) = ctx.scope().module() {
43 // Compute path from the completion site if available.
44 module
45 } else {
46 // Otherwise fall back to the enum's definition site.
47 enum_data.module(ctx.db)
48 };
49
42 for variant in variants { 50 for variant in variants {
43 if let Some(path) = module.find_use_path(ctx.db, ModuleDef::from(variant)) { 51 if let Some(path) = module.find_use_path(ctx.db, ModuleDef::from(variant)) {
44 // Variants with trivial paths are already added by the existing completion logic, 52 // Variants with trivial paths are already added by the existing completion logic,
@@ -77,8 +85,8 @@ mod tests {
77 [ 85 [
78 CompletionItem { 86 CompletionItem {
79 label: "collections", 87 label: "collections",
80 source_range: [21; 24), 88 source_range: 21..24,
81 delete: [21; 24), 89 delete: 21..24,
82 insert: "collections", 90 insert: "collections",
83 }, 91 },
84 ] 92 ]
@@ -149,8 +157,8 @@ mod tests {
149 [ 157 [
150 CompletionItem { 158 CompletionItem {
151 label: "Enum", 159 label: "Enum",
152 source_range: [231; 233), 160 source_range: 231..233,
153 delete: [231; 233), 161 delete: 231..233,
154 insert: "Enum", 162 insert: "Enum",
155 kind: Enum, 163 kind: Enum,
156 }, 164 },
@@ -175,8 +183,8 @@ mod tests {
175 [ 183 [
176 CompletionItem { 184 CompletionItem {
177 label: "quux(…)", 185 label: "quux(…)",
178 source_range: [91; 91), 186 source_range: 91..91,
179 delete: [91; 91), 187 delete: 91..91,
180 insert: "quux(${1:x})$0", 188 insert: "quux(${1:x})$0",
181 kind: Function, 189 kind: Function,
182 lookup: "quux", 190 lookup: "quux",
@@ -185,16 +193,16 @@ mod tests {
185 }, 193 },
186 CompletionItem { 194 CompletionItem {
187 label: "x", 195 label: "x",
188 source_range: [91; 91), 196 source_range: 91..91,
189 delete: [91; 91), 197 delete: 91..91,
190 insert: "x", 198 insert: "x",
191 kind: Binding, 199 kind: Binding,
192 detail: "i32", 200 detail: "i32",
193 }, 201 },
194 CompletionItem { 202 CompletionItem {
195 label: "y", 203 label: "y",
196 source_range: [91; 91), 204 source_range: 91..91,
197 delete: [91; 91), 205 delete: 91..91,
198 insert: "y", 206 insert: "y",
199 kind: Binding, 207 kind: Binding,
200 detail: "i32", 208 detail: "i32",
@@ -224,23 +232,23 @@ mod tests {
224 [ 232 [
225 CompletionItem { 233 CompletionItem {
226 label: "a", 234 label: "a",
227 source_range: [242; 242), 235 source_range: 242..242,
228 delete: [242; 242), 236 delete: 242..242,
229 insert: "a", 237 insert: "a",
230 kind: Binding, 238 kind: Binding,
231 }, 239 },
232 CompletionItem { 240 CompletionItem {
233 label: "b", 241 label: "b",
234 source_range: [242; 242), 242 source_range: 242..242,
235 delete: [242; 242), 243 delete: 242..242,
236 insert: "b", 244 insert: "b",
237 kind: Binding, 245 kind: Binding,
238 detail: "i32", 246 detail: "i32",
239 }, 247 },
240 CompletionItem { 248 CompletionItem {
241 label: "quux()", 249 label: "quux()",
242 source_range: [242; 242), 250 source_range: 242..242,
243 delete: [242; 242), 251 delete: 242..242,
244 insert: "quux()$0", 252 insert: "quux()$0",
245 kind: Function, 253 kind: Function,
246 lookup: "quux", 254 lookup: "quux",
@@ -267,8 +275,8 @@ mod tests {
267 [ 275 [
268 CompletionItem { 276 CompletionItem {
269 label: "quux()", 277 label: "quux()",
270 source_range: [95; 95), 278 source_range: 95..95,
271 delete: [95; 95), 279 delete: 95..95,
272 insert: "quux()$0", 280 insert: "quux()$0",
273 kind: Function, 281 kind: Function,
274 lookup: "quux", 282 lookup: "quux",
@@ -276,8 +284,8 @@ mod tests {
276 }, 284 },
277 CompletionItem { 285 CompletionItem {
278 label: "x", 286 label: "x",
279 source_range: [95; 95), 287 source_range: 95..95,
280 delete: [95; 95), 288 delete: 95..95,
281 insert: "x", 289 insert: "x",
282 kind: Binding, 290 kind: Binding,
283 }, 291 },
@@ -300,15 +308,15 @@ mod tests {
300 [ 308 [
301 CompletionItem { 309 CompletionItem {
302 label: "T", 310 label: "T",
303 source_range: [52; 52), 311 source_range: 52..52,
304 delete: [52; 52), 312 delete: 52..52,
305 insert: "T", 313 insert: "T",
306 kind: TypeParam, 314 kind: TypeParam,
307 }, 315 },
308 CompletionItem { 316 CompletionItem {
309 label: "quux()", 317 label: "quux()",
310 source_range: [52; 52), 318 source_range: 52..52,
311 delete: [52; 52), 319 delete: 52..52,
312 insert: "quux()$0", 320 insert: "quux()$0",
313 kind: Function, 321 kind: Function,
314 lookup: "quux", 322 lookup: "quux",
@@ -333,22 +341,22 @@ mod tests {
333 [ 341 [
334 CompletionItem { 342 CompletionItem {
335 label: "Self", 343 label: "Self",
336 source_range: [54; 54), 344 source_range: 54..54,
337 delete: [54; 54), 345 delete: 54..54,
338 insert: "Self", 346 insert: "Self",
339 kind: TypeParam, 347 kind: TypeParam,
340 }, 348 },
341 CompletionItem { 349 CompletionItem {
342 label: "T", 350 label: "T",
343 source_range: [54; 54), 351 source_range: 54..54,
344 delete: [54; 54), 352 delete: 54..54,
345 insert: "T", 353 insert: "T",
346 kind: TypeParam, 354 kind: TypeParam,
347 }, 355 },
348 CompletionItem { 356 CompletionItem {
349 label: "X<…>", 357 label: "X<…>",
350 source_range: [54; 54), 358 source_range: 54..54,
351 delete: [54; 54), 359 delete: 54..54,
352 insert: "X<$0>", 360 insert: "X<$0>",
353 kind: Struct, 361 kind: Struct,
354 lookup: "X", 362 lookup: "X",
@@ -372,15 +380,15 @@ mod tests {
372 [ 380 [
373 CompletionItem { 381 CompletionItem {
374 label: "Self", 382 label: "Self",
375 source_range: [48; 48), 383 source_range: 48..48,
376 delete: [48; 48), 384 delete: 48..48,
377 insert: "Self", 385 insert: "Self",
378 kind: TypeParam, 386 kind: TypeParam,
379 }, 387 },
380 CompletionItem { 388 CompletionItem {
381 label: "X", 389 label: "X",
382 source_range: [48; 48), 390 source_range: 48..48,
383 delete: [48; 48), 391 delete: 48..48,
384 insert: "X", 392 insert: "X",
385 kind: Enum, 393 kind: Enum,
386 }, 394 },
@@ -405,22 +413,22 @@ mod tests {
405 [ 413 [
406 CompletionItem { 414 CompletionItem {
407 label: "Baz", 415 label: "Baz",
408 source_range: [105; 105), 416 source_range: 105..105,
409 delete: [105; 105), 417 delete: 105..105,
410 insert: "Baz", 418 insert: "Baz",
411 kind: Enum, 419 kind: Enum,
412 }, 420 },
413 CompletionItem { 421 CompletionItem {
414 label: "Foo", 422 label: "Foo",
415 source_range: [105; 105), 423 source_range: 105..105,
416 delete: [105; 105), 424 delete: 105..105,
417 insert: "Foo", 425 insert: "Foo",
418 kind: Struct, 426 kind: Struct,
419 }, 427 },
420 CompletionItem { 428 CompletionItem {
421 label: "quux()", 429 label: "quux()",
422 source_range: [105; 105), 430 source_range: 105..105,
423 delete: [105; 105), 431 delete: 105..105,
424 insert: "quux()$0", 432 insert: "quux()$0",
425 kind: Function, 433 kind: Function,
426 lookup: "quux", 434 lookup: "quux",
@@ -447,8 +455,8 @@ mod tests {
447 [ 455 [
448 CompletionItem { 456 CompletionItem {
449 label: "other_crate", 457 label: "other_crate",
450 source_range: [4; 4), 458 source_range: 4..4,
451 delete: [4; 4), 459 delete: 4..4,
452 insert: "other_crate", 460 insert: "other_crate",
453 kind: Module, 461 kind: Module,
454 }, 462 },
@@ -473,15 +481,15 @@ mod tests {
473 [ 481 [
474 CompletionItem { 482 CompletionItem {
475 label: "Bar", 483 label: "Bar",
476 source_range: [117; 117), 484 source_range: 117..117,
477 delete: [117; 117), 485 delete: 117..117,
478 insert: "Bar", 486 insert: "Bar",
479 kind: Struct, 487 kind: Struct,
480 }, 488 },
481 CompletionItem { 489 CompletionItem {
482 label: "quux()", 490 label: "quux()",
483 source_range: [117; 117), 491 source_range: 117..117,
484 delete: [117; 117), 492 delete: 117..117,
485 insert: "quux()$0", 493 insert: "quux()$0",
486 kind: Function, 494 kind: Function,
487 lookup: "quux", 495 lookup: "quux",
@@ -505,15 +513,15 @@ mod tests {
505 [ 513 [
506 CompletionItem { 514 CompletionItem {
507 label: "Foo", 515 label: "Foo",
508 source_range: [55; 55), 516 source_range: 55..55,
509 delete: [55; 55), 517 delete: 55..55,
510 insert: "Foo", 518 insert: "Foo",
511 kind: Struct, 519 kind: Struct,
512 }, 520 },
513 CompletionItem { 521 CompletionItem {
514 label: "x()", 522 label: "x()",
515 source_range: [55; 55), 523 source_range: 55..55,
516 delete: [55; 55), 524 delete: 55..55,
517 insert: "x()$0", 525 insert: "x()$0",
518 kind: Function, 526 kind: Function,
519 lookup: "x", 527 lookup: "x",
@@ -542,16 +550,16 @@ mod tests {
542 [ 550 [
543 CompletionItem { 551 CompletionItem {
544 label: "bar", 552 label: "bar",
545 source_range: [146; 146), 553 source_range: 146..146,
546 delete: [146; 146), 554 delete: 146..146,
547 insert: "bar", 555 insert: "bar",
548 kind: Binding, 556 kind: Binding,
549 detail: "i32", 557 detail: "i32",
550 }, 558 },
551 CompletionItem { 559 CompletionItem {
552 label: "foo()", 560 label: "foo()",
553 source_range: [146; 146), 561 source_range: 146..146,
554 delete: [146; 146), 562 delete: 146..146,
555 insert: "foo()$0", 563 insert: "foo()$0",
556 kind: Function, 564 kind: Function,
557 lookup: "foo", 565 lookup: "foo",
@@ -570,15 +578,15 @@ mod tests {
570 [ 578 [
571 CompletionItem { 579 CompletionItem {
572 label: "Self", 580 label: "Self",
573 source_range: [25; 25), 581 source_range: 25..25,
574 delete: [25; 25), 582 delete: 25..25,
575 insert: "Self", 583 insert: "Self",
576 kind: TypeParam, 584 kind: TypeParam,
577 }, 585 },
578 CompletionItem { 586 CompletionItem {
579 label: "self", 587 label: "self",
580 source_range: [25; 25), 588 source_range: 25..25,
581 delete: [25; 25), 589 delete: 25..25,
582 insert: "self", 590 insert: "self",
583 kind: Binding, 591 kind: Binding,
584 detail: "&{unknown}", 592 detail: "&{unknown}",
@@ -609,15 +617,15 @@ mod tests {
609 [ 617 [
610 CompletionItem { 618 CompletionItem {
611 label: "Option", 619 label: "Option",
612 source_range: [18; 18), 620 source_range: 18..18,
613 delete: [18; 18), 621 delete: 18..18,
614 insert: "Option", 622 insert: "Option",
615 kind: Struct, 623 kind: Struct,
616 }, 624 },
617 CompletionItem { 625 CompletionItem {
618 label: "foo()", 626 label: "foo()",
619 source_range: [18; 18), 627 source_range: 18..18,
620 delete: [18; 18), 628 delete: 18..18,
621 insert: "foo()$0", 629 insert: "foo()$0",
622 kind: Function, 630 kind: Function,
623 lookup: "foo", 631 lookup: "foo",
@@ -625,8 +633,8 @@ mod tests {
625 }, 633 },
626 CompletionItem { 634 CompletionItem {
627 label: "std", 635 label: "std",
628 source_range: [18; 18), 636 source_range: 18..18,
629 delete: [18; 18), 637 delete: 18..18,
630 insert: "std", 638 insert: "std",
631 kind: Module, 639 kind: Module,
632 }, 640 },
@@ -664,22 +672,22 @@ mod tests {
664 [ 672 [
665 CompletionItem { 673 CompletionItem {
666 label: "String", 674 label: "String",
667 source_range: [18; 18), 675 source_range: 18..18,
668 delete: [18; 18), 676 delete: 18..18,
669 insert: "String", 677 insert: "String",
670 kind: Struct, 678 kind: Struct,
671 }, 679 },
672 CompletionItem { 680 CompletionItem {
673 label: "core", 681 label: "core",
674 source_range: [18; 18), 682 source_range: 18..18,
675 delete: [18; 18), 683 delete: 18..18,
676 insert: "core", 684 insert: "core",
677 kind: Module, 685 kind: Module,
678 }, 686 },
679 CompletionItem { 687 CompletionItem {
680 label: "foo()", 688 label: "foo()",
681 source_range: [18; 18), 689 source_range: 18..18,
682 delete: [18; 18), 690 delete: 18..18,
683 insert: "foo()$0", 691 insert: "foo()$0",
684 kind: Function, 692 kind: Function,
685 lookup: "foo", 693 lookup: "foo",
@@ -687,8 +695,8 @@ mod tests {
687 }, 695 },
688 CompletionItem { 696 CompletionItem {
689 label: "std", 697 label: "std",
690 source_range: [18; 18), 698 source_range: 18..18,
691 delete: [18; 18), 699 delete: 18..18,
692 insert: "std", 700 insert: "std",
693 kind: Module, 701 kind: Module,
694 }, 702 },
@@ -733,47 +741,47 @@ mod tests {
733 @r###" 741 @r###"
734 [ 742 [
735 CompletionItem { 743 CompletionItem {
736 label: "bar!", 744 label: "bar!(…)",
737 source_range: [252; 252), 745 source_range: 252..252,
738 delete: [252; 252), 746 delete: 252..252,
739 insert: "bar!($0)", 747 insert: "bar!($0)",
740 kind: Macro, 748 kind: Macro,
741 detail: "macro_rules! bar", 749 detail: "macro_rules! bar",
742 }, 750 },
743 CompletionItem { 751 CompletionItem {
744 label: "baz!", 752 label: "baz!(…)",
745 source_range: [252; 252), 753 source_range: 252..252,
746 delete: [252; 252), 754 delete: 252..252,
747 insert: "baz!($0)", 755 insert: "baz!($0)",
748 kind: Macro, 756 kind: Macro,
749 detail: "#[macro_export]\nmacro_rules! baz", 757 detail: "#[macro_export]\nmacro_rules! baz",
750 }, 758 },
751 CompletionItem { 759 CompletionItem {
752 label: "foo!", 760 label: "foo!(…)",
753 source_range: [252; 252), 761 source_range: 252..252,
754 delete: [252; 252), 762 delete: 252..252,
755 insert: "foo!($0)", 763 insert: "foo!($0)",
756 kind: Macro, 764 kind: Macro,
757 detail: "macro_rules! foo", 765 detail: "macro_rules! foo",
758 }, 766 },
759 CompletionItem { 767 CompletionItem {
760 label: "m1", 768 label: "m1",
761 source_range: [252; 252), 769 source_range: 252..252,
762 delete: [252; 252), 770 delete: 252..252,
763 insert: "m1", 771 insert: "m1",
764 kind: Module, 772 kind: Module,
765 }, 773 },
766 CompletionItem { 774 CompletionItem {
767 label: "m2", 775 label: "m2",
768 source_range: [252; 252), 776 source_range: 252..252,
769 delete: [252; 252), 777 delete: 252..252,
770 insert: "m2", 778 insert: "m2",
771 kind: Module, 779 kind: Module,
772 }, 780 },
773 CompletionItem { 781 CompletionItem {
774 label: "main()", 782 label: "main()",
775 source_range: [252; 252), 783 source_range: 252..252,
776 delete: [252; 252), 784 delete: 252..252,
777 insert: "main()$0", 785 insert: "main()$0",
778 kind: Function, 786 kind: Function,
779 lookup: "main", 787 lookup: "main",
@@ -802,17 +810,17 @@ mod tests {
802 @r###" 810 @r###"
803 [ 811 [
804 CompletionItem { 812 CompletionItem {
805 label: "foo!", 813 label: "foo!(…)",
806 source_range: [49; 49), 814 source_range: 49..49,
807 delete: [49; 49), 815 delete: 49..49,
808 insert: "foo!($0)", 816 insert: "foo!($0)",
809 kind: Macro, 817 kind: Macro,
810 detail: "macro_rules! foo", 818 detail: "macro_rules! foo",
811 }, 819 },
812 CompletionItem { 820 CompletionItem {
813 label: "foo()", 821 label: "foo()",
814 source_range: [49; 49), 822 source_range: 49..49,
815 delete: [49; 49), 823 delete: 49..49,
816 insert: "foo()$0", 824 insert: "foo()$0",
817 kind: Function, 825 kind: Function,
818 lookup: "foo", 826 lookup: "foo",
@@ -841,17 +849,17 @@ mod tests {
841 @r###" 849 @r###"
842 [ 850 [
843 CompletionItem { 851 CompletionItem {
844 label: "foo!", 852 label: "foo!(…)",
845 source_range: [57; 57), 853 source_range: 57..57,
846 delete: [57; 57), 854 delete: 57..57,
847 insert: "foo!($0)", 855 insert: "foo!($0)",
848 kind: Macro, 856 kind: Macro,
849 detail: "macro_rules! foo", 857 detail: "macro_rules! foo",
850 }, 858 },
851 CompletionItem { 859 CompletionItem {
852 label: "main()", 860 label: "main()",
853 source_range: [57; 57), 861 source_range: 57..57,
854 delete: [57; 57), 862 delete: 57..57,
855 insert: "main()$0", 863 insert: "main()$0",
856 kind: Function, 864 kind: Function,
857 lookup: "main", 865 lookup: "main",
@@ -880,17 +888,17 @@ mod tests {
880 @r###" 888 @r###"
881 [ 889 [
882 CompletionItem { 890 CompletionItem {
883 label: "foo!", 891 label: "foo!(…)",
884 source_range: [50; 50), 892 source_range: 50..50,
885 delete: [50; 50), 893 delete: 50..50,
886 insert: "foo!($0)", 894 insert: "foo!($0)",
887 kind: Macro, 895 kind: Macro,
888 detail: "macro_rules! foo", 896 detail: "macro_rules! foo",
889 }, 897 },
890 CompletionItem { 898 CompletionItem {
891 label: "main()", 899 label: "main()",
892 source_range: [50; 50), 900 source_range: 50..50,
893 delete: [50; 50), 901 delete: 50..50,
894 insert: "main()$0", 902 insert: "main()$0",
895 kind: Function, 903 kind: Function,
896 lookup: "main", 904 lookup: "main",
@@ -917,8 +925,8 @@ mod tests {
917 [ 925 [
918 CompletionItem { 926 CompletionItem {
919 label: "frobnicate()", 927 label: "frobnicate()",
920 source_range: [23; 24), 928 source_range: 23..24,
921 delete: [23; 24), 929 delete: 23..24,
922 insert: "frobnicate()$0", 930 insert: "frobnicate()$0",
923 kind: Function, 931 kind: Function,
924 lookup: "frobnicate", 932 lookup: "frobnicate",
@@ -926,8 +934,8 @@ mod tests {
926 }, 934 },
927 CompletionItem { 935 CompletionItem {
928 label: "main()", 936 label: "main()",
929 source_range: [23; 24), 937 source_range: 23..24,
930 delete: [23; 24), 938 delete: 23..24,
931 insert: "main()$0", 939 insert: "main()$0",
932 kind: Function, 940 kind: Function,
933 lookup: "main", 941 lookup: "main",
@@ -953,17 +961,17 @@ mod tests {
953 @r###" 961 @r###"
954 [ 962 [
955 CompletionItem { 963 CompletionItem {
956 label: "m!", 964 label: "m!(…)",
957 source_range: [145; 145), 965 source_range: 145..145,
958 delete: [145; 145), 966 delete: 145..145,
959 insert: "m!($0)", 967 insert: "m!($0)",
960 kind: Macro, 968 kind: Macro,
961 detail: "macro_rules! m", 969 detail: "macro_rules! m",
962 }, 970 },
963 CompletionItem { 971 CompletionItem {
964 label: "quux(…)", 972 label: "quux(…)",
965 source_range: [145; 145), 973 source_range: 145..145,
966 delete: [145; 145), 974 delete: 145..145,
967 insert: "quux(${1:x})$0", 975 insert: "quux(${1:x})$0",
968 kind: Function, 976 kind: Function,
969 lookup: "quux", 977 lookup: "quux",
@@ -972,16 +980,16 @@ mod tests {
972 }, 980 },
973 CompletionItem { 981 CompletionItem {
974 label: "x", 982 label: "x",
975 source_range: [145; 145), 983 source_range: 145..145,
976 delete: [145; 145), 984 delete: 145..145,
977 insert: "x", 985 insert: "x",
978 kind: Binding, 986 kind: Binding,
979 detail: "i32", 987 detail: "i32",
980 }, 988 },
981 CompletionItem { 989 CompletionItem {
982 label: "y", 990 label: "y",
983 source_range: [145; 145), 991 source_range: 145..145,
984 delete: [145; 145), 992 delete: 145..145,
985 insert: "y", 993 insert: "y",
986 kind: Binding, 994 kind: Binding,
987 detail: "i32", 995 detail: "i32",
@@ -1006,17 +1014,17 @@ mod tests {
1006 @r###" 1014 @r###"
1007 [ 1015 [
1008 CompletionItem { 1016 CompletionItem {
1009 label: "m!", 1017 label: "m!(…)",
1010 source_range: [145; 146), 1018 source_range: 145..146,
1011 delete: [145; 146), 1019 delete: 145..146,
1012 insert: "m!($0)", 1020 insert: "m!($0)",
1013 kind: Macro, 1021 kind: Macro,
1014 detail: "macro_rules! m", 1022 detail: "macro_rules! m",
1015 }, 1023 },
1016 CompletionItem { 1024 CompletionItem {
1017 label: "quux(…)", 1025 label: "quux(…)",
1018 source_range: [145; 146), 1026 source_range: 145..146,
1019 delete: [145; 146), 1027 delete: 145..146,
1020 insert: "quux(${1:x})$0", 1028 insert: "quux(${1:x})$0",
1021 kind: Function, 1029 kind: Function,
1022 lookup: "quux", 1030 lookup: "quux",
@@ -1025,16 +1033,16 @@ mod tests {
1025 }, 1033 },
1026 CompletionItem { 1034 CompletionItem {
1027 label: "x", 1035 label: "x",
1028 source_range: [145; 146), 1036 source_range: 145..146,
1029 delete: [145; 146), 1037 delete: 145..146,
1030 insert: "x", 1038 insert: "x",
1031 kind: Binding, 1039 kind: Binding,
1032 detail: "i32", 1040 detail: "i32",
1033 }, 1041 },
1034 CompletionItem { 1042 CompletionItem {
1035 label: "y", 1043 label: "y",
1036 source_range: [145; 146), 1044 source_range: 145..146,
1037 delete: [145; 146), 1045 delete: 145..146,
1038 insert: "y", 1046 insert: "y",
1039 kind: Binding, 1047 kind: Binding,
1040 detail: "i32", 1048 detail: "i32",
@@ -1059,17 +1067,17 @@ mod tests {
1059 @r###" 1067 @r###"
1060 [ 1068 [
1061 CompletionItem { 1069 CompletionItem {
1062 label: "m!", 1070 label: "m!(…)",
1063 source_range: [145; 146), 1071 source_range: 145..146,
1064 delete: [145; 146), 1072 delete: 145..146,
1065 insert: "m!($0)", 1073 insert: "m!($0)",
1066 kind: Macro, 1074 kind: Macro,
1067 detail: "macro_rules! m", 1075 detail: "macro_rules! m",
1068 }, 1076 },
1069 CompletionItem { 1077 CompletionItem {
1070 label: "quux(…)", 1078 label: "quux(…)",
1071 source_range: [145; 146), 1079 source_range: 145..146,
1072 delete: [145; 146), 1080 delete: 145..146,
1073 insert: "quux(${1:x})$0", 1081 insert: "quux(${1:x})$0",
1074 kind: Function, 1082 kind: Function,
1075 lookup: "quux", 1083 lookup: "quux",
@@ -1078,16 +1086,16 @@ mod tests {
1078 }, 1086 },
1079 CompletionItem { 1087 CompletionItem {
1080 label: "x", 1088 label: "x",
1081 source_range: [145; 146), 1089 source_range: 145..146,
1082 delete: [145; 146), 1090 delete: 145..146,
1083 insert: "x", 1091 insert: "x",
1084 kind: Binding, 1092 kind: Binding,
1085 detail: "i32", 1093 detail: "i32",
1086 }, 1094 },
1087 CompletionItem { 1095 CompletionItem {
1088 label: "y", 1096 label: "y",
1089 source_range: [145; 146), 1097 source_range: 145..146,
1090 delete: [145; 146), 1098 delete: 145..146,
1091 insert: "y", 1099 insert: "y",
1092 kind: Binding, 1100 kind: Binding,
1093 detail: "i32", 1101 detail: "i32",
@@ -1113,14 +1121,14 @@ mod tests {
1113 [ 1121 [
1114 CompletionItem { 1122 CompletionItem {
1115 label: "Quux", 1123 label: "Quux",
1116 source_range: [82; 82), 1124 source_range: 82..82,
1117 delete: [82; 82), 1125 delete: 82..82,
1118 insert: "Quux", 1126 insert: "Quux",
1119 }, 1127 },
1120 CompletionItem { 1128 CompletionItem {
1121 label: "main()", 1129 label: "main()",
1122 source_range: [82; 82), 1130 source_range: 82..82,
1123 delete: [82; 82), 1131 delete: 82..82,
1124 insert: "main()$0", 1132 insert: "main()$0",
1125 kind: Function, 1133 kind: Function,
1126 lookup: "main", 1134 lookup: "main",
@@ -1154,31 +1162,31 @@ mod tests {
1154 [ 1162 [
1155 CompletionItem { 1163 CompletionItem {
1156 label: "Foo", 1164 label: "Foo",
1157 source_range: [248; 250), 1165 source_range: 248..250,
1158 delete: [248; 250), 1166 delete: 248..250,
1159 insert: "Foo", 1167 insert: "Foo",
1160 kind: Enum, 1168 kind: Enum,
1161 }, 1169 },
1162 CompletionItem { 1170 CompletionItem {
1163 label: "Foo::Bar", 1171 label: "Foo::Bar",
1164 source_range: [248; 250), 1172 source_range: 248..250,
1165 delete: [248; 250), 1173 delete: 248..250,
1166 insert: "Foo::Bar", 1174 insert: "Foo::Bar",
1167 kind: EnumVariant, 1175 kind: EnumVariant,
1168 detail: "()", 1176 detail: "()",
1169 }, 1177 },
1170 CompletionItem { 1178 CompletionItem {
1171 label: "Foo::Baz", 1179 label: "Foo::Baz",
1172 source_range: [248; 250), 1180 source_range: 248..250,
1173 delete: [248; 250), 1181 delete: 248..250,
1174 insert: "Foo::Baz", 1182 insert: "Foo::Baz",
1175 kind: EnumVariant, 1183 kind: EnumVariant,
1176 detail: "()", 1184 detail: "()",
1177 }, 1185 },
1178 CompletionItem { 1186 CompletionItem {
1179 label: "Foo::Quux", 1187 label: "Foo::Quux",
1180 source_range: [248; 250), 1188 source_range: 248..250,
1181 delete: [248; 250), 1189 delete: 248..250,
1182 insert: "Foo::Quux", 1190 insert: "Foo::Quux",
1183 kind: EnumVariant, 1191 kind: EnumVariant,
1184 detail: "()", 1192 detail: "()",
@@ -1212,31 +1220,31 @@ mod tests {
1212 [ 1220 [
1213 CompletionItem { 1221 CompletionItem {
1214 label: "Foo", 1222 label: "Foo",
1215 source_range: [219; 221), 1223 source_range: 219..221,
1216 delete: [219; 221), 1224 delete: 219..221,
1217 insert: "Foo", 1225 insert: "Foo",
1218 kind: Enum, 1226 kind: Enum,
1219 }, 1227 },
1220 CompletionItem { 1228 CompletionItem {
1221 label: "Foo::Bar", 1229 label: "Foo::Bar",
1222 source_range: [219; 221), 1230 source_range: 219..221,
1223 delete: [219; 221), 1231 delete: 219..221,
1224 insert: "Foo::Bar", 1232 insert: "Foo::Bar",
1225 kind: EnumVariant, 1233 kind: EnumVariant,
1226 detail: "()", 1234 detail: "()",
1227 }, 1235 },
1228 CompletionItem { 1236 CompletionItem {
1229 label: "Foo::Baz", 1237 label: "Foo::Baz",
1230 source_range: [219; 221), 1238 source_range: 219..221,
1231 delete: [219; 221), 1239 delete: 219..221,
1232 insert: "Foo::Baz", 1240 insert: "Foo::Baz",
1233 kind: EnumVariant, 1241 kind: EnumVariant,
1234 detail: "()", 1242 detail: "()",
1235 }, 1243 },
1236 CompletionItem { 1244 CompletionItem {
1237 label: "Foo::Quux", 1245 label: "Foo::Quux",
1238 source_range: [219; 221), 1246 source_range: 219..221,
1239 delete: [219; 221), 1247 delete: 219..221,
1240 insert: "Foo::Quux", 1248 insert: "Foo::Quux",
1241 kind: EnumVariant, 1249 kind: EnumVariant,
1242 detail: "()", 1250 detail: "()",
@@ -1266,39 +1274,39 @@ mod tests {
1266 [ 1274 [
1267 CompletionItem { 1275 CompletionItem {
1268 label: "Foo", 1276 label: "Foo",
1269 source_range: [185; 186), 1277 source_range: 185..186,
1270 delete: [185; 186), 1278 delete: 185..186,
1271 insert: "Foo", 1279 insert: "Foo",
1272 kind: Enum, 1280 kind: Enum,
1273 }, 1281 },
1274 CompletionItem { 1282 CompletionItem {
1275 label: "Foo::Bar", 1283 label: "Foo::Bar",
1276 source_range: [185; 186), 1284 source_range: 185..186,
1277 delete: [185; 186), 1285 delete: 185..186,
1278 insert: "Foo::Bar", 1286 insert: "Foo::Bar",
1279 kind: EnumVariant, 1287 kind: EnumVariant,
1280 detail: "()", 1288 detail: "()",
1281 }, 1289 },
1282 CompletionItem { 1290 CompletionItem {
1283 label: "Foo::Baz", 1291 label: "Foo::Baz",
1284 source_range: [185; 186), 1292 source_range: 185..186,
1285 delete: [185; 186), 1293 delete: 185..186,
1286 insert: "Foo::Baz", 1294 insert: "Foo::Baz",
1287 kind: EnumVariant, 1295 kind: EnumVariant,
1288 detail: "()", 1296 detail: "()",
1289 }, 1297 },
1290 CompletionItem { 1298 CompletionItem {
1291 label: "Foo::Quux", 1299 label: "Foo::Quux",
1292 source_range: [185; 186), 1300 source_range: 185..186,
1293 delete: [185; 186), 1301 delete: 185..186,
1294 insert: "Foo::Quux", 1302 insert: "Foo::Quux",
1295 kind: EnumVariant, 1303 kind: EnumVariant,
1296 detail: "()", 1304 detail: "()",
1297 }, 1305 },
1298 CompletionItem { 1306 CompletionItem {
1299 label: "main()", 1307 label: "main()",
1300 source_range: [185; 186), 1308 source_range: 185..186,
1301 delete: [185; 186), 1309 delete: 185..186,
1302 insert: "main()$0", 1310 insert: "main()$0",
1303 kind: Function, 1311 kind: Function,
1304 lookup: "main", 1312 lookup: "main",
@@ -1308,4 +1316,47 @@ mod tests {
1308 "### 1316 "###
1309 ) 1317 )
1310 } 1318 }
1319
1320 #[test]
1321 fn completes_enum_variant_from_module() {
1322 assert_debug_snapshot!(
1323 do_reference_completion(
1324 r"
1325 mod m { pub enum E { V } }
1326
1327 fn f() -> m::E {
1328 V<|>
1329 }
1330 "
1331 ),
1332 @r###"
1333 [
1334 CompletionItem {
1335 label: "f()",
1336 source_range: 98..99,
1337 delete: 98..99,
1338 insert: "f()$0",
1339 kind: Function,
1340 lookup: "f",
1341 detail: "fn f() -> m::E",
1342 },
1343 CompletionItem {
1344 label: "m",
1345 source_range: 98..99,
1346 delete: 98..99,
1347 insert: "m",
1348 kind: Module,
1349 },
1350 CompletionItem {
1351 label: "m::E::V",
1352 source_range: 98..99,
1353 delete: 98..99,
1354 insert: "m::E::V",
1355 kind: EnumVariant,
1356 detail: "()",
1357 },
1358 ]
1359 "###
1360 )
1361 }
1311} 1362}
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs
index a76d1ce45..5f2797e41 100644
--- a/crates/ra_ide/src/completion/completion_context.rs
+++ b/crates/ra_ide/src/completion/completion_context.rs
@@ -7,7 +7,7 @@ use ra_syntax::{
7 algo::{find_covering_element, find_node_at_offset}, 7 algo::{find_covering_element, find_node_at_offset},
8 ast, AstNode, 8 ast, AstNode,
9 SyntaxKind::*, 9 SyntaxKind::*,
10 SyntaxNode, SyntaxToken, TextRange, TextUnit, 10 SyntaxNode, SyntaxToken, TextRange, TextSize,
11}; 11};
12use ra_text_edit::AtomTextEdit; 12use ra_text_edit::AtomTextEdit;
13 13
@@ -20,7 +20,7 @@ pub(crate) struct CompletionContext<'a> {
20 pub(super) sema: Semantics<'a, RootDatabase>, 20 pub(super) sema: Semantics<'a, RootDatabase>,
21 pub(super) db: &'a RootDatabase, 21 pub(super) db: &'a RootDatabase,
22 pub(super) config: &'a CompletionConfig, 22 pub(super) config: &'a CompletionConfig,
23 pub(super) offset: TextUnit, 23 pub(super) offset: TextSize,
24 /// The token before the cursor, in the original file. 24 /// The token before the cursor, in the original file.
25 pub(super) original_token: SyntaxToken, 25 pub(super) original_token: SyntaxToken,
26 /// The token before the cursor, in the macro-expanded file. 26 /// The token before the cursor, in the macro-expanded file.
@@ -57,6 +57,7 @@ pub(crate) struct CompletionContext<'a> {
57 pub(super) is_macro_call: bool, 57 pub(super) is_macro_call: bool,
58 pub(super) is_path_type: bool, 58 pub(super) is_path_type: bool,
59 pub(super) has_type_args: bool, 59 pub(super) has_type_args: bool,
60 pub(super) is_attribute: bool,
60} 61}
61 62
62impl<'a> CompletionContext<'a> { 63impl<'a> CompletionContext<'a> {
@@ -113,6 +114,7 @@ impl<'a> CompletionContext<'a> {
113 is_path_type: false, 114 is_path_type: false,
114 has_type_args: false, 115 has_type_args: false,
115 dot_receiver_is_ambiguous_float_literal: false, 116 dot_receiver_is_ambiguous_float_literal: false,
117 is_attribute: false,
116 }; 118 };
117 119
118 let mut original_file = original_file.syntax().clone(); 120 let mut original_file = original_file.syntax().clone();
@@ -165,7 +167,7 @@ impl<'a> CompletionContext<'a> {
165 match self.token.kind() { 167 match self.token.kind() {
166 // workaroud when completion is triggered by trigger characters. 168 // workaroud when completion is triggered by trigger characters.
167 IDENT => self.original_token.text_range(), 169 IDENT => self.original_token.text_range(),
168 _ => TextRange::offset_len(self.offset, 0.into()), 170 _ => TextRange::empty(self.offset),
169 } 171 }
170 } 172 }
171 173
@@ -188,7 +190,7 @@ impl<'a> CompletionContext<'a> {
188 &mut self, 190 &mut self,
189 original_file: &SyntaxNode, 191 original_file: &SyntaxNode,
190 file_with_fake_ident: SyntaxNode, 192 file_with_fake_ident: SyntaxNode,
191 offset: TextUnit, 193 offset: TextSize,
192 ) { 194 ) {
193 // First, let's try to complete a reference to some declaration. 195 // First, let's try to complete a reference to some declaration.
194 if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(&file_with_fake_ident, offset) { 196 if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(&file_with_fake_ident, offset) {
@@ -222,7 +224,8 @@ impl<'a> CompletionContext<'a> {
222 } 224 }
223 if let Some(let_stmt) = bind_pat.syntax().ancestors().find_map(ast::LetStmt::cast) { 225 if let Some(let_stmt) = bind_pat.syntax().ancestors().find_map(ast::LetStmt::cast) {
224 if let Some(pat) = let_stmt.pat() { 226 if let Some(pat) = let_stmt.pat() {
225 if bind_pat.syntax().text_range().is_subrange(&pat.syntax().text_range()) { 227 if pat.syntax().text_range().contains_range(bind_pat.syntax().text_range())
228 {
226 self.is_pat_binding_or_const = false; 229 self.is_pat_binding_or_const = false;
227 } 230 }
228 } 231 }
@@ -244,7 +247,7 @@ impl<'a> CompletionContext<'a> {
244 &mut self, 247 &mut self,
245 original_file: &SyntaxNode, 248 original_file: &SyntaxNode,
246 name_ref: ast::NameRef, 249 name_ref: ast::NameRef,
247 offset: TextUnit, 250 offset: TextSize,
248 ) { 251 ) {
249 self.name_ref_syntax = 252 self.name_ref_syntax =
250 find_node_at_offset(&original_file, name_ref.syntax().text_range().start()); 253 find_node_at_offset(&original_file, name_ref.syntax().text_range().start());
@@ -306,6 +309,7 @@ impl<'a> CompletionContext<'a> {
306 .and_then(|it| it.syntax().parent().and_then(ast::CallExpr::cast)) 309 .and_then(|it| it.syntax().parent().and_then(ast::CallExpr::cast))
307 .is_some(); 310 .is_some();
308 self.is_macro_call = path.syntax().parent().and_then(ast::MacroCall::cast).is_some(); 311 self.is_macro_call = path.syntax().parent().and_then(ast::MacroCall::cast).is_some();
312 self.is_attribute = path.syntax().parent().and_then(ast::Attr::cast).is_some();
309 313
310 self.is_path_type = path.syntax().parent().and_then(ast::PathType::cast).is_some(); 314 self.is_path_type = path.syntax().parent().and_then(ast::PathType::cast).is_some();
311 self.has_type_args = segment.type_arg_list().is_some(); 315 self.has_type_args = segment.type_arg_list().is_some();
diff --git a/crates/ra_ide/src/completion/completion_item.rs b/crates/ra_ide/src/completion/completion_item.rs
index fb06cc125..5936fb8f7 100644
--- a/crates/ra_ide/src/completion/completion_item.rs
+++ b/crates/ra_ide/src/completion/completion_item.rs
@@ -121,6 +121,7 @@ pub enum CompletionItemKind {
121 Method, 121 Method,
122 TypeParam, 122 TypeParam,
123 Macro, 123 Macro,
124 Attribute,
124} 125}
125 126
126#[derive(Debug, PartialEq, Eq, Copy, Clone)] 127#[derive(Debug, PartialEq, Eq, Copy, Clone)]
@@ -134,6 +135,7 @@ pub(crate) enum CompletionKind {
134 Snippet, 135 Snippet,
135 Postfix, 136 Postfix,
136 BuiltinType, 137 BuiltinType,
138 Attribute,
137} 139}
138 140
139#[derive(Debug, PartialEq, Eq, Copy, Clone)] 141#[derive(Debug, PartialEq, Eq, Copy, Clone)]
diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs
index 5e2b8b920..7633cd7fd 100644
--- a/crates/ra_ide/src/completion/presentation.rs
+++ b/crates/ra_ide/src/completion/presentation.rs
@@ -15,12 +15,7 @@ use crate::{
15}; 15};
16 16
17impl Completions { 17impl Completions {
18 pub(crate) fn add_field( 18 pub(crate) fn add_field(&mut self, ctx: &CompletionContext, field: hir::Field, ty: &Type) {
19 &mut self,
20 ctx: &CompletionContext,
21 field: hir::StructField,
22 ty: &Type,
23 ) {
24 let is_deprecated = is_deprecated(field, ctx.db); 19 let is_deprecated = is_deprecated(field, ctx.db);
25 let ty = ty.display(ctx.db).to_string(); 20 let ty = ty.display(ctx.db).to_string();
26 let name = field.name(ctx.db); 21 let name = field.name(ctx.db);
@@ -133,29 +128,6 @@ impl Completions {
133 completion_item.kind(kind).set_documentation(docs).add_to(self) 128 completion_item.kind(kind).set_documentation(docs).add_to(self)
134 } 129 }
135 130
136 fn guess_macro_braces(&self, macro_name: &str, docs: &str) -> &'static str {
137 let mut votes = [0, 0, 0];
138 for (idx, s) in docs.match_indices(&macro_name) {
139 let (before, after) = (&docs[..idx], &docs[idx + s.len()..]);
140 // Ensure to match the full word
141 if after.starts_with('!')
142 && !before.ends_with(|c: char| c == '_' || c.is_ascii_alphanumeric())
143 {
144 // It may have spaces before the braces like `foo! {}`
145 match after[1..].chars().find(|&c| !c.is_whitespace()) {
146 Some('{') => votes[0] += 1,
147 Some('[') => votes[1] += 1,
148 Some('(') => votes[2] += 1,
149 _ => {}
150 }
151 }
152 }
153
154 // Insert a space before `{}`.
155 // We prefer the last one when some votes equal.
156 *votes.iter().zip(&[" {$0}", "[$0]", "($0)"]).max_by_key(|&(&vote, _)| vote).unwrap().1
157 }
158
159 pub(crate) fn add_macro( 131 pub(crate) fn add_macro(
160 &mut self, 132 &mut self,
161 ctx: &CompletionContext, 133 ctx: &CompletionContext,
@@ -177,21 +149,27 @@ impl Completions {
177 let detail = macro_label(&ast_node); 149 let detail = macro_label(&ast_node);
178 150
179 let docs = macro_.docs(ctx.db); 151 let docs = macro_.docs(ctx.db);
180 let macro_declaration = format!("{}!", name);
181 152
182 let mut builder = 153 let mut builder = CompletionItem::new(
183 CompletionItem::new(CompletionKind::Reference, ctx.source_range(), &macro_declaration) 154 CompletionKind::Reference,
184 .kind(CompletionItemKind::Macro) 155 ctx.source_range(),
185 .set_documentation(docs.clone()) 156 &format!("{}!", name),
186 .set_deprecated(is_deprecated(macro_, ctx.db)) 157 )
187 .detail(detail); 158 .kind(CompletionItemKind::Macro)
159 .set_documentation(docs.clone())
160 .set_deprecated(is_deprecated(macro_, ctx.db))
161 .detail(detail);
188 162
163 let needs_bang = ctx.use_item_syntax.is_none() && !ctx.is_macro_call;
189 builder = match ctx.config.snippet_cap { 164 builder = match ctx.config.snippet_cap {
190 Some(cap) if ctx.use_item_syntax.is_none() && !ctx.is_macro_call => { 165 Some(cap) if needs_bang => {
191 let macro_braces_to_insert = 166 let docs = docs.as_ref().map_or("", |s| s.as_str());
192 self.guess_macro_braces(&name, docs.as_ref().map_or("", |s| s.as_str())); 167 let (bra, ket) = guess_macro_braces(&name, docs);
193 builder.insert_snippet(cap, macro_declaration + macro_braces_to_insert) 168 builder
169 .insert_snippet(cap, format!("{}!{}$0{}", name, bra, ket))
170 .label(format!("{}!{}…{}", name, bra, ket))
194 } 171 }
172 None if needs_bang => builder.insert_text(format!("{}!", name)),
195 _ => { 173 _ => {
196 tested_by!(dont_insert_macro_call_parens_unncessary); 174 tested_by!(dont_insert_macro_call_parens_unncessary);
197 builder.insert_text(name) 175 builder.insert_text(name)
@@ -404,6 +382,34 @@ fn is_deprecated(node: impl HasAttrs, db: &RootDatabase) -> bool {
404 node.attrs(db).by_key("deprecated").exists() 382 node.attrs(db).by_key("deprecated").exists()
405} 383}
406 384
385fn guess_macro_braces(macro_name: &str, docs: &str) -> (&'static str, &'static str) {
386 let mut votes = [0, 0, 0];
387 for (idx, s) in docs.match_indices(&macro_name) {
388 let (before, after) = (&docs[..idx], &docs[idx + s.len()..]);
389 // Ensure to match the full word
390 if after.starts_with('!')
391 && !before.ends_with(|c: char| c == '_' || c.is_ascii_alphanumeric())
392 {
393 // It may have spaces before the braces like `foo! {}`
394 match after[1..].chars().find(|&c| !c.is_whitespace()) {
395 Some('{') => votes[0] += 1,
396 Some('[') => votes[1] += 1,
397 Some('(') => votes[2] += 1,
398 _ => {}
399 }
400 }
401 }
402
403 // Insert a space before `{}`.
404 // We prefer the last one when some votes equal.
405 let (_vote, (bra, ket)) = votes
406 .iter()
407 .zip(&[(" {", "}"), ("[", "]"), ("(", ")")])
408 .max_by_key(|&(&vote, _)| vote)
409 .unwrap();
410 (*bra, *ket)
411}
412
407#[cfg(test)] 413#[cfg(test)]
408mod tests { 414mod tests {
409 use insta::assert_debug_snapshot; 415 use insta::assert_debug_snapshot;
@@ -441,8 +447,8 @@ mod tests {
441 [ 447 [
442 CompletionItem { 448 CompletionItem {
443 label: "Foo", 449 label: "Foo",
444 source_range: [121; 123), 450 source_range: 121..123,
445 delete: [121; 123), 451 delete: 121..123,
446 insert: "Foo", 452 insert: "Foo",
447 kind: EnumVariant, 453 kind: EnumVariant,
448 detail: "{ x: i32, y: i32 }", 454 detail: "{ x: i32, y: i32 }",
@@ -467,8 +473,8 @@ mod tests {
467 [ 473 [
468 CompletionItem { 474 CompletionItem {
469 label: "Foo(…)", 475 label: "Foo(…)",
470 source_range: [115; 117), 476 source_range: 115..117,
471 delete: [115; 117), 477 delete: 115..117,
472 insert: "Foo($0)", 478 insert: "Foo($0)",
473 kind: EnumVariant, 479 kind: EnumVariant,
474 lookup: "Foo", 480 lookup: "Foo",
@@ -495,8 +501,8 @@ mod tests {
495 [ 501 [
496 CompletionItem { 502 CompletionItem {
497 label: "Foo", 503 label: "Foo",
498 source_range: [104; 106), 504 source_range: 104..106,
499 delete: [104; 106), 505 delete: 104..106,
500 insert: "Foo", 506 insert: "Foo",
501 kind: EnumVariant, 507 kind: EnumVariant,
502 detail: "()", 508 detail: "()",
@@ -523,8 +529,8 @@ mod tests {
523 [ 529 [
524 CompletionItem { 530 CompletionItem {
525 label: "main()", 531 label: "main()",
526 source_range: [203; 206), 532 source_range: 203..206,
527 delete: [203; 206), 533 delete: 203..206,
528 insert: "main()$0", 534 insert: "main()$0",
529 kind: Function, 535 kind: Function,
530 lookup: "main", 536 lookup: "main",
@@ -532,8 +538,8 @@ mod tests {
532 }, 538 },
533 CompletionItem { 539 CompletionItem {
534 label: "something_deprecated()", 540 label: "something_deprecated()",
535 source_range: [203; 206), 541 source_range: 203..206,
536 delete: [203; 206), 542 delete: 203..206,
537 insert: "something_deprecated()$0", 543 insert: "something_deprecated()$0",
538 kind: Function, 544 kind: Function,
539 lookup: "something_deprecated", 545 lookup: "something_deprecated",
@@ -542,8 +548,8 @@ mod tests {
542 }, 548 },
543 CompletionItem { 549 CompletionItem {
544 label: "something_else_deprecated()", 550 label: "something_else_deprecated()",
545 source_range: [203; 206), 551 source_range: 203..206,
546 delete: [203; 206), 552 delete: 203..206,
547 insert: "something_else_deprecated()$0", 553 insert: "something_else_deprecated()$0",
548 kind: Function, 554 kind: Function,
549 lookup: "something_else_deprecated", 555 lookup: "something_else_deprecated",
@@ -569,8 +575,8 @@ mod tests {
569 [ 575 [
570 CompletionItem { 576 CompletionItem {
571 label: "main()", 577 label: "main()",
572 source_range: [61; 64), 578 source_range: 61..64,
573 delete: [61; 64), 579 delete: 61..64,
574 insert: "main()$0", 580 insert: "main()$0",
575 kind: Function, 581 kind: Function,
576 lookup: "main", 582 lookup: "main",
@@ -578,8 +584,8 @@ mod tests {
578 }, 584 },
579 CompletionItem { 585 CompletionItem {
580 label: "no_args()", 586 label: "no_args()",
581 source_range: [61; 64), 587 source_range: 61..64,
582 delete: [61; 64), 588 delete: 61..64,
583 insert: "no_args()$0", 589 insert: "no_args()$0",
584 kind: Function, 590 kind: Function,
585 lookup: "no_args", 591 lookup: "no_args",
@@ -599,8 +605,8 @@ mod tests {
599 [ 605 [
600 CompletionItem { 606 CompletionItem {
601 label: "main()", 607 label: "main()",
602 source_range: [80; 85), 608 source_range: 80..85,
603 delete: [80; 85), 609 delete: 80..85,
604 insert: "main()$0", 610 insert: "main()$0",
605 kind: Function, 611 kind: Function,
606 lookup: "main", 612 lookup: "main",
@@ -608,8 +614,8 @@ mod tests {
608 }, 614 },
609 CompletionItem { 615 CompletionItem {
610 label: "with_args(…)", 616 label: "with_args(…)",
611 source_range: [80; 85), 617 source_range: 80..85,
612 delete: [80; 85), 618 delete: 80..85,
613 insert: "with_args(${1:x}, ${2:y})$0", 619 insert: "with_args(${1:x}, ${2:y})$0",
614 kind: Function, 620 kind: Function,
615 lookup: "with_args", 621 lookup: "with_args",
@@ -635,8 +641,8 @@ mod tests {
635 [ 641 [
636 CompletionItem { 642 CompletionItem {
637 label: "foo()", 643 label: "foo()",
638 source_range: [163; 164), 644 source_range: 163..164,
639 delete: [163; 164), 645 delete: 163..164,
640 insert: "foo()$0", 646 insert: "foo()$0",
641 kind: Method, 647 kind: Method,
642 lookup: "foo", 648 lookup: "foo",
@@ -663,23 +669,23 @@ mod tests {
663 [ 669 [
664 CompletionItem { 670 CompletionItem {
665 label: "None", 671 label: "None",
666 source_range: [144; 147), 672 source_range: 144..147,
667 delete: [144; 147), 673 delete: 144..147,
668 insert: "None", 674 insert: "None",
669 kind: EnumVariant, 675 kind: EnumVariant,
670 detail: "()", 676 detail: "()",
671 }, 677 },
672 CompletionItem { 678 CompletionItem {
673 label: "Option", 679 label: "Option",
674 source_range: [144; 147), 680 source_range: 144..147,
675 delete: [144; 147), 681 delete: 144..147,
676 insert: "Option", 682 insert: "Option",
677 kind: Enum, 683 kind: Enum,
678 }, 684 },
679 CompletionItem { 685 CompletionItem {
680 label: "Some(…)", 686 label: "Some(…)",
681 source_range: [144; 147), 687 source_range: 144..147,
682 delete: [144; 147), 688 delete: 144..147,
683 insert: "Some($0)", 689 insert: "Some($0)",
684 kind: EnumVariant, 690 kind: EnumVariant,
685 lookup: "Some", 691 lookup: "Some",
@@ -688,8 +694,8 @@ mod tests {
688 }, 694 },
689 CompletionItem { 695 CompletionItem {
690 label: "main()", 696 label: "main()",
691 source_range: [144; 147), 697 source_range: 144..147,
692 delete: [144; 147), 698 delete: 144..147,
693 insert: "main()$0", 699 insert: "main()$0",
694 kind: Function, 700 kind: Function,
695 lookup: "main", 701 lookup: "main",
@@ -714,23 +720,23 @@ mod tests {
714 [ 720 [
715 CompletionItem { 721 CompletionItem {
716 label: "None", 722 label: "None",
717 source_range: [185; 188), 723 source_range: 185..188,
718 delete: [185; 188), 724 delete: 185..188,
719 insert: "None", 725 insert: "None",
720 kind: EnumVariant, 726 kind: EnumVariant,
721 detail: "()", 727 detail: "()",
722 }, 728 },
723 CompletionItem { 729 CompletionItem {
724 label: "Option", 730 label: "Option",
725 source_range: [185; 188), 731 source_range: 185..188,
726 delete: [185; 188), 732 delete: 185..188,
727 insert: "Option", 733 insert: "Option",
728 kind: Enum, 734 kind: Enum,
729 }, 735 },
730 CompletionItem { 736 CompletionItem {
731 label: "Some(…)", 737 label: "Some(…)",
732 source_range: [185; 188), 738 source_range: 185..188,
733 delete: [185; 188), 739 delete: 185..188,
734 insert: "Some($0)", 740 insert: "Some($0)",
735 kind: EnumVariant, 741 kind: EnumVariant,
736 lookup: "Some", 742 lookup: "Some",
@@ -760,8 +766,8 @@ mod tests {
760 [ 766 [
761 CompletionItem { 767 CompletionItem {
762 label: "foo(…)", 768 label: "foo(…)",
763 source_range: [171; 172), 769 source_range: 171..172,
764 delete: [171; 172), 770 delete: 171..172,
765 insert: "foo(${1:x})$0", 771 insert: "foo(${1:x})$0",
766 kind: Method, 772 kind: Method,
767 lookup: "foo", 773 lookup: "foo",
@@ -795,8 +801,8 @@ mod tests {
795 [ 801 [
796 CompletionItem { 802 CompletionItem {
797 label: "foo(…)", 803 label: "foo(…)",
798 source_range: [171; 172), 804 source_range: 171..172,
799 delete: [171; 172), 805 delete: 171..172,
800 insert: "foo($0)", 806 insert: "foo($0)",
801 kind: Method, 807 kind: Method,
802 lookup: "foo", 808 lookup: "foo",
@@ -822,8 +828,8 @@ mod tests {
822 [ 828 [
823 CompletionItem { 829 CompletionItem {
824 label: "foo", 830 label: "foo",
825 source_range: [40; 41), 831 source_range: 40..41,
826 delete: [40; 41), 832 delete: 40..41,
827 insert: "foo", 833 insert: "foo",
828 kind: Function, 834 kind: Function,
829 detail: "pub fn foo()", 835 detail: "pub fn foo()",
@@ -849,16 +855,16 @@ mod tests {
849 [ 855 [
850 CompletionItem { 856 CompletionItem {
851 label: "frobnicate", 857 label: "frobnicate",
852 source_range: [35; 39), 858 source_range: 35..39,
853 delete: [35; 39), 859 delete: 35..39,
854 insert: "frobnicate", 860 insert: "frobnicate",
855 kind: Function, 861 kind: Function,
856 detail: "fn frobnicate()", 862 detail: "fn frobnicate()",
857 }, 863 },
858 CompletionItem { 864 CompletionItem {
859 label: "main", 865 label: "main",
860 source_range: [35; 39), 866 source_range: 35..39,
861 delete: [35; 39), 867 delete: 35..39,
862 insert: "main", 868 insert: "main",
863 kind: Function, 869 kind: Function,
864 detail: "fn main()", 870 detail: "fn main()",
@@ -881,8 +887,8 @@ mod tests {
881 [ 887 [
882 CompletionItem { 888 CompletionItem {
883 label: "new", 889 label: "new",
884 source_range: [67; 69), 890 source_range: 67..69,
885 delete: [67; 69), 891 delete: 67..69,
886 insert: "new", 892 insert: "new",
887 kind: Function, 893 kind: Function,
888 detail: "fn new() -> Foo", 894 detail: "fn new() -> Foo",
@@ -906,16 +912,16 @@ mod tests {
906 [ 912 [
907 CompletionItem { 913 CompletionItem {
908 label: "Vec<…>", 914 label: "Vec<…>",
909 source_range: [61; 63), 915 source_range: 61..63,
910 delete: [61; 63), 916 delete: 61..63,
911 insert: "Vec<$0>", 917 insert: "Vec<$0>",
912 kind: Struct, 918 kind: Struct,
913 lookup: "Vec", 919 lookup: "Vec",
914 }, 920 },
915 CompletionItem { 921 CompletionItem {
916 label: "foo(…)", 922 label: "foo(…)",
917 source_range: [61; 63), 923 source_range: 61..63,
918 delete: [61; 63), 924 delete: 61..63,
919 insert: "foo(${1:xs})$0", 925 insert: "foo(${1:xs})$0",
920 kind: Function, 926 kind: Function,
921 lookup: "foo", 927 lookup: "foo",
@@ -936,16 +942,16 @@ mod tests {
936 [ 942 [
937 CompletionItem { 943 CompletionItem {
938 label: "Vec<…>", 944 label: "Vec<…>",
939 source_range: [64; 66), 945 source_range: 64..66,
940 delete: [64; 66), 946 delete: 64..66,
941 insert: "Vec<$0>", 947 insert: "Vec<$0>",
942 kind: TypeAlias, 948 kind: TypeAlias,
943 lookup: "Vec", 949 lookup: "Vec",
944 }, 950 },
945 CompletionItem { 951 CompletionItem {
946 label: "foo(…)", 952 label: "foo(…)",
947 source_range: [64; 66), 953 source_range: 64..66,
948 delete: [64; 66), 954 delete: 64..66,
949 insert: "foo(${1:xs})$0", 955 insert: "foo(${1:xs})$0",
950 kind: Function, 956 kind: Function,
951 lookup: "foo", 957 lookup: "foo",
@@ -966,15 +972,15 @@ mod tests {
966 [ 972 [
967 CompletionItem { 973 CompletionItem {
968 label: "Vec", 974 label: "Vec",
969 source_range: [68; 70), 975 source_range: 68..70,
970 delete: [68; 70), 976 delete: 68..70,
971 insert: "Vec", 977 insert: "Vec",
972 kind: Struct, 978 kind: Struct,
973 }, 979 },
974 CompletionItem { 980 CompletionItem {
975 label: "foo(…)", 981 label: "foo(…)",
976 source_range: [68; 70), 982 source_range: 68..70,
977 delete: [68; 70), 983 delete: 68..70,
978 insert: "foo(${1:xs})$0", 984 insert: "foo(${1:xs})$0",
979 kind: Function, 985 kind: Function,
980 lookup: "foo", 986 lookup: "foo",
@@ -995,15 +1001,15 @@ mod tests {
995 [ 1001 [
996 CompletionItem { 1002 CompletionItem {
997 label: "Vec", 1003 label: "Vec",
998 source_range: [61; 63), 1004 source_range: 61..63,
999 delete: [61; 63), 1005 delete: 61..63,
1000 insert: "Vec", 1006 insert: "Vec",
1001 kind: Struct, 1007 kind: Struct,
1002 }, 1008 },
1003 CompletionItem { 1009 CompletionItem {
1004 label: "foo(…)", 1010 label: "foo(…)",
1005 source_range: [61; 63), 1011 source_range: 61..63,
1006 delete: [61; 63), 1012 delete: 61..63,
1007 insert: "foo(${1:xs})$0", 1013 insert: "foo(${1:xs})$0",
1008 kind: Function, 1014 kind: Function,
1009 lookup: "foo", 1015 lookup: "foo",
@@ -1035,8 +1041,8 @@ mod tests {
1035 [ 1041 [
1036 CompletionItem { 1042 CompletionItem {
1037 label: "frobnicate!", 1043 label: "frobnicate!",
1038 source_range: [9; 9), 1044 source_range: 9..9,
1039 delete: [9; 9), 1045 delete: 9..9,
1040 insert: "frobnicate", 1046 insert: "frobnicate",
1041 kind: Macro, 1047 kind: Macro,
1042 detail: "#[macro_export]\nmacro_rules! frobnicate", 1048 detail: "#[macro_export]\nmacro_rules! frobnicate",
@@ -1061,16 +1067,16 @@ mod tests {
1061 [ 1067 [
1062 CompletionItem { 1068 CompletionItem {
1063 label: "frobnicate!", 1069 label: "frobnicate!",
1064 source_range: [56; 60), 1070 source_range: 56..60,
1065 delete: [56; 60), 1071 delete: 56..60,
1066 insert: "frobnicate", 1072 insert: "frobnicate",
1067 kind: Macro, 1073 kind: Macro,
1068 detail: "macro_rules! frobnicate", 1074 detail: "macro_rules! frobnicate",
1069 }, 1075 },
1070 CompletionItem { 1076 CompletionItem {
1071 label: "main()", 1077 label: "main()",
1072 source_range: [56; 60), 1078 source_range: 56..60,
1073 delete: [56; 60), 1079 delete: 56..60,
1074 insert: "main()$0", 1080 insert: "main()$0",
1075 kind: Function, 1081 kind: Function,
1076 lookup: "main", 1082 lookup: "main",
@@ -1098,24 +1104,24 @@ mod tests {
1098 [ 1104 [
1099 CompletionItem { 1105 CompletionItem {
1100 label: "another_field", 1106 label: "another_field",
1101 source_range: [201; 201), 1107 source_range: 201..201,
1102 delete: [201; 201), 1108 delete: 201..201,
1103 insert: "another_field", 1109 insert: "another_field",
1104 kind: Field, 1110 kind: Field,
1105 detail: "i64", 1111 detail: "i64",
1106 }, 1112 },
1107 CompletionItem { 1113 CompletionItem {
1108 label: "my_string", 1114 label: "my_string",
1109 source_range: [201; 201), 1115 source_range: 201..201,
1110 delete: [201; 201), 1116 delete: 201..201,
1111 insert: "my_string", 1117 insert: "my_string",
1112 kind: Field, 1118 kind: Field,
1113 detail: "{unknown}", 1119 detail: "{unknown}",
1114 }, 1120 },
1115 CompletionItem { 1121 CompletionItem {
1116 label: "the_field", 1122 label: "the_field",
1117 source_range: [201; 201), 1123 source_range: 201..201,
1118 delete: [201; 201), 1124 delete: 201..201,
1119 insert: "the_field", 1125 insert: "the_field",
1120 kind: Field, 1126 kind: Field,
1121 detail: "u32", 1127 detail: "u32",
@@ -1142,16 +1148,16 @@ mod tests {
1142 [ 1148 [
1143 CompletionItem { 1149 CompletionItem {
1144 label: "another_field", 1150 label: "another_field",
1145 source_range: [208; 208), 1151 source_range: 208..208,
1146 delete: [208; 208), 1152 delete: 208..208,
1147 insert: "another_field", 1153 insert: "another_field",
1148 kind: Field, 1154 kind: Field,
1149 detail: "i64", 1155 detail: "i64",
1150 }, 1156 },
1151 CompletionItem { 1157 CompletionItem {
1152 label: "another_good_type", 1158 label: "another_good_type",
1153 source_range: [208; 208), 1159 source_range: 208..208,
1154 delete: [208; 208), 1160 delete: 208..208,
1155 insert: "another_good_type", 1161 insert: "another_good_type",
1156 kind: Field, 1162 kind: Field,
1157 detail: "u32", 1163 detail: "u32",
@@ -1159,8 +1165,8 @@ mod tests {
1159 }, 1165 },
1160 CompletionItem { 1166 CompletionItem {
1161 label: "the_field", 1167 label: "the_field",
1162 source_range: [208; 208), 1168 source_range: 208..208,
1163 delete: [208; 208), 1169 delete: 208..208,
1164 insert: "the_field", 1170 insert: "the_field",
1165 kind: Field, 1171 kind: Field,
1166 detail: "u32", 1172 detail: "u32",
@@ -1190,16 +1196,16 @@ mod tests {
1190 [ 1196 [
1191 CompletionItem { 1197 CompletionItem {
1192 label: "another_field", 1198 label: "another_field",
1193 source_range: [270; 270), 1199 source_range: 270..270,
1194 delete: [270; 270), 1200 delete: 270..270,
1195 insert: "another_field", 1201 insert: "another_field",
1196 kind: Field, 1202 kind: Field,
1197 detail: "i64", 1203 detail: "i64",
1198 }, 1204 },
1199 CompletionItem { 1205 CompletionItem {
1200 label: "another_good_type", 1206 label: "another_good_type",
1201 source_range: [270; 270), 1207 source_range: 270..270,
1202 delete: [270; 270), 1208 delete: 270..270,
1203 insert: "another_good_type", 1209 insert: "another_good_type",
1204 kind: Field, 1210 kind: Field,
1205 detail: "u32", 1211 detail: "u32",
@@ -1207,8 +1213,8 @@ mod tests {
1207 }, 1213 },
1208 CompletionItem { 1214 CompletionItem {
1209 label: "the_field", 1215 label: "the_field",
1210 source_range: [270; 270), 1216 source_range: 270..270,
1211 delete: [270; 270), 1217 delete: 270..270,
1212 insert: "the_field", 1218 insert: "the_field",
1213 kind: Field, 1219 kind: Field,
1214 detail: "u32", 1220 detail: "u32",
@@ -1238,8 +1244,8 @@ mod tests {
1238 [ 1244 [
1239 CompletionItem { 1245 CompletionItem {
1240 label: "another_field", 1246 label: "another_field",
1241 source_range: [336; 336), 1247 source_range: 336..336,
1242 delete: [336; 336), 1248 delete: 336..336,
1243 insert: "another_field", 1249 insert: "another_field",
1244 kind: Field, 1250 kind: Field,
1245 detail: "i64", 1251 detail: "i64",
@@ -1247,16 +1253,16 @@ mod tests {
1247 }, 1253 },
1248 CompletionItem { 1254 CompletionItem {
1249 label: "another_good_type", 1255 label: "another_good_type",
1250 source_range: [336; 336), 1256 source_range: 336..336,
1251 delete: [336; 336), 1257 delete: 336..336,
1252 insert: "another_good_type", 1258 insert: "another_good_type",
1253 kind: Field, 1259 kind: Field,
1254 detail: "u32", 1260 detail: "u32",
1255 }, 1261 },
1256 CompletionItem { 1262 CompletionItem {
1257 label: "the_field", 1263 label: "the_field",
1258 source_range: [336; 336), 1264 source_range: 336..336,
1259 delete: [336; 336), 1265 delete: 336..336,
1260 insert: "the_field", 1266 insert: "the_field",
1261 kind: Field, 1267 kind: Field,
1262 detail: "u32", 1268 detail: "u32",
@@ -1285,16 +1291,16 @@ mod tests {
1285 [ 1291 [
1286 CompletionItem { 1292 CompletionItem {
1287 label: "another_field", 1293 label: "another_field",
1288 source_range: [328; 328), 1294 source_range: 328..328,
1289 delete: [328; 328), 1295 delete: 328..328,
1290 insert: "another_field", 1296 insert: "another_field",
1291 kind: Field, 1297 kind: Field,
1292 detail: "i64", 1298 detail: "i64",
1293 }, 1299 },
1294 CompletionItem { 1300 CompletionItem {
1295 label: "another_good_type", 1301 label: "another_good_type",
1296 source_range: [328; 328), 1302 source_range: 328..328,
1297 delete: [328; 328), 1303 delete: 328..328,
1298 insert: "another_good_type", 1304 insert: "another_good_type",
1299 kind: Field, 1305 kind: Field,
1300 detail: "u32", 1306 detail: "u32",
@@ -1302,8 +1308,8 @@ mod tests {
1302 }, 1308 },
1303 CompletionItem { 1309 CompletionItem {
1304 label: "the_field", 1310 label: "the_field",
1305 source_range: [328; 328), 1311 source_range: 328..328,
1306 delete: [328; 328), 1312 delete: 328..328,
1307 insert: "the_field", 1313 insert: "the_field",
1308 kind: Field, 1314 kind: Field,
1309 detail: "u32", 1315 detail: "u32",
diff --git a/crates/ra_ide/src/diagnostics.rs b/crates/ra_ide/src/diagnostics.rs
index e7e201709..a6b4c2c28 100644
--- a/crates/ra_ide/src/diagnostics.rs
+++ b/crates/ra_ide/src/diagnostics.rs
@@ -171,7 +171,7 @@ fn text_edit_for_remove_unnecessary_braces_with_self_in_use_statement(
171 if single_use_tree.path()?.segment()?.syntax().first_child_or_token()?.kind() == T![self] { 171 if single_use_tree.path()?.segment()?.syntax().first_child_or_token()?.kind() == T![self] {
172 let start = use_tree_list_node.prev_sibling_or_token()?.text_range().start(); 172 let start = use_tree_list_node.prev_sibling_or_token()?.text_range().start();
173 let end = use_tree_list_node.text_range().end(); 173 let end = use_tree_list_node.text_range().end();
174 let range = TextRange::from_to(start, end); 174 let range = TextRange::new(start, end);
175 return Some(TextEdit::delete(range)); 175 return Some(TextEdit::delete(range));
176 } 176 }
177 None 177 None
@@ -277,7 +277,7 @@ mod tests {
277 assert!( 277 assert!(
278 diagnostic.range.start() <= file_position.offset 278 diagnostic.range.start() <= file_position.offset
279 && diagnostic.range.end() >= file_position.offset, 279 && diagnostic.range.end() >= file_position.offset,
280 "diagnostic range {} does not touch cursor position {}", 280 "diagnostic range {:?} does not touch cursor position {:?}",
281 diagnostic.range, 281 diagnostic.range,
282 file_position.offset 282 file_position.offset
283 ); 283 );
@@ -603,7 +603,7 @@ mod tests {
603 [ 603 [
604 Diagnostic { 604 Diagnostic {
605 message: "unresolved module", 605 message: "unresolved module",
606 range: [0; 8), 606 range: 0..8,
607 fix: Some( 607 fix: Some(
608 SourceChange { 608 SourceChange {
609 label: "create module", 609 label: "create module",
@@ -652,7 +652,7 @@ mod tests {
652 [ 652 [
653 Diagnostic { 653 Diagnostic {
654 message: "Missing structure fields:\n- b", 654 message: "Missing structure fields:\n- b",
655 range: [224; 233), 655 range: 224..233,
656 fix: Some( 656 fix: Some(
657 SourceChange { 657 SourceChange {
658 label: "fill struct fields", 658 label: "fill struct fields",
@@ -664,7 +664,7 @@ mod tests {
664 edit: TextEdit { 664 edit: TextEdit {
665 atoms: [ 665 atoms: [
666 AtomTextEdit { 666 AtomTextEdit {
667 delete: [3; 9), 667 delete: 3..9,
668 insert: "{a:42, b: ()}", 668 insert: "{a:42, b: ()}",
669 }, 669 },
670 ], 670 ],
diff --git a/crates/ra_ide/src/display/navigation_target.rs b/crates/ra_ide/src/display/navigation_target.rs
index 67bc9c31b..914a8b471 100644
--- a/crates/ra_ide/src/display/navigation_target.rs
+++ b/crates/ra_ide/src/display/navigation_target.rs
@@ -189,7 +189,7 @@ impl TryToNav for Definition {
189 fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> { 189 fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
190 match self { 190 match self {
191 Definition::Macro(it) => Some(it.to_nav(db)), 191 Definition::Macro(it) => Some(it.to_nav(db)),
192 Definition::StructField(it) => Some(it.to_nav(db)), 192 Definition::Field(it) => Some(it.to_nav(db)),
193 Definition::ModuleDef(it) => it.try_to_nav(db), 193 Definition::ModuleDef(it) => it.try_to_nav(db),
194 Definition::SelfType(it) => Some(it.to_nav(db)), 194 Definition::SelfType(it) => Some(it.to_nav(db)),
195 Definition::Local(it) => Some(it.to_nav(db)), 195 Definition::Local(it) => Some(it.to_nav(db)),
@@ -286,7 +286,7 @@ impl ToNav for hir::ImplDef {
286 } 286 }
287} 287}
288 288
289impl ToNav for hir::StructField { 289impl ToNav for hir::Field {
290 fn to_nav(&self, db: &RootDatabase) -> NavigationTarget { 290 fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
291 let src = self.source(db); 291 let src = self.source(db);
292 292
diff --git a/crates/ra_ide/src/display/structure.rs b/crates/ra_ide/src/display/structure.rs
index 7a774785c..967eee5d2 100644
--- a/crates/ra_ide/src/display/structure.rs
+++ b/crates/ra_ide/src/display/structure.rs
@@ -224,8 +224,8 @@ fn very_obsolete() {}
224 StructureNode { 224 StructureNode {
225 parent: None, 225 parent: None,
226 label: "Foo", 226 label: "Foo",
227 navigation_range: [8; 11), 227 navigation_range: 8..11,
228 node_range: [1; 26), 228 node_range: 1..26,
229 kind: STRUCT_DEF, 229 kind: STRUCT_DEF,
230 detail: None, 230 detail: None,
231 deprecated: false, 231 deprecated: false,
@@ -235,8 +235,8 @@ fn very_obsolete() {}
235 0, 235 0,
236 ), 236 ),
237 label: "x", 237 label: "x",
238 navigation_range: [18; 19), 238 navigation_range: 18..19,
239 node_range: [18; 24), 239 node_range: 18..24,
240 kind: RECORD_FIELD_DEF, 240 kind: RECORD_FIELD_DEF,
241 detail: Some( 241 detail: Some(
242 "i32", 242 "i32",
@@ -246,8 +246,8 @@ fn very_obsolete() {}
246 StructureNode { 246 StructureNode {
247 parent: None, 247 parent: None,
248 label: "m", 248 label: "m",
249 navigation_range: [32; 33), 249 navigation_range: 32..33,
250 node_range: [28; 158), 250 node_range: 28..158,
251 kind: MODULE, 251 kind: MODULE,
252 detail: None, 252 detail: None,
253 deprecated: false, 253 deprecated: false,
@@ -257,8 +257,8 @@ fn very_obsolete() {}
257 2, 257 2,
258 ), 258 ),
259 label: "bar1", 259 label: "bar1",
260 navigation_range: [43; 47), 260 navigation_range: 43..47,
261 node_range: [40; 52), 261 node_range: 40..52,
262 kind: FN_DEF, 262 kind: FN_DEF,
263 detail: Some( 263 detail: Some(
264 "fn()", 264 "fn()",
@@ -270,8 +270,8 @@ fn very_obsolete() {}
270 2, 270 2,
271 ), 271 ),
272 label: "bar2", 272 label: "bar2",
273 navigation_range: [60; 64), 273 navigation_range: 60..64,
274 node_range: [57; 81), 274 node_range: 57..81,
275 kind: FN_DEF, 275 kind: FN_DEF,
276 detail: Some( 276 detail: Some(
277 "fn<T>(t: T) -> T", 277 "fn<T>(t: T) -> T",
@@ -283,8 +283,8 @@ fn very_obsolete() {}
283 2, 283 2,
284 ), 284 ),
285 label: "bar3", 285 label: "bar3",
286 navigation_range: [89; 93), 286 navigation_range: 89..93,
287 node_range: [86; 156), 287 node_range: 86..156,
288 kind: FN_DEF, 288 kind: FN_DEF,
289 detail: Some( 289 detail: Some(
290 "fn<A, B>(a: A, b: B) -> Vec< u32 >", 290 "fn<A, B>(a: A, b: B) -> Vec< u32 >",
@@ -294,8 +294,8 @@ fn very_obsolete() {}
294 StructureNode { 294 StructureNode {
295 parent: None, 295 parent: None,
296 label: "E", 296 label: "E",
297 navigation_range: [165; 166), 297 navigation_range: 165..166,
298 node_range: [160; 180), 298 node_range: 160..180,
299 kind: ENUM_DEF, 299 kind: ENUM_DEF,
300 detail: None, 300 detail: None,
301 deprecated: false, 301 deprecated: false,
@@ -305,8 +305,8 @@ fn very_obsolete() {}
305 6, 305 6,
306 ), 306 ),
307 label: "X", 307 label: "X",
308 navigation_range: [169; 170), 308 navigation_range: 169..170,
309 node_range: [169; 170), 309 node_range: 169..170,
310 kind: ENUM_VARIANT, 310 kind: ENUM_VARIANT,
311 detail: None, 311 detail: None,
312 deprecated: false, 312 deprecated: false,
@@ -316,8 +316,8 @@ fn very_obsolete() {}
316 6, 316 6,
317 ), 317 ),
318 label: "Y", 318 label: "Y",
319 navigation_range: [172; 173), 319 navigation_range: 172..173,
320 node_range: [172; 178), 320 node_range: 172..178,
321 kind: ENUM_VARIANT, 321 kind: ENUM_VARIANT,
322 detail: None, 322 detail: None,
323 deprecated: false, 323 deprecated: false,
@@ -325,8 +325,8 @@ fn very_obsolete() {}
325 StructureNode { 325 StructureNode {
326 parent: None, 326 parent: None,
327 label: "T", 327 label: "T",
328 navigation_range: [186; 187), 328 navigation_range: 186..187,
329 node_range: [181; 193), 329 node_range: 181..193,
330 kind: TYPE_ALIAS_DEF, 330 kind: TYPE_ALIAS_DEF,
331 detail: Some( 331 detail: Some(
332 "()", 332 "()",
@@ -336,8 +336,8 @@ fn very_obsolete() {}
336 StructureNode { 336 StructureNode {
337 parent: None, 337 parent: None,
338 label: "S", 338 label: "S",
339 navigation_range: [201; 202), 339 navigation_range: 201..202,
340 node_range: [194; 213), 340 node_range: 194..213,
341 kind: STATIC_DEF, 341 kind: STATIC_DEF,
342 detail: Some( 342 detail: Some(
343 "i32", 343 "i32",
@@ -347,8 +347,8 @@ fn very_obsolete() {}
347 StructureNode { 347 StructureNode {
348 parent: None, 348 parent: None,
349 label: "C", 349 label: "C",
350 navigation_range: [220; 221), 350 navigation_range: 220..221,
351 node_range: [214; 232), 351 node_range: 214..232,
352 kind: CONST_DEF, 352 kind: CONST_DEF,
353 detail: Some( 353 detail: Some(
354 "i32", 354 "i32",
@@ -358,8 +358,8 @@ fn very_obsolete() {}
358 StructureNode { 358 StructureNode {
359 parent: None, 359 parent: None,
360 label: "impl E", 360 label: "impl E",
361 navigation_range: [239; 240), 361 navigation_range: 239..240,
362 node_range: [234; 243), 362 node_range: 234..243,
363 kind: IMPL_DEF, 363 kind: IMPL_DEF,
364 detail: None, 364 detail: None,
365 deprecated: false, 365 deprecated: false,
@@ -367,8 +367,8 @@ fn very_obsolete() {}
367 StructureNode { 367 StructureNode {
368 parent: None, 368 parent: None,
369 label: "impl fmt::Debug for E", 369 label: "impl fmt::Debug for E",
370 navigation_range: [265; 266), 370 navigation_range: 265..266,
371 node_range: [245; 269), 371 node_range: 245..269,
372 kind: IMPL_DEF, 372 kind: IMPL_DEF,
373 detail: None, 373 detail: None,
374 deprecated: false, 374 deprecated: false,
@@ -376,8 +376,8 @@ fn very_obsolete() {}
376 StructureNode { 376 StructureNode {
377 parent: None, 377 parent: None,
378 label: "mc", 378 label: "mc",
379 navigation_range: [284; 286), 379 navigation_range: 284..286,
380 node_range: [271; 303), 380 node_range: 271..303,
381 kind: MACRO_CALL, 381 kind: MACRO_CALL,
382 detail: None, 382 detail: None,
383 deprecated: false, 383 deprecated: false,
@@ -385,8 +385,8 @@ fn very_obsolete() {}
385 StructureNode { 385 StructureNode {
386 parent: None, 386 parent: None,
387 label: "mcexp", 387 label: "mcexp",
388 navigation_range: [334; 339), 388 navigation_range: 334..339,
389 node_range: [305; 356), 389 node_range: 305..356,
390 kind: MACRO_CALL, 390 kind: MACRO_CALL,
391 detail: None, 391 detail: None,
392 deprecated: false, 392 deprecated: false,
@@ -394,8 +394,8 @@ fn very_obsolete() {}
394 StructureNode { 394 StructureNode {
395 parent: None, 395 parent: None,
396 label: "mcexp", 396 label: "mcexp",
397 navigation_range: [387; 392), 397 navigation_range: 387..392,
398 node_range: [358; 409), 398 node_range: 358..409,
399 kind: MACRO_CALL, 399 kind: MACRO_CALL,
400 detail: None, 400 detail: None,
401 deprecated: false, 401 deprecated: false,
@@ -403,8 +403,8 @@ fn very_obsolete() {}
403 StructureNode { 403 StructureNode {
404 parent: None, 404 parent: None,
405 label: "obsolete", 405 label: "obsolete",
406 navigation_range: [428; 436), 406 navigation_range: 428..436,
407 node_range: [411; 441), 407 node_range: 411..441,
408 kind: FN_DEF, 408 kind: FN_DEF,
409 detail: Some( 409 detail: Some(
410 "fn()", 410 "fn()",
@@ -414,8 +414,8 @@ fn very_obsolete() {}
414 StructureNode { 414 StructureNode {
415 parent: None, 415 parent: None,
416 label: "very_obsolete", 416 label: "very_obsolete",
417 navigation_range: [481; 494), 417 navigation_range: 481..494,
418 node_range: [443; 499), 418 node_range: 443..499,
419 kind: FN_DEF, 419 kind: FN_DEF,
420 detail: Some( 420 detail: Some(
421 "fn()", 421 "fn()",
diff --git a/crates/ra_ide/src/extend_selection.rs b/crates/ra_ide/src/extend_selection.rs
index 753d2ef6a..554594a43 100644
--- a/crates/ra_ide/src/extend_selection.rs
+++ b/crates/ra_ide/src/extend_selection.rs
@@ -9,7 +9,7 @@ use ra_syntax::{
9 ast::{self, AstNode, AstToken}, 9 ast::{self, AstNode, AstToken},
10 Direction, NodeOrToken, 10 Direction, NodeOrToken,
11 SyntaxKind::{self, *}, 11 SyntaxKind::{self, *},
12 SyntaxNode, SyntaxToken, TextRange, TextUnit, TokenAtOffset, T, 12 SyntaxNode, SyntaxToken, TextRange, TextSize, TokenAtOffset, T,
13}; 13};
14 14
15use crate::FileRange; 15use crate::FileRange;
@@ -121,10 +121,10 @@ fn extend_tokens_from_range(
121 let mut first_token = skip_trivia_token(first_token, Direction::Next)?; 121 let mut first_token = skip_trivia_token(first_token, Direction::Next)?;
122 let mut last_token = skip_trivia_token(last_token, Direction::Prev)?; 122 let mut last_token = skip_trivia_token(last_token, Direction::Prev)?;
123 123
124 while !first_token.text_range().is_subrange(&original_range) { 124 while !original_range.contains_range(first_token.text_range()) {
125 first_token = skip_trivia_token(first_token.next_token()?, Direction::Next)?; 125 first_token = skip_trivia_token(first_token.next_token()?, Direction::Next)?;
126 } 126 }
127 while !last_token.text_range().is_subrange(&original_range) { 127 while !original_range.contains_range(last_token.text_range()) {
128 last_token = skip_trivia_token(last_token.prev_token()?, Direction::Prev)?; 128 last_token = skip_trivia_token(last_token.prev_token()?, Direction::Prev)?;
129 } 129 }
130 130
@@ -161,8 +161,8 @@ fn extend_tokens_from_range(
161 .take_while(validate) 161 .take_while(validate)
162 .last()?; 162 .last()?;
163 163
164 let range = first.text_range().extend_to(&last.text_range()); 164 let range = first.text_range().cover(last.text_range());
165 if original_range.is_subrange(&range) && original_range != range { 165 if range.contains_range(original_range) && original_range != range {
166 Some(range) 166 Some(range)
167 } else { 167 } else {
168 None 168 None
@@ -176,7 +176,7 @@ fn shallowest_node(node: &SyntaxNode) -> SyntaxNode {
176 176
177fn extend_single_word_in_comment_or_string( 177fn extend_single_word_in_comment_or_string(
178 leaf: &SyntaxToken, 178 leaf: &SyntaxToken,
179 offset: TextUnit, 179 offset: TextSize,
180) -> Option<TextRange> { 180) -> Option<TextRange> {
181 let text: &str = leaf.text(); 181 let text: &str = leaf.text();
182 let cursor_position: u32 = (offset - leaf.text_range().start()).into(); 182 let cursor_position: u32 = (offset - leaf.text_range().start()).into();
@@ -190,10 +190,10 @@ fn extend_single_word_in_comment_or_string(
190 let start_idx = before.rfind(non_word_char)? as u32; 190 let start_idx = before.rfind(non_word_char)? as u32;
191 let end_idx = after.find(non_word_char).unwrap_or_else(|| after.len()) as u32; 191 let end_idx = after.find(non_word_char).unwrap_or_else(|| after.len()) as u32;
192 192
193 let from: TextUnit = (start_idx + 1).into(); 193 let from: TextSize = (start_idx + 1).into();
194 let to: TextUnit = (cursor_position + end_idx).into(); 194 let to: TextSize = (cursor_position + end_idx).into();
195 195
196 let range = TextRange::from_to(from, to); 196 let range = TextRange::new(from, to);
197 if range.is_empty() { 197 if range.is_empty() {
198 None 198 None
199 } else { 199 } else {
@@ -201,24 +201,24 @@ fn extend_single_word_in_comment_or_string(
201 } 201 }
202} 202}
203 203
204fn extend_ws(root: &SyntaxNode, ws: SyntaxToken, offset: TextUnit) -> TextRange { 204fn extend_ws(root: &SyntaxNode, ws: SyntaxToken, offset: TextSize) -> TextRange {
205 let ws_text = ws.text(); 205 let ws_text = ws.text();
206 let suffix = TextRange::from_to(offset, ws.text_range().end()) - ws.text_range().start(); 206 let suffix = TextRange::new(offset, ws.text_range().end()) - ws.text_range().start();
207 let prefix = TextRange::from_to(ws.text_range().start(), offset) - ws.text_range().start(); 207 let prefix = TextRange::new(ws.text_range().start(), offset) - ws.text_range().start();
208 let ws_suffix = &ws_text.as_str()[suffix]; 208 let ws_suffix = &ws_text.as_str()[suffix];
209 let ws_prefix = &ws_text.as_str()[prefix]; 209 let ws_prefix = &ws_text.as_str()[prefix];
210 if ws_text.contains('\n') && !ws_suffix.contains('\n') { 210 if ws_text.contains('\n') && !ws_suffix.contains('\n') {
211 if let Some(node) = ws.next_sibling_or_token() { 211 if let Some(node) = ws.next_sibling_or_token() {
212 let start = match ws_prefix.rfind('\n') { 212 let start = match ws_prefix.rfind('\n') {
213 Some(idx) => ws.text_range().start() + TextUnit::from((idx + 1) as u32), 213 Some(idx) => ws.text_range().start() + TextSize::from((idx + 1) as u32),
214 None => node.text_range().start(), 214 None => node.text_range().start(),
215 }; 215 };
216 let end = if root.text().char_at(node.text_range().end()) == Some('\n') { 216 let end = if root.text().char_at(node.text_range().end()) == Some('\n') {
217 node.text_range().end() + TextUnit::of_char('\n') 217 node.text_range().end() + TextSize::of('\n')
218 } else { 218 } else {
219 node.text_range().end() 219 node.text_range().end()
220 }; 220 };
221 return TextRange::from_to(start, end); 221 return TextRange::new(start, end);
222 } 222 }
223 } 223 }
224 ws.text_range() 224 ws.text_range()
@@ -270,13 +270,10 @@ fn extend_list_item(node: &SyntaxNode) -> Option<TextRange> {
270 .filter(|node| is_single_line_ws(node)) 270 .filter(|node| is_single_line_ws(node))
271 .unwrap_or(delimiter_node); 271 .unwrap_or(delimiter_node);
272 272
273 return Some(TextRange::from_to(node.text_range().start(), final_node.text_range().end())); 273 return Some(TextRange::new(node.text_range().start(), final_node.text_range().end()));
274 } 274 }
275 if let Some(delimiter_node) = nearby_delimiter(delimiter, node, Direction::Prev) { 275 if let Some(delimiter_node) = nearby_delimiter(delimiter, node, Direction::Prev) {
276 return Some(TextRange::from_to( 276 return Some(TextRange::new(delimiter_node.text_range().start(), node.text_range().end()));
277 delimiter_node.text_range().start(),
278 node.text_range().end(),
279 ));
280 } 277 }
281 278
282 None 279 None
@@ -286,10 +283,7 @@ fn extend_comments(comment: ast::Comment) -> Option<TextRange> {
286 let prev = adj_comments(&comment, Direction::Prev); 283 let prev = adj_comments(&comment, Direction::Prev);
287 let next = adj_comments(&comment, Direction::Next); 284 let next = adj_comments(&comment, Direction::Next);
288 if prev != next { 285 if prev != next {
289 Some(TextRange::from_to( 286 Some(TextRange::new(prev.syntax().text_range().start(), next.syntax().text_range().end()))
290 prev.syntax().text_range().start(),
291 next.syntax().text_range().end(),
292 ))
293 } else { 287 } else {
294 None 288 None
295 } 289 }
@@ -322,7 +316,7 @@ mod tests {
322 fn do_check(before: &str, afters: &[&str]) { 316 fn do_check(before: &str, afters: &[&str]) {
323 let (cursor, before) = extract_offset(before); 317 let (cursor, before) = extract_offset(before);
324 let (analysis, file_id) = single_file(&before); 318 let (analysis, file_id) = single_file(&before);
325 let range = TextRange::offset_len(cursor, 0.into()); 319 let range = TextRange::empty(cursor);
326 let mut frange = FileRange { file_id, range }; 320 let mut frange = FileRange { file_id, range };
327 321
328 for &after in afters { 322 for &after in afters {
diff --git a/crates/ra_ide/src/folding_ranges.rs b/crates/ra_ide/src/folding_ranges.rs
index 4eeb76d14..4379005aa 100644
--- a/crates/ra_ide/src/folding_ranges.rs
+++ b/crates/ra_ide/src/folding_ranges.rs
@@ -141,7 +141,7 @@ fn contiguous_range_for_group_unless(
141 } 141 }
142 142
143 if first != &last { 143 if first != &last {
144 Some(TextRange::from_to(first.text_range().start(), last.text_range().end())) 144 Some(TextRange::new(first.text_range().start(), last.text_range().end()))
145 } else { 145 } else {
146 // The group consists of only one element, therefore it cannot be folded 146 // The group consists of only one element, therefore it cannot be folded
147 None 147 None
@@ -187,10 +187,7 @@ fn contiguous_range_for_comment(
187 } 187 }
188 188
189 if first != last { 189 if first != last {
190 Some(TextRange::from_to( 190 Some(TextRange::new(first.syntax().text_range().start(), last.syntax().text_range().end()))
191 first.syntax().text_range().start(),
192 last.syntax().text_range().end(),
193 ))
194 } else { 191 } else {
195 // The group consists of only one element, therefore it cannot be folded 192 // The group consists of only one element, therefore it cannot be folded
196 None 193 None
diff --git a/crates/ra_ide/src/goto_definition.rs b/crates/ra_ide/src/goto_definition.rs
index 9998ca5a3..1dfca819d 100644
--- a/crates/ra_ide/src/goto_definition.rs
+++ b/crates/ra_ide/src/goto_definition.rs
@@ -140,7 +140,7 @@ mod tests {
140 struct Foo; 140 struct Foo;
141 enum E { X(Foo<|>) } 141 enum E { X(Foo<|>) }
142 ", 142 ",
143 "Foo STRUCT_DEF FileId(1) [0; 11) [7; 10)", 143 "Foo STRUCT_DEF FileId(1) 0..11 7..10",
144 "struct Foo;|Foo", 144 "struct Foo;|Foo",
145 ); 145 );
146 } 146 }
@@ -153,7 +153,7 @@ mod tests {
153 struct Foo; 153 struct Foo;
154 enum E { X(<|>Foo) } 154 enum E { X(<|>Foo) }
155 ", 155 ",
156 "Foo STRUCT_DEF FileId(1) [0; 11) [7; 10)", 156 "Foo STRUCT_DEF FileId(1) 0..11 7..10",
157 "struct Foo;|Foo", 157 "struct Foo;|Foo",
158 ); 158 );
159 } 159 }
@@ -174,7 +174,7 @@ mod tests {
174 //- /b.rs 174 //- /b.rs
175 struct Foo; 175 struct Foo;
176 ", 176 ",
177 "Foo STRUCT_DEF FileId(2) [0; 11) [7; 10)", 177 "Foo STRUCT_DEF FileId(2) 0..11 7..10",
178 "struct Foo;|Foo", 178 "struct Foo;|Foo",
179 ); 179 );
180 } 180 }
@@ -189,7 +189,7 @@ mod tests {
189 //- /foo.rs 189 //- /foo.rs
190 // empty 190 // empty
191 ", 191 ",
192 "foo SOURCE_FILE FileId(2) [0; 10)", 192 "foo SOURCE_FILE FileId(2) 0..10",
193 "// empty\n\n", 193 "// empty\n\n",
194 ); 194 );
195 195
@@ -201,7 +201,7 @@ mod tests {
201 //- /foo/mod.rs 201 //- /foo/mod.rs
202 // empty 202 // empty
203 ", 203 ",
204 "foo SOURCE_FILE FileId(2) [0; 10)", 204 "foo SOURCE_FILE FileId(2) 0..10",
205 "// empty\n\n", 205 "// empty\n\n",
206 ); 206 );
207 } 207 }
@@ -218,7 +218,7 @@ mod tests {
218 <|>foo!(); 218 <|>foo!();
219 } 219 }
220 ", 220 ",
221 "foo MACRO_CALL FileId(1) [0; 33) [13; 16)", 221 "foo MACRO_CALL FileId(1) 0..33 13..16",
222 "macro_rules! foo { () => { () } }|foo", 222 "macro_rules! foo { () => { () } }|foo",
223 ); 223 );
224 } 224 }
@@ -238,7 +238,7 @@ mod tests {
238 #[macro_export] 238 #[macro_export]
239 macro_rules! foo { () => { () } } 239 macro_rules! foo { () => { () } }
240 ", 240 ",
241 "foo MACRO_CALL FileId(2) [0; 49) [29; 32)", 241 "foo MACRO_CALL FileId(2) 0..49 29..32",
242 "#[macro_export]\nmacro_rules! foo { () => { () } }|foo", 242 "#[macro_export]\nmacro_rules! foo { () => { () } }|foo",
243 ); 243 );
244 } 244 }
@@ -254,7 +254,7 @@ mod tests {
254 #[macro_export] 254 #[macro_export]
255 macro_rules! foo { () => { () } } 255 macro_rules! foo { () => { () } }
256 ", 256 ",
257 "foo MACRO_CALL FileId(2) [0; 49) [29; 32)", 257 "foo MACRO_CALL FileId(2) 0..49 29..32",
258 "#[macro_export]\nmacro_rules! foo { () => { () } }|foo", 258 "#[macro_export]\nmacro_rules! foo { () => { () } }|foo",
259 ); 259 );
260 } 260 }
@@ -274,7 +274,7 @@ mod tests {
274 <|>foo(); 274 <|>foo();
275 } 275 }
276 ", 276 ",
277 "foo FN_DEF FileId(1) [64; 80) [75; 78)", 277 "foo FN_DEF FileId(1) 64..80 75..78",
278 "define_fn!(foo);|foo", 278 "define_fn!(foo);|foo",
279 ); 279 );
280 } 280 }
@@ -294,7 +294,7 @@ mod tests {
294 <|>foo(); 294 <|>foo();
295 } 295 }
296 ", 296 ",
297 "foo FN_DEF FileId(1) [51; 64) [51; 64)", 297 "foo FN_DEF FileId(1) 51..64 51..64",
298 "define_fn!();|define_fn!();", 298 "define_fn!();|define_fn!();",
299 ); 299 );
300 } 300 }
@@ -312,7 +312,7 @@ mod tests {
312 } 312 }
313 } 313 }
314 ", 314 ",
315 "foo MACRO_CALL FileId(1) [0; 28) [13; 16)", 315 "foo MACRO_CALL FileId(1) 0..28 13..16",
316 "macro_rules! foo {() => {0}}|foo", 316 "macro_rules! foo {() => {0}}|foo",
317 ); 317 );
318 } 318 }
@@ -330,7 +330,7 @@ mod tests {
330 } 330 }
331 } 331 }
332 ", 332 ",
333 "foo MACRO_CALL FileId(1) [0; 28) [13; 16)", 333 "foo MACRO_CALL FileId(1) 0..28 13..16",
334 "macro_rules! foo {() => {0}}|foo", 334 "macro_rules! foo {() => {0}}|foo",
335 ); 335 );
336 } 336 }
@@ -350,7 +350,7 @@ mod tests {
350 foo.frobnicate<|>(); 350 foo.frobnicate<|>();
351 } 351 }
352 ", 352 ",
353 "frobnicate FN_DEF FileId(1) [27; 51) [30; 40)", 353 "frobnicate FN_DEF FileId(1) 27..51 30..40",
354 "fn frobnicate(&self) { }|frobnicate", 354 "fn frobnicate(&self) { }|frobnicate",
355 ); 355 );
356 } 356 }
@@ -369,7 +369,7 @@ mod tests {
369 foo.spam<|>; 369 foo.spam<|>;
370 } 370 }
371 ", 371 ",
372 "spam RECORD_FIELD_DEF FileId(1) [17; 26) [17; 21)", 372 "spam RECORD_FIELD_DEF FileId(1) 17..26 17..21",
373 "spam: u32|spam", 373 "spam: u32|spam",
374 ); 374 );
375 } 375 }
@@ -390,7 +390,7 @@ mod tests {
390 } 390 }
391 } 391 }
392 ", 392 ",
393 "spam RECORD_FIELD_DEF FileId(1) [17; 26) [17; 21)", 393 "spam RECORD_FIELD_DEF FileId(1) 17..26 17..21",
394 "spam: u32|spam", 394 "spam: u32|spam",
395 ); 395 );
396 } 396 }
@@ -409,7 +409,7 @@ mod tests {
409 let Foo { spam<|>: _, } = foo 409 let Foo { spam<|>: _, } = foo
410 } 410 }
411 ", 411 ",
412 "spam RECORD_FIELD_DEF FileId(1) [17; 26) [17; 21)", 412 "spam RECORD_FIELD_DEF FileId(1) 17..26 17..21",
413 "spam: u32|spam", 413 "spam: u32|spam",
414 ); 414 );
415 } 415 }
@@ -426,7 +426,7 @@ mod tests {
426 Foo { spam<|>: m!() } 426 Foo { spam<|>: m!() }
427 } 427 }
428 ", 428 ",
429 "spam RECORD_FIELD_DEF FileId(1) [45; 54) [45; 49)", 429 "spam RECORD_FIELD_DEF FileId(1) 45..54 45..49",
430 "spam: u32|spam", 430 "spam: u32|spam",
431 ); 431 );
432 } 432 }
@@ -443,7 +443,7 @@ mod tests {
443 foo.<|>0; 443 foo.<|>0;
444 } 444 }
445 ", 445 ",
446 "TUPLE_FIELD_DEF FileId(1) [11; 14)", 446 "TUPLE_FIELD_DEF FileId(1) 11..14",
447 "u32", 447 "u32",
448 ); 448 );
449 } 449 }
@@ -462,7 +462,7 @@ mod tests {
462 Foo::frobnicate<|>(); 462 Foo::frobnicate<|>();
463 } 463 }
464 ", 464 ",
465 "frobnicate FN_DEF FileId(1) [27; 46) [30; 40)", 465 "frobnicate FN_DEF FileId(1) 27..46 30..40",
466 "fn frobnicate() { }|frobnicate", 466 "fn frobnicate() { }|frobnicate",
467 ); 467 );
468 } 468 }
@@ -480,7 +480,7 @@ mod tests {
480 Foo::frobnicate<|>(); 480 Foo::frobnicate<|>();
481 } 481 }
482 ", 482 ",
483 "frobnicate FN_DEF FileId(1) [16; 32) [19; 29)", 483 "frobnicate FN_DEF FileId(1) 16..32 19..29",
484 "fn frobnicate();|frobnicate", 484 "fn frobnicate();|frobnicate",
485 ); 485 );
486 } 486 }
@@ -500,7 +500,7 @@ mod tests {
500 Foo::frobnicate<|>(); 500 Foo::frobnicate<|>();
501 } 501 }
502 ", 502 ",
503 "frobnicate FN_DEF FileId(1) [30; 46) [33; 43)", 503 "frobnicate FN_DEF FileId(1) 30..46 33..43",
504 "fn frobnicate();|frobnicate", 504 "fn frobnicate();|frobnicate",
505 ); 505 );
506 } 506 }
@@ -517,7 +517,7 @@ mod tests {
517 } 517 }
518 } 518 }
519 ", 519 ",
520 "impl IMPL_DEF FileId(1) [12; 73)", 520 "impl IMPL_DEF FileId(1) 12..73",
521 "impl Foo {...}", 521 "impl Foo {...}",
522 ); 522 );
523 523
@@ -531,7 +531,7 @@ mod tests {
531 } 531 }
532 } 532 }
533 ", 533 ",
534 "impl IMPL_DEF FileId(1) [12; 73)", 534 "impl IMPL_DEF FileId(1) 12..73",
535 "impl Foo {...}", 535 "impl Foo {...}",
536 ); 536 );
537 537
@@ -545,7 +545,7 @@ mod tests {
545 } 545 }
546 } 546 }
547 ", 547 ",
548 "impl IMPL_DEF FileId(1) [15; 75)", 548 "impl IMPL_DEF FileId(1) 15..75",
549 "impl Foo {...}", 549 "impl Foo {...}",
550 ); 550 );
551 551
@@ -558,7 +558,7 @@ mod tests {
558 } 558 }
559 } 559 }
560 ", 560 ",
561 "impl IMPL_DEF FileId(1) [15; 62)", 561 "impl IMPL_DEF FileId(1) 15..62",
562 "impl Foo {...}", 562 "impl Foo {...}",
563 ); 563 );
564 } 564 }
@@ -578,7 +578,7 @@ mod tests {
578 } 578 }
579 } 579 }
580 ", 580 ",
581 "impl IMPL_DEF FileId(1) [49; 115)", 581 "impl IMPL_DEF FileId(1) 49..115",
582 "impl Make for Foo {...}", 582 "impl Make for Foo {...}",
583 ); 583 );
584 584
@@ -595,7 +595,7 @@ mod tests {
595 } 595 }
596 } 596 }
597 ", 597 ",
598 "impl IMPL_DEF FileId(1) [49; 115)", 598 "impl IMPL_DEF FileId(1) 49..115",
599 "impl Make for Foo {...}", 599 "impl Make for Foo {...}",
600 ); 600 );
601 } 601 }
@@ -607,7 +607,7 @@ mod tests {
607 //- /lib.rs 607 //- /lib.rs
608 struct Foo<|> { value: u32 } 608 struct Foo<|> { value: u32 }
609 ", 609 ",
610 "Foo STRUCT_DEF FileId(1) [0; 25) [7; 10)", 610 "Foo STRUCT_DEF FileId(1) 0..25 7..10",
611 "struct Foo { value: u32 }|Foo", 611 "struct Foo { value: u32 }|Foo",
612 ); 612 );
613 613
@@ -618,7 +618,7 @@ mod tests {
618 field<|>: string, 618 field<|>: string,
619 } 619 }
620 "#, 620 "#,
621 "field RECORD_FIELD_DEF FileId(1) [17; 30) [17; 22)", 621 "field RECORD_FIELD_DEF FileId(1) 17..30 17..22",
622 "field: string|field", 622 "field: string|field",
623 ); 623 );
624 624
@@ -627,7 +627,7 @@ mod tests {
627 //- /lib.rs 627 //- /lib.rs
628 fn foo_test<|>() { } 628 fn foo_test<|>() { }
629 ", 629 ",
630 "foo_test FN_DEF FileId(1) [0; 17) [3; 11)", 630 "foo_test FN_DEF FileId(1) 0..17 3..11",
631 "fn foo_test() { }|foo_test", 631 "fn foo_test() { }|foo_test",
632 ); 632 );
633 633
@@ -638,7 +638,7 @@ mod tests {
638 Variant, 638 Variant,
639 } 639 }
640 ", 640 ",
641 "Foo ENUM_DEF FileId(1) [0; 25) [5; 8)", 641 "Foo ENUM_DEF FileId(1) 0..25 5..8",
642 "enum Foo {...}|Foo", 642 "enum Foo {...}|Foo",
643 ); 643 );
644 644
@@ -651,7 +651,7 @@ mod tests {
651 Variant3, 651 Variant3,
652 } 652 }
653 ", 653 ",
654 "Variant2 ENUM_VARIANT FileId(1) [29; 37) [29; 37)", 654 "Variant2 ENUM_VARIANT FileId(1) 29..37 29..37",
655 "Variant2|Variant2", 655 "Variant2|Variant2",
656 ); 656 );
657 657
@@ -660,7 +660,7 @@ mod tests {
660 //- /lib.rs 660 //- /lib.rs
661 static INNER<|>: &str = ""; 661 static INNER<|>: &str = "";
662 "#, 662 "#,
663 "INNER STATIC_DEF FileId(1) [0; 24) [7; 12)", 663 "INNER STATIC_DEF FileId(1) 0..24 7..12",
664 "static INNER: &str = \"\";|INNER", 664 "static INNER: &str = \"\";|INNER",
665 ); 665 );
666 666
@@ -669,7 +669,7 @@ mod tests {
669 //- /lib.rs 669 //- /lib.rs
670 const INNER<|>: &str = ""; 670 const INNER<|>: &str = "";
671 "#, 671 "#,
672 "INNER CONST_DEF FileId(1) [0; 23) [6; 11)", 672 "INNER CONST_DEF FileId(1) 0..23 6..11",
673 "const INNER: &str = \"\";|INNER", 673 "const INNER: &str = \"\";|INNER",
674 ); 674 );
675 675
@@ -678,7 +678,7 @@ mod tests {
678 //- /lib.rs 678 //- /lib.rs
679 type Thing<|> = Option<()>; 679 type Thing<|> = Option<()>;
680 "#, 680 "#,
681 "Thing TYPE_ALIAS_DEF FileId(1) [0; 24) [5; 10)", 681 "Thing TYPE_ALIAS_DEF FileId(1) 0..24 5..10",
682 "type Thing = Option<()>;|Thing", 682 "type Thing = Option<()>;|Thing",
683 ); 683 );
684 684
@@ -687,7 +687,7 @@ mod tests {
687 //- /lib.rs 687 //- /lib.rs
688 trait Foo<|> { } 688 trait Foo<|> { }
689 "#, 689 "#,
690 "Foo TRAIT_DEF FileId(1) [0; 13) [6; 9)", 690 "Foo TRAIT_DEF FileId(1) 0..13 6..9",
691 "trait Foo { }|Foo", 691 "trait Foo { }|Foo",
692 ); 692 );
693 693
@@ -696,7 +696,7 @@ mod tests {
696 //- /lib.rs 696 //- /lib.rs
697 mod bar<|> { } 697 mod bar<|> { }
698 "#, 698 "#,
699 "bar MODULE FileId(1) [0; 11) [4; 7)", 699 "bar MODULE FileId(1) 0..11 4..7",
700 "mod bar { }|bar", 700 "mod bar { }|bar",
701 ); 701 );
702 } 702 }
@@ -717,7 +717,7 @@ mod tests {
717 } 717 }
718 mod confuse_index { fn foo(); } 718 mod confuse_index { fn foo(); }
719 ", 719 ",
720 "foo FN_DEF FileId(1) [52; 63) [55; 58)", 720 "foo FN_DEF FileId(1) 52..63 55..58",
721 "fn foo() {}|foo", 721 "fn foo() {}|foo",
722 ); 722 );
723 } 723 }
@@ -746,7 +746,7 @@ mod tests {
746 format!(\"{}\", fo<|>o()) 746 format!(\"{}\", fo<|>o())
747 } 747 }
748 ", 748 ",
749 "foo FN_DEF FileId(1) [398; 415) [401; 404)", 749 "foo FN_DEF FileId(1) 398..415 401..404",
750 "fn foo() -> i8 {}|foo", 750 "fn foo() -> i8 {}|foo",
751 ); 751 );
752 } 752 }
@@ -760,7 +760,7 @@ mod tests {
760 t: <|>T, 760 t: <|>T,
761 } 761 }
762 ", 762 ",
763 "T TYPE_PARAM FileId(1) [11; 12)", 763 "T TYPE_PARAM FileId(1) 11..12",
764 "T", 764 "T",
765 ); 765 );
766 } 766 }
@@ -782,7 +782,7 @@ mod tests {
782 }); 782 });
783 } 783 }
784 ", 784 ",
785 "x BIND_PAT FileId(1) [69; 70)", 785 "x BIND_PAT FileId(1) 69..70",
786 "x", 786 "x",
787 ); 787 );
788 788
@@ -801,7 +801,7 @@ mod tests {
801 }); 801 });
802 } 802 }
803 ", 803 ",
804 "y BIND_PAT FileId(1) [98; 99)", 804 "y BIND_PAT FileId(1) 98..99",
805 "y", 805 "y",
806 ); 806 );
807 } 807 }
@@ -818,7 +818,7 @@ mod tests {
818 } 818 }
819 } 819 }
820 ", 820 ",
821 "x BIND_PAT FileId(1) [39; 40)", 821 "x BIND_PAT FileId(1) 39..40",
822 "x", 822 "x",
823 ); 823 );
824 } 824 }
@@ -833,7 +833,7 @@ mod tests {
833 <|>foo!(); 833 <|>foo!();
834 } 834 }
835 ", 835 ",
836 "foo MACRO_CALL FileId(1) [15; 48) [28; 31)", 836 "foo MACRO_CALL FileId(1) 15..48 28..31",
837 "macro_rules! foo { () => { () } }|foo", 837 "macro_rules! foo { () => { () } }|foo",
838 ); 838 );
839 } 839 }
@@ -850,7 +850,7 @@ mod tests {
850 Foo { x<|> }; 850 Foo { x<|> };
851 } 851 }
852 ", 852 ",
853 "x BIND_PAT FileId(1) [42; 43)", 853 "x BIND_PAT FileId(1) 42..43",
854 "x", 854 "x",
855 ) 855 )
856 } 856 }
diff --git a/crates/ra_ide/src/goto_type_definition.rs b/crates/ra_ide/src/goto_type_definition.rs
index bd2688df1..a84637489 100644
--- a/crates/ra_ide/src/goto_type_definition.rs
+++ b/crates/ra_ide/src/goto_type_definition.rs
@@ -68,7 +68,7 @@ mod tests {
68 f<|> 68 f<|>
69 } 69 }
70 ", 70 ",
71 "Foo STRUCT_DEF FileId(1) [0; 11) [7; 10)", 71 "Foo STRUCT_DEF FileId(1) 0..11 7..10",
72 ); 72 );
73 } 73 }
74 74
@@ -83,7 +83,7 @@ mod tests {
83 f<|> 83 f<|>
84 } 84 }
85 ", 85 ",
86 "Foo STRUCT_DEF FileId(1) [0; 11) [7; 10)", 86 "Foo STRUCT_DEF FileId(1) 0..11 7..10",
87 ); 87 );
88 } 88 }
89 89
@@ -102,7 +102,7 @@ mod tests {
102 } 102 }
103 } 103 }
104 ", 104 ",
105 "Foo STRUCT_DEF FileId(1) [52; 65) [59; 62)", 105 "Foo STRUCT_DEF FileId(1) 52..65 59..62",
106 ); 106 );
107 } 107 }
108 108
@@ -114,7 +114,7 @@ mod tests {
114 struct Foo; 114 struct Foo;
115 fn foo(<|>f: Foo) {} 115 fn foo(<|>f: Foo) {}
116 ", 116 ",
117 "Foo STRUCT_DEF FileId(1) [0; 11) [7; 10)", 117 "Foo STRUCT_DEF FileId(1) 0..11 7..10",
118 ); 118 );
119 } 119 }
120 120
@@ -130,7 +130,7 @@ mod tests {
130 bar.<|>0; 130 bar.<|>0;
131 } 131 }
132 ", 132 ",
133 "Foo STRUCT_DEF FileId(1) [0; 11) [7; 10)", 133 "Foo STRUCT_DEF FileId(1) 0..11 7..10",
134 ); 134 );
135 } 135 }
136} 136}
diff --git a/crates/ra_ide/src/hover.rs b/crates/ra_ide/src/hover.rs
index a31187994..58c799eca 100644
--- a/crates/ra_ide/src/hover.rs
+++ b/crates/ra_ide/src/hover.rs
@@ -76,7 +76,7 @@ fn hover_text(
76 76
77fn definition_owner_name(db: &RootDatabase, def: &Definition) -> Option<String> { 77fn definition_owner_name(db: &RootDatabase, def: &Definition) -> Option<String> {
78 match def { 78 match def {
79 Definition::StructField(f) => Some(f.parent_def(db).name(db)), 79 Definition::Field(f) => Some(f.parent_def(db).name(db)),
80 Definition::Local(l) => l.parent(db).name(db), 80 Definition::Local(l) => l.parent(db).name(db),
81 Definition::ModuleDef(md) => match md { 81 Definition::ModuleDef(md) => match md {
82 ModuleDef::Function(f) => match f.as_assoc_item(db)?.container(db) { 82 ModuleDef::Function(f) => match f.as_assoc_item(db)?.container(db) {
@@ -116,7 +116,7 @@ fn hover_text_from_name_kind(db: &RootDatabase, def: Definition) -> Option<Strin
116 let src = it.source(db); 116 let src = it.source(db);
117 hover_text(src.value.doc_comment_text(), Some(macro_label(&src.value)), mod_path) 117 hover_text(src.value.doc_comment_text(), Some(macro_label(&src.value)), mod_path)
118 } 118 }
119 Definition::StructField(it) => { 119 Definition::Field(it) => {
120 let src = it.source(db); 120 let src = it.source(db);
121 match src.value { 121 match src.value {
122 FieldSource::Named(it) => { 122 FieldSource::Named(it) => {
@@ -275,7 +275,7 @@ mod tests {
275 ", 275 ",
276 ); 276 );
277 let hover = analysis.hover(position).unwrap().unwrap(); 277 let hover = analysis.hover(position).unwrap().unwrap();
278 assert_eq!(hover.range, TextRange::from_to(95.into(), 100.into())); 278 assert_eq!(hover.range, TextRange::new(95.into(), 100.into()));
279 assert_eq!(trim_markup_opt(hover.info.first()), Some("u32")); 279 assert_eq!(trim_markup_opt(hover.info.first()), Some("u32"));
280 } 280 }
281 281
diff --git a/crates/ra_ide/src/impls.rs b/crates/ra_ide/src/impls.rs
index 68529c8a5..ea2225f70 100644
--- a/crates/ra_ide/src/impls.rs
+++ b/crates/ra_ide/src/impls.rs
@@ -86,7 +86,7 @@ mod tests {
86 struct Foo<|>; 86 struct Foo<|>;
87 impl Foo {} 87 impl Foo {}
88 ", 88 ",
89 &["impl IMPL_DEF FileId(1) [12; 23)"], 89 &["impl IMPL_DEF FileId(1) 12..23"],
90 ); 90 );
91 } 91 }
92 92
@@ -99,7 +99,7 @@ mod tests {
99 impl Foo {} 99 impl Foo {}
100 impl Foo {} 100 impl Foo {}
101 ", 101 ",
102 &["impl IMPL_DEF FileId(1) [12; 23)", "impl IMPL_DEF FileId(1) [24; 35)"], 102 &["impl IMPL_DEF FileId(1) 12..23", "impl IMPL_DEF FileId(1) 24..35"],
103 ); 103 );
104 } 104 }
105 105
@@ -116,7 +116,7 @@ mod tests {
116 impl super::Foo {} 116 impl super::Foo {}
117 } 117 }
118 ", 118 ",
119 &["impl IMPL_DEF FileId(1) [24; 42)", "impl IMPL_DEF FileId(1) [57; 75)"], 119 &["impl IMPL_DEF FileId(1) 24..42", "impl IMPL_DEF FileId(1) 57..75"],
120 ); 120 );
121 } 121 }
122 122
@@ -133,7 +133,7 @@ mod tests {
133 //- /b.rs 133 //- /b.rs
134 impl crate::Foo {} 134 impl crate::Foo {}
135 ", 135 ",
136 &["impl IMPL_DEF FileId(2) [0; 18)", "impl IMPL_DEF FileId(3) [0; 18)"], 136 &["impl IMPL_DEF FileId(2) 0..18", "impl IMPL_DEF FileId(3) 0..18"],
137 ); 137 );
138 } 138 }
139 139
@@ -146,7 +146,7 @@ mod tests {
146 struct Foo; 146 struct Foo;
147 impl T for Foo {} 147 impl T for Foo {}
148 ", 148 ",
149 &["impl IMPL_DEF FileId(1) [23; 40)"], 149 &["impl IMPL_DEF FileId(1) 23..40"],
150 ); 150 );
151 } 151 }
152 152
@@ -164,7 +164,7 @@ mod tests {
164 //- /b.rs 164 //- /b.rs
165 impl crate::T for crate::Foo {} 165 impl crate::T for crate::Foo {}
166 ", 166 ",
167 &["impl IMPL_DEF FileId(2) [0; 31)", "impl IMPL_DEF FileId(3) [0; 31)"], 167 &["impl IMPL_DEF FileId(2) 0..31", "impl IMPL_DEF FileId(3) 0..31"],
168 ); 168 );
169 } 169 }
170 170
@@ -180,9 +180,9 @@ mod tests {
180 impl T for &Foo {} 180 impl T for &Foo {}
181 ", 181 ",
182 &[ 182 &[
183 "impl IMPL_DEF FileId(1) [23; 34)", 183 "impl IMPL_DEF FileId(1) 23..34",
184 "impl IMPL_DEF FileId(1) [35; 52)", 184 "impl IMPL_DEF FileId(1) 35..52",
185 "impl IMPL_DEF FileId(1) [53; 71)", 185 "impl IMPL_DEF FileId(1) 53..71",
186 ], 186 ],
187 ); 187 );
188 } 188 }
@@ -195,7 +195,7 @@ mod tests {
195 #[derive(Copy)] 195 #[derive(Copy)]
196 struct Foo<|>; 196 struct Foo<|>;
197 ", 197 ",
198 &["impl IMPL_DEF FileId(1) [0; 15)"], 198 &["impl IMPL_DEF FileId(1) 0..15"],
199 ); 199 );
200 } 200 }
201} 201}
diff --git a/crates/ra_ide/src/inlay_hints.rs b/crates/ra_ide/src/inlay_hints.rs
index 0774fa0a1..98483df32 100644
--- a/crates/ra_ide/src/inlay_hints.rs
+++ b/crates/ra_ide/src/inlay_hints.rs
@@ -322,12 +322,12 @@ mod tests {
322 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: true, type_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###" 322 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: true, type_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"
323 [ 323 [
324 InlayHint { 324 InlayHint {
325 range: [106; 107), 325 range: 106..107,
326 kind: ParameterHint, 326 kind: ParameterHint,
327 label: "a", 327 label: "a",
328 }, 328 },
329 InlayHint { 329 InlayHint {
330 range: [109; 110), 330 range: 109..110,
331 kind: ParameterHint, 331 kind: ParameterHint,
332 label: "b", 332 label: "b",
333 }, 333 },
@@ -358,7 +358,7 @@ mod tests {
358 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ type_hints: true, parameter_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###" 358 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ type_hints: true, parameter_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"
359 [ 359 [
360 InlayHint { 360 InlayHint {
361 range: [97; 99), 361 range: 97..99,
362 kind: TypeHint, 362 kind: TypeHint,
363 label: "i32", 363 label: "i32",
364 }, 364 },
@@ -382,12 +382,12 @@ fn main() {
382 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 382 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
383 [ 383 [
384 InlayHint { 384 InlayHint {
385 range: [69; 71), 385 range: 69..71,
386 kind: TypeHint, 386 kind: TypeHint,
387 label: "Test<i32>", 387 label: "Test<i32>",
388 }, 388 },
389 InlayHint { 389 InlayHint {
390 range: [105; 111), 390 range: 105..111,
391 kind: TypeHint, 391 kind: TypeHint,
392 label: "&Test<i32>", 392 label: "&Test<i32>",
393 }, 393 },
@@ -439,57 +439,57 @@ fn main() {
439 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 439 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
440 [ 440 [
441 InlayHint { 441 InlayHint {
442 range: [193; 197), 442 range: 193..197,
443 kind: TypeHint, 443 kind: TypeHint,
444 label: "i32", 444 label: "i32",
445 }, 445 },
446 InlayHint { 446 InlayHint {
447 range: [236; 244), 447 range: 236..244,
448 kind: TypeHint, 448 kind: TypeHint,
449 label: "i32", 449 label: "i32",
450 }, 450 },
451 InlayHint { 451 InlayHint {
452 range: [275; 279), 452 range: 275..279,
453 kind: TypeHint, 453 kind: TypeHint,
454 label: "&str", 454 label: "&str",
455 }, 455 },
456 InlayHint { 456 InlayHint {
457 range: [539; 543), 457 range: 539..543,
458 kind: TypeHint, 458 kind: TypeHint,
459 label: "(i32, char)", 459 label: "(i32, char)",
460 }, 460 },
461 InlayHint { 461 InlayHint {
462 range: [566; 567), 462 range: 566..567,
463 kind: TypeHint, 463 kind: TypeHint,
464 label: "i32", 464 label: "i32",
465 }, 465 },
466 InlayHint { 466 InlayHint {
467 range: [570; 571), 467 range: 570..571,
468 kind: TypeHint, 468 kind: TypeHint,
469 label: "i32", 469 label: "i32",
470 }, 470 },
471 InlayHint { 471 InlayHint {
472 range: [573; 574), 472 range: 573..574,
473 kind: TypeHint, 473 kind: TypeHint,
474 label: "i32", 474 label: "i32",
475 }, 475 },
476 InlayHint { 476 InlayHint {
477 range: [577; 578), 477 range: 577..578,
478 kind: TypeHint, 478 kind: TypeHint,
479 label: "f64", 479 label: "f64",
480 }, 480 },
481 InlayHint { 481 InlayHint {
482 range: [580; 581), 482 range: 580..581,
483 kind: TypeHint, 483 kind: TypeHint,
484 label: "f64", 484 label: "f64",
485 }, 485 },
486 InlayHint { 486 InlayHint {
487 range: [584; 585), 487 range: 584..585,
488 kind: TypeHint, 488 kind: TypeHint,
489 label: "i32", 489 label: "i32",
490 }, 490 },
491 InlayHint { 491 InlayHint {
492 range: [627; 628), 492 range: 627..628,
493 kind: TypeHint, 493 kind: TypeHint,
494 label: "i32", 494 label: "i32",
495 }, 495 },
@@ -519,47 +519,47 @@ fn main() {
519 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 519 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
520 [ 520 [
521 InlayHint { 521 InlayHint {
522 range: [21; 30), 522 range: 21..30,
523 kind: TypeHint, 523 kind: TypeHint,
524 label: "i32", 524 label: "i32",
525 }, 525 },
526 InlayHint { 526 InlayHint {
527 range: [57; 66), 527 range: 57..66,
528 kind: TypeHint, 528 kind: TypeHint,
529 label: "i32", 529 label: "i32",
530 }, 530 },
531 InlayHint { 531 InlayHint {
532 range: [115; 123), 532 range: 115..123,
533 kind: TypeHint, 533 kind: TypeHint,
534 label: "|…| -> i32", 534 label: "|…| -> i32",
535 }, 535 },
536 InlayHint { 536 InlayHint {
537 range: [127; 128), 537 range: 127..128,
538 kind: TypeHint, 538 kind: TypeHint,
539 label: "i32", 539 label: "i32",
540 }, 540 },
541 InlayHint { 541 InlayHint {
542 range: [130; 131), 542 range: 130..131,
543 kind: TypeHint, 543 kind: TypeHint,
544 label: "i32", 544 label: "i32",
545 }, 545 },
546 InlayHint { 546 InlayHint {
547 range: [133; 134), 547 range: 133..134,
548 kind: TypeHint, 548 kind: TypeHint,
549 label: "i32", 549 label: "i32",
550 }, 550 },
551 InlayHint { 551 InlayHint {
552 range: [136; 137), 552 range: 136..137,
553 kind: TypeHint, 553 kind: TypeHint,
554 label: "i32", 554 label: "i32",
555 }, 555 },
556 InlayHint { 556 InlayHint {
557 range: [201; 213), 557 range: 201..213,
558 kind: TypeHint, 558 kind: TypeHint,
559 label: "&|…| -> i32", 559 label: "&|…| -> i32",
560 }, 560 },
561 InlayHint { 561 InlayHint {
562 range: [236; 245), 562 range: 236..245,
563 kind: TypeHint, 563 kind: TypeHint,
564 label: "|| -> i32", 564 label: "|| -> i32",
565 }, 565 },
@@ -583,12 +583,12 @@ fn main() {
583 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 583 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
584 [ 584 [
585 InlayHint { 585 InlayHint {
586 range: [21; 30), 586 range: 21..30,
587 kind: TypeHint, 587 kind: TypeHint,
588 label: "i32", 588 label: "i32",
589 }, 589 },
590 InlayHint { 590 InlayHint {
591 range: [44; 53), 591 range: 44..53,
592 kind: TypeHint, 592 kind: TypeHint,
593 label: "i32", 593 label: "i32",
594 }, 594 },
@@ -633,57 +633,57 @@ fn main() {
633 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 633 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
634 [ 634 [
635 InlayHint { 635 InlayHint {
636 range: [188; 192), 636 range: 188..192,
637 kind: TypeHint, 637 kind: TypeHint,
638 label: "CustomOption<Test>", 638 label: "CustomOption<Test>",
639 }, 639 },
640 InlayHint { 640 InlayHint {
641 range: [267; 271), 641 range: 267..271,
642 kind: TypeHint, 642 kind: TypeHint,
643 label: "&CustomOption<Test>", 643 label: "&CustomOption<Test>",
644 }, 644 },
645 InlayHint { 645 InlayHint {
646 range: [300; 304), 646 range: 300..304,
647 kind: TypeHint, 647 kind: TypeHint,
648 label: "&Test", 648 label: "&Test",
649 }, 649 },
650 InlayHint { 650 InlayHint {
651 range: [341; 342), 651 range: 341..342,
652 kind: TypeHint, 652 kind: TypeHint,
653 label: "&CustomOption<u32>", 653 label: "&CustomOption<u32>",
654 }, 654 },
655 InlayHint { 655 InlayHint {
656 range: [344; 345), 656 range: 344..345,
657 kind: TypeHint, 657 kind: TypeHint,
658 label: "&u8", 658 label: "&u8",
659 }, 659 },
660 InlayHint { 660 InlayHint {
661 range: [387; 388), 661 range: 387..388,
662 kind: TypeHint, 662 kind: TypeHint,
663 label: "&CustomOption<u32>", 663 label: "&CustomOption<u32>",
664 }, 664 },
665 InlayHint { 665 InlayHint {
666 range: [393; 394), 666 range: 393..394,
667 kind: TypeHint, 667 kind: TypeHint,
668 label: "&u8", 668 label: "&u8",
669 }, 669 },
670 InlayHint { 670 InlayHint {
671 range: [441; 442), 671 range: 441..442,
672 kind: TypeHint, 672 kind: TypeHint,
673 label: "&u32", 673 label: "&u32",
674 }, 674 },
675 InlayHint { 675 InlayHint {
676 range: [448; 449), 676 range: 448..449,
677 kind: TypeHint, 677 kind: TypeHint,
678 label: "&u8", 678 label: "&u8",
679 }, 679 },
680 InlayHint { 680 InlayHint {
681 range: [500; 501), 681 range: 500..501,
682 kind: TypeHint, 682 kind: TypeHint,
683 label: "&u8", 683 label: "&u8",
684 }, 684 },
685 InlayHint { 685 InlayHint {
686 range: [543; 544), 686 range: 543..544,
687 kind: TypeHint, 687 kind: TypeHint,
688 label: "&u8", 688 label: "&u8",
689 }, 689 },
@@ -728,57 +728,57 @@ fn main() {
728 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 728 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
729 [ 729 [
730 InlayHint { 730 InlayHint {
731 range: [188; 192), 731 range: 188..192,
732 kind: TypeHint, 732 kind: TypeHint,
733 label: "CustomOption<Test>", 733 label: "CustomOption<Test>",
734 }, 734 },
735 InlayHint { 735 InlayHint {
736 range: [273; 277), 736 range: 273..277,
737 kind: TypeHint, 737 kind: TypeHint,
738 label: "&CustomOption<Test>", 738 label: "&CustomOption<Test>",
739 }, 739 },
740 InlayHint { 740 InlayHint {
741 range: [309; 313), 741 range: 309..313,
742 kind: TypeHint, 742 kind: TypeHint,
743 label: "&Test", 743 label: "&Test",
744 }, 744 },
745 InlayHint { 745 InlayHint {
746 range: [353; 354), 746 range: 353..354,
747 kind: TypeHint, 747 kind: TypeHint,
748 label: "&CustomOption<u32>", 748 label: "&CustomOption<u32>",
749 }, 749 },
750 InlayHint { 750 InlayHint {
751 range: [356; 357), 751 range: 356..357,
752 kind: TypeHint, 752 kind: TypeHint,
753 label: "&u8", 753 label: "&u8",
754 }, 754 },
755 InlayHint { 755 InlayHint {
756 range: [402; 403), 756 range: 402..403,
757 kind: TypeHint, 757 kind: TypeHint,
758 label: "&CustomOption<u32>", 758 label: "&CustomOption<u32>",
759 }, 759 },
760 InlayHint { 760 InlayHint {
761 range: [408; 409), 761 range: 408..409,
762 kind: TypeHint, 762 kind: TypeHint,
763 label: "&u8", 763 label: "&u8",
764 }, 764 },
765 InlayHint { 765 InlayHint {
766 range: [459; 460), 766 range: 459..460,
767 kind: TypeHint, 767 kind: TypeHint,
768 label: "&u32", 768 label: "&u32",
769 }, 769 },
770 InlayHint { 770 InlayHint {
771 range: [466; 467), 771 range: 466..467,
772 kind: TypeHint, 772 kind: TypeHint,
773 label: "&u8", 773 label: "&u8",
774 }, 774 },
775 InlayHint { 775 InlayHint {
776 range: [521; 522), 776 range: 521..522,
777 kind: TypeHint, 777 kind: TypeHint,
778 label: "&u8", 778 label: "&u8",
779 }, 779 },
780 InlayHint { 780 InlayHint {
781 range: [567; 568), 781 range: 567..568,
782 kind: TypeHint, 782 kind: TypeHint,
783 label: "&u8", 783 label: "&u8",
784 }, 784 },
@@ -823,52 +823,52 @@ fn main() {
823 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 823 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
824 [ 824 [
825 InlayHint { 825 InlayHint {
826 range: [252; 256), 826 range: 252..256,
827 kind: TypeHint, 827 kind: TypeHint,
828 label: "CustomOption<Test>", 828 label: "CustomOption<Test>",
829 }, 829 },
830 InlayHint { 830 InlayHint {
831 range: [277; 281), 831 range: 277..281,
832 kind: TypeHint, 832 kind: TypeHint,
833 label: "Test", 833 label: "Test",
834 }, 834 },
835 InlayHint { 835 InlayHint {
836 range: [310; 311), 836 range: 310..311,
837 kind: TypeHint, 837 kind: TypeHint,
838 label: "CustomOption<u32>", 838 label: "CustomOption<u32>",
839 }, 839 },
840 InlayHint { 840 InlayHint {
841 range: [313; 314), 841 range: 313..314,
842 kind: TypeHint, 842 kind: TypeHint,
843 label: "u8", 843 label: "u8",
844 }, 844 },
845 InlayHint { 845 InlayHint {
846 range: [348; 349), 846 range: 348..349,
847 kind: TypeHint, 847 kind: TypeHint,
848 label: "CustomOption<u32>", 848 label: "CustomOption<u32>",
849 }, 849 },
850 InlayHint { 850 InlayHint {
851 range: [354; 355), 851 range: 354..355,
852 kind: TypeHint, 852 kind: TypeHint,
853 label: "u8", 853 label: "u8",
854 }, 854 },
855 InlayHint { 855 InlayHint {
856 range: [394; 395), 856 range: 394..395,
857 kind: TypeHint, 857 kind: TypeHint,
858 label: "u32", 858 label: "u32",
859 }, 859 },
860 InlayHint { 860 InlayHint {
861 range: [401; 402), 861 range: 401..402,
862 kind: TypeHint, 862 kind: TypeHint,
863 label: "u8", 863 label: "u8",
864 }, 864 },
865 InlayHint { 865 InlayHint {
866 range: [445; 446), 866 range: 445..446,
867 kind: TypeHint, 867 kind: TypeHint,
868 label: "u8", 868 label: "u8",
869 }, 869 },
870 InlayHint { 870 InlayHint {
871 range: [480; 481), 871 range: 480..481,
872 kind: TypeHint, 872 kind: TypeHint,
873 label: "u8", 873 label: "u8",
874 }, 874 },
@@ -895,17 +895,17 @@ fn main() {
895 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig { max_length: Some(8), ..Default::default() }).unwrap(), @r###" 895 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig { max_length: Some(8), ..Default::default() }).unwrap(), @r###"
896 [ 896 [
897 InlayHint { 897 InlayHint {
898 range: [74; 75), 898 range: 74..75,
899 kind: TypeHint, 899 kind: TypeHint,
900 label: "Smol<u32>", 900 label: "Smol<u32>",
901 }, 901 },
902 InlayHint { 902 InlayHint {
903 range: [98; 99), 903 range: 98..99,
904 kind: TypeHint, 904 kind: TypeHint,
905 label: "VeryLongOuterName<…>", 905 label: "VeryLongOuterName<…>",
906 }, 906 },
907 InlayHint { 907 InlayHint {
908 range: [137; 138), 908 range: 137..138,
909 kind: TypeHint, 909 kind: TypeHint,
910 label: "Smol<Smol<…>>", 910 label: "Smol<Smol<…>>",
911 }, 911 },
@@ -983,77 +983,77 @@ fn main() {
983 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###" 983 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
984 [ 984 [
985 InlayHint { 985 InlayHint {
986 range: [798; 809), 986 range: 798..809,
987 kind: TypeHint, 987 kind: TypeHint,
988 label: "i32", 988 label: "i32",
989 }, 989 },
990 InlayHint { 990 InlayHint {
991 range: [842; 843), 991 range: 842..843,
992 kind: ParameterHint, 992 kind: ParameterHint,
993 label: "foo", 993 label: "foo",
994 }, 994 },
995 InlayHint { 995 InlayHint {
996 range: [845; 846), 996 range: 845..846,
997 kind: ParameterHint, 997 kind: ParameterHint,
998 label: "bar", 998 label: "bar",
999 }, 999 },
1000 InlayHint { 1000 InlayHint {
1001 range: [848; 855), 1001 range: 848..855,
1002 kind: ParameterHint, 1002 kind: ParameterHint,
1003 label: "msg", 1003 label: "msg",
1004 }, 1004 },
1005 InlayHint { 1005 InlayHint {
1006 range: [860; 871), 1006 range: 860..871,
1007 kind: ParameterHint, 1007 kind: ParameterHint,
1008 label: "last", 1008 label: "last",
1009 }, 1009 },
1010 InlayHint { 1010 InlayHint {
1011 range: [914; 917), 1011 range: 914..917,
1012 kind: ParameterHint, 1012 kind: ParameterHint,
1013 label: "param", 1013 label: "param",
1014 }, 1014 },
1015 InlayHint { 1015 InlayHint {
1016 range: [937; 939), 1016 range: 937..939,
1017 kind: ParameterHint, 1017 kind: ParameterHint,
1018 label: "&self", 1018 label: "&self",
1019 }, 1019 },
1020 InlayHint { 1020 InlayHint {
1021 range: [941; 945), 1021 range: 941..945,
1022 kind: ParameterHint, 1022 kind: ParameterHint,
1023 label: "param", 1023 label: "param",
1024 }, 1024 },
1025 InlayHint { 1025 InlayHint {
1026 range: [980; 989), 1026 range: 980..989,
1027 kind: ParameterHint, 1027 kind: ParameterHint,
1028 label: "file_id", 1028 label: "file_id",
1029 }, 1029 },
1030 InlayHint { 1030 InlayHint {
1031 range: [999; 1012), 1031 range: 999..1012,
1032 kind: ParameterHint, 1032 kind: ParameterHint,
1033 label: "name", 1033 label: "name",
1034 }, 1034 },
1035 InlayHint { 1035 InlayHint {
1036 range: [1022; 1026), 1036 range: 1022..1026,
1037 kind: ParameterHint, 1037 kind: ParameterHint,
1038 label: "focus_range", 1038 label: "focus_range",
1039 }, 1039 },
1040 InlayHint { 1040 InlayHint {
1041 range: [1036; 1048), 1041 range: 1036..1048,
1042 kind: ParameterHint, 1042 kind: ParameterHint,
1043 label: "full_range", 1043 label: "full_range",
1044 }, 1044 },
1045 InlayHint { 1045 InlayHint {
1046 range: [1058; 1071), 1046 range: 1058..1071,
1047 kind: ParameterHint, 1047 kind: ParameterHint,
1048 label: "kind", 1048 label: "kind",
1049 }, 1049 },
1050 InlayHint { 1050 InlayHint {
1051 range: [1081; 1085), 1051 range: 1081..1085,
1052 kind: ParameterHint, 1052 kind: ParameterHint,
1053 label: "docs", 1053 label: "docs",
1054 }, 1054 },
1055 InlayHint { 1055 InlayHint {
1056 range: [1095; 1099), 1056 range: 1095..1099,
1057 kind: ParameterHint, 1057 kind: ParameterHint,
1058 label: "description", 1058 label: "description",
1059 }, 1059 },
@@ -1184,12 +1184,12 @@ fn main() {
1184 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###" 1184 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
1185 [ 1185 [
1186 InlayHint { 1186 InlayHint {
1187 range: [232; 269), 1187 range: 232..269,
1188 kind: ChainingHint, 1188 kind: ChainingHint,
1189 label: "B", 1189 label: "B",
1190 }, 1190 },
1191 InlayHint { 1191 InlayHint {
1192 range: [232; 239), 1192 range: 232..239,
1193 kind: ChainingHint, 1193 kind: ChainingHint,
1194 label: "A", 1194 label: "A",
1195 }, 1195 },
@@ -1238,12 +1238,12 @@ fn main() {
1238 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###" 1238 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
1239 [ 1239 [
1240 InlayHint { 1240 InlayHint {
1241 range: [252; 323), 1241 range: 252..323,
1242 kind: ChainingHint, 1242 kind: ChainingHint,
1243 label: "C", 1243 label: "C",
1244 }, 1244 },
1245 InlayHint { 1245 InlayHint {
1246 range: [252; 300), 1246 range: 252..300,
1247 kind: ChainingHint, 1247 kind: ChainingHint,
1248 label: "B", 1248 label: "B",
1249 }, 1249 },
@@ -1276,12 +1276,12 @@ fn main() {
1276 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###" 1276 assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
1277 [ 1277 [
1278 InlayHint { 1278 InlayHint {
1279 range: [403; 452), 1279 range: 403..452,
1280 kind: ChainingHint, 1280 kind: ChainingHint,
1281 label: "B<X<i32, bool>>", 1281 label: "B<X<i32, bool>>",
1282 }, 1282 },
1283 InlayHint { 1283 InlayHint {
1284 range: [403; 422), 1284 range: 403..422,
1285 kind: ChainingHint, 1285 kind: ChainingHint,
1286 label: "A<X<i32, bool>>", 1286 label: "A<X<i32, bool>>",
1287 }, 1287 },
diff --git a/crates/ra_ide/src/join_lines.rs b/crates/ra_ide/src/join_lines.rs
index 7d70dab9c..fde0bfa98 100644
--- a/crates/ra_ide/src/join_lines.rs
+++ b/crates/ra_ide/src/join_lines.rs
@@ -7,7 +7,7 @@ use ra_syntax::{
7 ast::{self, AstNode, AstToken}, 7 ast::{self, AstNode, AstToken},
8 Direction, NodeOrToken, SourceFile, 8 Direction, NodeOrToken, SourceFile,
9 SyntaxKind::{self, WHITESPACE}, 9 SyntaxKind::{self, WHITESPACE},
10 SyntaxNode, SyntaxToken, TextRange, TextUnit, T, 10 SyntaxNode, SyntaxToken, TextRange, TextSize, T,
11}; 11};
12use ra_text_edit::{TextEdit, TextEditBuilder}; 12use ra_text_edit::{TextEdit, TextEditBuilder};
13 13
@@ -19,7 +19,7 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit {
19 None => return TextEditBuilder::default().finish(), 19 None => return TextEditBuilder::default().finish(),
20 Some(pos) => pos, 20 Some(pos) => pos,
21 }; 21 };
22 TextRange::offset_len(range.start() + pos, TextUnit::of_char('\n')) 22 TextRange::at(range.start() + pos, TextSize::of('\n'))
23 } else { 23 } else {
24 range 24 range
25 }; 25 };
@@ -30,13 +30,13 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit {
30 }; 30 };
31 let mut edit = TextEditBuilder::default(); 31 let mut edit = TextEditBuilder::default();
32 for token in node.descendants_with_tokens().filter_map(|it| it.into_token()) { 32 for token in node.descendants_with_tokens().filter_map(|it| it.into_token()) {
33 let range = match range.intersection(&token.text_range()) { 33 let range = match range.intersect(token.text_range()) {
34 Some(range) => range, 34 Some(range) => range,
35 None => continue, 35 None => continue,
36 } - token.text_range().start(); 36 } - token.text_range().start();
37 let text = token.text(); 37 let text = token.text();
38 for (pos, _) in text[range].bytes().enumerate().filter(|&(_, b)| b == b'\n') { 38 for (pos, _) in text[range].bytes().enumerate().filter(|&(_, b)| b == b'\n') {
39 let pos: TextUnit = (pos as u32).into(); 39 let pos: TextSize = (pos as u32).into();
40 let off = token.text_range().start() + range.start() + pos; 40 let off = token.text_range().start() + range.start() + pos;
41 if !edit.invalidates_offset(off) { 41 if !edit.invalidates_offset(off) {
42 remove_newline(&mut edit, &token, off); 42 remove_newline(&mut edit, &token, off);
@@ -47,16 +47,16 @@ pub fn join_lines(file: &SourceFile, range: TextRange) -> TextEdit {
47 edit.finish() 47 edit.finish()
48} 48}
49 49
50fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextUnit) { 50fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextSize) {
51 if token.kind() != WHITESPACE || token.text().bytes().filter(|&b| b == b'\n').count() != 1 { 51 if token.kind() != WHITESPACE || token.text().bytes().filter(|&b| b == b'\n').count() != 1 {
52 // The node is either the first or the last in the file 52 // The node is either the first or the last in the file
53 let suff = &token.text()[TextRange::from_to( 53 let suff = &token.text()[TextRange::new(
54 offset - token.text_range().start() + TextUnit::of_char('\n'), 54 offset - token.text_range().start() + TextSize::of('\n'),
55 TextUnit::of_str(token.text()), 55 TextSize::of(token.text().as_str()),
56 )]; 56 )];
57 let spaces = suff.bytes().take_while(|&b| b == b' ').count(); 57 let spaces = suff.bytes().take_while(|&b| b == b' ').count();
58 58
59 edit.replace(TextRange::offset_len(offset, ((spaces + 1) as u32).into()), " ".to_string()); 59 edit.replace(TextRange::at(offset, ((spaces + 1) as u32).into()), " ".to_string());
60 return; 60 return;
61 } 61 }
62 62
@@ -65,7 +65,7 @@ fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextU
65 let next = token.next_sibling_or_token().unwrap(); 65 let next = token.next_sibling_or_token().unwrap();
66 if is_trailing_comma(prev.kind(), next.kind()) { 66 if is_trailing_comma(prev.kind(), next.kind()) {
67 // Removes: trailing comma, newline (incl. surrounding whitespace) 67 // Removes: trailing comma, newline (incl. surrounding whitespace)
68 edit.delete(TextRange::from_to(prev.text_range().start(), token.text_range().end())); 68 edit.delete(TextRange::new(prev.text_range().start(), token.text_range().end()));
69 return; 69 return;
70 } 70 }
71 if prev.kind() == T![,] && next.kind() == T!['}'] { 71 if prev.kind() == T![,] && next.kind() == T!['}'] {
@@ -76,7 +76,7 @@ fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextU
76 " " 76 " "
77 }; 77 };
78 edit.replace( 78 edit.replace(
79 TextRange::from_to(prev.text_range().start(), token.text_range().end()), 79 TextRange::new(prev.text_range().start(), token.text_range().end()),
80 space.to_string(), 80 space.to_string(),
81 ); 81 );
82 return; 82 return;
@@ -87,9 +87,9 @@ fn remove_newline(edit: &mut TextEditBuilder, token: &SyntaxToken, offset: TextU
87 next.as_token().cloned().and_then(ast::Comment::cast), 87 next.as_token().cloned().and_then(ast::Comment::cast),
88 ) { 88 ) {
89 // Removes: newline (incl. surrounding whitespace), start of the next comment 89 // Removes: newline (incl. surrounding whitespace), start of the next comment
90 edit.delete(TextRange::from_to( 90 edit.delete(TextRange::new(
91 token.text_range().start(), 91 token.text_range().start(),
92 next.syntax().text_range().start() + TextUnit::of_str(next.prefix()), 92 next.syntax().text_range().start() + TextSize::of(next.prefix()),
93 )); 93 ));
94 return; 94 return;
95 } 95 }
@@ -170,7 +170,7 @@ mod tests {
170 170
171 fn check_join_lines(before: &str, after: &str) { 171 fn check_join_lines(before: &str, after: &str) {
172 check_action(before, after, |file, offset| { 172 check_action(before, after, |file, offset| {
173 let range = TextRange::offset_len(offset, 0.into()); 173 let range = TextRange::empty(offset);
174 let res = join_lines(file, range); 174 let res = join_lines(file, range);
175 Some(res) 175 Some(res)
176 }) 176 })
@@ -420,10 +420,10 @@ fn foo() {
420 check_join_lines( 420 check_join_lines(
421 r" 421 r"
422<|>use ra_syntax::{ 422<|>use ra_syntax::{
423 TextUnit, TextRange, 423 TextSize, TextRange,
424};", 424};",
425 r" 425 r"
426<|>use ra_syntax::{TextUnit, TextRange, 426<|>use ra_syntax::{TextSize, TextRange,
427};", 427};",
428 ); 428 );
429 } 429 }
@@ -434,11 +434,11 @@ fn foo() {
434 check_join_lines( 434 check_join_lines(
435 r" 435 r"
436use ra_syntax::{ 436use ra_syntax::{
437<|> TextUnit, TextRange 437<|> TextSize, TextRange
438};", 438};",
439 r" 439 r"
440use ra_syntax::{ 440use ra_syntax::{
441<|> TextUnit, TextRange};", 441<|> TextSize, TextRange};",
442 ); 442 );
443 } 443 }
444 444
@@ -448,11 +448,11 @@ use ra_syntax::{
448 check_join_lines( 448 check_join_lines(
449 r" 449 r"
450use ra_syntax::{ 450use ra_syntax::{
451<|> TextUnit, TextRange, 451<|> TextSize, TextRange,
452};", 452};",
453 r" 453 r"
454use ra_syntax::{ 454use ra_syntax::{
455<|> TextUnit, TextRange};", 455<|> TextSize, TextRange};",
456 ); 456 );
457 } 457 }
458 458
diff --git a/crates/ra_ide/src/lib.rs b/crates/ra_ide/src/lib.rs
index f692fbaa2..09f602fe1 100644
--- a/crates/ra_ide/src/lib.rs
+++ b/crates/ra_ide/src/lib.rs
@@ -60,7 +60,7 @@ use ra_ide_db::{
60 symbol_index::{self, FileSymbol}, 60 symbol_index::{self, FileSymbol},
61 LineIndexDatabase, 61 LineIndexDatabase,
62}; 62};
63use ra_syntax::{SourceFile, TextRange, TextUnit}; 63use ra_syntax::{SourceFile, TextRange, TextSize};
64 64
65use crate::display::ToNav; 65use crate::display::ToNav;
66 66
@@ -265,7 +265,7 @@ impl Analysis {
265 265
266 /// Returns position of the matching brace (all types of braces are 266 /// Returns position of the matching brace (all types of braces are
267 /// supported). 267 /// supported).
268 pub fn matching_brace(&self, position: FilePosition) -> Cancelable<Option<TextUnit>> { 268 pub fn matching_brace(&self, position: FilePosition) -> Cancelable<Option<TextSize>> {
269 self.with_db(|db| { 269 self.with_db(|db| {
270 let parse = db.parse(position.file_id); 270 let parse = db.parse(position.file_id);
271 let file = parse.tree(); 271 let file = parse.tree();
diff --git a/crates/ra_ide/src/matching_brace.rs b/crates/ra_ide/src/matching_brace.rs
index d1204fac0..b85348706 100644
--- a/crates/ra_ide/src/matching_brace.rs
+++ b/crates/ra_ide/src/matching_brace.rs
@@ -1,8 +1,8 @@
1//! FIXME: write short doc here 1//! FIXME: write short doc here
2 2
3use ra_syntax::{ast::AstNode, SourceFile, SyntaxKind, TextUnit, T}; 3use ra_syntax::{ast::AstNode, SourceFile, SyntaxKind, TextSize, T};
4 4
5pub fn matching_brace(file: &SourceFile, offset: TextUnit) -> Option<TextUnit> { 5pub fn matching_brace(file: &SourceFile, offset: TextSize) -> Option<TextSize> {
6 const BRACES: &[SyntaxKind] = 6 const BRACES: &[SyntaxKind] =
7 &[T!['{'], T!['}'], T!['['], T![']'], T!['('], T![')'], T![<], T![>]]; 7 &[T!['{'], T!['}'], T!['['], T![']'], T!['('], T![')'], T![<], T![>]];
8 let (brace_node, brace_idx) = file 8 let (brace_node, brace_idx) = file
diff --git a/crates/ra_ide/src/parent_module.rs b/crates/ra_ide/src/parent_module.rs
index 958b92bed..aaf4460df 100644
--- a/crates/ra_ide/src/parent_module.rs
+++ b/crates/ra_ide/src/parent_module.rs
@@ -76,7 +76,7 @@ mod tests {
76 ", 76 ",
77 ); 77 );
78 let nav = analysis.parent_module(pos).unwrap().pop().unwrap(); 78 let nav = analysis.parent_module(pos).unwrap().pop().unwrap();
79 nav.assert_match("foo MODULE FileId(1) [0; 8)"); 79 nav.assert_match("foo MODULE FileId(1) 0..8");
80 } 80 }
81 81
82 #[test] 82 #[test]
@@ -95,7 +95,7 @@ mod tests {
95 ", 95 ",
96 ); 96 );
97 let nav = analysis.parent_module(pos).unwrap().pop().unwrap(); 97 let nav = analysis.parent_module(pos).unwrap().pop().unwrap();
98 nav.assert_match("foo MODULE FileId(1) [0; 8)"); 98 nav.assert_match("foo MODULE FileId(1) 0..8");
99 } 99 }
100 100
101 #[test] 101 #[test]
@@ -111,7 +111,7 @@ mod tests {
111 ", 111 ",
112 ); 112 );
113 let nav = analysis.parent_module(pos).unwrap().pop().unwrap(); 113 let nav = analysis.parent_module(pos).unwrap().pop().unwrap();
114 nav.assert_match("baz MODULE FileId(1) [32; 44)"); 114 nav.assert_match("baz MODULE FileId(1) 32..44");
115 } 115 }
116 116
117 #[test] 117 #[test]
diff --git a/crates/ra_ide/src/prime_caches.rs b/crates/ra_ide/src/prime_caches.rs
index 628c989bf..90bf7d25f 100644
--- a/crates/ra_ide/src/prime_caches.rs
+++ b/crates/ra_ide/src/prime_caches.rs
@@ -3,13 +3,10 @@
3//! request takes longer to compute. This modules implemented prepopulating of 3//! request takes longer to compute. This modules implemented prepopulating of
4//! various caches, it's not really advanced at the moment. 4//! various caches, it's not really advanced at the moment.
5 5
6use hir::Semantics;
7
8use crate::{FileId, RootDatabase}; 6use crate::{FileId, RootDatabase};
9 7
10pub(crate) fn prime_caches(db: &RootDatabase, files: Vec<FileId>) { 8pub(crate) fn prime_caches(db: &RootDatabase, files: Vec<FileId>) {
11 let sema = Semantics::new(db);
12 for file in files { 9 for file in files {
13 let _ = sema.to_module_def(file); 10 let _ = crate::syntax_highlighting::highlight(db, file, None);
14 } 11 }
15} 12}
diff --git a/crates/ra_ide/src/references.rs b/crates/ra_ide/src/references.rs
index 7d0544ff4..555ccf295 100644
--- a/crates/ra_ide/src/references.rs
+++ b/crates/ra_ide/src/references.rs
@@ -144,7 +144,7 @@ fn find_name(
144 144
145fn decl_access(def: &Definition, syntax: &SyntaxNode, range: TextRange) -> Option<ReferenceAccess> { 145fn decl_access(def: &Definition, syntax: &SyntaxNode, range: TextRange) -> Option<ReferenceAccess> {
146 match def { 146 match def {
147 Definition::Local(_) | Definition::StructField(_) => {} 147 Definition::Local(_) | Definition::Field(_) => {}
148 _ => return None, 148 _ => return None,
149 }; 149 };
150 150
@@ -214,8 +214,8 @@ mod tests {
214 let refs = get_all_refs(code); 214 let refs = get_all_refs(code);
215 check_result( 215 check_result(
216 refs, 216 refs,
217 "Foo STRUCT_DEF FileId(1) [5; 39) [12; 15) Other", 217 "Foo STRUCT_DEF FileId(1) 5..39 12..15 Other",
218 &["FileId(1) [138; 141) StructLiteral"], 218 &["FileId(1) 138..141 StructLiteral"],
219 ); 219 );
220 } 220 }
221 221
@@ -231,8 +231,8 @@ mod tests {
231 let refs = get_all_refs(code); 231 let refs = get_all_refs(code);
232 check_result( 232 check_result(
233 refs, 233 refs,
234 "Foo STRUCT_DEF FileId(1) [5; 18) [12; 15) Other", 234 "Foo STRUCT_DEF FileId(1) 5..18 12..15 Other",
235 &["FileId(1) [54; 57) Other", "FileId(1) [71; 74) StructLiteral"], 235 &["FileId(1) 54..57 Other", "FileId(1) 71..74 StructLiteral"],
236 ); 236 );
237 } 237 }
238 238
@@ -248,8 +248,8 @@ mod tests {
248 let refs = get_all_refs(code); 248 let refs = get_all_refs(code);
249 check_result( 249 check_result(
250 refs, 250 refs,
251 "Foo STRUCT_DEF FileId(1) [5; 21) [12; 15) Other", 251 "Foo STRUCT_DEF FileId(1) 5..21 12..15 Other",
252 &["FileId(1) [81; 84) StructLiteral"], 252 &["FileId(1) 81..84 StructLiteral"],
253 ); 253 );
254 } 254 }
255 255
@@ -266,8 +266,8 @@ mod tests {
266 let refs = get_all_refs(code); 266 let refs = get_all_refs(code);
267 check_result( 267 check_result(
268 refs, 268 refs,
269 "Foo STRUCT_DEF FileId(1) [5; 21) [12; 15) Other", 269 "Foo STRUCT_DEF FileId(1) 5..21 12..15 Other",
270 &["FileId(1) [71; 74) StructLiteral"], 270 &["FileId(1) 71..74 StructLiteral"],
271 ); 271 );
272 } 272 }
273 273
@@ -289,12 +289,12 @@ mod tests {
289 let refs = get_all_refs(code); 289 let refs = get_all_refs(code);
290 check_result( 290 check_result(
291 refs, 291 refs,
292 "i BIND_PAT FileId(1) [33; 34) Other Write", 292 "i BIND_PAT FileId(1) 33..34 Other Write",
293 &[ 293 &[
294 "FileId(1) [67; 68) Other Write", 294 "FileId(1) 67..68 Other Write",
295 "FileId(1) [71; 72) Other Read", 295 "FileId(1) 71..72 Other Read",
296 "FileId(1) [101; 102) Other Write", 296 "FileId(1) 101..102 Other Write",
297 "FileId(1) [127; 128) Other Write", 297 "FileId(1) 127..128 Other Write",
298 ], 298 ],
299 ); 299 );
300 } 300 }
@@ -315,8 +315,8 @@ mod tests {
315 let refs = get_all_refs(code); 315 let refs = get_all_refs(code);
316 check_result( 316 check_result(
317 refs, 317 refs,
318 "spam BIND_PAT FileId(1) [44; 48) Other", 318 "spam BIND_PAT FileId(1) 44..48 Other",
319 &["FileId(1) [71; 75) Other Read", "FileId(1) [78; 82) Other Read"], 319 &["FileId(1) 71..75 Other Read", "FileId(1) 78..82 Other Read"],
320 ); 320 );
321 } 321 }
322 322
@@ -328,11 +328,7 @@ mod tests {
328 }"#; 328 }"#;
329 329
330 let refs = get_all_refs(code); 330 let refs = get_all_refs(code);
331 check_result( 331 check_result(refs, "i BIND_PAT FileId(1) 12..13 Other", &["FileId(1) 38..39 Other Read"]);
332 refs,
333 "i BIND_PAT FileId(1) [12; 13) Other",
334 &["FileId(1) [38; 39) Other Read"],
335 );
336 } 332 }
337 333
338 #[test] 334 #[test]
@@ -343,11 +339,7 @@ mod tests {
343 }"#; 339 }"#;
344 340
345 let refs = get_all_refs(code); 341 let refs = get_all_refs(code);
346 check_result( 342 check_result(refs, "i BIND_PAT FileId(1) 12..13 Other", &["FileId(1) 38..39 Other Read"]);
347 refs,
348 "i BIND_PAT FileId(1) [12; 13) Other",
349 &["FileId(1) [38; 39) Other Read"],
350 );
351 } 343 }
352 344
353 #[test] 345 #[test]
@@ -366,8 +358,8 @@ mod tests {
366 let refs = get_all_refs(code); 358 let refs = get_all_refs(code);
367 check_result( 359 check_result(
368 refs, 360 refs,
369 "spam RECORD_FIELD_DEF FileId(1) [66; 79) [70; 74) Other", 361 "spam RECORD_FIELD_DEF FileId(1) 66..79 70..74 Other",
370 &["FileId(1) [152; 156) Other Read"], 362 &["FileId(1) 152..156 Other Read"],
371 ); 363 );
372 } 364 }
373 365
@@ -382,7 +374,7 @@ mod tests {
382 "#; 374 "#;
383 375
384 let refs = get_all_refs(code); 376 let refs = get_all_refs(code);
385 check_result(refs, "f FN_DEF FileId(1) [88; 104) [91; 92) Other", &[]); 377 check_result(refs, "f FN_DEF FileId(1) 88..104 91..92 Other", &[]);
386 } 378 }
387 379
388 #[test] 380 #[test]
@@ -397,7 +389,7 @@ mod tests {
397 "#; 389 "#;
398 390
399 let refs = get_all_refs(code); 391 let refs = get_all_refs(code);
400 check_result(refs, "B ENUM_VARIANT FileId(1) [83; 84) [83; 84) Other", &[]); 392 check_result(refs, "B ENUM_VARIANT FileId(1) 83..84 83..84 Other", &[]);
401 } 393 }
402 394
403 #[test] 395 #[test]
@@ -438,8 +430,8 @@ mod tests {
438 let refs = analysis.find_all_refs(pos, None).unwrap().unwrap(); 430 let refs = analysis.find_all_refs(pos, None).unwrap().unwrap();
439 check_result( 431 check_result(
440 refs, 432 refs,
441 "Foo STRUCT_DEF FileId(2) [16; 50) [27; 30) Other", 433 "Foo STRUCT_DEF FileId(2) 16..50 27..30 Other",
442 &["FileId(1) [52; 55) StructLiteral", "FileId(3) [77; 80) StructLiteral"], 434 &["FileId(1) 52..55 StructLiteral", "FileId(3) 77..80 StructLiteral"],
443 ); 435 );
444 } 436 }
445 437
@@ -466,11 +458,7 @@ mod tests {
466 458
467 let (analysis, pos) = analysis_and_position(code); 459 let (analysis, pos) = analysis_and_position(code);
468 let refs = analysis.find_all_refs(pos, None).unwrap().unwrap(); 460 let refs = analysis.find_all_refs(pos, None).unwrap().unwrap();
469 check_result( 461 check_result(refs, "foo SOURCE_FILE FileId(2) 0..35 Other", &["FileId(1) 13..16 Other"]);
470 refs,
471 "foo SOURCE_FILE FileId(2) [0; 35) Other",
472 &["FileId(1) [13; 16) Other"],
473 );
474 } 462 }
475 463
476 #[test] 464 #[test]
@@ -497,8 +485,8 @@ mod tests {
497 let refs = analysis.find_all_refs(pos, None).unwrap().unwrap(); 485 let refs = analysis.find_all_refs(pos, None).unwrap().unwrap();
498 check_result( 486 check_result(
499 refs, 487 refs,
500 "Foo STRUCT_DEF FileId(3) [0; 41) [18; 21) Other", 488 "Foo STRUCT_DEF FileId(3) 0..41 18..21 Other",
501 &["FileId(2) [20; 23) Other", "FileId(2) [46; 49) StructLiteral"], 489 &["FileId(2) 20..23 Other", "FileId(2) 46..49 StructLiteral"],
502 ); 490 );
503 } 491 }
504 492
@@ -525,16 +513,16 @@ mod tests {
525 let refs = analysis.find_all_refs(pos, None).unwrap().unwrap(); 513 let refs = analysis.find_all_refs(pos, None).unwrap().unwrap();
526 check_result( 514 check_result(
527 refs, 515 refs,
528 "quux FN_DEF FileId(1) [18; 34) [25; 29) Other", 516 "quux FN_DEF FileId(1) 18..34 25..29 Other",
529 &["FileId(2) [16; 20) StructLiteral", "FileId(3) [16; 20) StructLiteral"], 517 &["FileId(2) 16..20 StructLiteral", "FileId(3) 16..20 StructLiteral"],
530 ); 518 );
531 519
532 let refs = 520 let refs =
533 analysis.find_all_refs(pos, Some(SearchScope::single_file(bar))).unwrap().unwrap(); 521 analysis.find_all_refs(pos, Some(SearchScope::single_file(bar))).unwrap().unwrap();
534 check_result( 522 check_result(
535 refs, 523 refs,
536 "quux FN_DEF FileId(1) [18; 34) [25; 29) Other", 524 "quux FN_DEF FileId(1) 18..34 25..29 Other",
537 &["FileId(3) [16; 20) StructLiteral"], 525 &["FileId(3) 16..20 StructLiteral"],
538 ); 526 );
539 } 527 }
540 528
@@ -552,8 +540,8 @@ mod tests {
552 let refs = get_all_refs(code); 540 let refs = get_all_refs(code);
553 check_result( 541 check_result(
554 refs, 542 refs,
555 "m1 MACRO_CALL FileId(1) [9; 63) [46; 48) Other", 543 "m1 MACRO_CALL FileId(1) 9..63 46..48 Other",
556 &["FileId(1) [96; 98) StructLiteral", "FileId(1) [114; 116) StructLiteral"], 544 &["FileId(1) 96..98 StructLiteral", "FileId(1) 114..116 StructLiteral"],
557 ); 545 );
558 } 546 }
559 547
@@ -568,8 +556,8 @@ mod tests {
568 let refs = get_all_refs(code); 556 let refs = get_all_refs(code);
569 check_result( 557 check_result(
570 refs, 558 refs,
571 "i BIND_PAT FileId(1) [40; 41) Other Write", 559 "i BIND_PAT FileId(1) 40..41 Other Write",
572 &["FileId(1) [59; 60) Other Write", "FileId(1) [63; 64) Other Read"], 560 &["FileId(1) 59..60 Other Write", "FileId(1) 63..64 Other Read"],
573 ); 561 );
574 } 562 }
575 563
@@ -588,8 +576,8 @@ mod tests {
588 let refs = get_all_refs(code); 576 let refs = get_all_refs(code);
589 check_result( 577 check_result(
590 refs, 578 refs,
591 "f RECORD_FIELD_DEF FileId(1) [32; 38) [32; 33) Other", 579 "f RECORD_FIELD_DEF FileId(1) 32..38 32..33 Other",
592 &["FileId(1) [96; 97) Other Read", "FileId(1) [117; 118) Other Write"], 580 &["FileId(1) 96..97 Other Read", "FileId(1) 117..118 Other Write"],
593 ); 581 );
594 } 582 }
595 583
@@ -602,11 +590,7 @@ mod tests {
602 }"#; 590 }"#;
603 591
604 let refs = get_all_refs(code); 592 let refs = get_all_refs(code);
605 check_result( 593 check_result(refs, "i BIND_PAT FileId(1) 36..37 Other", &["FileId(1) 51..52 Other Write"]);
606 refs,
607 "i BIND_PAT FileId(1) [36; 37) Other",
608 &["FileId(1) [51; 52) Other Write"],
609 );
610 } 594 }
611 595
612 fn get_all_refs(text: &str) -> ReferenceSearchResult { 596 fn get_all_refs(text: &str) -> ReferenceSearchResult {
diff --git a/crates/ra_ide/src/references/rename.rs b/crates/ra_ide/src/references/rename.rs
index 9acc6158a..fd17bc9f2 100644
--- a/crates/ra_ide/src/references/rename.rs
+++ b/crates/ra_ide/src/references/rename.rs
@@ -51,18 +51,15 @@ fn source_edit_from_reference(reference: Reference, new_name: &str) -> SourceFil
51 let mut replacement_text = String::new(); 51 let mut replacement_text = String::new();
52 let file_id = reference.file_range.file_id; 52 let file_id = reference.file_range.file_id;
53 let range = match reference.kind { 53 let range = match reference.kind {
54 ReferenceKind::StructFieldShorthandForField => { 54 ReferenceKind::FieldShorthandForField => {
55 replacement_text.push_str(new_name); 55 replacement_text.push_str(new_name);
56 replacement_text.push_str(": "); 56 replacement_text.push_str(": ");
57 TextRange::from_to( 57 TextRange::new(reference.file_range.range.start(), reference.file_range.range.start())
58 reference.file_range.range.start(),
59 reference.file_range.range.start(),
60 )
61 } 58 }
62 ReferenceKind::StructFieldShorthandForLocal => { 59 ReferenceKind::FieldShorthandForLocal => {
63 replacement_text.push_str(": "); 60 replacement_text.push_str(": ");
64 replacement_text.push_str(new_name); 61 replacement_text.push_str(new_name);
65 TextRange::from_to(reference.file_range.range.end(), reference.file_range.range.end()) 62 TextRange::new(reference.file_range.range.end(), reference.file_range.range.end())
66 } 63 }
67 _ => { 64 _ => {
68 replacement_text.push_str(new_name); 65 replacement_text.push_str(new_name);
@@ -528,7 +525,7 @@ mod tests {
528@r###" 525@r###"
529 Some( 526 Some(
530 RangeInfo { 527 RangeInfo {
531 range: [4; 7), 528 range: 4..7,
532 info: SourceChange { 529 info: SourceChange {
533 label: "rename", 530 label: "rename",
534 source_file_edits: [ 531 source_file_edits: [
@@ -539,7 +536,7 @@ mod tests {
539 edit: TextEdit { 536 edit: TextEdit {
540 atoms: [ 537 atoms: [
541 AtomTextEdit { 538 AtomTextEdit {
542 delete: [4; 7), 539 delete: 4..7,
543 insert: "foo2", 540 insert: "foo2",
544 }, 541 },
545 ], 542 ],
@@ -580,7 +577,7 @@ mod tests {
580 @r###" 577 @r###"
581 Some( 578 Some(
582 RangeInfo { 579 RangeInfo {
583 range: [4; 7), 580 range: 4..7,
584 info: SourceChange { 581 info: SourceChange {
585 label: "rename", 582 label: "rename",
586 source_file_edits: [ 583 source_file_edits: [
@@ -591,7 +588,7 @@ mod tests {
591 edit: TextEdit { 588 edit: TextEdit {
592 atoms: [ 589 atoms: [
593 AtomTextEdit { 590 AtomTextEdit {
594 delete: [4; 7), 591 delete: 4..7,
595 insert: "foo2", 592 insert: "foo2",
596 }, 593 },
597 ], 594 ],
@@ -663,7 +660,7 @@ mod tests {
663@r###" 660@r###"
664 Some( 661 Some(
665 RangeInfo { 662 RangeInfo {
666 range: [8; 11), 663 range: 8..11,
667 info: SourceChange { 664 info: SourceChange {
668 label: "rename", 665 label: "rename",
669 source_file_edits: [ 666 source_file_edits: [
@@ -674,7 +671,7 @@ mod tests {
674 edit: TextEdit { 671 edit: TextEdit {
675 atoms: [ 672 atoms: [
676 AtomTextEdit { 673 AtomTextEdit {
677 delete: [8; 11), 674 delete: 8..11,
678 insert: "foo2", 675 insert: "foo2",
679 }, 676 },
680 ], 677 ],
@@ -687,7 +684,7 @@ mod tests {
687 edit: TextEdit { 684 edit: TextEdit {
688 atoms: [ 685 atoms: [
689 AtomTextEdit { 686 AtomTextEdit {
690 delete: [27; 30), 687 delete: 27..30,
691 insert: "foo2", 688 insert: "foo2",
692 }, 689 },
693 ], 690 ],
diff --git a/crates/ra_ide/src/runnables.rs b/crates/ra_ide/src/runnables.rs
index 05a66e03c..38637c19c 100644
--- a/crates/ra_ide/src/runnables.rs
+++ b/crates/ra_ide/src/runnables.rs
@@ -164,11 +164,11 @@ mod tests {
164 @r###" 164 @r###"
165 [ 165 [
166 Runnable { 166 Runnable {
167 range: [1; 21), 167 range: 1..21,
168 kind: Bin, 168 kind: Bin,
169 }, 169 },
170 Runnable { 170 Runnable {
171 range: [22; 46), 171 range: 22..46,
172 kind: Test { 172 kind: Test {
173 test_id: Path( 173 test_id: Path(
174 "test_foo", 174 "test_foo",
@@ -179,7 +179,7 @@ mod tests {
179 }, 179 },
180 }, 180 },
181 Runnable { 181 Runnable {
182 range: [47; 81), 182 range: 47..81,
183 kind: Test { 183 kind: Test {
184 test_id: Path( 184 test_id: Path(
185 "test_foo", 185 "test_foo",
@@ -211,13 +211,13 @@ mod tests {
211 @r###" 211 @r###"
212 [ 212 [
213 Runnable { 213 Runnable {
214 range: [1; 59), 214 range: 1..59,
215 kind: TestMod { 215 kind: TestMod {
216 path: "test_mod", 216 path: "test_mod",
217 }, 217 },
218 }, 218 },
219 Runnable { 219 Runnable {
220 range: [28; 57), 220 range: 28..57,
221 kind: Test { 221 kind: Test {
222 test_id: Path( 222 test_id: Path(
223 "test_mod::test_foo1", 223 "test_mod::test_foo1",
@@ -251,13 +251,13 @@ mod tests {
251 @r###" 251 @r###"
252 [ 252 [
253 Runnable { 253 Runnable {
254 range: [23; 85), 254 range: 23..85,
255 kind: TestMod { 255 kind: TestMod {
256 path: "foo::test_mod", 256 path: "foo::test_mod",
257 }, 257 },
258 }, 258 },
259 Runnable { 259 Runnable {
260 range: [46; 79), 260 range: 46..79,
261 kind: Test { 261 kind: Test {
262 test_id: Path( 262 test_id: Path(
263 "foo::test_mod::test_foo1", 263 "foo::test_mod::test_foo1",
@@ -293,13 +293,13 @@ mod tests {
293 @r###" 293 @r###"
294 [ 294 [
295 Runnable { 295 Runnable {
296 range: [41; 115), 296 range: 41..115,
297 kind: TestMod { 297 kind: TestMod {
298 path: "foo::bar::test_mod", 298 path: "foo::bar::test_mod",
299 }, 299 },
300 }, 300 },
301 Runnable { 301 Runnable {
302 range: [68; 105), 302 range: 68..105,
303 kind: Test { 303 kind: Test {
304 test_id: Path( 304 test_id: Path(
305 "foo::bar::test_mod::test_foo1", 305 "foo::bar::test_mod::test_foo1",
diff --git a/crates/ra_ide/src/snapshots/highlight_strings.html b/crates/ra_ide/src/snapshots/highlight_strings.html
new file mode 100644
index 000000000..433f2e0c5
--- /dev/null
+++ b/crates/ra_ide/src/snapshots/highlight_strings.html
@@ -0,0 +1,82 @@
1
2<style>
3body { margin: 0; }
4pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padding: 0.4em; }
5
6.lifetime { color: #DFAF8F; font-style: italic; }
7.comment { color: #7F9F7F; }
8.struct, .enum { color: #7CB8BB; }
9.enum_variant { color: #BDE0F3; }
10.string_literal { color: #CC9393; }
11.field { color: #94BFF3; }
12.function { color: #93E0E3; }
13.parameter { color: #94BFF3; }
14.text { color: #DCDCCC; }
15.type { color: #7CB8BB; }
16.builtin_type { color: #8CD0D3; }
17.type_param { color: #DFAF8F; }
18.attribute { color: #94BFF3; }
19.numeric_literal { color: #BFEBBF; }
20.macro { color: #94BFF3; }
21.module { color: #AFD8AF; }
22.variable { color: #DCDCCC; }
23.mutable { text-decoration: underline; }
24
25.keyword { color: #F0DFAF; font-weight: bold; }
26.keyword.unsafe { color: #BC8383; font-weight: bold; }
27.control { font-style: italic; }
28</style>
29<pre><code><span class="macro">macro_rules!</span> println {
30 ($($arg:tt)*) =&gt; ({
31 $<span class="keyword">crate</span>::io::_print($<span class="keyword">crate</span>::format_args_nl!($($arg)*));
32 })
33}
34#[rustc_builtin_macro]
35<span class="macro">macro_rules!</span> format_args_nl {
36 ($fmt:expr) =&gt; {{ <span class="comment">/* compiler built-in */</span> }};
37 ($fmt:expr, $($args:tt)*) =&gt; {{ <span class="comment">/* compiler built-in */</span> }};
38}
39
40<span class="keyword">fn</span> <span class="function declaration">main</span>() {
41 <span class="comment">// from https://doc.rust-lang.org/std/fmt/index.html</span>
42 <span class="macro">println!</span>(<span class="string_literal">"Hello"</span>); <span class="comment">// =&gt; "Hello"</span>
43 <span class="macro">println!</span>(<span class="string_literal">"Hello, </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="string_literal">"world"</span>); <span class="comment">// =&gt; "Hello, world!"</span>
44 <span class="macro">println!</span>(<span class="string_literal">"The number is </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="numeric_literal">1</span>); <span class="comment">// =&gt; "The number is 1"</span>
45 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="attribute">:</span><span class="attribute">?</span><span class="attribute">}</span><span class="string_literal">"</span>, (<span class="numeric_literal">3</span>, <span class="numeric_literal">4</span>)); <span class="comment">// =&gt; "(3, 4)"</span>
46 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="variable">value</span><span class="attribute">}</span><span class="string_literal">"</span>, value=<span class="numeric_literal">4</span>); <span class="comment">// =&gt; "4"</span>
47 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal"> </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="numeric_literal">1</span>, <span class="numeric_literal">2</span>); <span class="comment">// =&gt; "1 2"</span>
48 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="attribute">:</span><span class="numeric_literal">0</span><span class="numeric_literal">4</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="numeric_literal">42</span>); <span class="comment">// =&gt; "0042" with leading zerosV</span>
49 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="numeric_literal">1</span><span class="attribute">}</span><span class="string_literal"> </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal"> </span><span class="attribute">{</span><span class="numeric_literal">0</span><span class="attribute">}</span><span class="string_literal"> </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="numeric_literal">1</span>, <span class="numeric_literal">2</span>); <span class="comment">// =&gt; "2 1 1 2"</span>
50 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="variable">argument</span><span class="attribute">}</span><span class="string_literal">"</span>, argument = <span class="string_literal">"test"</span>); <span class="comment">// =&gt; "test"</span>
51 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="variable">name</span><span class="attribute">}</span><span class="string_literal"> </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="numeric_literal">1</span>, name = <span class="numeric_literal">2</span>); <span class="comment">// =&gt; "2 1"</span>
52 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="variable">a</span><span class="attribute">}</span><span class="string_literal"> </span><span class="attribute">{</span><span class="variable">c</span><span class="attribute">}</span><span class="string_literal"> </span><span class="attribute">{</span><span class="variable">b</span><span class="attribute">}</span><span class="string_literal">"</span>, a=<span class="string_literal">"a"</span>, b=<span class="char_literal">'b'</span>, c=<span class="numeric_literal">3</span>); <span class="comment">// =&gt; "a 3 b"</span>
53 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="numeric_literal">5</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="string_literal">"x"</span>);
54 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="numeric_literal">1</span><span class="attribute">$</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="string_literal">"x"</span>, <span class="numeric_literal">5</span>);
55 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="numeric_literal">1</span><span class="attribute">:</span><span class="numeric_literal">0</span><span class="attribute">$</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="numeric_literal">5</span>, <span class="string_literal">"x"</span>);
56 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="variable">width</span><span class="attribute">$</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="string_literal">"x"</span>, width = <span class="numeric_literal">5</span>);
57 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="attribute">&lt;</span><span class="numeric_literal">5</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="string_literal">"x"</span>);
58 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="attribute">-</span><span class="attribute">&lt;</span><span class="numeric_literal">5</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="string_literal">"x"</span>);
59 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="attribute">^</span><span class="numeric_literal">5</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="string_literal">"x"</span>);
60 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="attribute">&gt;</span><span class="numeric_literal">5</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="string_literal">"x"</span>);
61 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="attribute">+</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="numeric_literal">5</span>);
62 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="attribute">:</span><span class="attribute">#</span><span class="variable">x</span><span class="string_literal">}!"</span>, <span class="numeric_literal">27</span>);
63 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="numeric_literal">0</span><span class="numeric_literal">5</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="numeric_literal">5</span>);
64 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">:</span><span class="numeric_literal">0</span><span class="numeric_literal">5</span><span class="attribute">}</span><span class="string_literal">!"</span>, -<span class="numeric_literal">5</span>);
65 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="attribute">:</span><span class="attribute">#</span><span class="numeric_literal">0</span><span class="numeric_literal">10</span><span class="variable">x</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="numeric_literal">27</span>);
66 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="numeric_literal">0</span><span class="attribute">}</span><span class="string_literal"> is </span><span class="attribute">{</span><span class="numeric_literal">1</span><span class="attribute">:</span><span class="attribute">.</span><span class="numeric_literal">5</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="string_literal">"x"</span>, <span class="numeric_literal">0.01</span>);
67 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="numeric_literal">1</span><span class="attribute">}</span><span class="string_literal"> is </span><span class="attribute">{</span><span class="numeric_literal">2</span><span class="attribute">:</span><span class="attribute">.</span><span class="numeric_literal">0</span><span class="attribute">$</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="numeric_literal">5</span>, <span class="string_literal">"x"</span>, <span class="numeric_literal">0.01</span>);
68 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="numeric_literal">0</span><span class="attribute">}</span><span class="string_literal"> is </span><span class="attribute">{</span><span class="numeric_literal">2</span><span class="attribute">:</span><span class="attribute">.</span><span class="numeric_literal">1</span><span class="attribute">$</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="string_literal">"x"</span>, <span class="numeric_literal">5</span>, <span class="numeric_literal">0.01</span>);
69 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal"> is </span><span class="attribute">{</span><span class="attribute">:</span><span class="attribute">.</span><span class="attribute">*</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="string_literal">"x"</span>, <span class="numeric_literal">5</span>, <span class="numeric_literal">0.01</span>);
70 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal"> is </span><span class="attribute">{</span><span class="numeric_literal">2</span><span class="attribute">:</span><span class="attribute">.</span><span class="attribute">*</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="string_literal">"x"</span>, <span class="numeric_literal">5</span>, <span class="numeric_literal">0.01</span>);
71 <span class="macro">println!</span>(<span class="string_literal">"Hello </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal"> is </span><span class="attribute">{</span><span class="variable">number</span><span class="attribute">:</span><span class="attribute">.</span><span class="variable">prec</span><span class="attribute">$</span><span class="attribute">}</span><span class="string_literal">"</span>, <span class="string_literal">"x"</span>, prec = <span class="numeric_literal">5</span>, number = <span class="numeric_literal">0.01</span>);
72 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal">, `</span><span class="attribute">{</span><span class="variable">name</span><span class="attribute">:</span><span class="attribute">.</span><span class="attribute">*</span><span class="attribute">}</span><span class="string_literal">` has 3 fractional digits"</span>, <span class="string_literal">"Hello"</span>, <span class="numeric_literal">3</span>, name=<span class="numeric_literal">1234.56</span>);
73 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal">, `</span><span class="attribute">{</span><span class="variable">name</span><span class="attribute">:</span><span class="attribute">.</span><span class="attribute">*</span><span class="attribute">}</span><span class="string_literal">` has 3 characters"</span>, <span class="string_literal">"Hello"</span>, <span class="numeric_literal">3</span>, name=<span class="string_literal">"1234.56"</span>);
74 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal">, `</span><span class="attribute">{</span><span class="variable">name</span><span class="attribute">:</span><span class="attribute">&gt;</span><span class="numeric_literal">8</span><span class="attribute">.</span><span class="attribute">*</span><span class="attribute">}</span><span class="string_literal">` has 3 right-aligned characters"</span>, <span class="string_literal">"Hello"</span>, <span class="numeric_literal">3</span>, name=<span class="string_literal">"1234.56"</span>);
75 <span class="macro">println!</span>(<span class="string_literal">"Hello {{}}"</span>);
76 <span class="macro">println!</span>(<span class="string_literal">"{{ Hello"</span>);
77
78 <span class="macro">println!</span>(<span class="string_literal">r"Hello, </span><span class="attribute">{</span><span class="attribute">}</span><span class="string_literal">!"</span>, <span class="string_literal">"world"</span>);
79
80 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="variable">\x41</span><span class="attribute">}</span><span class="string_literal">"</span>, A = <span class="numeric_literal">92</span>);
81 <span class="macro">println!</span>(<span class="string_literal">"</span><span class="attribute">{</span><span class="variable">ничоси</span><span class="attribute">}</span><span class="string_literal">"</span>, ничоси = <span class="numeric_literal">92</span>);
82}</code></pre> \ No newline at end of file
diff --git a/crates/ra_ide/src/source_change.rs b/crates/ra_ide/src/source_change.rs
index f5f7f8807..71b0e8f75 100644
--- a/crates/ra_ide/src/source_change.rs
+++ b/crates/ra_ide/src/source_change.rs
@@ -6,7 +6,7 @@
6use ra_db::RelativePathBuf; 6use ra_db::RelativePathBuf;
7use ra_text_edit::TextEdit; 7use ra_text_edit::TextEdit;
8 8
9use crate::{FileId, FilePosition, SourceRootId, TextUnit}; 9use crate::{FileId, FilePosition, SourceRootId, TextSize};
10 10
11#[derive(Debug)] 11#[derive(Debug)]
12pub struct SourceChange { 12pub struct SourceChange {
@@ -104,7 +104,7 @@ pub enum FileSystemEdit {
104pub(crate) struct SingleFileChange { 104pub(crate) struct SingleFileChange {
105 pub label: String, 105 pub label: String,
106 pub edit: TextEdit, 106 pub edit: TextEdit,
107 pub cursor_position: Option<TextUnit>, 107 pub cursor_position: Option<TextSize>,
108} 108}
109 109
110impl SingleFileChange { 110impl SingleFileChange {
diff --git a/crates/ra_ide/src/syntax_highlighting.rs b/crates/ra_ide/src/syntax_highlighting.rs
index d9912155b..be0f8c827 100644
--- a/crates/ra_ide/src/syntax_highlighting.rs
+++ b/crates/ra_ide/src/syntax_highlighting.rs
@@ -12,7 +12,7 @@ use ra_ide_db::{
12}; 12};
13use ra_prof::profile; 13use ra_prof::profile;
14use ra_syntax::{ 14use ra_syntax::{
15 ast::{self, HasQuotes, HasStringValue}, 15 ast::{self, HasFormatSpecifier, HasQuotes, HasStringValue},
16 AstNode, AstToken, Direction, NodeOrToken, SyntaxElement, 16 AstNode, AstToken, Direction, NodeOrToken, SyntaxElement,
17 SyntaxKind::*, 17 SyntaxKind::*,
18 SyntaxToken, TextRange, WalkEvent, T, 18 SyntaxToken, TextRange, WalkEvent, T,
@@ -21,6 +21,7 @@ use rustc_hash::FxHashMap;
21 21
22use crate::{call_info::ActiveParameter, Analysis, FileId}; 22use crate::{call_info::ActiveParameter, Analysis, FileId};
23 23
24use ast::FormatSpecifier;
24pub(crate) use html::highlight_as_html; 25pub(crate) use html::highlight_as_html;
25pub use tags::{Highlight, HighlightModifier, HighlightModifiers, HighlightTag}; 26pub use tags::{Highlight, HighlightModifier, HighlightModifiers, HighlightTag};
26 27
@@ -31,6 +32,81 @@ pub struct HighlightedRange {
31 pub binding_hash: Option<u64>, 32 pub binding_hash: Option<u64>,
32} 33}
33 34
35#[derive(Debug)]
36struct HighlightedRangeStack {
37 stack: Vec<Vec<HighlightedRange>>,
38}
39
40/// We use a stack to implement the flattening logic for the highlighted
41/// syntax ranges.
42impl HighlightedRangeStack {
43 fn new() -> Self {
44 Self { stack: vec![Vec::new()] }
45 }
46
47 fn push(&mut self) {
48 self.stack.push(Vec::new());
49 }
50
51 /// Flattens the highlighted ranges.
52 ///
53 /// For example `#[cfg(feature = "foo")]` contains the nested ranges:
54 /// 1) parent-range: Attribute [0, 23)
55 /// 2) child-range: String [16, 21)
56 ///
57 /// The following code implements the flattening, for our example this results to:
58 /// `[Attribute [0, 16), String [16, 21), Attribute [21, 23)]`
59 fn pop(&mut self) {
60 let children = self.stack.pop().unwrap();
61 let prev = self.stack.last_mut().unwrap();
62 let needs_flattening = !children.is_empty()
63 && !prev.is_empty()
64 && prev.last().unwrap().range.contains_range(children.first().unwrap().range);
65 if !needs_flattening {
66 prev.extend(children);
67 } else {
68 let mut parent = prev.pop().unwrap();
69 for ele in children {
70 assert!(parent.range.contains_range(ele.range));
71 let mut cloned = parent.clone();
72 parent.range = TextRange::new(parent.range.start(), ele.range.start());
73 cloned.range = TextRange::new(ele.range.end(), cloned.range.end());
74 if !parent.range.is_empty() {
75 prev.push(parent);
76 }
77 prev.push(ele);
78 parent = cloned;
79 }
80 if !parent.range.is_empty() {
81 prev.push(parent);
82 }
83 }
84 }
85
86 fn add(&mut self, range: HighlightedRange) {
87 self.stack
88 .last_mut()
89 .expect("during DFS traversal, the stack must not be empty")
90 .push(range)
91 }
92
93 fn flattened(mut self) -> Vec<HighlightedRange> {
94 assert_eq!(
95 self.stack.len(),
96 1,
97 "after DFS traversal, the stack should only contain a single element"
98 );
99 let mut res = self.stack.pop().unwrap();
100 res.sort_by_key(|range| range.range.start());
101 // Check that ranges are sorted and disjoint
102 assert!(res
103 .iter()
104 .zip(res.iter().skip(1))
105 .all(|(left, right)| left.range.end() <= right.range.start()));
106 res
107 }
108}
109
34pub(crate) fn highlight( 110pub(crate) fn highlight(
35 db: &RootDatabase, 111 db: &RootDatabase,
36 file_id: FileId, 112 file_id: FileId,
@@ -57,52 +133,18 @@ pub(crate) fn highlight(
57 let mut bindings_shadow_count: FxHashMap<Name, u32> = FxHashMap::default(); 133 let mut bindings_shadow_count: FxHashMap<Name, u32> = FxHashMap::default();
58 // We use a stack for the DFS traversal below. 134 // We use a stack for the DFS traversal below.
59 // When we leave a node, the we use it to flatten the highlighted ranges. 135 // When we leave a node, the we use it to flatten the highlighted ranges.
60 let mut res: Vec<Vec<HighlightedRange>> = vec![Vec::new()]; 136 let mut stack = HighlightedRangeStack::new();
61 137
62 let mut current_macro_call: Option<ast::MacroCall> = None; 138 let mut current_macro_call: Option<ast::MacroCall> = None;
139 let mut format_string: Option<SyntaxElement> = None;
63 140
64 // Walk all nodes, keeping track of whether we are inside a macro or not. 141 // Walk all nodes, keeping track of whether we are inside a macro or not.
65 // If in macro, expand it first and highlight the expanded code. 142 // If in macro, expand it first and highlight the expanded code.
66 for event in root.preorder_with_tokens() { 143 for event in root.preorder_with_tokens() {
67 match &event { 144 match &event {
68 WalkEvent::Enter(_) => res.push(Vec::new()), 145 WalkEvent::Enter(_) => stack.push(),
69 WalkEvent::Leave(_) => { 146 WalkEvent::Leave(_) => stack.pop(),
70 /* Flattens the highlighted ranges.
71 *
72 * For example `#[cfg(feature = "foo")]` contains the nested ranges:
73 * 1) parent-range: Attribute [0, 23)
74 * 2) child-range: String [16, 21)
75 *
76 * The following code implements the flattening, for our example this results to:
77 * `[Attribute [0, 16), String [16, 21), Attribute [21, 23)]`
78 */
79 let children = res.pop().unwrap();
80 let prev = res.last_mut().unwrap();
81 let needs_flattening = !children.is_empty()
82 && !prev.is_empty()
83 && children.first().unwrap().range.is_subrange(&prev.last().unwrap().range);
84 if !needs_flattening {
85 prev.extend(children);
86 } else {
87 let mut parent = prev.pop().unwrap();
88 for ele in children {
89 assert!(ele.range.is_subrange(&parent.range));
90 let mut cloned = parent.clone();
91 parent.range = TextRange::from_to(parent.range.start(), ele.range.start());
92 cloned.range = TextRange::from_to(ele.range.end(), cloned.range.end());
93 if !parent.range.is_empty() {
94 prev.push(parent);
95 }
96 prev.push(ele);
97 parent = cloned;
98 }
99 if !parent.range.is_empty() {
100 prev.push(parent);
101 }
102 }
103 }
104 }; 147 };
105 let current = res.last_mut().expect("during DFS traversal, the stack must not be empty");
106 148
107 let event_range = match &event { 149 let event_range = match &event {
108 WalkEvent::Enter(it) => it.text_range(), 150 WalkEvent::Enter(it) => it.text_range(),
@@ -110,7 +152,7 @@ pub(crate) fn highlight(
110 }; 152 };
111 153
112 // Element outside of the viewport, no need to highlight 154 // Element outside of the viewport, no need to highlight
113 if range_to_highlight.intersection(&event_range).is_none() { 155 if range_to_highlight.intersect(event_range).is_none() {
114 continue; 156 continue;
115 } 157 }
116 158
@@ -119,7 +161,7 @@ pub(crate) fn highlight(
119 WalkEvent::Enter(Some(mc)) => { 161 WalkEvent::Enter(Some(mc)) => {
120 current_macro_call = Some(mc.clone()); 162 current_macro_call = Some(mc.clone());
121 if let Some(range) = macro_call_range(&mc) { 163 if let Some(range) = macro_call_range(&mc) {
122 current.push(HighlightedRange { 164 stack.add(HighlightedRange {
123 range, 165 range,
124 highlight: HighlightTag::Macro.into(), 166 highlight: HighlightTag::Macro.into(),
125 binding_hash: None, 167 binding_hash: None,
@@ -130,6 +172,7 @@ pub(crate) fn highlight(
130 WalkEvent::Leave(Some(mc)) => { 172 WalkEvent::Leave(Some(mc)) => {
131 assert!(current_macro_call == Some(mc)); 173 assert!(current_macro_call == Some(mc));
132 current_macro_call = None; 174 current_macro_call = None;
175 format_string = None;
133 continue; 176 continue;
134 } 177 }
135 _ => (), 178 _ => (),
@@ -150,6 +193,30 @@ pub(crate) fn highlight(
150 }; 193 };
151 let token = sema.descend_into_macros(token.clone()); 194 let token = sema.descend_into_macros(token.clone());
152 let parent = token.parent(); 195 let parent = token.parent();
196
197 // Check if macro takes a format string and remember it for highlighting later.
198 // The macros that accept a format string expand to a compiler builtin macros
199 // `format_args` and `format_args_nl`.
200 if let Some(fmt_macro_call) = parent.parent().and_then(ast::MacroCall::cast) {
201 if let Some(name) =
202 fmt_macro_call.path().and_then(|p| p.segment()).and_then(|s| s.name_ref())
203 {
204 match name.text().as_str() {
205 "format_args" | "format_args_nl" => {
206 format_string = parent
207 .children_with_tokens()
208 .filter(|t| t.kind() != WHITESPACE)
209 .nth(1)
210 .filter(|e| {
211 ast::String::can_cast(e.kind())
212 || ast::RawString::can_cast(e.kind())
213 })
214 }
215 _ => {}
216 }
217 }
218 }
219
153 // We only care Name and Name_ref 220 // We only care Name and Name_ref
154 match (token.kind(), parent.kind()) { 221 match (token.kind(), parent.kind()) {
155 (IDENT, NAME) | (IDENT, NAME_REF) => parent.into(), 222 (IDENT, NAME) | (IDENT, NAME_REF) => parent.into(),
@@ -161,27 +228,72 @@ pub(crate) fn highlight(
161 228
162 if let Some(token) = element.as_token().cloned().and_then(ast::RawString::cast) { 229 if let Some(token) = element.as_token().cloned().and_then(ast::RawString::cast) {
163 let expanded = element_to_highlight.as_token().unwrap().clone(); 230 let expanded = element_to_highlight.as_token().unwrap().clone();
164 if highlight_injection(current, &sema, token, expanded).is_some() { 231 if highlight_injection(&mut stack, &sema, token, expanded).is_some() {
165 continue; 232 continue;
166 } 233 }
167 } 234 }
168 235
236 let is_format_string = format_string.as_ref() == Some(&element_to_highlight);
237
169 if let Some((highlight, binding_hash)) = 238 if let Some((highlight, binding_hash)) =
170 highlight_element(&sema, &mut bindings_shadow_count, element_to_highlight) 239 highlight_element(&sema, &mut bindings_shadow_count, element_to_highlight.clone())
171 { 240 {
172 current.push(HighlightedRange { range, highlight, binding_hash }); 241 stack.add(HighlightedRange { range, highlight, binding_hash });
242 if let Some(string) =
243 element_to_highlight.as_token().cloned().and_then(ast::String::cast)
244 {
245 stack.push();
246 if is_format_string {
247 string.lex_format_specifier(|piece_range, kind| {
248 if let Some(highlight) = highlight_format_specifier(kind) {
249 stack.add(HighlightedRange {
250 range: piece_range + range.start(),
251 highlight: highlight.into(),
252 binding_hash: None,
253 });
254 }
255 });
256 }
257 stack.pop();
258 } else if let Some(string) =
259 element_to_highlight.as_token().cloned().and_then(ast::RawString::cast)
260 {
261 stack.push();
262 if is_format_string {
263 string.lex_format_specifier(|piece_range, kind| {
264 if let Some(highlight) = highlight_format_specifier(kind) {
265 stack.add(HighlightedRange {
266 range: piece_range + range.start(),
267 highlight: highlight.into(),
268 binding_hash: None,
269 });
270 }
271 });
272 }
273 stack.pop();
274 }
173 } 275 }
174 } 276 }
175 277
176 assert_eq!(res.len(), 1, "after DFS traversal, the stack should only contain a single element"); 278 stack.flattened()
177 let mut res = res.pop().unwrap(); 279}
178 res.sort_by_key(|range| range.range.start()); 280
179 // Check that ranges are sorted and disjoint 281fn highlight_format_specifier(kind: FormatSpecifier) -> Option<HighlightTag> {
180 assert!(res 282 Some(match kind {
181 .iter() 283 FormatSpecifier::Open
182 .zip(res.iter().skip(1)) 284 | FormatSpecifier::Close
183 .all(|(left, right)| left.range.end() <= right.range.start())); 285 | FormatSpecifier::Colon
184 res 286 | FormatSpecifier::Fill
287 | FormatSpecifier::Align
288 | FormatSpecifier::Sign
289 | FormatSpecifier::NumberSign
290 | FormatSpecifier::DollarSign
291 | FormatSpecifier::Dot
292 | FormatSpecifier::Asterisk
293 | FormatSpecifier::QuestionMark => HighlightTag::Attribute,
294 FormatSpecifier::Integer | FormatSpecifier::Zero => HighlightTag::NumericLiteral,
295 FormatSpecifier::Identifier => HighlightTag::Local,
296 })
185} 297}
186 298
187fn macro_call_range(macro_call: &ast::MacroCall) -> Option<TextRange> { 299fn macro_call_range(macro_call: &ast::MacroCall) -> Option<TextRange> {
@@ -197,7 +309,7 @@ fn macro_call_range(macro_call: &ast::MacroCall) -> Option<TextRange> {
197 } 309 }
198 } 310 }
199 311
200 Some(TextRange::from_to(range_start, range_end)) 312 Some(TextRange::new(range_start, range_end))
201} 313}
202 314
203fn highlight_element( 315fn highlight_element(
@@ -310,7 +422,7 @@ fn highlight_element(
310fn highlight_name(db: &RootDatabase, def: Definition) -> Highlight { 422fn highlight_name(db: &RootDatabase, def: Definition) -> Highlight {
311 match def { 423 match def {
312 Definition::Macro(_) => HighlightTag::Macro, 424 Definition::Macro(_) => HighlightTag::Macro,
313 Definition::StructField(_) => HighlightTag::Field, 425 Definition::Field(_) => HighlightTag::Field,
314 Definition::ModuleDef(def) => match def { 426 Definition::ModuleDef(def) => match def {
315 hir::ModuleDef::Module(_) => HighlightTag::Module, 427 hir::ModuleDef::Module(_) => HighlightTag::Module,
316 hir::ModuleDef::Function(_) => HighlightTag::Function, 428 hir::ModuleDef::Function(_) => HighlightTag::Function,
@@ -359,7 +471,7 @@ fn highlight_name_by_syntax(name: ast::Name) -> Highlight {
359} 471}
360 472
361fn highlight_injection( 473fn highlight_injection(
362 acc: &mut Vec<HighlightedRange>, 474 acc: &mut HighlightedRangeStack,
363 sema: &Semantics<RootDatabase>, 475 sema: &Semantics<RootDatabase>,
364 literal: ast::RawString, 476 literal: ast::RawString,
365 expanded: SyntaxToken, 477 expanded: SyntaxToken,
@@ -372,7 +484,7 @@ fn highlight_injection(
372 let (analysis, tmp_file_id) = Analysis::from_single_file(value); 484 let (analysis, tmp_file_id) = Analysis::from_single_file(value);
373 485
374 if let Some(range) = literal.open_quote_text_range() { 486 if let Some(range) = literal.open_quote_text_range() {
375 acc.push(HighlightedRange { 487 acc.add(HighlightedRange {
376 range, 488 range,
377 highlight: HighlightTag::StringLiteral.into(), 489 highlight: HighlightTag::StringLiteral.into(),
378 binding_hash: None, 490 binding_hash: None,
@@ -382,12 +494,12 @@ fn highlight_injection(
382 for mut h in analysis.highlight(tmp_file_id).unwrap() { 494 for mut h in analysis.highlight(tmp_file_id).unwrap() {
383 if let Some(r) = literal.map_range_up(h.range) { 495 if let Some(r) = literal.map_range_up(h.range) {
384 h.range = r; 496 h.range = r;
385 acc.push(h) 497 acc.add(h)
386 } 498 }
387 } 499 }
388 500
389 if let Some(range) = literal.close_quote_text_range() { 501 if let Some(range) = literal.close_quote_text_range() {
390 acc.push(HighlightedRange { 502 acc.add(HighlightedRange {
391 range, 503 range,
392 highlight: HighlightTag::StringLiteral.into(), 504 highlight: HighlightTag::StringLiteral.into(),
393 binding_hash: None, 505 binding_hash: None,
diff --git a/crates/ra_ide/src/syntax_highlighting/html.rs b/crates/ra_ide/src/syntax_highlighting/html.rs
index 4496529a1..010db4017 100644
--- a/crates/ra_ide/src/syntax_highlighting/html.rs
+++ b/crates/ra_ide/src/syntax_highlighting/html.rs
@@ -1,11 +1,9 @@
1//! Renders a bit of code as HTML. 1//! Renders a bit of code as HTML.
2 2
3use ra_db::SourceDatabase; 3use ra_db::SourceDatabase;
4use ra_syntax::{AstNode, TextUnit}; 4use ra_syntax::{AstNode, TextRange, TextSize};
5 5
6use crate::{FileId, RootDatabase}; 6use crate::{syntax_highlighting::highlight, FileId, RootDatabase};
7
8use super::highlight;
9 7
10pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: bool) -> String { 8pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: bool) -> String {
11 let parse = db.parse(file_id); 9 let parse = db.parse(file_id);
@@ -23,17 +21,17 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo
23 21
24 let ranges = highlight(db, file_id, None); 22 let ranges = highlight(db, file_id, None);
25 let text = parse.tree().syntax().to_string(); 23 let text = parse.tree().syntax().to_string();
26 let mut prev_pos = TextUnit::from(0); 24 let mut prev_pos = TextSize::from(0);
27 let mut buf = String::new(); 25 let mut buf = String::new();
28 buf.push_str(&STYLE); 26 buf.push_str(&STYLE);
29 buf.push_str("<pre><code>"); 27 buf.push_str("<pre><code>");
30 for range in &ranges { 28 for range in &ranges {
31 if range.range.start() > prev_pos { 29 if range.range.start() > prev_pos {
32 let curr = &text[prev_pos.to_usize()..range.range.start().to_usize()]; 30 let curr = &text[TextRange::new(prev_pos, range.range.start())];
33 let text = html_escape(curr); 31 let text = html_escape(curr);
34 buf.push_str(&text); 32 buf.push_str(&text);
35 } 33 }
36 let curr = &text[range.range.start().to_usize()..range.range.end().to_usize()]; 34 let curr = &text[TextRange::new(range.range.start(), range.range.end())];
37 35
38 let class = range.highlight.to_string().replace('.', " "); 36 let class = range.highlight.to_string().replace('.', " ");
39 let color = match (rainbow, range.binding_hash) { 37 let color = match (rainbow, range.binding_hash) {
@@ -47,7 +45,7 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo
47 prev_pos = range.range.end(); 45 prev_pos = range.range.end();
48 } 46 }
49 // Add the remaining (non-highlighted) text 47 // Add the remaining (non-highlighted) text
50 let curr = &text[prev_pos.to_usize()..]; 48 let curr = &text[TextRange::new(prev_pos, TextSize::of(&text))];
51 let text = html_escape(curr); 49 let text = html_escape(curr);
52 buf.push_str(&text); 50 buf.push_str(&text);
53 buf.push_str("</code></pre>"); 51 buf.push_str("</code></pre>");
diff --git a/crates/ra_ide/src/syntax_highlighting/tests.rs b/crates/ra_ide/src/syntax_highlighting/tests.rs
index 73611e23a..d2926ba78 100644
--- a/crates/ra_ide/src/syntax_highlighting/tests.rs
+++ b/crates/ra_ide/src/syntax_highlighting/tests.rs
@@ -126,7 +126,7 @@ fn test_ranges() {
126 126
127 // The "x" 127 // The "x"
128 let highlights = &analysis 128 let highlights = &analysis
129 .highlight_range(FileRange { file_id, range: TextRange::offset_len(82.into(), 1.into()) }) 129 .highlight_range(FileRange { file_id, range: TextRange::at(82.into(), 1.into()) })
130 .unwrap(); 130 .unwrap();
131 131
132 assert_eq!(&highlights[0].highlight.to_string(), "field.declaration"); 132 assert_eq!(&highlights[0].highlight.to_string(), "field.declaration");
@@ -168,3 +168,73 @@ macro_rules! test {}
168 ); 168 );
169 let _ = analysis.highlight(file_id).unwrap(); 169 let _ = analysis.highlight(file_id).unwrap();
170} 170}
171
172#[test]
173fn test_string_highlighting() {
174 // The format string detection is based on macro-expansion,
175 // thus, we have to copy the macro definition from `std`
176 let (analysis, file_id) = single_file(
177 r#"
178macro_rules! println {
179 ($($arg:tt)*) => ({
180 $crate::io::_print($crate::format_args_nl!($($arg)*));
181 })
182}
183#[rustc_builtin_macro]
184macro_rules! format_args_nl {
185 ($fmt:expr) => {{ /* compiler built-in */ }};
186 ($fmt:expr, $($args:tt)*) => {{ /* compiler built-in */ }};
187}
188
189fn main() {
190 // from https://doc.rust-lang.org/std/fmt/index.html
191 println!("Hello"); // => "Hello"
192 println!("Hello, {}!", "world"); // => "Hello, world!"
193 println!("The number is {}", 1); // => "The number is 1"
194 println!("{:?}", (3, 4)); // => "(3, 4)"
195 println!("{value}", value=4); // => "4"
196 println!("{} {}", 1, 2); // => "1 2"
197 println!("{:04}", 42); // => "0042" with leading zerosV
198 println!("{1} {} {0} {}", 1, 2); // => "2 1 1 2"
199 println!("{argument}", argument = "test"); // => "test"
200 println!("{name} {}", 1, name = 2); // => "2 1"
201 println!("{a} {c} {b}", a="a", b='b', c=3); // => "a 3 b"
202 println!("Hello {:5}!", "x");
203 println!("Hello {:1$}!", "x", 5);
204 println!("Hello {1:0$}!", 5, "x");
205 println!("Hello {:width$}!", "x", width = 5);
206 println!("Hello {:<5}!", "x");
207 println!("Hello {:-<5}!", "x");
208 println!("Hello {:^5}!", "x");
209 println!("Hello {:>5}!", "x");
210 println!("Hello {:+}!", 5);
211 println!("{:#x}!", 27);
212 println!("Hello {:05}!", 5);
213 println!("Hello {:05}!", -5);
214 println!("{:#010x}!", 27);
215 println!("Hello {0} is {1:.5}", "x", 0.01);
216 println!("Hello {1} is {2:.0$}", 5, "x", 0.01);
217 println!("Hello {0} is {2:.1$}", "x", 5, 0.01);
218 println!("Hello {} is {:.*}", "x", 5, 0.01);
219 println!("Hello {} is {2:.*}", "x", 5, 0.01);
220 println!("Hello {} is {number:.prec$}", "x", prec = 5, number = 0.01);
221 println!("{}, `{name:.*}` has 3 fractional digits", "Hello", 3, name=1234.56);
222 println!("{}, `{name:.*}` has 3 characters", "Hello", 3, name="1234.56");
223 println!("{}, `{name:>8.*}` has 3 right-aligned characters", "Hello", 3, name="1234.56");
224 println!("Hello {{}}");
225 println!("{{ Hello");
226
227 println!(r"Hello, {}!", "world");
228
229 println!("{\x41}", A = 92);
230 println!("{ничоси}", ничоси = 92);
231}"#
232 .trim(),
233 );
234
235 let dst_file = project_dir().join("crates/ra_ide/src/snapshots/highlight_strings.html");
236 let actual_html = &analysis.highlight_as_html(file_id, false).unwrap();
237 let expected_html = &read_text(&dst_file);
238 fs::write(dst_file, &actual_html).unwrap();
239 assert_eq_text!(expected_html, actual_html);
240}
diff --git a/crates/ra_ide/src/syntax_tree.rs b/crates/ra_ide/src/syntax_tree.rs
index 5842ae2e8..bf97f8c56 100644
--- a/crates/ra_ide/src/syntax_tree.rs
+++ b/crates/ra_ide/src/syntax_tree.rs
@@ -5,7 +5,7 @@ use ra_ide_db::RootDatabase;
5use ra_syntax::{ 5use ra_syntax::{
6 algo, AstNode, NodeOrToken, SourceFile, 6 algo, AstNode, NodeOrToken, SourceFile,
7 SyntaxKind::{RAW_STRING, STRING}, 7 SyntaxKind::{RAW_STRING, STRING},
8 SyntaxToken, TextRange, TextUnit, 8 SyntaxToken, TextRange, TextSize,
9}; 9};
10 10
11pub use ra_db::FileId; 11pub use ra_db::FileId;
@@ -66,13 +66,10 @@ fn syntax_tree_for_token(node: &SyntaxToken, text_range: TextRange) -> Option<St
66 let len = len.min(node_len); 66 let len = len.min(node_len);
67 67
68 // Ensure our slice is inside the actual string 68 // Ensure our slice is inside the actual string
69 let end = if start + len < TextUnit::of_str(&text) { 69 let end =
70 start + len 70 if start + len < TextSize::of(&text) { start + len } else { TextSize::of(&text) - start };
71 } else {
72 TextUnit::of_str(&text) - start
73 };
74 71
75 let text = &text[TextRange::from_to(start, end)]; 72 let text = &text[TextRange::new(start, end)];
76 73
77 // Remove possible extra string quotes from the start 74 // Remove possible extra string quotes from the start
78 // and the end of the string 75 // and the end of the string
@@ -112,20 +109,20 @@ mod tests {
112 assert_eq_text!( 109 assert_eq_text!(
113 syn.trim(), 110 syn.trim(),
114 r#" 111 r#"
115SOURCE_FILE@[0; 11) 112SOURCE_FILE@0..11
116 FN_DEF@[0; 11) 113 FN_DEF@0..11
117 FN_KW@[0; 2) "fn" 114 FN_KW@0..2 "fn"
118 WHITESPACE@[2; 3) " " 115 WHITESPACE@2..3 " "
119 NAME@[3; 6) 116 NAME@3..6
120 IDENT@[3; 6) "foo" 117 IDENT@3..6 "foo"
121 PARAM_LIST@[6; 8) 118 PARAM_LIST@6..8
122 L_PAREN@[6; 7) "(" 119 L_PAREN@6..7 "("
123 R_PAREN@[7; 8) ")" 120 R_PAREN@7..8 ")"
124 WHITESPACE@[8; 9) " " 121 WHITESPACE@8..9 " "
125 BLOCK_EXPR@[9; 11) 122 BLOCK_EXPR@9..11
126 BLOCK@[9; 11) 123 BLOCK@9..11
127 L_CURLY@[9; 10) "{" 124 L_CURLY@9..10 "{"
128 R_CURLY@[10; 11) "}" 125 R_CURLY@10..11 "}"
129"# 126"#
130 .trim() 127 .trim()
131 ); 128 );
@@ -145,37 +142,37 @@ fn test() {
145 assert_eq_text!( 142 assert_eq_text!(
146 syn.trim(), 143 syn.trim(),
147 r#" 144 r#"
148SOURCE_FILE@[0; 60) 145SOURCE_FILE@0..60
149 FN_DEF@[0; 60) 146 FN_DEF@0..60
150 FN_KW@[0; 2) "fn" 147 FN_KW@0..2 "fn"
151 WHITESPACE@[2; 3) " " 148 WHITESPACE@2..3 " "
152 NAME@[3; 7) 149 NAME@3..7
153 IDENT@[3; 7) "test" 150 IDENT@3..7 "test"
154 PARAM_LIST@[7; 9) 151 PARAM_LIST@7..9
155 L_PAREN@[7; 8) "(" 152 L_PAREN@7..8 "("
156 R_PAREN@[8; 9) ")" 153 R_PAREN@8..9 ")"
157 WHITESPACE@[9; 10) " " 154 WHITESPACE@9..10 " "
158 BLOCK_EXPR@[10; 60) 155 BLOCK_EXPR@10..60
159 BLOCK@[10; 60) 156 BLOCK@10..60
160 L_CURLY@[10; 11) "{" 157 L_CURLY@10..11 "{"
161 WHITESPACE@[11; 16) "\n " 158 WHITESPACE@11..16 "\n "
162 EXPR_STMT@[16; 58) 159 EXPR_STMT@16..58
163 MACRO_CALL@[16; 57) 160 MACRO_CALL@16..57
164 PATH@[16; 22) 161 PATH@16..22
165 PATH_SEGMENT@[16; 22) 162 PATH_SEGMENT@16..22
166 NAME_REF@[16; 22) 163 NAME_REF@16..22
167 IDENT@[16; 22) "assert" 164 IDENT@16..22 "assert"
168 BANG@[22; 23) "!" 165 BANG@22..23 "!"
169 TOKEN_TREE@[23; 57) 166 TOKEN_TREE@23..57
170 L_PAREN@[23; 24) "(" 167 L_PAREN@23..24 "("
171 STRING@[24; 52) "\"\n fn foo() {\n ..." 168 STRING@24..52 "\"\n fn foo() {\n ..."
172 COMMA@[52; 53) "," 169 COMMA@52..53 ","
173 WHITESPACE@[53; 54) " " 170 WHITESPACE@53..54 " "
174 STRING@[54; 56) "\"\"" 171 STRING@54..56 "\"\""
175 R_PAREN@[56; 57) ")" 172 R_PAREN@56..57 ")"
176 SEMICOLON@[57; 58) ";" 173 SEMICOLON@57..58 ";"
177 WHITESPACE@[58; 59) "\n" 174 WHITESPACE@58..59 "\n"
178 R_CURLY@[59; 60) "}" 175 R_CURLY@59..60 "}"
179"# 176"#
180 .trim() 177 .trim()
181 ); 178 );
@@ -189,19 +186,19 @@ SOURCE_FILE@[0; 60)
189 assert_eq_text!( 186 assert_eq_text!(
190 syn.trim(), 187 syn.trim(),
191 r#" 188 r#"
192FN_DEF@[0; 11) 189FN_DEF@0..11
193 FN_KW@[0; 2) "fn" 190 FN_KW@0..2 "fn"
194 WHITESPACE@[2; 3) " " 191 WHITESPACE@2..3 " "
195 NAME@[3; 6) 192 NAME@3..6
196 IDENT@[3; 6) "foo" 193 IDENT@3..6 "foo"
197 PARAM_LIST@[6; 8) 194 PARAM_LIST@6..8
198 L_PAREN@[6; 7) "(" 195 L_PAREN@6..7 "("
199 R_PAREN@[7; 8) ")" 196 R_PAREN@7..8 ")"
200 WHITESPACE@[8; 9) " " 197 WHITESPACE@8..9 " "
201 BLOCK_EXPR@[9; 11) 198 BLOCK_EXPR@9..11
202 BLOCK@[9; 11) 199 BLOCK@9..11
203 L_CURLY@[9; 10) "{" 200 L_CURLY@9..10 "{"
204 R_CURLY@[10; 11) "}" 201 R_CURLY@10..11 "}"
205"# 202"#
206 .trim() 203 .trim()
207 ); 204 );
@@ -220,21 +217,21 @@ FN_DEF@[0; 11)
220 assert_eq_text!( 217 assert_eq_text!(
221 syn.trim(), 218 syn.trim(),
222 r#" 219 r#"
223EXPR_STMT@[16; 58) 220EXPR_STMT@16..58
224 MACRO_CALL@[16; 57) 221 MACRO_CALL@16..57
225 PATH@[16; 22) 222 PATH@16..22
226 PATH_SEGMENT@[16; 22) 223 PATH_SEGMENT@16..22
227 NAME_REF@[16; 22) 224 NAME_REF@16..22
228 IDENT@[16; 22) "assert" 225 IDENT@16..22 "assert"
229 BANG@[22; 23) "!" 226 BANG@22..23 "!"
230 TOKEN_TREE@[23; 57) 227 TOKEN_TREE@23..57
231 L_PAREN@[23; 24) "(" 228 L_PAREN@23..24 "("
232 STRING@[24; 52) "\"\n fn foo() {\n ..." 229 STRING@24..52 "\"\n fn foo() {\n ..."
233 COMMA@[52; 53) "," 230 COMMA@52..53 ","
234 WHITESPACE@[53; 54) " " 231 WHITESPACE@53..54 " "
235 STRING@[54; 56) "\"\"" 232 STRING@54..56 "\"\""
236 R_PAREN@[56; 57) ")" 233 R_PAREN@56..57 ")"
237 SEMICOLON@[57; 58) ";" 234 SEMICOLON@57..58 ";"
238"# 235"#
239 .trim() 236 .trim()
240 ); 237 );
@@ -257,21 +254,21 @@ fn bar() {
257 assert_eq_text!( 254 assert_eq_text!(
258 syn.trim(), 255 syn.trim(),
259 r#" 256 r#"
260SOURCE_FILE@[0; 12) 257SOURCE_FILE@0..12
261 FN_DEF@[0; 12) 258 FN_DEF@0..12
262 FN_KW@[0; 2) "fn" 259 FN_KW@0..2 "fn"
263 WHITESPACE@[2; 3) " " 260 WHITESPACE@2..3 " "
264 NAME@[3; 6) 261 NAME@3..6
265 IDENT@[3; 6) "foo" 262 IDENT@3..6 "foo"
266 PARAM_LIST@[6; 8) 263 PARAM_LIST@6..8
267 L_PAREN@[6; 7) "(" 264 L_PAREN@6..7 "("
268 R_PAREN@[7; 8) ")" 265 R_PAREN@7..8 ")"
269 WHITESPACE@[8; 9) " " 266 WHITESPACE@8..9 " "
270 BLOCK_EXPR@[9; 12) 267 BLOCK_EXPR@9..12
271 BLOCK@[9; 12) 268 BLOCK@9..12
272 L_CURLY@[9; 10) "{" 269 L_CURLY@9..10 "{"
273 WHITESPACE@[10; 11) "\n" 270 WHITESPACE@10..11 "\n"
274 R_CURLY@[11; 12) "}" 271 R_CURLY@11..12 "}"
275"# 272"#
276 .trim() 273 .trim()
277 ); 274 );
@@ -292,21 +289,21 @@ fn bar() {
292 assert_eq_text!( 289 assert_eq_text!(
293 syn.trim(), 290 syn.trim(),
294 r#" 291 r#"
295SOURCE_FILE@[0; 12) 292SOURCE_FILE@0..12
296 FN_DEF@[0; 12) 293 FN_DEF@0..12
297 FN_KW@[0; 2) "fn" 294 FN_KW@0..2 "fn"
298 WHITESPACE@[2; 3) " " 295 WHITESPACE@2..3 " "
299 NAME@[3; 6) 296 NAME@3..6
300 IDENT@[3; 6) "foo" 297 IDENT@3..6 "foo"
301 PARAM_LIST@[6; 8) 298 PARAM_LIST@6..8
302 L_PAREN@[6; 7) "(" 299 L_PAREN@6..7 "("
303 R_PAREN@[7; 8) ")" 300 R_PAREN@7..8 ")"
304 WHITESPACE@[8; 9) " " 301 WHITESPACE@8..9 " "
305 BLOCK_EXPR@[9; 12) 302 BLOCK_EXPR@9..12
306 BLOCK@[9; 12) 303 BLOCK@9..12
307 L_CURLY@[9; 10) "{" 304 L_CURLY@9..10 "{"
308 WHITESPACE@[10; 11) "\n" 305 WHITESPACE@10..11 "\n"
309 R_CURLY@[11; 12) "}" 306 R_CURLY@11..12 "}"
310"# 307"#
311 .trim() 308 .trim()
312 ); 309 );
@@ -326,36 +323,36 @@ fn bar() {
326 assert_eq_text!( 323 assert_eq_text!(
327 syn.trim(), 324 syn.trim(),
328 r#" 325 r#"
329SOURCE_FILE@[0; 25) 326SOURCE_FILE@0..25
330 FN_DEF@[0; 12) 327 FN_DEF@0..12
331 FN_KW@[0; 2) "fn" 328 FN_KW@0..2 "fn"
332 WHITESPACE@[2; 3) " " 329 WHITESPACE@2..3 " "
333 NAME@[3; 6) 330 NAME@3..6
334 IDENT@[3; 6) "foo" 331 IDENT@3..6 "foo"
335 PARAM_LIST@[6; 8) 332 PARAM_LIST@6..8
336 L_PAREN@[6; 7) "(" 333 L_PAREN@6..7 "("
337 R_PAREN@[7; 8) ")" 334 R_PAREN@7..8 ")"
338 WHITESPACE@[8; 9) " " 335 WHITESPACE@8..9 " "
339 BLOCK_EXPR@[9; 12) 336 BLOCK_EXPR@9..12
340 BLOCK@[9; 12) 337 BLOCK@9..12
341 L_CURLY@[9; 10) "{" 338 L_CURLY@9..10 "{"
342 WHITESPACE@[10; 11) "\n" 339 WHITESPACE@10..11 "\n"
343 R_CURLY@[11; 12) "}" 340 R_CURLY@11..12 "}"
344 WHITESPACE@[12; 13) "\n" 341 WHITESPACE@12..13 "\n"
345 FN_DEF@[13; 25) 342 FN_DEF@13..25
346 FN_KW@[13; 15) "fn" 343 FN_KW@13..15 "fn"
347 WHITESPACE@[15; 16) " " 344 WHITESPACE@15..16 " "
348 NAME@[16; 19) 345 NAME@16..19
349 IDENT@[16; 19) "bar" 346 IDENT@16..19 "bar"
350 PARAM_LIST@[19; 21) 347 PARAM_LIST@19..21
351 L_PAREN@[19; 20) "(" 348 L_PAREN@19..20 "("
352 R_PAREN@[20; 21) ")" 349 R_PAREN@20..21 ")"
353 WHITESPACE@[21; 22) " " 350 WHITESPACE@21..22 " "
354 BLOCK_EXPR@[22; 25) 351 BLOCK_EXPR@22..25
355 BLOCK@[22; 25) 352 BLOCK@22..25
356 L_CURLY@[22; 23) "{" 353 L_CURLY@22..23 "{"
357 WHITESPACE@[23; 24) "\n" 354 WHITESPACE@23..24 "\n"
358 R_CURLY@[24; 25) "}" 355 R_CURLY@24..25 "}"
359"# 356"#
360 .trim() 357 .trim()
361 ); 358 );
diff --git a/crates/ra_ide/src/test_utils.rs b/crates/ra_ide/src/test_utils.rs
index 8adb214d4..f14533e14 100644
--- a/crates/ra_ide/src/test_utils.rs
+++ b/crates/ra_ide/src/test_utils.rs
@@ -1,11 +1,11 @@
1//! FIXME: write short doc here 1//! FIXME: write short doc here
2 2
3use ra_syntax::{SourceFile, TextUnit}; 3use ra_syntax::{SourceFile, TextSize};
4use ra_text_edit::TextEdit; 4use ra_text_edit::TextEdit;
5 5
6pub use test_utils::*; 6pub use test_utils::*;
7 7
8pub fn check_action<F: Fn(&SourceFile, TextUnit) -> Option<TextEdit>>( 8pub fn check_action<F: Fn(&SourceFile, TextSize) -> Option<TextEdit>>(
9 before: &str, 9 before: &str,
10 after: &str, 10 after: &str,
11 f: F, 11 f: F,
diff --git a/crates/ra_ide/src/typing.rs b/crates/ra_ide/src/typing.rs
index f55cd3bf5..2a8b4327f 100644
--- a/crates/ra_ide/src/typing.rs
+++ b/crates/ra_ide/src/typing.rs
@@ -21,7 +21,7 @@ use ra_ide_db::RootDatabase;
21use ra_syntax::{ 21use ra_syntax::{
22 algo::find_node_at_offset, 22 algo::find_node_at_offset,
23 ast::{self, AstToken}, 23 ast::{self, AstToken},
24 AstNode, SourceFile, TextRange, TextUnit, 24 AstNode, SourceFile, TextRange, TextSize,
25}; 25};
26use ra_text_edit::TextEdit; 26use ra_text_edit::TextEdit;
27 27
@@ -45,7 +45,7 @@ pub(crate) fn on_char_typed(
45 45
46fn on_char_typed_inner( 46fn on_char_typed_inner(
47 file: &SourceFile, 47 file: &SourceFile,
48 offset: TextUnit, 48 offset: TextSize,
49 char_typed: char, 49 char_typed: char,
50) -> Option<SingleFileChange> { 50) -> Option<SingleFileChange> {
51 assert!(TRIGGER_CHARS.contains(char_typed)); 51 assert!(TRIGGER_CHARS.contains(char_typed));
@@ -60,7 +60,7 @@ fn on_char_typed_inner(
60/// Returns an edit which should be applied after `=` was typed. Primarily, 60/// Returns an edit which should be applied after `=` was typed. Primarily,
61/// this works when adding `let =`. 61/// this works when adding `let =`.
62// FIXME: use a snippet completion instead of this hack here. 62// FIXME: use a snippet completion instead of this hack here.
63fn on_eq_typed(file: &SourceFile, offset: TextUnit) -> Option<SingleFileChange> { 63fn on_eq_typed(file: &SourceFile, offset: TextSize) -> Option<SingleFileChange> {
64 assert_eq!(file.syntax().text().char_at(offset), Some('=')); 64 assert_eq!(file.syntax().text().char_at(offset), Some('='));
65 let let_stmt: ast::LetStmt = find_node_at_offset(file.syntax(), offset)?; 65 let let_stmt: ast::LetStmt = find_node_at_offset(file.syntax(), offset)?;
66 if let_stmt.semicolon_token().is_some() { 66 if let_stmt.semicolon_token().is_some() {
@@ -86,7 +86,7 @@ fn on_eq_typed(file: &SourceFile, offset: TextUnit) -> Option<SingleFileChange>
86} 86}
87 87
88/// Returns an edit which should be applied when a dot ('.') is typed on a blank line, indenting the line appropriately. 88/// Returns an edit which should be applied when a dot ('.') is typed on a blank line, indenting the line appropriately.
89fn on_dot_typed(file: &SourceFile, offset: TextUnit) -> Option<SingleFileChange> { 89fn on_dot_typed(file: &SourceFile, offset: TextSize) -> Option<SingleFileChange> {
90 assert_eq!(file.syntax().text().char_at(offset), Some('.')); 90 assert_eq!(file.syntax().text().char_at(offset), Some('.'));
91 let whitespace = 91 let whitespace =
92 file.syntax().token_at_offset(offset).left_biased().and_then(ast::Whitespace::cast)?; 92 file.syntax().token_at_offset(offset).left_biased().and_then(ast::Whitespace::cast)?;
@@ -96,34 +96,29 @@ fn on_dot_typed(file: &SourceFile, offset: TextUnit) -> Option<SingleFileChange>
96 let newline = text.rfind('\n')?; 96 let newline = text.rfind('\n')?;
97 &text[newline + 1..] 97 &text[newline + 1..]
98 }; 98 };
99 let current_indent_len = TextUnit::of_str(current_indent); 99 let current_indent_len = TextSize::of(current_indent);
100 100
101 // Make sure dot is a part of call chain 101 // Make sure dot is a part of call chain
102 let field_expr = ast::FieldExpr::cast(whitespace.syntax().parent())?; 102 let field_expr = ast::FieldExpr::cast(whitespace.syntax().parent())?;
103 let prev_indent = leading_indent(field_expr.syntax())?; 103 let prev_indent = leading_indent(field_expr.syntax())?;
104 let target_indent = format!(" {}", prev_indent); 104 let target_indent = format!(" {}", prev_indent);
105 let target_indent_len = TextUnit::of_str(&target_indent); 105 let target_indent_len = TextSize::of(&target_indent);
106 if current_indent_len == target_indent_len { 106 if current_indent_len == target_indent_len {
107 return None; 107 return None;
108 } 108 }
109 109
110 Some(SingleFileChange { 110 Some(SingleFileChange {
111 label: "reindent dot".to_string(), 111 label: "reindent dot".to_string(),
112 edit: TextEdit::replace( 112 edit: TextEdit::replace(TextRange::new(offset - current_indent_len, offset), target_indent),
113 TextRange::from_to(offset - current_indent_len, offset), 113 cursor_position: Some(offset + target_indent_len - current_indent_len + TextSize::of('.')),
114 target_indent,
115 ),
116 cursor_position: Some(
117 offset + target_indent_len - current_indent_len + TextUnit::of_char('.'),
118 ),
119 }) 114 })
120} 115}
121 116
122/// Adds a space after an arrow when `fn foo() { ... }` is turned into `fn foo() -> { ... }` 117/// Adds a space after an arrow when `fn foo() { ... }` is turned into `fn foo() -> { ... }`
123fn on_arrow_typed(file: &SourceFile, offset: TextUnit) -> Option<SingleFileChange> { 118fn on_arrow_typed(file: &SourceFile, offset: TextSize) -> Option<SingleFileChange> {
124 let file_text = file.syntax().text(); 119 let file_text = file.syntax().text();
125 assert_eq!(file_text.char_at(offset), Some('>')); 120 assert_eq!(file_text.char_at(offset), Some('>'));
126 let after_arrow = offset + TextUnit::of_char('>'); 121 let after_arrow = offset + TextSize::of('>');
127 if file_text.char_at(after_arrow) != Some('{') { 122 if file_text.char_at(after_arrow) != Some('{') {
128 return None; 123 return None;
129 } 124 }
diff --git a/crates/ra_ide/src/typing/on_enter.rs b/crates/ra_ide/src/typing/on_enter.rs
index 6bcf2d72b..30c8c5572 100644
--- a/crates/ra_ide/src/typing/on_enter.rs
+++ b/crates/ra_ide/src/typing/on_enter.rs
@@ -7,7 +7,7 @@ use ra_syntax::{
7 ast::{self, AstToken}, 7 ast::{self, AstToken},
8 AstNode, SmolStr, SourceFile, 8 AstNode, SmolStr, SourceFile,
9 SyntaxKind::*, 9 SyntaxKind::*,
10 SyntaxToken, TextUnit, TokenAtOffset, 10 SyntaxToken, TextSize, TokenAtOffset,
11}; 11};
12use ra_text_edit::TextEdit; 12use ra_text_edit::TextEdit;
13 13
@@ -28,7 +28,7 @@ pub(crate) fn on_enter(db: &RootDatabase, position: FilePosition) -> Option<Sour
28 28
29 let prefix = comment.prefix(); 29 let prefix = comment.prefix();
30 let comment_range = comment.syntax().text_range(); 30 let comment_range = comment.syntax().text_range();
31 if position.offset < comment_range.start() + TextUnit::of_str(prefix) { 31 if position.offset < comment_range.start() + TextSize::of(prefix) {
32 return None; 32 return None;
33 } 33 }
34 34
@@ -39,7 +39,7 @@ pub(crate) fn on_enter(db: &RootDatabase, position: FilePosition) -> Option<Sour
39 39
40 let indent = node_indent(&file, comment.syntax())?; 40 let indent = node_indent(&file, comment.syntax())?;
41 let inserted = format!("\n{}{} ", indent, prefix); 41 let inserted = format!("\n{}{} ", indent, prefix);
42 let cursor_position = position.offset + TextUnit::of_str(&inserted); 42 let cursor_position = position.offset + TextSize::of(&inserted);
43 let edit = TextEdit::insert(position.offset, inserted); 43 let edit = TextEdit::insert(position.offset, inserted);
44 44
45 Some( 45 Some(
diff --git a/crates/ra_ide_db/src/defs.rs b/crates/ra_ide_db/src/defs.rs
index 785613b82..7cd2384e9 100644
--- a/crates/ra_ide_db/src/defs.rs
+++ b/crates/ra_ide_db/src/defs.rs
@@ -6,8 +6,8 @@
6// FIXME: this badly needs rename/rewrite (matklad, 2020-02-06). 6// FIXME: this badly needs rename/rewrite (matklad, 2020-02-06).
7 7
8use hir::{ 8use hir::{
9 HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, Name, PathResolution, Semantics, 9 Field, HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, Name, PathResolution,
10 StructField, TypeParam, Visibility, 10 Semantics, TypeParam, Visibility,
11}; 11};
12use ra_prof::profile; 12use ra_prof::profile;
13use ra_syntax::{ 13use ra_syntax::{
@@ -22,7 +22,7 @@ use crate::RootDatabase;
22#[derive(Debug, PartialEq, Eq)] 22#[derive(Debug, PartialEq, Eq)]
23pub enum Definition { 23pub enum Definition {
24 Macro(MacroDef), 24 Macro(MacroDef),
25 StructField(StructField), 25 Field(Field),
26 ModuleDef(ModuleDef), 26 ModuleDef(ModuleDef),
27 SelfType(ImplDef), 27 SelfType(ImplDef),
28 Local(Local), 28 Local(Local),
@@ -33,7 +33,7 @@ impl Definition {
33 pub fn module(&self, db: &RootDatabase) -> Option<Module> { 33 pub fn module(&self, db: &RootDatabase) -> Option<Module> {
34 match self { 34 match self {
35 Definition::Macro(it) => it.module(db), 35 Definition::Macro(it) => it.module(db),
36 Definition::StructField(it) => Some(it.parent_def(db).module(db)), 36 Definition::Field(it) => Some(it.parent_def(db).module(db)),
37 Definition::ModuleDef(it) => it.module(db), 37 Definition::ModuleDef(it) => it.module(db),
38 Definition::SelfType(it) => Some(it.module(db)), 38 Definition::SelfType(it) => Some(it.module(db)),
39 Definition::Local(it) => Some(it.module(db)), 39 Definition::Local(it) => Some(it.module(db)),
@@ -46,7 +46,7 @@ impl Definition {
46 46
47 match self { 47 match self {
48 Definition::Macro(_) => None, 48 Definition::Macro(_) => None,
49 Definition::StructField(sf) => Some(sf.visibility(db)), 49 Definition::Field(sf) => Some(sf.visibility(db)),
50 Definition::ModuleDef(def) => module?.visibility_of(db, def), 50 Definition::ModuleDef(def) => module?.visibility_of(db, def),
51 Definition::SelfType(_) => None, 51 Definition::SelfType(_) => None,
52 Definition::Local(_) => None, 52 Definition::Local(_) => None,
@@ -57,7 +57,7 @@ impl Definition {
57 pub fn name(&self, db: &RootDatabase) -> Option<Name> { 57 pub fn name(&self, db: &RootDatabase) -> Option<Name> {
58 let name = match self { 58 let name = match self {
59 Definition::Macro(it) => it.name(db)?, 59 Definition::Macro(it) => it.name(db)?,
60 Definition::StructField(it) => it.name(db), 60 Definition::Field(it) => it.name(db),
61 Definition::ModuleDef(def) => match def { 61 Definition::ModuleDef(def) => match def {
62 hir::ModuleDef::Module(it) => it.name(db)?, 62 hir::ModuleDef::Module(it) => it.name(db)?,
63 hir::ModuleDef::Function(it) => it.name(db), 63 hir::ModuleDef::Function(it) => it.name(db),
@@ -124,8 +124,8 @@ fn classify_name_inner(sema: &Semantics<RootDatabase>, name: &ast::Name) -> Opti
124 Some(Definition::Local(local)) 124 Some(Definition::Local(local))
125 }, 125 },
126 ast::RecordFieldDef(it) => { 126 ast::RecordFieldDef(it) => {
127 let field: hir::StructField = sema.to_def(&it)?; 127 let field: hir::Field = sema.to_def(&it)?;
128 Some(Definition::StructField(field)) 128 Some(Definition::Field(field))
129 }, 129 },
130 ast::Module(it) => { 130 ast::Module(it) => {
131 let def = sema.to_def(&it)?; 131 let def = sema.to_def(&it)?;
@@ -213,7 +213,7 @@ pub fn classify_name_ref(
213 if let Some(field_expr) = ast::FieldExpr::cast(parent.clone()) { 213 if let Some(field_expr) = ast::FieldExpr::cast(parent.clone()) {
214 tested_by!(goto_def_for_fields; force); 214 tested_by!(goto_def_for_fields; force);
215 if let Some(field) = sema.resolve_field(&field_expr) { 215 if let Some(field) = sema.resolve_field(&field_expr) {
216 return Some(NameRefClass::Definition(Definition::StructField(field))); 216 return Some(NameRefClass::Definition(Definition::Field(field)));
217 } 217 }
218 } 218 }
219 219
@@ -221,7 +221,7 @@ pub fn classify_name_ref(
221 tested_by!(goto_def_for_record_fields; force); 221 tested_by!(goto_def_for_record_fields; force);
222 tested_by!(goto_def_for_field_init_shorthand; force); 222 tested_by!(goto_def_for_field_init_shorthand; force);
223 if let Some((field, local)) = sema.resolve_record_field(&record_field) { 223 if let Some((field, local)) = sema.resolve_record_field(&record_field) {
224 let field = Definition::StructField(field); 224 let field = Definition::Field(field);
225 let res = match local { 225 let res = match local {
226 None => NameRefClass::Definition(field), 226 None => NameRefClass::Definition(field),
227 Some(local) => NameRefClass::FieldShorthand { field, local }, 227 Some(local) => NameRefClass::FieldShorthand { field, local },
@@ -233,7 +233,7 @@ pub fn classify_name_ref(
233 if let Some(record_field_pat) = ast::RecordFieldPat::cast(parent.clone()) { 233 if let Some(record_field_pat) = ast::RecordFieldPat::cast(parent.clone()) {
234 tested_by!(goto_def_for_record_field_pats; force); 234 tested_by!(goto_def_for_record_field_pats; force);
235 if let Some(field) = sema.resolve_record_field_pat(&record_field_pat) { 235 if let Some(field) = sema.resolve_record_field_pat(&record_field_pat) {
236 let field = Definition::StructField(field); 236 let field = Definition::Field(field);
237 return Some(NameRefClass::Definition(field)); 237 return Some(NameRefClass::Definition(field));
238 } 238 }
239 } 239 }
diff --git a/crates/ra_ide_db/src/line_index.rs b/crates/ra_ide_db/src/line_index.rs
index 8ae745ff2..00ba95913 100644
--- a/crates/ra_ide_db/src/line_index.rs
+++ b/crates/ra_ide_db/src/line_index.rs
@@ -1,14 +1,14 @@
1//! `LineIndex` maps flat `TextUnit` offsets into `(Line, Column)` 1//! `LineIndex` maps flat `TextSize` offsets into `(Line, Column)`
2//! representation. 2//! representation.
3use std::iter; 3use std::iter;
4 4
5use ra_syntax::{TextRange, TextUnit}; 5use ra_syntax::{TextRange, TextSize};
6use rustc_hash::FxHashMap; 6use rustc_hash::FxHashMap;
7use superslice::Ext; 7use superslice::Ext;
8 8
9#[derive(Clone, Debug, PartialEq, Eq)] 9#[derive(Clone, Debug, PartialEq, Eq)]
10pub struct LineIndex { 10pub struct LineIndex {
11 pub(crate) newlines: Vec<TextUnit>, 11 pub(crate) newlines: Vec<TextSize>,
12 pub(crate) utf16_lines: FxHashMap<u32, Vec<Utf16Char>>, 12 pub(crate) utf16_lines: FxHashMap<u32, Vec<Utf16Char>>,
13} 13}
14 14
@@ -22,12 +22,12 @@ pub struct LineCol {
22 22
23#[derive(Clone, Debug, Hash, PartialEq, Eq)] 23#[derive(Clone, Debug, Hash, PartialEq, Eq)]
24pub(crate) struct Utf16Char { 24pub(crate) struct Utf16Char {
25 pub(crate) start: TextUnit, 25 pub(crate) start: TextSize,
26 pub(crate) end: TextUnit, 26 pub(crate) end: TextSize,
27} 27}
28 28
29impl Utf16Char { 29impl Utf16Char {
30 fn len(&self) -> TextUnit { 30 fn len(&self) -> TextSize {
31 self.end - self.start 31 self.end - self.start
32 } 32 }
33} 33}
@@ -42,7 +42,8 @@ impl LineIndex {
42 let mut curr_col = 0.into(); 42 let mut curr_col = 0.into();
43 let mut line = 0; 43 let mut line = 0;
44 for c in text.chars() { 44 for c in text.chars() {
45 curr_row += TextUnit::of_char(c); 45 let c_len = TextSize::of(c);
46 curr_row += c_len;
46 if c == '\n' { 47 if c == '\n' {
47 newlines.push(curr_row); 48 newlines.push(curr_row);
48 49
@@ -58,12 +59,11 @@ impl LineIndex {
58 continue; 59 continue;
59 } 60 }
60 61
61 let char_len = TextUnit::of_char(c); 62 if !c.is_ascii() {
62 if char_len > TextUnit::from_usize(1) { 63 utf16_chars.push(Utf16Char { start: curr_col, end: curr_col + c_len });
63 utf16_chars.push(Utf16Char { start: curr_col, end: curr_col + char_len });
64 } 64 }
65 65
66 curr_col += char_len; 66 curr_col += c_len;
67 } 67 }
68 68
69 // Save any utf-16 characters seen in the last line 69 // Save any utf-16 characters seen in the last line
@@ -74,7 +74,7 @@ impl LineIndex {
74 LineIndex { newlines, utf16_lines } 74 LineIndex { newlines, utf16_lines }
75 } 75 }
76 76
77 pub fn line_col(&self, offset: TextUnit) -> LineCol { 77 pub fn line_col(&self, offset: TextSize) -> LineCol {
78 let line = self.newlines.upper_bound(&offset) - 1; 78 let line = self.newlines.upper_bound(&offset) - 1;
79 let line_start_offset = self.newlines[line]; 79 let line_start_offset = self.newlines[line];
80 let col = offset - line_start_offset; 80 let col = offset - line_start_offset;
@@ -82,7 +82,7 @@ impl LineIndex {
82 LineCol { line: line as u32, col_utf16: self.utf8_to_utf16_col(line as u32, col) as u32 } 82 LineCol { line: line as u32, col_utf16: self.utf8_to_utf16_col(line as u32, col) as u32 }
83 } 83 }
84 84
85 pub fn offset(&self, line_col: LineCol) -> TextUnit { 85 pub fn offset(&self, line_col: LineCol) -> TextSize {
86 //FIXME: return Result 86 //FIXME: return Result
87 let col = self.utf16_to_utf8_col(line_col.line, line_col.col_utf16); 87 let col = self.utf16_to_utf8_col(line_col.line, line_col.col_utf16);
88 self.newlines[line_col.line as usize] + col 88 self.newlines[line_col.line as usize] + col
@@ -97,35 +97,31 @@ impl LineIndex {
97 97
98 all.clone() 98 all.clone()
99 .zip(all.skip(1)) 99 .zip(all.skip(1))
100 .map(|(lo, hi)| TextRange::from_to(lo, hi)) 100 .map(|(lo, hi)| TextRange::new(lo, hi))
101 .filter(|it| !it.is_empty()) 101 .filter(|it| !it.is_empty())
102 } 102 }
103 103
104 fn utf8_to_utf16_col(&self, line: u32, col: TextUnit) -> usize { 104 fn utf8_to_utf16_col(&self, line: u32, col: TextSize) -> usize {
105 let mut res: usize = col.into();
105 if let Some(utf16_chars) = self.utf16_lines.get(&line) { 106 if let Some(utf16_chars) = self.utf16_lines.get(&line) {
106 let mut correction = 0;
107 for c in utf16_chars { 107 for c in utf16_chars {
108 if col >= c.end { 108 if c.end <= col {
109 correction += c.len().to_usize() - 1; 109 res -= usize::from(c.len()) - 1;
110 } else { 110 } else {
111 // From here on, all utf16 characters come *after* the character we are mapping, 111 // From here on, all utf16 characters come *after* the character we are mapping,
112 // so we don't need to take them into account 112 // so we don't need to take them into account
113 break; 113 break;
114 } 114 }
115 } 115 }
116
117 col.to_usize() - correction
118 } else {
119 col.to_usize()
120 } 116 }
117 res
121 } 118 }
122 119
123 fn utf16_to_utf8_col(&self, line: u32, col: u32) -> TextUnit { 120 fn utf16_to_utf8_col(&self, line: u32, mut col: u32) -> TextSize {
124 let mut col: TextUnit = col.into();
125 if let Some(utf16_chars) = self.utf16_lines.get(&line) { 121 if let Some(utf16_chars) = self.utf16_lines.get(&line) {
126 for c in utf16_chars { 122 for c in utf16_chars {
127 if col >= c.start { 123 if col >= u32::from(c.start) {
128 col += c.len() - TextUnit::from_usize(1); 124 col += u32::from(c.len()) - 1;
129 } else { 125 } else {
130 // From here on, all utf16 characters come *after* the character we are mapping, 126 // From here on, all utf16 characters come *after* the character we are mapping,
131 // so we don't need to take them into account 127 // so we don't need to take them into account
@@ -134,12 +130,12 @@ impl LineIndex {
134 } 130 }
135 } 131 }
136 132
137 col 133 col.into()
138 } 134 }
139} 135}
140 136
141#[cfg(test)] 137#[cfg(test)]
142mod test_line_index { 138mod tests {
143 use super::*; 139 use super::*;
144 140
145 #[test] 141 #[test]
@@ -200,10 +196,10 @@ const C: char = 'メ';
200 assert_eq!(col_index.utf8_to_utf16_col(1, 22.into()), 20); 196 assert_eq!(col_index.utf8_to_utf16_col(1, 22.into()), 20);
201 197
202 // UTF-16 to UTF-8, no changes 198 // UTF-16 to UTF-8, no changes
203 assert_eq!(col_index.utf16_to_utf8_col(1, 15), TextUnit::from(15)); 199 assert_eq!(col_index.utf16_to_utf8_col(1, 15), TextSize::from(15));
204 200
205 // UTF-16 to UTF-8 201 // UTF-16 to UTF-8
206 assert_eq!(col_index.utf16_to_utf8_col(1, 19), TextUnit::from(21)); 202 assert_eq!(col_index.utf16_to_utf8_col(1, 19), TextSize::from(21));
207 } 203 }
208 204
209 #[test] 205 #[test]
@@ -228,18 +224,18 @@ const C: char = \"メ メ\";
228 assert!(col_index.utf8_to_utf16_col(2, 15.into()) == 15); 224 assert!(col_index.utf8_to_utf16_col(2, 15.into()) == 15);
229 225
230 // UTF-16 to UTF-8 226 // UTF-16 to UTF-8
231 assert_eq!(col_index.utf16_to_utf8_col(1, 15), TextUnit::from_usize(15)); 227 assert_eq!(col_index.utf16_to_utf8_col(1, 15), TextSize::from(15));
232 228
233 assert_eq!(col_index.utf16_to_utf8_col(1, 18), TextUnit::from_usize(20)); 229 assert_eq!(col_index.utf16_to_utf8_col(1, 18), TextSize::from(20));
234 assert_eq!(col_index.utf16_to_utf8_col(1, 19), TextUnit::from_usize(23)); 230 assert_eq!(col_index.utf16_to_utf8_col(1, 19), TextSize::from(23));
235 231
236 assert_eq!(col_index.utf16_to_utf8_col(2, 15), TextUnit::from_usize(15)); 232 assert_eq!(col_index.utf16_to_utf8_col(2, 15), TextSize::from(15));
237 } 233 }
238 234
239 #[test] 235 #[test]
240 fn test_splitlines() { 236 fn test_splitlines() {
241 fn r(lo: u32, hi: u32) -> TextRange { 237 fn r(lo: u32, hi: u32) -> TextRange {
242 TextRange::from_to(lo.into(), hi.into()) 238 TextRange::new(lo.into(), hi.into())
243 } 239 }
244 240
245 let text = "a\nbb\nccc\n"; 241 let text = "a\nbb\nccc\n";
diff --git a/crates/ra_ide_db/src/line_index_utils.rs b/crates/ra_ide_db/src/line_index_utils.rs
index 2ebbabdc6..039a12c0d 100644
--- a/crates/ra_ide_db/src/line_index_utils.rs
+++ b/crates/ra_ide_db/src/line_index_utils.rs
@@ -1,20 +1,22 @@
1//! Code actions can specify desirable final position of the cursor. 1//! Code actions can specify desirable final position of the cursor.
2//! 2//!
3//! The position is specified as a `TextUnit` in the final file. We need to send 3//! The position is specified as a `TextSize` in the final file. We need to send
4//! it in `(Line, Column)` coordinate though. However, we only have a LineIndex 4//! it in `(Line, Column)` coordinate though. However, we only have a LineIndex
5//! for a file pre-edit! 5//! for a file pre-edit!
6//! 6//!
7//! Code in this module applies this "to (Line, Column) after edit" 7//! Code in this module applies this "to (Line, Column) after edit"
8//! transformation. 8//! transformation.
9 9
10use ra_syntax::{TextRange, TextUnit}; 10use std::convert::TryInto;
11
12use ra_syntax::{TextRange, TextSize};
11use ra_text_edit::{AtomTextEdit, TextEdit}; 13use ra_text_edit::{AtomTextEdit, TextEdit};
12 14
13use crate::line_index::{LineCol, LineIndex, Utf16Char}; 15use crate::line_index::{LineCol, LineIndex, Utf16Char};
14 16
15pub fn translate_offset_with_edit( 17pub fn translate_offset_with_edit(
16 line_index: &LineIndex, 18 line_index: &LineIndex,
17 offset: TextUnit, 19 offset: TextSize,
18 text_edit: &TextEdit, 20 text_edit: &TextEdit,
19) -> LineCol { 21) -> LineCol {
20 let mut state = Edits::from_text_edit(&text_edit); 22 let mut state = Edits::from_text_edit(&text_edit);
@@ -84,7 +86,7 @@ pub fn translate_offset_with_edit(
84 86
85#[derive(Debug, Clone)] 87#[derive(Debug, Clone)]
86enum Step { 88enum Step {
87 Newline(TextUnit), 89 Newline(TextSize),
88 Utf16Char(TextRange), 90 Utf16Char(TextRange),
89} 91}
90 92
@@ -92,7 +94,7 @@ enum Step {
92struct LineIndexStepIter<'a> { 94struct LineIndexStepIter<'a> {
93 line_index: &'a LineIndex, 95 line_index: &'a LineIndex,
94 next_newline_idx: usize, 96 next_newline_idx: usize,
95 utf16_chars: Option<(TextUnit, std::slice::Iter<'a, Utf16Char>)>, 97 utf16_chars: Option<(TextSize, std::slice::Iter<'a, Utf16Char>)>,
96} 98}
97 99
98impl LineIndexStepIter<'_> { 100impl LineIndexStepIter<'_> {
@@ -111,7 +113,7 @@ impl Iterator for LineIndexStepIter<'_> {
111 .as_mut() 113 .as_mut()
112 .and_then(|(newline, x)| { 114 .and_then(|(newline, x)| {
113 let x = x.next()?; 115 let x = x.next()?;
114 Some(Step::Utf16Char(TextRange::from_to(*newline + x.start, *newline + x.end))) 116 Some(Step::Utf16Char(TextRange::new(*newline + x.start, *newline + x.end)))
115 }) 117 })
116 .or_else(|| { 118 .or_else(|| {
117 let next_newline = *self.line_index.newlines.get(self.next_newline_idx)?; 119 let next_newline = *self.line_index.newlines.get(self.next_newline_idx)?;
@@ -129,7 +131,7 @@ impl Iterator for LineIndexStepIter<'_> {
129#[derive(Debug)] 131#[derive(Debug)]
130struct OffsetStepIter<'a> { 132struct OffsetStepIter<'a> {
131 text: &'a str, 133 text: &'a str,
132 offset: TextUnit, 134 offset: TextSize,
133} 135}
134 136
135impl Iterator for OffsetStepIter<'_> { 137impl Iterator for OffsetStepIter<'_> {
@@ -139,16 +141,17 @@ impl Iterator for OffsetStepIter<'_> {
139 .text 141 .text
140 .char_indices() 142 .char_indices()
141 .filter_map(|(i, c)| { 143 .filter_map(|(i, c)| {
144 let i: TextSize = i.try_into().unwrap();
145 let char_len = TextSize::of(c);
142 if c == '\n' { 146 if c == '\n' {
143 let next_offset = self.offset + TextUnit::from_usize(i + 1); 147 let next_offset = self.offset + i + char_len;
144 let next = Step::Newline(next_offset); 148 let next = Step::Newline(next_offset);
145 Some((next, next_offset)) 149 Some((next, next_offset))
146 } else { 150 } else {
147 let char_len = TextUnit::of_char(c); 151 if !c.is_ascii() {
148 if char_len > TextUnit::from_usize(1) { 152 let start = self.offset + i;
149 let start = self.offset + TextUnit::from_usize(i);
150 let end = start + char_len; 153 let end = start + char_len;
151 let next = Step::Utf16Char(TextRange::from_to(start, end)); 154 let next = Step::Utf16Char(TextRange::new(start, end));
152 let next_offset = end; 155 let next_offset = end;
153 Some((next, next_offset)) 156 Some((next, next_offset))
154 } else { 157 } else {
@@ -157,7 +160,7 @@ impl Iterator for OffsetStepIter<'_> {
157 } 160 }
158 }) 161 })
159 .next()?; 162 .next()?;
160 let next_idx = (next_offset - self.offset).to_usize(); 163 let next_idx: usize = (next_offset - self.offset).into();
161 self.text = &self.text[next_idx..]; 164 self.text = &self.text[next_idx..];
162 self.offset = next_offset; 165 self.offset = next_offset;
163 Some(next) 166 Some(next)
@@ -195,7 +198,7 @@ impl<'a> Edits<'a> {
195 match self.edits.split_first() { 198 match self.edits.split_first() {
196 Some((next, rest)) => { 199 Some((next, rest)) => {
197 let delete = self.translate_range(next.delete); 200 let delete = self.translate_range(next.delete);
198 let diff = next.insert.len() as i64 - next.delete.len().to_usize() as i64; 201 let diff = next.insert.len() as i64 - usize::from(next.delete.len()) as i64;
199 self.current = Some(TranslatedEdit { delete, insert: &next.insert, diff }); 202 self.current = Some(TranslatedEdit { delete, insert: &next.insert, diff });
200 self.edits = rest; 203 self.edits = rest;
201 } 204 }
@@ -244,15 +247,15 @@ impl<'a> Edits<'a> {
244 } else { 247 } else {
245 let start = self.translate(range.start()); 248 let start = self.translate(range.start());
246 let end = self.translate(range.end()); 249 let end = self.translate(range.end());
247 TextRange::from_to(start, end) 250 TextRange::new(start, end)
248 } 251 }
249 } 252 }
250 253
251 fn translate(&self, x: TextUnit) -> TextUnit { 254 fn translate(&self, x: TextSize) -> TextSize {
252 if self.acc_diff == 0 { 255 if self.acc_diff == 0 {
253 x 256 x
254 } else { 257 } else {
255 TextUnit::from((x.to_usize() as i64 + self.acc_diff) as u32) 258 TextSize::from((usize::from(x) as i64 + self.acc_diff) as u32)
256 } 259 }
257 } 260 }
258 261
@@ -271,29 +274,29 @@ impl<'a> Edits<'a> {
271#[derive(Debug)] 274#[derive(Debug)]
272struct RunningLineCol { 275struct RunningLineCol {
273 line: u32, 276 line: u32,
274 last_newline: TextUnit, 277 last_newline: TextSize,
275 col_adjust: TextUnit, 278 col_adjust: TextSize,
276} 279}
277 280
278impl RunningLineCol { 281impl RunningLineCol {
279 fn new() -> RunningLineCol { 282 fn new() -> RunningLineCol {
280 RunningLineCol { line: 0, last_newline: TextUnit::from(0), col_adjust: TextUnit::from(0) } 283 RunningLineCol { line: 0, last_newline: TextSize::from(0), col_adjust: TextSize::from(0) }
281 } 284 }
282 285
283 fn to_line_col(&self, offset: TextUnit) -> LineCol { 286 fn to_line_col(&self, offset: TextSize) -> LineCol {
284 LineCol { 287 LineCol {
285 line: self.line, 288 line: self.line,
286 col_utf16: ((offset - self.last_newline) - self.col_adjust).into(), 289 col_utf16: ((offset - self.last_newline) - self.col_adjust).into(),
287 } 290 }
288 } 291 }
289 292
290 fn add_line(&mut self, newline: TextUnit) { 293 fn add_line(&mut self, newline: TextSize) {
291 self.line += 1; 294 self.line += 1;
292 self.last_newline = newline; 295 self.last_newline = newline;
293 self.col_adjust = TextUnit::from(0); 296 self.col_adjust = TextSize::from(0);
294 } 297 }
295 298
296 fn adjust_col(&mut self, range: TextRange) { 299 fn adjust_col(&mut self, range: TextRange) {
297 self.col_adjust += range.len() - TextUnit::from(1); 300 self.col_adjust += range.len() - TextSize::from(1);
298 } 301 }
299} 302}
diff --git a/crates/ra_ide_db/src/search.rs b/crates/ra_ide_db/src/search.rs
index 1bf014149..b464959fc 100644
--- a/crates/ra_ide_db/src/search.rs
+++ b/crates/ra_ide_db/src/search.rs
@@ -4,13 +4,13 @@
4//! get a super-set of matches. Then, we we confirm each match using precise 4//! get a super-set of matches. Then, we we confirm each match using precise
5//! name resolution. 5//! name resolution.
6 6
7use std::mem; 7use std::{convert::TryInto, mem};
8 8
9use hir::{DefWithBody, HasSource, Module, ModuleSource, Semantics, Visibility}; 9use hir::{DefWithBody, HasSource, Module, ModuleSource, Semantics, Visibility};
10use once_cell::unsync::Lazy; 10use once_cell::unsync::Lazy;
11use ra_db::{FileId, FileRange, SourceDatabaseExt}; 11use ra_db::{FileId, FileRange, SourceDatabaseExt};
12use ra_prof::profile; 12use ra_prof::profile;
13use ra_syntax::{ast, match_ast, AstNode, TextRange, TextUnit}; 13use ra_syntax::{ast, match_ast, AstNode, TextRange, TextSize};
14use rustc_hash::FxHashMap; 14use rustc_hash::FxHashMap;
15use test_utils::tested_by; 15use test_utils::tested_by;
16 16
@@ -28,8 +28,8 @@ pub struct Reference {
28 28
29#[derive(Debug, Clone, PartialEq)] 29#[derive(Debug, Clone, PartialEq)]
30pub enum ReferenceKind { 30pub enum ReferenceKind {
31 StructFieldShorthandForField, 31 FieldShorthandForField,
32 StructFieldShorthandForLocal, 32 FieldShorthandForLocal,
33 StructLiteral, 33 StructLiteral,
34 Other, 34 Other,
35} 35}
@@ -85,7 +85,7 @@ impl SearchScope {
85 match (r1, r2) { 85 match (r1, r2) {
86 (None, r) | (r, None) => Some(r), 86 (None, r) | (r, None) => Some(r),
87 (Some(r1), Some(r2)) => { 87 (Some(r1), Some(r2)) => {
88 let r = r1.intersection(&r2)?; 88 let r = r1.intersect(r2)?;
89 Some(Some(r)) 89 Some(Some(r))
90 } 90 }
91 } 91 }
@@ -201,13 +201,13 @@ impl Definition {
201 for (file_id, search_range) in search_scope { 201 for (file_id, search_range) in search_scope {
202 let text = db.file_text(file_id); 202 let text = db.file_text(file_id);
203 let search_range = 203 let search_range =
204 search_range.unwrap_or(TextRange::offset_len(0.into(), TextUnit::of_str(&text))); 204 search_range.unwrap_or(TextRange::up_to(TextSize::of(text.as_str())));
205 205
206 let sema = Semantics::new(db); 206 let sema = Semantics::new(db);
207 let tree = Lazy::new(|| sema.parse(file_id).syntax().clone()); 207 let tree = Lazy::new(|| sema.parse(file_id).syntax().clone());
208 208
209 for (idx, _) in text.match_indices(pat) { 209 for (idx, _) in text.match_indices(pat) {
210 let offset = TextUnit::from_usize(idx); 210 let offset: TextSize = idx.try_into().unwrap();
211 if !search_range.contains_inclusive(offset) { 211 if !search_range.contains_inclusive(offset) {
212 tested_by!(search_filters_by_range; force); 212 tested_by!(search_filters_by_range; force);
213 continue; 213 continue;
@@ -242,14 +242,14 @@ impl Definition {
242 } 242 }
243 Some(NameRefClass::FieldShorthand { local, field }) => { 243 Some(NameRefClass::FieldShorthand { local, field }) => {
244 match self { 244 match self {
245 Definition::StructField(_) if &field == self => refs.push(Reference { 245 Definition::Field(_) if &field == self => refs.push(Reference {
246 file_range: sema.original_range(name_ref.syntax()), 246 file_range: sema.original_range(name_ref.syntax()),
247 kind: ReferenceKind::StructFieldShorthandForField, 247 kind: ReferenceKind::FieldShorthandForField,
248 access: reference_access(&field, &name_ref), 248 access: reference_access(&field, &name_ref),
249 }), 249 }),
250 Definition::Local(l) if &local == l => refs.push(Reference { 250 Definition::Local(l) if &local == l => refs.push(Reference {
251 file_range: sema.original_range(name_ref.syntax()), 251 file_range: sema.original_range(name_ref.syntax()),
252 kind: ReferenceKind::StructFieldShorthandForLocal, 252 kind: ReferenceKind::FieldShorthandForLocal,
253 access: reference_access(&Definition::Local(local), &name_ref), 253 access: reference_access(&Definition::Local(local), &name_ref),
254 }), 254 }),
255 255
@@ -267,7 +267,7 @@ impl Definition {
267fn reference_access(def: &Definition, name_ref: &ast::NameRef) -> Option<ReferenceAccess> { 267fn reference_access(def: &Definition, name_ref: &ast::NameRef) -> Option<ReferenceAccess> {
268 // Only Locals and Fields have accesses for now. 268 // Only Locals and Fields have accesses for now.
269 match def { 269 match def {
270 Definition::Local(_) | Definition::StructField(_) => {} 270 Definition::Local(_) | Definition::Field(_) => {}
271 _ => return None, 271 _ => return None,
272 }; 272 };
273 273
diff --git a/crates/ra_mbe/src/syntax_bridge.rs b/crates/ra_mbe/src/syntax_bridge.rs
index 2b4390eb2..bb28acfd9 100644
--- a/crates/ra_mbe/src/syntax_bridge.rs
+++ b/crates/ra_mbe/src/syntax_bridge.rs
@@ -5,7 +5,7 @@ use ra_syntax::{
5 ast::{self, make::tokens::doc_comment}, 5 ast::{self, make::tokens::doc_comment},
6 tokenize, AstToken, Parse, SmolStr, SyntaxKind, 6 tokenize, AstToken, Parse, SmolStr, SyntaxKind,
7 SyntaxKind::*, 7 SyntaxKind::*,
8 SyntaxNode, SyntaxToken, SyntaxTreeBuilder, TextRange, TextUnit, Token as RawToken, T, 8 SyntaxNode, SyntaxToken, SyntaxTreeBuilder, TextRange, TextSize, Token as RawToken, T,
9}; 9};
10use rustc_hash::FxHashMap; 10use rustc_hash::FxHashMap;
11use tt::buffer::{Cursor, TokenBuffer}; 11use tt::buffer::{Cursor, TokenBuffer};
@@ -99,11 +99,11 @@ pub fn parse_to_token_tree(text: &str) -> Option<(tt::Subtree, TokenMap)> {
99 99
100 let mut conv = RawConvertor { 100 let mut conv = RawConvertor {
101 text, 101 text,
102 offset: TextUnit::default(), 102 offset: TextSize::default(),
103 inner: tokens.iter(), 103 inner: tokens.iter(),
104 id_alloc: TokenIdAlloc { 104 id_alloc: TokenIdAlloc {
105 map: Default::default(), 105 map: Default::default(),
106 global_offset: TextUnit::default(), 106 global_offset: TextSize::default(),
107 next_id: 0, 107 next_id: 0,
108 }, 108 },
109 }; 109 };
@@ -227,7 +227,7 @@ fn convert_doc_comment(token: &ra_syntax::SyntaxToken) -> Option<Vec<tt::TokenTr
227 227
228struct TokenIdAlloc { 228struct TokenIdAlloc {
229 map: TokenMap, 229 map: TokenMap,
230 global_offset: TextUnit, 230 global_offset: TextSize,
231 next_id: u32, 231 next_id: u32,
232} 232}
233 233
@@ -266,7 +266,7 @@ impl TokenIdAlloc {
266/// A Raw Token (straightly from lexer) convertor 266/// A Raw Token (straightly from lexer) convertor
267struct RawConvertor<'a> { 267struct RawConvertor<'a> {
268 text: &'a str, 268 text: &'a str,
269 offset: TextUnit, 269 offset: TextSize,
270 id_alloc: TokenIdAlloc, 270 id_alloc: TokenIdAlloc,
271 inner: std::slice::Iter<'a, RawToken>, 271 inner: std::slice::Iter<'a, RawToken>,
272} 272}
@@ -314,7 +314,7 @@ trait TokenConvertor {
314 } 314 }
315 315
316 result.push(if k.is_punct() { 316 result.push(if k.is_punct() {
317 assert_eq!(range.len().to_usize(), 1); 317 assert_eq!(range.len(), TextSize::of('.'));
318 let delim = match k { 318 let delim = match k {
319 T!['('] => Some((tt::DelimiterKind::Parenthesis, T![')'])), 319 T!['('] => Some((tt::DelimiterKind::Parenthesis, T![')'])),
320 T!['{'] => Some((tt::DelimiterKind::Brace, T!['}'])), 320 T!['{'] => Some((tt::DelimiterKind::Brace, T!['}'])),
@@ -381,8 +381,8 @@ trait TokenConvertor {
381 k if k.is_keyword() => make_leaf!(Ident), 381 k if k.is_keyword() => make_leaf!(Ident),
382 k if k.is_literal() => make_leaf!(Literal), 382 k if k.is_literal() => make_leaf!(Literal),
383 LIFETIME => { 383 LIFETIME => {
384 let char_unit = TextUnit::from_usize(1); 384 let char_unit = TextSize::of('\'');
385 let r = TextRange::offset_len(range.start(), char_unit); 385 let r = TextRange::at(range.start(), char_unit);
386 let apostrophe = tt::Leaf::from(tt::Punct { 386 let apostrophe = tt::Leaf::from(tt::Punct {
387 char: '\'', 387 char: '\'',
388 spacing: tt::Spacing::Joint, 388 spacing: tt::Spacing::Joint,
@@ -390,8 +390,7 @@ trait TokenConvertor {
390 }); 390 });
391 result.push(apostrophe.into()); 391 result.push(apostrophe.into());
392 392
393 let r = 393 let r = TextRange::at(range.start() + char_unit, range.len() - char_unit);
394 TextRange::offset_len(range.start() + char_unit, range.len() - char_unit);
395 let ident = tt::Leaf::from(tt::Ident { 394 let ident = tt::Leaf::from(tt::Ident {
396 text: SmolStr::new(&token.to_text()[1..]), 395 text: SmolStr::new(&token.to_text()[1..]),
397 id: self.id_alloc().alloc(r), 396 id: self.id_alloc().alloc(r),
@@ -440,7 +439,7 @@ impl<'a> TokenConvertor for RawConvertor<'a> {
440 439
441 fn bump(&mut self) -> Option<(Self::Token, TextRange)> { 440 fn bump(&mut self) -> Option<(Self::Token, TextRange)> {
442 let token = self.inner.next()?; 441 let token = self.inner.next()?;
443 let range = TextRange::offset_len(self.offset, token.len); 442 let range = TextRange::at(self.offset, token.len);
444 self.offset += token.len; 443 self.offset += token.len;
445 444
446 Some(((*token, &self.text[range]), range)) 445 Some(((*token, &self.text[range]), range))
@@ -450,7 +449,7 @@ impl<'a> TokenConvertor for RawConvertor<'a> {
450 let token = self.inner.as_slice().get(0).cloned(); 449 let token = self.inner.as_slice().get(0).cloned();
451 450
452 token.map(|it| { 451 token.map(|it| {
453 let range = TextRange::offset_len(self.offset, it.len); 452 let range = TextRange::at(self.offset, it.len);
454 (it, &self.text[range]) 453 (it, &self.text[range])
455 }) 454 })
456 } 455 }
@@ -464,11 +463,11 @@ struct Convertor {
464 id_alloc: TokenIdAlloc, 463 id_alloc: TokenIdAlloc,
465 current: Option<SyntaxToken>, 464 current: Option<SyntaxToken>,
466 range: TextRange, 465 range: TextRange,
467 punct_offset: Option<(SyntaxToken, TextUnit)>, 466 punct_offset: Option<(SyntaxToken, TextSize)>,
468} 467}
469 468
470impl Convertor { 469impl Convertor {
471 fn new(node: &SyntaxNode, global_offset: TextUnit) -> Convertor { 470 fn new(node: &SyntaxNode, global_offset: TextSize) -> Convertor {
472 Convertor { 471 Convertor {
473 id_alloc: { TokenIdAlloc { map: TokenMap::default(), global_offset, next_id: 0 } }, 472 id_alloc: { TokenIdAlloc { map: TokenMap::default(), global_offset, next_id: 0 } },
474 current: node.first_token(), 473 current: node.first_token(),
@@ -481,7 +480,7 @@ impl Convertor {
481#[derive(Debug)] 480#[derive(Debug)]
482enum SynToken { 481enum SynToken {
483 Ordiniary(SyntaxToken), 482 Ordiniary(SyntaxToken),
484 Punch(SyntaxToken, TextUnit), 483 Punch(SyntaxToken, TextSize),
485} 484}
486 485
487impl SynToken { 486impl SynToken {
@@ -500,7 +499,7 @@ impl SrcToken for SynToken {
500 fn to_char(&self) -> Option<char> { 499 fn to_char(&self) -> Option<char> {
501 match self { 500 match self {
502 SynToken::Ordiniary(_) => None, 501 SynToken::Ordiniary(_) => None,
503 SynToken::Punch(it, i) => it.text().chars().nth(i.to_usize()), 502 SynToken::Punch(it, i) => it.text().chars().nth((*i).into()),
504 } 503 }
505 } 504 }
506 fn to_text(&self) -> SmolStr { 505 fn to_text(&self) -> SmolStr {
@@ -516,26 +515,26 @@ impl TokenConvertor for Convertor {
516 515
517 fn bump(&mut self) -> Option<(Self::Token, TextRange)> { 516 fn bump(&mut self) -> Option<(Self::Token, TextRange)> {
518 if let Some((punct, offset)) = self.punct_offset.clone() { 517 if let Some((punct, offset)) = self.punct_offset.clone() {
519 if offset.to_usize() + 1 < punct.text().len() { 518 if usize::from(offset) + 1 < punct.text().len() {
520 let offset = offset + TextUnit::from_usize(1); 519 let offset = offset + TextSize::of('.');
521 let range = punct.text_range(); 520 let range = punct.text_range();
522 self.punct_offset = Some((punct.clone(), offset)); 521 self.punct_offset = Some((punct.clone(), offset));
523 let range = TextRange::offset_len(range.start() + offset, TextUnit::from_usize(1)); 522 let range = TextRange::at(range.start() + offset, TextSize::of('.'));
524 return Some((SynToken::Punch(punct, offset), range)); 523 return Some((SynToken::Punch(punct, offset), range));
525 } 524 }
526 } 525 }
527 526
528 let curr = self.current.clone()?; 527 let curr = self.current.clone()?;
529 if !curr.text_range().is_subrange(&self.range) { 528 if !&self.range.contains_range(curr.text_range()) {
530 return None; 529 return None;
531 } 530 }
532 self.current = curr.next_token(); 531 self.current = curr.next_token();
533 532
534 let token = if curr.kind().is_punct() { 533 let token = if curr.kind().is_punct() {
535 let range = curr.text_range(); 534 let range = curr.text_range();
536 let range = TextRange::offset_len(range.start(), TextUnit::from_usize(1)); 535 let range = TextRange::at(range.start(), TextSize::of('.'));
537 self.punct_offset = Some((curr.clone(), TextUnit::from_usize(0))); 536 self.punct_offset = Some((curr.clone(), 0.into()));
538 (SynToken::Punch(curr, TextUnit::from_usize(0)), range) 537 (SynToken::Punch(curr, 0.into()), range)
539 } else { 538 } else {
540 self.punct_offset = None; 539 self.punct_offset = None;
541 let range = curr.text_range(); 540 let range = curr.text_range();
@@ -547,19 +546,19 @@ impl TokenConvertor for Convertor {
547 546
548 fn peek(&self) -> Option<Self::Token> { 547 fn peek(&self) -> Option<Self::Token> {
549 if let Some((punct, mut offset)) = self.punct_offset.clone() { 548 if let Some((punct, mut offset)) = self.punct_offset.clone() {
550 offset = offset + TextUnit::from_usize(1); 549 offset = offset + TextSize::of('.');
551 if offset.to_usize() < punct.text().len() { 550 if usize::from(offset) < punct.text().len() {
552 return Some(SynToken::Punch(punct, offset)); 551 return Some(SynToken::Punch(punct, offset));
553 } 552 }
554 } 553 }
555 554
556 let curr = self.current.clone()?; 555 let curr = self.current.clone()?;
557 if !curr.text_range().is_subrange(&self.range) { 556 if !self.range.contains_range(curr.text_range()) {
558 return None; 557 return None;
559 } 558 }
560 559
561 let token = if curr.kind().is_punct() { 560 let token = if curr.kind().is_punct() {
562 SynToken::Punch(curr, TextUnit::from_usize(0)) 561 SynToken::Punch(curr, 0.into())
563 } else { 562 } else {
564 SynToken::Ordiniary(curr) 563 SynToken::Ordiniary(curr)
565 }; 564 };
@@ -574,8 +573,8 @@ impl TokenConvertor for Convertor {
574struct TtTreeSink<'a> { 573struct TtTreeSink<'a> {
575 buf: String, 574 buf: String,
576 cursor: Cursor<'a>, 575 cursor: Cursor<'a>,
577 open_delims: FxHashMap<tt::TokenId, TextUnit>, 576 open_delims: FxHashMap<tt::TokenId, TextSize>,
578 text_pos: TextUnit, 577 text_pos: TextSize,
579 inner: SyntaxTreeBuilder, 578 inner: SyntaxTreeBuilder,
580 token_map: TokenMap, 579 token_map: TokenMap,
581 580
@@ -641,7 +640,7 @@ impl<'a> TreeSink for TtTreeSink<'a> {
641 } 640 }
642 tt::Leaf::Literal(lit) => (lit.text.clone(), lit.id), 641 tt::Leaf::Literal(lit) => (lit.text.clone(), lit.id),
643 }; 642 };
644 let range = TextRange::offset_len(self.text_pos, TextUnit::of_str(&text)); 643 let range = TextRange::at(self.text_pos, TextSize::of(text.as_str()));
645 self.token_map.insert(id, range); 644 self.token_map.insert(id, range);
646 self.cursor = self.cursor.bump(); 645 self.cursor = self.cursor.bump();
647 text 646 text
@@ -658,10 +657,8 @@ impl<'a> TreeSink for TtTreeSink<'a> {
658 self.cursor = self.cursor.bump(); 657 self.cursor = self.cursor.bump();
659 if let Some(id) = parent.delimiter.map(|it| it.id) { 658 if let Some(id) = parent.delimiter.map(|it| it.id) {
660 if let Some(open_delim) = self.open_delims.get(&id) { 659 if let Some(open_delim) = self.open_delims.get(&id) {
661 let open_range = 660 let open_range = TextRange::at(*open_delim, TextSize::of('('));
662 TextRange::offset_len(*open_delim, TextUnit::from_usize(1)); 661 let close_range = TextRange::at(self.text_pos, TextSize::of('('));
663 let close_range =
664 TextRange::offset_len(self.text_pos, TextUnit::from_usize(1));
665 self.token_map.insert_delim(id, open_range, close_range); 662 self.token_map.insert_delim(id, open_range, close_range);
666 } 663 }
667 } 664 }
@@ -672,7 +669,7 @@ impl<'a> TreeSink for TtTreeSink<'a> {
672 } 669 }
673 }; 670 };
674 self.buf += &text; 671 self.buf += &text;
675 self.text_pos += TextUnit::of_str(&text); 672 self.text_pos += TextSize::of(text.as_str());
676 } 673 }
677 674
678 let text = SmolStr::new(self.buf.as_str()); 675 let text = SmolStr::new(self.buf.as_str());
@@ -690,7 +687,7 @@ impl<'a> TreeSink for TtTreeSink<'a> {
690 // other parts of RA such that we don't add whitespace here. 687 // other parts of RA such that we don't add whitespace here.
691 if curr.spacing == tt::Spacing::Alone && curr.char != ';' { 688 if curr.spacing == tt::Spacing::Alone && curr.char != ';' {
692 self.inner.token(WHITESPACE, " ".into()); 689 self.inner.token(WHITESPACE, " ".into());
693 self.text_pos += TextUnit::of_char(' '); 690 self.text_pos += TextSize::of(' ');
694 } 691 }
695 } 692 }
696 } 693 }
diff --git a/crates/ra_mbe/src/tests.rs b/crates/ra_mbe/src/tests.rs
index 6b139fb12..0d924ce58 100644
--- a/crates/ra_mbe/src/tests.rs
+++ b/crates/ra_mbe/src/tests.rs
@@ -257,30 +257,30 @@ fn test_expr_order() {
257 let dump = format!("{:#?}", expanded); 257 let dump = format!("{:#?}", expanded);
258 assert_eq_text!( 258 assert_eq_text!(
259 dump.trim(), 259 dump.trim(),
260 r#"MACRO_ITEMS@[0; 15) 260 r#"MACRO_ITEMS@0..15
261 FN_DEF@[0; 15) 261 FN_DEF@0..15
262 FN_KW@[0; 2) "fn" 262 FN_KW@0..2 "fn"
263 NAME@[2; 5) 263 NAME@2..5
264 IDENT@[2; 5) "bar" 264 IDENT@2..5 "bar"
265 PARAM_LIST@[5; 7) 265 PARAM_LIST@5..7
266 L_PAREN@[5; 6) "(" 266 L_PAREN@5..6 "("
267 R_PAREN@[6; 7) ")" 267 R_PAREN@6..7 ")"
268 BLOCK_EXPR@[7; 15) 268 BLOCK_EXPR@7..15
269 BLOCK@[7; 15) 269 BLOCK@7..15
270 L_CURLY@[7; 8) "{" 270 L_CURLY@7..8 "{"
271 EXPR_STMT@[8; 14) 271 EXPR_STMT@8..14
272 BIN_EXPR@[8; 13) 272 BIN_EXPR@8..13
273 BIN_EXPR@[8; 11) 273 BIN_EXPR@8..11
274 LITERAL@[8; 9) 274 LITERAL@8..9
275 INT_NUMBER@[8; 9) "1" 275 INT_NUMBER@8..9 "1"
276 PLUS@[9; 10) "+" 276 PLUS@9..10 "+"
277 LITERAL@[10; 11) 277 LITERAL@10..11
278 INT_NUMBER@[10; 11) "1" 278 INT_NUMBER@10..11 "1"
279 STAR@[11; 12) "*" 279 STAR@11..12 "*"
280 LITERAL@[12; 13) 280 LITERAL@12..13
281 INT_NUMBER@[12; 13) "2" 281 INT_NUMBER@12..13 "2"
282 SEMICOLON@[13; 14) ";" 282 SEMICOLON@13..14 ";"
283 R_CURLY@[14; 15) "}""#, 283 R_CURLY@14..15 "}""#,
284 ); 284 );
285} 285}
286 286
@@ -490,39 +490,39 @@ fn test_expand_to_item_list() {
490 assert_eq!( 490 assert_eq!(
491 format!("{:#?}", tree).trim(), 491 format!("{:#?}", tree).trim(),
492 r#" 492 r#"
493MACRO_ITEMS@[0; 40) 493MACRO_ITEMS@0..40
494 STRUCT_DEF@[0; 20) 494 STRUCT_DEF@0..20
495 STRUCT_KW@[0; 6) "struct" 495 STRUCT_KW@0..6 "struct"
496 NAME@[6; 9) 496 NAME@6..9
497 IDENT@[6; 9) "Foo" 497 IDENT@6..9 "Foo"
498 RECORD_FIELD_DEF_LIST@[9; 20) 498 RECORD_FIELD_DEF_LIST@9..20
499 L_CURLY@[9; 10) "{" 499 L_CURLY@9..10 "{"
500 RECORD_FIELD_DEF@[10; 19) 500 RECORD_FIELD_DEF@10..19
501 NAME@[10; 15) 501 NAME@10..15
502 IDENT@[10; 15) "field" 502 IDENT@10..15 "field"
503 COLON@[15; 16) ":" 503 COLON@15..16 ":"
504 PATH_TYPE@[16; 19) 504 PATH_TYPE@16..19
505 PATH@[16; 19) 505 PATH@16..19
506 PATH_SEGMENT@[16; 19) 506 PATH_SEGMENT@16..19
507 NAME_REF@[16; 19) 507 NAME_REF@16..19
508 IDENT@[16; 19) "u32" 508 IDENT@16..19 "u32"
509 R_CURLY@[19; 20) "}" 509 R_CURLY@19..20 "}"
510 STRUCT_DEF@[20; 40) 510 STRUCT_DEF@20..40
511 STRUCT_KW@[20; 26) "struct" 511 STRUCT_KW@20..26 "struct"
512 NAME@[26; 29) 512 NAME@26..29
513 IDENT@[26; 29) "Bar" 513 IDENT@26..29 "Bar"
514 RECORD_FIELD_DEF_LIST@[29; 40) 514 RECORD_FIELD_DEF_LIST@29..40
515 L_CURLY@[29; 30) "{" 515 L_CURLY@29..30 "{"
516 RECORD_FIELD_DEF@[30; 39) 516 RECORD_FIELD_DEF@30..39
517 NAME@[30; 35) 517 NAME@30..35
518 IDENT@[30; 35) "field" 518 IDENT@30..35 "field"
519 COLON@[35; 36) ":" 519 COLON@35..36 ":"
520 PATH_TYPE@[36; 39) 520 PATH_TYPE@36..39
521 PATH@[36; 39) 521 PATH@36..39
522 PATH_SEGMENT@[36; 39) 522 PATH_SEGMENT@36..39
523 NAME_REF@[36; 39) 523 NAME_REF@36..39
524 IDENT@[36; 39) "u32" 524 IDENT@36..39 "u32"
525 R_CURLY@[39; 40) "}""# 525 R_CURLY@39..40 "}""#
526 .trim() 526 .trim()
527 ); 527 );
528} 528}
@@ -623,37 +623,37 @@ fn test_tt_to_stmts() {
623 623
624 assert_eq!( 624 assert_eq!(
625 format!("{:#?}", stmts).trim(), 625 format!("{:#?}", stmts).trim(),
626 r#"MACRO_STMTS@[0; 15) 626 r#"MACRO_STMTS@0..15
627 LET_STMT@[0; 7) 627 LET_STMT@0..7
628 LET_KW@[0; 3) "let" 628 LET_KW@0..3 "let"
629 BIND_PAT@[3; 4) 629 BIND_PAT@3..4
630 NAME@[3; 4) 630 NAME@3..4
631 IDENT@[3; 4) "a" 631 IDENT@3..4 "a"
632 EQ@[4; 5) "=" 632 EQ@4..5 "="
633 LITERAL@[5; 6) 633 LITERAL@5..6
634 INT_NUMBER@[5; 6) "0" 634 INT_NUMBER@5..6 "0"
635 SEMICOLON@[6; 7) ";" 635 SEMICOLON@6..7 ";"
636 EXPR_STMT@[7; 14) 636 EXPR_STMT@7..14
637 BIN_EXPR@[7; 13) 637 BIN_EXPR@7..13
638 PATH_EXPR@[7; 8) 638 PATH_EXPR@7..8
639 PATH@[7; 8) 639 PATH@7..8
640 PATH_SEGMENT@[7; 8) 640 PATH_SEGMENT@7..8
641 NAME_REF@[7; 8) 641 NAME_REF@7..8
642 IDENT@[7; 8) "a" 642 IDENT@7..8 "a"
643 EQ@[8; 9) "=" 643 EQ@8..9 "="
644 BIN_EXPR@[9; 13) 644 BIN_EXPR@9..13
645 LITERAL@[9; 11) 645 LITERAL@9..11
646 INT_NUMBER@[9; 11) "10" 646 INT_NUMBER@9..11 "10"
647 PLUS@[11; 12) "+" 647 PLUS@11..12 "+"
648 LITERAL@[12; 13) 648 LITERAL@12..13
649 INT_NUMBER@[12; 13) "1" 649 INT_NUMBER@12..13 "1"
650 SEMICOLON@[13; 14) ";" 650 SEMICOLON@13..14 ";"
651 EXPR_STMT@[14; 15) 651 EXPR_STMT@14..15
652 PATH_EXPR@[14; 15) 652 PATH_EXPR@14..15
653 PATH@[14; 15) 653 PATH@14..15
654 PATH_SEGMENT@[14; 15) 654 PATH_SEGMENT@14..15
655 NAME_REF@[14; 15) 655 NAME_REF@14..15
656 IDENT@[14; 15) "a""#, 656 IDENT@14..15 "a""#,
657 ); 657 );
658} 658}
659 659
@@ -974,20 +974,20 @@ fn test_tt_composite2() {
974 let res = format!("{:#?}", &node); 974 let res = format!("{:#?}", &node);
975 assert_eq_text!( 975 assert_eq_text!(
976 res.trim(), 976 res.trim(),
977 r###"MACRO_ITEMS@[0; 10) 977 r###"MACRO_ITEMS@0..10
978 MACRO_CALL@[0; 10) 978 MACRO_CALL@0..10
979 PATH@[0; 3) 979 PATH@0..3
980 PATH_SEGMENT@[0; 3) 980 PATH_SEGMENT@0..3
981 NAME_REF@[0; 3) 981 NAME_REF@0..3
982 IDENT@[0; 3) "abs" 982 IDENT@0..3 "abs"
983 BANG@[3; 4) "!" 983 BANG@3..4 "!"
984 TOKEN_TREE@[4; 10) 984 TOKEN_TREE@4..10
985 L_PAREN@[4; 5) "(" 985 L_PAREN@4..5 "("
986 EQ@[5; 6) "=" 986 EQ@5..6 "="
987 R_ANGLE@[6; 7) ">" 987 R_ANGLE@6..7 ">"
988 WHITESPACE@[7; 8) " " 988 WHITESPACE@7..8 " "
989 POUND@[8; 9) "#" 989 POUND@8..9 "#"
990 R_PAREN@[9; 10) ")""### 990 R_PAREN@9..10 ")""###
991 ); 991 );
992} 992}
993 993
@@ -1113,69 +1113,69 @@ fn test_vec() {
1113 1113
1114 assert_eq!( 1114 assert_eq!(
1115 format!("{:#?}", tree).trim(), 1115 format!("{:#?}", tree).trim(),
1116 r#"BLOCK_EXPR@[0; 45) 1116 r#"BLOCK_EXPR@0..45
1117 BLOCK@[0; 45) 1117 BLOCK@0..45
1118 L_CURLY@[0; 1) "{" 1118 L_CURLY@0..1 "{"
1119 LET_STMT@[1; 20) 1119 LET_STMT@1..20
1120 LET_KW@[1; 4) "let" 1120 LET_KW@1..4 "let"
1121 BIND_PAT@[4; 8) 1121 BIND_PAT@4..8
1122 MUT_KW@[4; 7) "mut" 1122 MUT_KW@4..7 "mut"
1123 NAME@[7; 8) 1123 NAME@7..8
1124 IDENT@[7; 8) "v" 1124 IDENT@7..8 "v"
1125 EQ@[8; 9) "=" 1125 EQ@8..9 "="
1126 CALL_EXPR@[9; 19) 1126 CALL_EXPR@9..19
1127 PATH_EXPR@[9; 17) 1127 PATH_EXPR@9..17
1128 PATH@[9; 17) 1128 PATH@9..17
1129 PATH@[9; 12) 1129 PATH@9..12
1130 PATH_SEGMENT@[9; 12) 1130 PATH_SEGMENT@9..12
1131 NAME_REF@[9; 12) 1131 NAME_REF@9..12
1132 IDENT@[9; 12) "Vec" 1132 IDENT@9..12 "Vec"
1133 COLON2@[12; 14) "::" 1133 COLON2@12..14 "::"
1134 PATH_SEGMENT@[14; 17) 1134 PATH_SEGMENT@14..17
1135 NAME_REF@[14; 17) 1135 NAME_REF@14..17
1136 IDENT@[14; 17) "new" 1136 IDENT@14..17 "new"
1137 ARG_LIST@[17; 19) 1137 ARG_LIST@17..19
1138 L_PAREN@[17; 18) "(" 1138 L_PAREN@17..18 "("
1139 R_PAREN@[18; 19) ")" 1139 R_PAREN@18..19 ")"
1140 SEMICOLON@[19; 20) ";" 1140 SEMICOLON@19..20 ";"
1141 EXPR_STMT@[20; 33) 1141 EXPR_STMT@20..33
1142 METHOD_CALL_EXPR@[20; 32) 1142 METHOD_CALL_EXPR@20..32
1143 PATH_EXPR@[20; 21) 1143 PATH_EXPR@20..21
1144 PATH@[20; 21) 1144 PATH@20..21
1145 PATH_SEGMENT@[20; 21) 1145 PATH_SEGMENT@20..21
1146 NAME_REF@[20; 21) 1146 NAME_REF@20..21
1147 IDENT@[20; 21) "v" 1147 IDENT@20..21 "v"
1148 DOT@[21; 22) "." 1148 DOT@21..22 "."
1149 NAME_REF@[22; 26) 1149 NAME_REF@22..26
1150 IDENT@[22; 26) "push" 1150 IDENT@22..26 "push"
1151 ARG_LIST@[26; 32) 1151 ARG_LIST@26..32
1152 L_PAREN@[26; 27) "(" 1152 L_PAREN@26..27 "("
1153 LITERAL@[27; 31) 1153 LITERAL@27..31
1154 INT_NUMBER@[27; 31) "1u32" 1154 INT_NUMBER@27..31 "1u32"
1155 R_PAREN@[31; 32) ")" 1155 R_PAREN@31..32 ")"
1156 SEMICOLON@[32; 33) ";" 1156 SEMICOLON@32..33 ";"
1157 EXPR_STMT@[33; 43) 1157 EXPR_STMT@33..43
1158 METHOD_CALL_EXPR@[33; 42) 1158 METHOD_CALL_EXPR@33..42
1159 PATH_EXPR@[33; 34) 1159 PATH_EXPR@33..34
1160 PATH@[33; 34) 1160 PATH@33..34
1161 PATH_SEGMENT@[33; 34) 1161 PATH_SEGMENT@33..34
1162 NAME_REF@[33; 34) 1162 NAME_REF@33..34
1163 IDENT@[33; 34) "v" 1163 IDENT@33..34 "v"
1164 DOT@[34; 35) "." 1164 DOT@34..35 "."
1165 NAME_REF@[35; 39) 1165 NAME_REF@35..39
1166 IDENT@[35; 39) "push" 1166 IDENT@35..39 "push"
1167 ARG_LIST@[39; 42) 1167 ARG_LIST@39..42
1168 L_PAREN@[39; 40) "(" 1168 L_PAREN@39..40 "("
1169 LITERAL@[40; 41) 1169 LITERAL@40..41
1170 INT_NUMBER@[40; 41) "2" 1170 INT_NUMBER@40..41 "2"
1171 R_PAREN@[41; 42) ")" 1171 R_PAREN@41..42 ")"
1172 SEMICOLON@[42; 43) ";" 1172 SEMICOLON@42..43 ";"
1173 PATH_EXPR@[43; 44) 1173 PATH_EXPR@43..44
1174 PATH@[43; 44) 1174 PATH@43..44
1175 PATH_SEGMENT@[43; 44) 1175 PATH_SEGMENT@43..44
1176 NAME_REF@[43; 44) 1176 NAME_REF@43..44
1177 IDENT@[43; 44) "v" 1177 IDENT@43..44 "v"
1178 R_CURLY@[44; 45) "}""# 1178 R_CURLY@44..45 "}""#
1179 ); 1179 );
1180} 1180}
1181 1181
@@ -1812,45 +1812,45 @@ fn test_no_space_after_semi_colon() {
1812 let dump = format!("{:#?}", expanded); 1812 let dump = format!("{:#?}", expanded);
1813 assert_eq_text!( 1813 assert_eq_text!(
1814 dump.trim(), 1814 dump.trim(),
1815 r###"MACRO_ITEMS@[0; 52) 1815 r###"MACRO_ITEMS@0..52
1816 MODULE@[0; 26) 1816 MODULE@0..26
1817 ATTR@[0; 21) 1817 ATTR@0..21
1818 POUND@[0; 1) "#" 1818 POUND@0..1 "#"
1819 L_BRACK@[1; 2) "[" 1819 L_BRACK@1..2 "["
1820 PATH@[2; 5) 1820 PATH@2..5
1821 PATH_SEGMENT@[2; 5) 1821 PATH_SEGMENT@2..5
1822 NAME_REF@[2; 5) 1822 NAME_REF@2..5
1823 IDENT@[2; 5) "cfg" 1823 IDENT@2..5 "cfg"
1824 TOKEN_TREE@[5; 20) 1824 TOKEN_TREE@5..20
1825 L_PAREN@[5; 6) "(" 1825 L_PAREN@5..6 "("
1826 IDENT@[6; 13) "feature" 1826 IDENT@6..13 "feature"
1827 EQ@[13; 14) "=" 1827 EQ@13..14 "="
1828 STRING@[14; 19) "\"std\"" 1828 STRING@14..19 "\"std\""
1829 R_PAREN@[19; 20) ")" 1829 R_PAREN@19..20 ")"
1830 R_BRACK@[20; 21) "]" 1830 R_BRACK@20..21 "]"
1831 MOD_KW@[21; 24) "mod" 1831 MOD_KW@21..24 "mod"
1832 NAME@[24; 25) 1832 NAME@24..25
1833 IDENT@[24; 25) "m" 1833 IDENT@24..25 "m"
1834 SEMICOLON@[25; 26) ";" 1834 SEMICOLON@25..26 ";"
1835 MODULE@[26; 52) 1835 MODULE@26..52
1836 ATTR@[26; 47) 1836 ATTR@26..47
1837 POUND@[26; 27) "#" 1837 POUND@26..27 "#"
1838 L_BRACK@[27; 28) "[" 1838 L_BRACK@27..28 "["
1839 PATH@[28; 31) 1839 PATH@28..31
1840 PATH_SEGMENT@[28; 31) 1840 PATH_SEGMENT@28..31
1841 NAME_REF@[28; 31) 1841 NAME_REF@28..31
1842 IDENT@[28; 31) "cfg" 1842 IDENT@28..31 "cfg"
1843 TOKEN_TREE@[31; 46) 1843 TOKEN_TREE@31..46
1844 L_PAREN@[31; 32) "(" 1844 L_PAREN@31..32 "("
1845 IDENT@[32; 39) "feature" 1845 IDENT@32..39 "feature"
1846 EQ@[39; 40) "=" 1846 EQ@39..40 "="
1847 STRING@[40; 45) "\"std\"" 1847 STRING@40..45 "\"std\""
1848 R_PAREN@[45; 46) ")" 1848 R_PAREN@45..46 ")"
1849 R_BRACK@[46; 47) "]" 1849 R_BRACK@46..47 "]"
1850 MOD_KW@[47; 50) "mod" 1850 MOD_KW@47..50 "mod"
1851 NAME@[50; 51) 1851 NAME@50..51
1852 IDENT@[50; 51) "f" 1852 IDENT@50..51 "f"
1853 SEMICOLON@[51; 52) ";""###, 1853 SEMICOLON@51..52 ";""###,
1854 ); 1854 );
1855} 1855}
1856 1856
@@ -1884,3 +1884,16 @@ fn test_expand_bad_literal() {
1884 ) 1884 )
1885 .assert_expand_err(r#"foo!(&k");"#, &ExpandError::BindingError("".into())); 1885 .assert_expand_err(r#"foo!(&k");"#, &ExpandError::BindingError("".into()));
1886} 1886}
1887
1888#[test]
1889fn test_empty_comments() {
1890 parse_macro(
1891 r#"
1892 macro_rules! one_arg_macro { ($fmt:expr) => (); }
1893 "#,
1894 )
1895 .assert_expand_err(
1896 r#"one_arg_macro!(/**/)"#,
1897 &ExpandError::BindingError("expected Expr".into()),
1898 );
1899}
diff --git a/crates/ra_project_model/src/cargo_workspace.rs b/crates/ra_project_model/src/cargo_workspace.rs
index 84008b2e3..362ee30fe 100644
--- a/crates/ra_project_model/src/cargo_workspace.rs
+++ b/crates/ra_project_model/src/cargo_workspace.rs
@@ -141,6 +141,11 @@ impl CargoWorkspace {
141 cargo_toml: &Path, 141 cargo_toml: &Path,
142 cargo_features: &CargoConfig, 142 cargo_features: &CargoConfig,
143 ) -> Result<CargoWorkspace> { 143 ) -> Result<CargoWorkspace> {
144 let _ = Command::new(cargo_binary())
145 .arg("--version")
146 .output()
147 .context("failed to run `cargo --version`, is `cargo` in PATH?")?;
148
144 let mut meta = MetadataCommand::new(); 149 let mut meta = MetadataCommand::new();
145 meta.manifest_path(cargo_toml); 150 meta.manifest_path(cargo_toml);
146 if cargo_features.all_features { 151 if cargo_features.all_features {
diff --git a/crates/ra_project_model/src/lib.rs b/crates/ra_project_model/src/lib.rs
index 03f2629da..731cbd291 100644
--- a/crates/ra_project_model/src/lib.rs
+++ b/crates/ra_project_model/src/lib.rs
@@ -285,8 +285,10 @@ impl ProjectWorkspace {
285 let mut env = Env::default(); 285 let mut env = Env::default();
286 let mut extern_source = ExternSource::default(); 286 let mut extern_source = ExternSource::default();
287 if let Some(out_dir) = &krate.out_dir { 287 if let Some(out_dir) = &krate.out_dir {
288 // FIXME: We probably mangle non UTF-8 paths here, figure out a better solution 288 // NOTE: cargo and rustc seem to hide non-UTF-8 strings from env! and option_env!()
289 env.set("OUT_DIR", out_dir.to_string_lossy().to_string()); 289 if let Some(out_dir) = out_dir.to_str().map(|s| s.to_owned()) {
290 env.set("OUT_DIR", out_dir);
291 }
290 if let Some(&extern_source_id) = extern_source_roots.get(out_dir) { 292 if let Some(&extern_source_id) = extern_source_roots.get(out_dir) {
291 extern_source.set_extern_path(&out_dir, extern_source_id); 293 extern_source.set_extern_path(&out_dir, extern_source_id);
292 } 294 }
@@ -402,8 +404,10 @@ impl ProjectWorkspace {
402 let mut env = Env::default(); 404 let mut env = Env::default();
403 let mut extern_source = ExternSource::default(); 405 let mut extern_source = ExternSource::default();
404 if let Some(out_dir) = &cargo[pkg].out_dir { 406 if let Some(out_dir) = &cargo[pkg].out_dir {
405 // FIXME: We probably mangle non UTF-8 paths here, figure out a better solution 407 // NOTE: cargo and rustc seem to hide non-UTF-8 strings from env! and option_env!()
406 env.set("OUT_DIR", out_dir.to_string_lossy().to_string()); 408 if let Some(out_dir) = out_dir.to_str().map(|s| s.to_owned()) {
409 env.set("OUT_DIR", out_dir);
410 }
407 if let Some(&extern_source_id) = extern_source_roots.get(out_dir) { 411 if let Some(&extern_source_id) = extern_source_roots.get(out_dir) {
408 extern_source.set_extern_path(&out_dir, extern_source_id); 412 extern_source.set_extern_path(&out_dir, extern_source_id);
409 } 413 }
diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml
index 75a2f696e..7ffe46c69 100644
--- a/crates/ra_syntax/Cargo.toml
+++ b/crates/ra_syntax/Cargo.toml
@@ -12,7 +12,7 @@ doctest = false
12 12
13[dependencies] 13[dependencies]
14itertools = "0.9.0" 14itertools = "0.9.0"
15rowan = "0.9.1" 15rowan = "0.10.0"
16rustc_lexer = { version = "652.0.0", package = "rustc-ap-rustc_lexer" } 16rustc_lexer = { version = "652.0.0", package = "rustc-ap-rustc_lexer" }
17rustc-hash = "1.1.0" 17rustc-hash = "1.1.0"
18arrayvec = "0.5.1" 18arrayvec = "0.5.1"
diff --git a/crates/ra_syntax/src/algo.rs b/crates/ra_syntax/src/algo.rs
index 06df8495c..2a8dac757 100644
--- a/crates/ra_syntax/src/algo.rs
+++ b/crates/ra_syntax/src/algo.rs
@@ -11,7 +11,7 @@ use rustc_hash::FxHashMap;
11 11
12use crate::{ 12use crate::{
13 AstNode, Direction, NodeOrToken, SyntaxElement, SyntaxKind, SyntaxNode, SyntaxNodePtr, 13 AstNode, Direction, NodeOrToken, SyntaxElement, SyntaxKind, SyntaxNode, SyntaxNodePtr,
14 SyntaxToken, TextRange, TextUnit, 14 SyntaxToken, TextRange, TextSize,
15}; 15};
16 16
17/// Returns ancestors of the node at the offset, sorted by length. This should 17/// Returns ancestors of the node at the offset, sorted by length. This should
@@ -21,7 +21,7 @@ use crate::{
21/// t.parent().ancestors())`. 21/// t.parent().ancestors())`.
22pub fn ancestors_at_offset( 22pub fn ancestors_at_offset(
23 node: &SyntaxNode, 23 node: &SyntaxNode,
24 offset: TextUnit, 24 offset: TextSize,
25) -> impl Iterator<Item = SyntaxNode> { 25) -> impl Iterator<Item = SyntaxNode> {
26 node.token_at_offset(offset) 26 node.token_at_offset(offset)
27 .map(|token| token.parent().ancestors()) 27 .map(|token| token.parent().ancestors())
@@ -37,7 +37,7 @@ pub fn ancestors_at_offset(
37/// ``` 37/// ```
38/// 38///
39/// then the shorter node will be silently preferred. 39/// then the shorter node will be silently preferred.
40pub fn find_node_at_offset<N: AstNode>(syntax: &SyntaxNode, offset: TextUnit) -> Option<N> { 40pub fn find_node_at_offset<N: AstNode>(syntax: &SyntaxNode, offset: TextSize) -> Option<N> {
41 ancestors_at_offset(syntax, offset).find_map(N::cast) 41 ancestors_at_offset(syntax, offset).find_map(N::cast)
42} 42}
43 43
@@ -180,7 +180,7 @@ fn _insert_children(
180 position: InsertPosition<SyntaxElement>, 180 position: InsertPosition<SyntaxElement>,
181 to_insert: &mut dyn Iterator<Item = SyntaxElement>, 181 to_insert: &mut dyn Iterator<Item = SyntaxElement>,
182) -> SyntaxNode { 182) -> SyntaxNode {
183 let mut delta = TextUnit::default(); 183 let mut delta = TextSize::default();
184 let to_insert = to_insert.map(|element| { 184 let to_insert = to_insert.map(|element| {
185 delta += element.text_range().len(); 185 delta += element.text_range().len();
186 to_green_element(element) 186 to_green_element(element)
@@ -347,7 +347,7 @@ fn with_children(
347 parent: &SyntaxNode, 347 parent: &SyntaxNode,
348 new_children: Vec<NodeOrToken<rowan::GreenNode, rowan::GreenToken>>, 348 new_children: Vec<NodeOrToken<rowan::GreenNode, rowan::GreenToken>>,
349) -> SyntaxNode { 349) -> SyntaxNode {
350 let len = new_children.iter().map(|it| it.text_len()).sum::<TextUnit>(); 350 let len = new_children.iter().map(|it| it.text_len()).sum::<TextSize>();
351 let new_node = rowan::GreenNode::new(rowan::SyntaxKind(parent.kind() as u16), new_children); 351 let new_node = rowan::GreenNode::new(rowan::SyntaxKind(parent.kind() as u16), new_children);
352 let new_root_node = parent.replace_with(new_node); 352 let new_root_node = parent.replace_with(new_node);
353 let new_root_node = SyntaxNode::new_root(new_root_node); 353 let new_root_node = SyntaxNode::new_root(new_root_node);
@@ -355,7 +355,7 @@ fn with_children(
355 // FIXME: use a more elegant way to re-fetch the node (#1185), make 355 // FIXME: use a more elegant way to re-fetch the node (#1185), make
356 // `range` private afterwards 356 // `range` private afterwards
357 let mut ptr = SyntaxNodePtr::new(parent); 357 let mut ptr = SyntaxNodePtr::new(parent);
358 ptr.range = TextRange::offset_len(ptr.range.start(), len); 358 ptr.range = TextRange::at(ptr.range.start(), len);
359 ptr.to_node(&new_root_node) 359 ptr.to_node(&new_root_node)
360} 360}
361 361
diff --git a/crates/ra_syntax/src/ast/make.rs b/crates/ra_syntax/src/ast/make.rs
index 0f4a50be4..ee0f5cc40 100644
--- a/crates/ra_syntax/src/ast/make.rs
+++ b/crates/ra_syntax/src/ast/make.rs
@@ -293,11 +293,20 @@ pub fn fn_def(
293 ast_from_text(&format!("fn {}{}{} {}", fn_name, type_params, params, body)) 293 ast_from_text(&format!("fn {}{}{} {}", fn_name, type_params, params, body))
294} 294}
295 295
296pub fn add_newlines(amount_of_newlines: usize, t: impl AstNode) -> ast::SourceFile { 296pub fn add_leading_newlines(amount_of_newlines: usize, t: impl AstNode) -> ast::SourceFile {
297 let newlines = "\n".repeat(amount_of_newlines); 297 let newlines = "\n".repeat(amount_of_newlines);
298 ast_from_text(&format!("{}{}", newlines, t.syntax())) 298 ast_from_text(&format!("{}{}", newlines, t.syntax()))
299} 299}
300 300
301pub fn add_trailing_newlines(amount_of_newlines: usize, t: impl AstNode) -> ast::SourceFile {
302 let newlines = "\n".repeat(amount_of_newlines);
303 ast_from_text(&format!("{}{}", t.syntax(), newlines))
304}
305
306pub fn add_pub_crate_modifier(fn_def: ast::FnDef) -> ast::FnDef {
307 ast_from_text(&format!("pub(crate) {}", fn_def))
308}
309
301fn ast_from_text<N: AstNode>(text: &str) -> N { 310fn ast_from_text<N: AstNode>(text: &str) -> N {
302 let parse = SourceFile::parse(text); 311 let parse = SourceFile::parse(text);
303 let node = parse.tree().syntax().descendants().find_map(N::cast).unwrap(); 312 let node = parse.tree().syntax().descendants().find_map(N::cast).unwrap();
diff --git a/crates/ra_syntax/src/ast/tokens.rs b/crates/ra_syntax/src/ast/tokens.rs
index e8320b57e..3865729b8 100644
--- a/crates/ra_syntax/src/ast/tokens.rs
+++ b/crates/ra_syntax/src/ast/tokens.rs
@@ -1,8 +1,10 @@
1//! There are many AstNodes, but only a few tokens, so we hand-write them here. 1//! There are many AstNodes, but only a few tokens, so we hand-write them here.
2 2
3use std::convert::{TryFrom, TryInto};
4
3use crate::{ 5use crate::{
4 ast::{AstToken, Comment, RawString, String, Whitespace}, 6 ast::{AstToken, Comment, RawString, String, Whitespace},
5 TextRange, TextUnit, 7 TextRange, TextSize,
6}; 8};
7 9
8impl Comment { 10impl Comment {
@@ -56,6 +58,9 @@ const COMMENT_PREFIX_TO_KIND: &[(&str, CommentKind)] = {
56}; 58};
57 59
58fn kind_by_prefix(text: &str) -> CommentKind { 60fn kind_by_prefix(text: &str) -> CommentKind {
61 if text == "/**/" {
62 return CommentKind { shape: CommentShape::Block, doc: None };
63 }
59 for (prefix, kind) in COMMENT_PREFIX_TO_KIND.iter() { 64 for (prefix, kind) in COMMENT_PREFIX_TO_KIND.iter() {
60 if text.starts_with(prefix) { 65 if text.starts_with(prefix) {
61 return *kind; 66 return *kind;
@@ -94,14 +99,14 @@ impl QuoteOffsets {
94 return None; 99 return None;
95 } 100 }
96 101
97 let start = TextUnit::from(0); 102 let start = TextSize::from(0);
98 let left_quote = TextUnit::from_usize(left_quote) + TextUnit::of_char('"'); 103 let left_quote = TextSize::try_from(left_quote).unwrap() + TextSize::of('"');
99 let right_quote = TextUnit::from_usize(right_quote); 104 let right_quote = TextSize::try_from(right_quote).unwrap();
100 let end = TextUnit::of_str(literal); 105 let end = TextSize::of(literal);
101 106
102 let res = QuoteOffsets { 107 let res = QuoteOffsets {
103 quotes: [TextRange::from_to(start, left_quote), TextRange::from_to(right_quote, end)], 108 quotes: [TextRange::new(start, left_quote), TextRange::new(right_quote, end)],
104 contents: TextRange::from_to(left_quote, right_quote), 109 contents: TextRange::new(left_quote, right_quote),
105 }; 110 };
106 Some(res) 111 Some(res)
107 } 112 }
@@ -168,7 +173,358 @@ impl HasStringValue for RawString {
168impl RawString { 173impl RawString {
169 pub fn map_range_up(&self, range: TextRange) -> Option<TextRange> { 174 pub fn map_range_up(&self, range: TextRange) -> Option<TextRange> {
170 let contents_range = self.text_range_between_quotes()?; 175 let contents_range = self.text_range_between_quotes()?;
171 assert!(range.is_subrange(&TextRange::offset_len(0.into(), contents_range.len()))); 176 assert!(TextRange::up_to(contents_range.len()).contains_range(range));
172 Some(range + contents_range.start()) 177 Some(range + contents_range.start())
173 } 178 }
174} 179}
180
181#[derive(Debug)]
182pub enum FormatSpecifier {
183 Open,
184 Close,
185 Integer,
186 Identifier,
187 Colon,
188 Fill,
189 Align,
190 Sign,
191 NumberSign,
192 Zero,
193 DollarSign,
194 Dot,
195 Asterisk,
196 QuestionMark,
197}
198
199pub trait HasFormatSpecifier: AstToken {
200 fn char_ranges(
201 &self,
202 ) -> Option<Vec<(TextRange, Result<char, rustc_lexer::unescape::EscapeError>)>>;
203
204 fn lex_format_specifier<F>(&self, mut callback: F)
205 where
206 F: FnMut(TextRange, FormatSpecifier),
207 {
208 let char_ranges = if let Some(char_ranges) = self.char_ranges() {
209 char_ranges
210 } else {
211 return;
212 };
213 let mut chars = char_ranges.iter().peekable();
214
215 while let Some((range, first_char)) = chars.next() {
216 match first_char {
217 Ok('{') => {
218 // Format specifier, see syntax at https://doc.rust-lang.org/std/fmt/index.html#syntax
219 if let Some((_, Ok('{'))) = chars.peek() {
220 // Escaped format specifier, `{{`
221 chars.next();
222 continue;
223 }
224
225 callback(*range, FormatSpecifier::Open);
226
227 // check for integer/identifier
228 match chars
229 .peek()
230 .and_then(|next| next.1.as_ref().ok())
231 .copied()
232 .unwrap_or_default()
233 {
234 '0'..='9' => {
235 // integer
236 read_integer(&mut chars, &mut callback);
237 }
238 c if c == '_' || c.is_alphabetic() => {
239 // identifier
240 read_identifier(&mut chars, &mut callback);
241 }
242 _ => {}
243 }
244
245 if let Some((_, Ok(':'))) = chars.peek() {
246 skip_char_and_emit(&mut chars, FormatSpecifier::Colon, &mut callback);
247
248 // check for fill/align
249 let mut cloned = chars.clone().take(2);
250 let first = cloned
251 .next()
252 .and_then(|next| next.1.as_ref().ok())
253 .copied()
254 .unwrap_or_default();
255 let second = cloned
256 .next()
257 .and_then(|next| next.1.as_ref().ok())
258 .copied()
259 .unwrap_or_default();
260 match second {
261 '<' | '^' | '>' => {
262 // alignment specifier, first char specifies fillment
263 skip_char_and_emit(
264 &mut chars,
265 FormatSpecifier::Fill,
266 &mut callback,
267 );
268 skip_char_and_emit(
269 &mut chars,
270 FormatSpecifier::Align,
271 &mut callback,
272 );
273 }
274 _ => match first {
275 '<' | '^' | '>' => {
276 skip_char_and_emit(
277 &mut chars,
278 FormatSpecifier::Align,
279 &mut callback,
280 );
281 }
282 _ => {}
283 },
284 }
285
286 // check for sign
287 match chars
288 .peek()
289 .and_then(|next| next.1.as_ref().ok())
290 .copied()
291 .unwrap_or_default()
292 {
293 '+' | '-' => {
294 skip_char_and_emit(
295 &mut chars,
296 FormatSpecifier::Sign,
297 &mut callback,
298 );
299 }
300 _ => {}
301 }
302
303 // check for `#`
304 if let Some((_, Ok('#'))) = chars.peek() {
305 skip_char_and_emit(
306 &mut chars,
307 FormatSpecifier::NumberSign,
308 &mut callback,
309 );
310 }
311
312 // check for `0`
313 let mut cloned = chars.clone().take(2);
314 let first = cloned.next().and_then(|next| next.1.as_ref().ok()).copied();
315 let second = cloned.next().and_then(|next| next.1.as_ref().ok()).copied();
316
317 if first == Some('0') && second != Some('$') {
318 skip_char_and_emit(&mut chars, FormatSpecifier::Zero, &mut callback);
319 }
320
321 // width
322 match chars
323 .peek()
324 .and_then(|next| next.1.as_ref().ok())
325 .copied()
326 .unwrap_or_default()
327 {
328 '0'..='9' => {
329 read_integer(&mut chars, &mut callback);
330 if let Some((_, Ok('$'))) = chars.peek() {
331 skip_char_and_emit(
332 &mut chars,
333 FormatSpecifier::DollarSign,
334 &mut callback,
335 );
336 }
337 }
338 c if c == '_' || c.is_alphabetic() => {
339 read_identifier(&mut chars, &mut callback);
340 if chars.peek().and_then(|next| next.1.as_ref().ok()).copied()
341 != Some('$')
342 {
343 continue;
344 }
345 skip_char_and_emit(
346 &mut chars,
347 FormatSpecifier::DollarSign,
348 &mut callback,
349 );
350 }
351 _ => {}
352 }
353
354 // precision
355 if let Some((_, Ok('.'))) = chars.peek() {
356 skip_char_and_emit(&mut chars, FormatSpecifier::Dot, &mut callback);
357
358 match chars
359 .peek()
360 .and_then(|next| next.1.as_ref().ok())
361 .copied()
362 .unwrap_or_default()
363 {
364 '*' => {
365 skip_char_and_emit(
366 &mut chars,
367 FormatSpecifier::Asterisk,
368 &mut callback,
369 );
370 }
371 '0'..='9' => {
372 read_integer(&mut chars, &mut callback);
373 if let Some((_, Ok('$'))) = chars.peek() {
374 skip_char_and_emit(
375 &mut chars,
376 FormatSpecifier::DollarSign,
377 &mut callback,
378 );
379 }
380 }
381 c if c == '_' || c.is_alphabetic() => {
382 read_identifier(&mut chars, &mut callback);
383 if chars.peek().and_then(|next| next.1.as_ref().ok()).copied()
384 != Some('$')
385 {
386 continue;
387 }
388 skip_char_and_emit(
389 &mut chars,
390 FormatSpecifier::DollarSign,
391 &mut callback,
392 );
393 }
394 _ => {
395 continue;
396 }
397 }
398 }
399
400 // type
401 match chars
402 .peek()
403 .and_then(|next| next.1.as_ref().ok())
404 .copied()
405 .unwrap_or_default()
406 {
407 '?' => {
408 skip_char_and_emit(
409 &mut chars,
410 FormatSpecifier::QuestionMark,
411 &mut callback,
412 );
413 }
414 c if c == '_' || c.is_alphabetic() => {
415 read_identifier(&mut chars, &mut callback);
416 }
417 _ => {}
418 }
419 }
420
421 let mut cloned = chars.clone().take(2);
422 let first = cloned.next().and_then(|next| next.1.as_ref().ok()).copied();
423 let second = cloned.next().and_then(|next| next.1.as_ref().ok()).copied();
424 if first != Some('}') {
425 continue;
426 }
427 if second == Some('}') {
428 // Escaped format end specifier, `}}`
429 continue;
430 }
431 skip_char_and_emit(&mut chars, FormatSpecifier::Close, &mut callback);
432 }
433 _ => {
434 while let Some((_, Ok(next_char))) = chars.peek() {
435 match next_char {
436 '{' => break,
437 _ => {}
438 }
439 chars.next();
440 }
441 }
442 };
443 }
444
445 fn skip_char_and_emit<'a, I, F>(
446 chars: &mut std::iter::Peekable<I>,
447 emit: FormatSpecifier,
448 callback: &mut F,
449 ) where
450 I: Iterator<Item = &'a (TextRange, Result<char, rustc_lexer::unescape::EscapeError>)>,
451 F: FnMut(TextRange, FormatSpecifier),
452 {
453 let (range, _) = chars.next().unwrap();
454 callback(*range, emit);
455 }
456
457 fn read_integer<'a, I, F>(chars: &mut std::iter::Peekable<I>, callback: &mut F)
458 where
459 I: Iterator<Item = &'a (TextRange, Result<char, rustc_lexer::unescape::EscapeError>)>,
460 F: FnMut(TextRange, FormatSpecifier),
461 {
462 let (mut range, c) = chars.next().unwrap();
463 assert!(c.as_ref().unwrap().is_ascii_digit());
464 while let Some((r, Ok(next_char))) = chars.peek() {
465 if next_char.is_ascii_digit() {
466 chars.next();
467 range = range.cover(*r);
468 } else {
469 break;
470 }
471 }
472 callback(range, FormatSpecifier::Integer);
473 }
474
475 fn read_identifier<'a, I, F>(chars: &mut std::iter::Peekable<I>, callback: &mut F)
476 where
477 I: Iterator<Item = &'a (TextRange, Result<char, rustc_lexer::unescape::EscapeError>)>,
478 F: FnMut(TextRange, FormatSpecifier),
479 {
480 let (mut range, c) = chars.next().unwrap();
481 assert!(c.as_ref().unwrap().is_alphabetic() || *c.as_ref().unwrap() == '_');
482 while let Some((r, Ok(next_char))) = chars.peek() {
483 if *next_char == '_' || next_char.is_ascii_digit() || next_char.is_alphabetic() {
484 chars.next();
485 range = range.cover(*r);
486 } else {
487 break;
488 }
489 }
490 callback(range, FormatSpecifier::Identifier);
491 }
492 }
493}
494
495impl HasFormatSpecifier for String {
496 fn char_ranges(
497 &self,
498 ) -> Option<Vec<(TextRange, Result<char, rustc_lexer::unescape::EscapeError>)>> {
499 let text = self.text().as_str();
500 let text = &text[self.text_range_between_quotes()? - self.syntax().text_range().start()];
501 let offset = self.text_range_between_quotes()?.start() - self.syntax().text_range().start();
502
503 let mut res = Vec::with_capacity(text.len());
504 rustc_lexer::unescape::unescape_str(text, &mut |range, unescaped_char| {
505 res.push((
506 TextRange::new(range.start.try_into().unwrap(), range.end.try_into().unwrap())
507 + offset,
508 unescaped_char,
509 ))
510 });
511
512 Some(res)
513 }
514}
515
516impl HasFormatSpecifier for RawString {
517 fn char_ranges(
518 &self,
519 ) -> Option<Vec<(TextRange, Result<char, rustc_lexer::unescape::EscapeError>)>> {
520 let text = self.text().as_str();
521 let text = &text[self.text_range_between_quotes()? - self.syntax().text_range().start()];
522 let offset = self.text_range_between_quotes()?.start() - self.syntax().text_range().start();
523
524 let mut res = Vec::with_capacity(text.len());
525 for (idx, c) in text.char_indices() {
526 res.push((TextRange::at(idx.try_into().unwrap(), TextSize::of(c)) + offset, Ok(c)));
527 }
528 Some(res)
529 }
530}
diff --git a/crates/ra_syntax/src/fuzz.rs b/crates/ra_syntax/src/fuzz.rs
index 7012df7f0..10fbe3176 100644
--- a/crates/ra_syntax/src/fuzz.rs
+++ b/crates/ra_syntax/src/fuzz.rs
@@ -1,8 +1,13 @@
1//! FIXME: write short doc here 1//! FIXME: write short doc here
2 2
3use crate::{validation, AstNode, SourceFile, TextRange, TextUnit}; 3use std::{
4 convert::TryInto,
5 str::{self, FromStr},
6};
7
4use ra_text_edit::AtomTextEdit; 8use ra_text_edit::AtomTextEdit;
5use std::str::{self, FromStr}; 9
10use crate::{validation, AstNode, SourceFile, TextRange};
6 11
7fn check_file_invariants(file: &SourceFile) { 12fn check_file_invariants(file: &SourceFile) {
8 let root = file.syntax(); 13 let root = file.syntax();
@@ -34,10 +39,8 @@ impl CheckReparse {
34 let text = lines.collect::<Vec<_>>().join("\n"); 39 let text = lines.collect::<Vec<_>>().join("\n");
35 let text = format!("{}{}{}", PREFIX, text, SUFFIX); 40 let text = format!("{}{}{}", PREFIX, text, SUFFIX);
36 text.get(delete_start..delete_start.checked_add(delete_len)?)?; // make sure delete is a valid range 41 text.get(delete_start..delete_start.checked_add(delete_len)?)?; // make sure delete is a valid range
37 let delete = TextRange::offset_len( 42 let delete =
38 TextUnit::from_usize(delete_start), 43 TextRange::at(delete_start.try_into().unwrap(), delete_len.try_into().unwrap());
39 TextUnit::from_usize(delete_len),
40 );
41 let edited_text = 44 let edited_text =
42 format!("{}{}{}", &text[..delete_start], &insert, &text[delete_start + delete_len..]); 45 format!("{}{}{}", &text[..delete_start], &insert, &text[delete_start + delete_len..]);
43 let edit = AtomTextEdit { delete, insert }; 46 let edit = AtomTextEdit { delete, insert };
diff --git a/crates/ra_syntax/src/lib.rs b/crates/ra_syntax/src/lib.rs
index a796e78b1..ceeb2bde9 100644
--- a/crates/ra_syntax/src/lib.rs
+++ b/crates/ra_syntax/src/lib.rs
@@ -55,7 +55,7 @@ pub use crate::{
55 }, 55 },
56}; 56};
57pub use ra_parser::{SyntaxKind, T}; 57pub use ra_parser::{SyntaxKind, T};
58pub use rowan::{SmolStr, SyntaxText, TextRange, TextUnit, TokenAtOffset, WalkEvent}; 58pub use rowan::{SmolStr, SyntaxText, TextRange, TextSize, TokenAtOffset, WalkEvent};
59 59
60/// `Parse` is the result of the parsing: a syntax tree and a collection of 60/// `Parse` is the result of the parsing: a syntax tree and a collection of
61/// errors. 61/// errors.
@@ -266,7 +266,7 @@ fn api_walkthrough() {
266 assert_eq!(expr_syntax.kind(), SyntaxKind::BIN_EXPR); 266 assert_eq!(expr_syntax.kind(), SyntaxKind::BIN_EXPR);
267 267
268 // And text range: 268 // And text range:
269 assert_eq!(expr_syntax.text_range(), TextRange::from_to(32.into(), 37.into())); 269 assert_eq!(expr_syntax.text_range(), TextRange::new(32.into(), 37.into()));
270 270
271 // You can get node's text as a `SyntaxText` object, which will traverse the 271 // You can get node's text as a `SyntaxText` object, which will traverse the
272 // tree collecting token's text: 272 // tree collecting token's text:
diff --git a/crates/ra_syntax/src/parsing/lexer.rs b/crates/ra_syntax/src/parsing/lexer.rs
index 67c1f1b48..f450ef4a2 100644
--- a/crates/ra_syntax/src/parsing/lexer.rs
+++ b/crates/ra_syntax/src/parsing/lexer.rs
@@ -1,10 +1,12 @@
1//! Lexer analyzes raw input string and produces lexemes (tokens). 1//! Lexer analyzes raw input string and produces lexemes (tokens).
2//! It is just a bridge to `rustc_lexer`. 2//! It is just a bridge to `rustc_lexer`.
3 3
4use std::convert::TryInto;
5
4use crate::{ 6use crate::{
5 SyntaxError, 7 SyntaxError,
6 SyntaxKind::{self, *}, 8 SyntaxKind::{self, *},
7 TextRange, TextUnit, T, 9 TextRange, TextSize, T,
8}; 10};
9 11
10/// A token of Rust source. 12/// A token of Rust source.
@@ -13,7 +15,7 @@ pub struct Token {
13 /// The kind of token. 15 /// The kind of token.
14 pub kind: SyntaxKind, 16 pub kind: SyntaxKind,
15 /// The length of the token. 17 /// The length of the token.
16 pub len: TextUnit, 18 pub len: TextSize,
17} 19}
18 20
19/// Break a string up into its component tokens. 21/// Break a string up into its component tokens.
@@ -28,18 +30,19 @@ pub fn tokenize(text: &str) -> (Vec<Token>, Vec<SyntaxError>) {
28 let mut tokens = Vec::new(); 30 let mut tokens = Vec::new();
29 let mut errors = Vec::new(); 31 let mut errors = Vec::new();
30 32
31 let mut offset: usize = rustc_lexer::strip_shebang(text) 33 let mut offset = match rustc_lexer::strip_shebang(text) {
32 .map(|shebang_len| { 34 Some(shebang_len) => {
33 tokens.push(Token { kind: SHEBANG, len: TextUnit::from_usize(shebang_len) }); 35 tokens.push(Token { kind: SHEBANG, len: shebang_len.try_into().unwrap() });
34 shebang_len 36 shebang_len
35 }) 37 }
36 .unwrap_or(0); 38 None => 0,
39 };
37 40
38 let text_without_shebang = &text[offset..]; 41 let text_without_shebang = &text[offset..];
39 42
40 for rustc_token in rustc_lexer::tokenize(text_without_shebang) { 43 for rustc_token in rustc_lexer::tokenize(text_without_shebang) {
41 let token_len = TextUnit::from_usize(rustc_token.len); 44 let token_len: TextSize = rustc_token.len.try_into().unwrap();
42 let token_range = TextRange::offset_len(TextUnit::from_usize(offset), token_len); 45 let token_range = TextRange::at(offset.try_into().unwrap(), token_len);
43 46
44 let (syntax_kind, err_message) = 47 let (syntax_kind, err_message) =
45 rustc_token_kind_to_syntax_kind(&rustc_token.kind, &text[token_range]); 48 rustc_token_kind_to_syntax_kind(&rustc_token.kind, &text[token_range]);
@@ -65,7 +68,7 @@ pub fn tokenize(text: &str) -> (Vec<Token>, Vec<SyntaxError>) {
65/// Beware that unescape errors are not checked at tokenization time. 68/// Beware that unescape errors are not checked at tokenization time.
66pub fn lex_single_syntax_kind(text: &str) -> Option<(SyntaxKind, Option<SyntaxError>)> { 69pub fn lex_single_syntax_kind(text: &str) -> Option<(SyntaxKind, Option<SyntaxError>)> {
67 lex_first_token(text) 70 lex_first_token(text)
68 .filter(|(token, _)| token.len == TextUnit::of_str(text)) 71 .filter(|(token, _)| token.len == TextSize::of(text))
69 .map(|(token, error)| (token.kind, error)) 72 .map(|(token, error)| (token.kind, error))
70} 73}
71 74
@@ -75,7 +78,7 @@ pub fn lex_single_syntax_kind(text: &str) -> Option<(SyntaxKind, Option<SyntaxEr
75/// Beware that unescape errors are not checked at tokenization time. 78/// Beware that unescape errors are not checked at tokenization time.
76pub fn lex_single_valid_syntax_kind(text: &str) -> Option<SyntaxKind> { 79pub fn lex_single_valid_syntax_kind(text: &str) -> Option<SyntaxKind> {
77 lex_first_token(text) 80 lex_first_token(text)
78 .filter(|(token, error)| !error.is_some() && token.len == TextUnit::of_str(text)) 81 .filter(|(token, error)| !error.is_some() && token.len == TextSize::of(text))
79 .map(|(token, _error)| token.kind) 82 .map(|(token, _error)| token.kind)
80} 83}
81 84
@@ -96,10 +99,9 @@ fn lex_first_token(text: &str) -> Option<(Token, Option<SyntaxError>)> {
96 let rustc_token = rustc_lexer::first_token(text); 99 let rustc_token = rustc_lexer::first_token(text);
97 let (syntax_kind, err_message) = rustc_token_kind_to_syntax_kind(&rustc_token.kind, text); 100 let (syntax_kind, err_message) = rustc_token_kind_to_syntax_kind(&rustc_token.kind, text);
98 101
99 let token = Token { kind: syntax_kind, len: TextUnit::from_usize(rustc_token.len) }; 102 let token = Token { kind: syntax_kind, len: rustc_token.len.try_into().unwrap() };
100 let optional_error = err_message.map(|err_message| { 103 let optional_error = err_message
101 SyntaxError::new(err_message, TextRange::from_to(0.into(), TextUnit::of_str(text))) 104 .map(|err_message| SyntaxError::new(err_message, TextRange::up_to(TextSize::of(text))));
102 });
103 105
104 Some((token, optional_error)) 106 Some((token, optional_error))
105} 107}
diff --git a/crates/ra_syntax/src/parsing/reparsing.rs b/crates/ra_syntax/src/parsing/reparsing.rs
index 2d65b91f1..ffff0a7b2 100644
--- a/crates/ra_syntax/src/parsing/reparsing.rs
+++ b/crates/ra_syntax/src/parsing/reparsing.rs
@@ -19,7 +19,7 @@ use crate::{
19 syntax_node::{GreenNode, GreenToken, NodeOrToken, SyntaxElement, SyntaxNode}, 19 syntax_node::{GreenNode, GreenToken, NodeOrToken, SyntaxElement, SyntaxNode},
20 SyntaxError, 20 SyntaxError,
21 SyntaxKind::*, 21 SyntaxKind::*,
22 TextRange, TextUnit, T, 22 TextRange, TextSize, T,
23}; 23};
24 24
25pub(crate) fn incremental_reparse( 25pub(crate) fn incremental_reparse(
@@ -176,7 +176,7 @@ fn merge_errors(
176 if old_err_range.end() <= range_before_reparse.start() { 176 if old_err_range.end() <= range_before_reparse.start() {
177 res.push(old_err); 177 res.push(old_err);
178 } else if old_err_range.start() >= range_before_reparse.end() { 178 } else if old_err_range.start() >= range_before_reparse.end() {
179 let inserted_len = TextUnit::of_str(&edit.insert); 179 let inserted_len = TextSize::of(&edit.insert);
180 res.push(old_err.with_range((old_err_range + inserted_len) - edit.delete.len())); 180 res.push(old_err.with_range((old_err_range + inserted_len) - edit.delete.len()));
181 // Note: extra parens are intentional to prevent uint underflow, HWAB (here was a bug) 181 // Note: extra parens are intentional to prevent uint underflow, HWAB (here was a bug)
182 } 182 }
diff --git a/crates/ra_syntax/src/parsing/text_token_source.rs b/crates/ra_syntax/src/parsing/text_token_source.rs
index e2433913c..7ddc2c2c3 100644
--- a/crates/ra_syntax/src/parsing/text_token_source.rs
+++ b/crates/ra_syntax/src/parsing/text_token_source.rs
@@ -3,7 +3,7 @@
3use ra_parser::Token as PToken; 3use ra_parser::Token as PToken;
4use ra_parser::TokenSource; 4use ra_parser::TokenSource;
5 5
6use crate::{parsing::lexer::Token, SyntaxKind::EOF, TextRange, TextUnit}; 6use crate::{parsing::lexer::Token, SyntaxKind::EOF, TextRange, TextSize};
7 7
8pub(crate) struct TextTokenSource<'t> { 8pub(crate) struct TextTokenSource<'t> {
9 text: &'t str, 9 text: &'t str,
@@ -15,7 +15,7 @@ pub(crate) struct TextTokenSource<'t> {
15 /// 0 7 10 15 /// 0 7 10
16 /// ``` 16 /// ```
17 /// (token, start_offset): `[(struct, 0), (Foo, 7), (;, 10)]` 17 /// (token, start_offset): `[(struct, 0), (Foo, 7), (;, 10)]`
18 start_offsets: Vec<TextUnit>, 18 start_offsets: Vec<TextSize>,
19 /// non-whitespace/comment tokens 19 /// non-whitespace/comment tokens
20 /// ```non-rust 20 /// ```non-rust
21 /// struct Foo {} 21 /// struct Foo {}
@@ -51,12 +51,12 @@ impl<'t> TokenSource for TextTokenSource<'t> {
51 if pos >= self.tokens.len() { 51 if pos >= self.tokens.len() {
52 return false; 52 return false;
53 } 53 }
54 let range = TextRange::offset_len(self.start_offsets[pos], self.tokens[pos].len); 54 let range = TextRange::at(self.start_offsets[pos], self.tokens[pos].len);
55 self.text[range] == *kw 55 self.text[range] == *kw
56 } 56 }
57} 57}
58 58
59fn mk_token(pos: usize, start_offsets: &[TextUnit], tokens: &[Token]) -> PToken { 59fn mk_token(pos: usize, start_offsets: &[TextSize], tokens: &[Token]) -> PToken {
60 let kind = tokens.get(pos).map(|t| t.kind).unwrap_or(EOF); 60 let kind = tokens.get(pos).map(|t| t.kind).unwrap_or(EOF);
61 let is_jointed_to_next = if pos + 1 < start_offsets.len() { 61 let is_jointed_to_next = if pos + 1 < start_offsets.len() {
62 start_offsets[pos] + tokens[pos].len == start_offsets[pos + 1] 62 start_offsets[pos] + tokens[pos].len == start_offsets[pos + 1]
diff --git a/crates/ra_syntax/src/parsing/text_tree_sink.rs b/crates/ra_syntax/src/parsing/text_tree_sink.rs
index 87bb21cd9..22aed1db1 100644
--- a/crates/ra_syntax/src/parsing/text_tree_sink.rs
+++ b/crates/ra_syntax/src/parsing/text_tree_sink.rs
@@ -9,7 +9,7 @@ use crate::{
9 syntax_node::GreenNode, 9 syntax_node::GreenNode,
10 SmolStr, SyntaxError, 10 SmolStr, SyntaxError,
11 SyntaxKind::{self, *}, 11 SyntaxKind::{self, *},
12 SyntaxTreeBuilder, TextRange, TextUnit, 12 SyntaxTreeBuilder, TextRange, TextSize,
13}; 13};
14 14
15/// Bridges the parser with our specific syntax tree representation. 15/// Bridges the parser with our specific syntax tree representation.
@@ -18,7 +18,7 @@ use crate::{
18pub(crate) struct TextTreeSink<'a> { 18pub(crate) struct TextTreeSink<'a> {
19 text: &'a str, 19 text: &'a str,
20 tokens: &'a [Token], 20 tokens: &'a [Token],
21 text_pos: TextUnit, 21 text_pos: TextSize,
22 token_pos: usize, 22 token_pos: usize,
23 state: State, 23 state: State,
24 inner: SyntaxTreeBuilder, 24 inner: SyntaxTreeBuilder,
@@ -42,7 +42,7 @@ impl<'a> TreeSink for TextTreeSink<'a> {
42 let len = self.tokens[self.token_pos..self.token_pos + n_tokens] 42 let len = self.tokens[self.token_pos..self.token_pos + n_tokens]
43 .iter() 43 .iter()
44 .map(|it| it.len) 44 .map(|it| it.len)
45 .sum::<TextUnit>(); 45 .sum::<TextSize>();
46 self.do_token(kind, len, n_tokens); 46 self.do_token(kind, len, n_tokens);
47 } 47 }
48 48
@@ -62,12 +62,12 @@ impl<'a> TreeSink for TextTreeSink<'a> {
62 self.tokens[self.token_pos..].iter().take_while(|it| it.kind.is_trivia()).count(); 62 self.tokens[self.token_pos..].iter().take_while(|it| it.kind.is_trivia()).count();
63 let leading_trivias = &self.tokens[self.token_pos..self.token_pos + n_trivias]; 63 let leading_trivias = &self.tokens[self.token_pos..self.token_pos + n_trivias];
64 let mut trivia_end = 64 let mut trivia_end =
65 self.text_pos + leading_trivias.iter().map(|it| it.len).sum::<TextUnit>(); 65 self.text_pos + leading_trivias.iter().map(|it| it.len).sum::<TextSize>();
66 66
67 let n_attached_trivias = { 67 let n_attached_trivias = {
68 let leading_trivias = leading_trivias.iter().rev().map(|it| { 68 let leading_trivias = leading_trivias.iter().rev().map(|it| {
69 let next_end = trivia_end - it.len; 69 let next_end = trivia_end - it.len;
70 let range = TextRange::from_to(next_end, trivia_end); 70 let range = TextRange::new(next_end, trivia_end);
71 trivia_end = next_end; 71 trivia_end = next_end;
72 (it.kind, &self.text[range]) 72 (it.kind, &self.text[range])
73 }); 73 });
@@ -132,8 +132,8 @@ impl<'a> TextTreeSink<'a> {
132 } 132 }
133 } 133 }
134 134
135 fn do_token(&mut self, kind: SyntaxKind, len: TextUnit, n_tokens: usize) { 135 fn do_token(&mut self, kind: SyntaxKind, len: TextSize, n_tokens: usize) {
136 let range = TextRange::offset_len(self.text_pos, len); 136 let range = TextRange::at(self.text_pos, len);
137 let text: SmolStr = self.text[range].into(); 137 let text: SmolStr = self.text[range].into();
138 self.text_pos += len; 138 self.text_pos += len;
139 self.token_pos += n_tokens; 139 self.token_pos += n_tokens;
diff --git a/crates/ra_syntax/src/ptr.rs b/crates/ra_syntax/src/ptr.rs
index ecbfffcf4..62f03e93d 100644
--- a/crates/ra_syntax/src/ptr.rs
+++ b/crates/ra_syntax/src/ptr.rs
@@ -24,7 +24,7 @@ impl SyntaxNodePtr {
24 pub fn to_node(&self, root: &SyntaxNode) -> SyntaxNode { 24 pub fn to_node(&self, root: &SyntaxNode) -> SyntaxNode {
25 assert!(root.parent().is_none()); 25 assert!(root.parent().is_none());
26 successors(Some(root.clone()), |node| { 26 successors(Some(root.clone()), |node| {
27 node.children().find(|it| self.range.is_subrange(&it.text_range())) 27 node.children().find(|it| it.text_range().contains_range(self.range))
28 }) 28 })
29 .find(|it| it.text_range() == self.range && it.kind() == self.kind) 29 .find(|it| it.text_range() == self.range && it.kind() == self.kind)
30 .unwrap_or_else(|| panic!("can't resolve local ptr to SyntaxNode: {:?}", self)) 30 .unwrap_or_else(|| panic!("can't resolve local ptr to SyntaxNode: {:?}", self))
diff --git a/crates/ra_syntax/src/syntax_error.rs b/crates/ra_syntax/src/syntax_error.rs
index 54acf7847..7c4511fec 100644
--- a/crates/ra_syntax/src/syntax_error.rs
+++ b/crates/ra_syntax/src/syntax_error.rs
@@ -2,7 +2,7 @@
2 2
3use std::fmt; 3use std::fmt;
4 4
5use crate::{TextRange, TextUnit}; 5use crate::{TextRange, TextSize};
6 6
7/// Represents the result of unsuccessful tokenization, parsing 7/// Represents the result of unsuccessful tokenization, parsing
8/// or tree validation. 8/// or tree validation.
@@ -23,8 +23,8 @@ impl SyntaxError {
23 pub fn new(message: impl Into<String>, range: TextRange) -> Self { 23 pub fn new(message: impl Into<String>, range: TextRange) -> Self {
24 Self(message.into(), range) 24 Self(message.into(), range)
25 } 25 }
26 pub fn new_at_offset(message: impl Into<String>, offset: TextUnit) -> Self { 26 pub fn new_at_offset(message: impl Into<String>, offset: TextSize) -> Self {
27 Self(message.into(), TextRange::offset_len(offset, 0.into())) 27 Self(message.into(), TextRange::empty(offset))
28 } 28 }
29 29
30 pub fn range(&self) -> TextRange { 30 pub fn range(&self) -> TextRange {
diff --git a/crates/ra_syntax/src/syntax_node.rs b/crates/ra_syntax/src/syntax_node.rs
index 4e3a1460d..f9d379abf 100644
--- a/crates/ra_syntax/src/syntax_node.rs
+++ b/crates/ra_syntax/src/syntax_node.rs
@@ -8,7 +8,7 @@
8 8
9use rowan::{GreenNodeBuilder, Language}; 9use rowan::{GreenNodeBuilder, Language};
10 10
11use crate::{Parse, SmolStr, SyntaxError, SyntaxKind, TextUnit}; 11use crate::{Parse, SmolStr, SyntaxError, SyntaxKind, TextSize};
12 12
13pub(crate) use rowan::{GreenNode, GreenToken}; 13pub(crate) use rowan::{GreenNode, GreenToken};
14 14
@@ -69,7 +69,7 @@ impl SyntaxTreeBuilder {
69 self.inner.finish_node() 69 self.inner.finish_node()
70 } 70 }
71 71
72 pub fn error(&mut self, error: ra_parser::ParseError, text_pos: TextUnit) { 72 pub fn error(&mut self, error: ra_parser::ParseError, text_pos: TextSize) {
73 self.errors.push(SyntaxError::new_at_offset(error.0, text_pos)) 73 self.errors.push(SyntaxError::new_at_offset(error.0, text_pos))
74 } 74 }
75} 75}
diff --git a/crates/ra_syntax/src/tests.rs b/crates/ra_syntax/src/tests.rs
index 355843b94..aee57db62 100644
--- a/crates/ra_syntax/src/tests.rs
+++ b/crates/ra_syntax/src/tests.rs
@@ -5,7 +5,7 @@ use std::{
5 5
6use test_utils::{collect_rust_files, dir_tests, project_dir, read_text}; 6use test_utils::{collect_rust_files, dir_tests, project_dir, read_text};
7 7
8use crate::{fuzz, tokenize, SourceFile, SyntaxError, TextRange, TextUnit, Token}; 8use crate::{fuzz, tokenize, SourceFile, SyntaxError, TextRange, TextSize, Token};
9 9
10#[test] 10#[test]
11fn lexer_tests() { 11fn lexer_tests() {
@@ -121,12 +121,12 @@ fn assert_errors_are_absent(errors: &[SyntaxError], path: &Path) {
121 121
122fn dump_tokens_and_errors(tokens: &[Token], errors: &[SyntaxError], text: &str) -> String { 122fn dump_tokens_and_errors(tokens: &[Token], errors: &[SyntaxError], text: &str) -> String {
123 let mut acc = String::new(); 123 let mut acc = String::new();
124 let mut offset = TextUnit::from_usize(0); 124 let mut offset: TextSize = 0.into();
125 for token in tokens { 125 for token in tokens {
126 let token_len = token.len; 126 let token_len = token.len;
127 let token_text = &text[TextRange::offset_len(offset, token.len)]; 127 let token_text = &text[TextRange::at(offset, token.len)];
128 offset += token.len; 128 offset += token.len;
129 writeln!(acc, "{:?} {} {:?}", token.kind, token_len, token_text).unwrap(); 129 writeln!(acc, "{:?} {:?} {:?}", token.kind, token_len, token_text).unwrap();
130 } 130 }
131 for err in errors { 131 for err in errors {
132 writeln!(acc, "> error{:?} token({:?}) msg({})", err.range(), &text[err.range()], err) 132 writeln!(acc, "> error{:?} token({:?}) msg({})", err.range(), &text[err.range()], err)
diff --git a/crates/ra_syntax/src/validation.rs b/crates/ra_syntax/src/validation.rs
index f85b3e61b..5e93895ec 100644
--- a/crates/ra_syntax/src/validation.rs
+++ b/crates/ra_syntax/src/validation.rs
@@ -2,12 +2,14 @@
2 2
3mod block; 3mod block;
4 4
5use std::convert::TryFrom;
6
5use rustc_lexer::unescape; 7use rustc_lexer::unescape;
6 8
7use crate::{ 9use crate::{
8 ast, match_ast, AstNode, SyntaxError, 10 ast, match_ast, AstNode, SyntaxError,
9 SyntaxKind::{BYTE, BYTE_STRING, CHAR, CONST_DEF, FN_DEF, INT_NUMBER, STRING, TYPE_ALIAS_DEF}, 11 SyntaxKind::{BYTE, BYTE_STRING, CHAR, CONST_DEF, FN_DEF, INT_NUMBER, STRING, TYPE_ALIAS_DEF},
10 SyntaxNode, SyntaxToken, TextUnit, T, 12 SyntaxNode, SyntaxToken, TextSize, T,
11}; 13};
12 14
13fn rustc_unescape_error_to_string(err: unescape::EscapeError) -> &'static str { 15fn rustc_unescape_error_to_string(err: unescape::EscapeError) -> &'static str {
@@ -112,7 +114,7 @@ fn validate_literal(literal: ast::Literal, acc: &mut Vec<SyntaxError>) {
112 114
113 // FIXME: lift this lambda refactor to `fn` (https://github.com/rust-analyzer/rust-analyzer/pull/2834#discussion_r366199205) 115 // FIXME: lift this lambda refactor to `fn` (https://github.com/rust-analyzer/rust-analyzer/pull/2834#discussion_r366199205)
114 let mut push_err = |prefix_len, (off, err): (usize, unescape::EscapeError)| { 116 let mut push_err = |prefix_len, (off, err): (usize, unescape::EscapeError)| {
115 let off = token.text_range().start() + TextUnit::from_usize(off + prefix_len); 117 let off = token.text_range().start() + TextSize::try_from(off + prefix_len).unwrap();
116 acc.push(SyntaxError::new_at_offset(rustc_unescape_error_to_string(err), off)); 118 acc.push(SyntaxError::new_at_offset(rustc_unescape_error_to_string(err), off));
117 }; 119 };
118 120
diff --git a/crates/ra_syntax/test_data/lexer/err/0001_unclosed_char_at_eof.txt b/crates/ra_syntax/test_data/lexer/err/0001_unclosed_char_at_eof.txt
index f24e1fd32..4d5ad74df 100644
--- a/crates/ra_syntax/test_data/lexer/err/0001_unclosed_char_at_eof.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0001_unclosed_char_at_eof.txt
@@ -1,2 +1,2 @@
1CHAR 1 "\'" 1CHAR 1 "\'"
2> error[0; 1) token("\'") msg(Missing trailing `'` symbol to terminate the character literal) 2> error0..1 token("\'") msg(Missing trailing `'` symbol to terminate the character literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0002_unclosed_char_with_ferris.txt b/crates/ra_syntax/test_data/lexer/err/0002_unclosed_char_with_ferris.txt
index bd08cfc44..eafdb3c7c 100644
--- a/crates/ra_syntax/test_data/lexer/err/0002_unclosed_char_with_ferris.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0002_unclosed_char_with_ferris.txt
@@ -1,2 +1,2 @@
1CHAR 5 "\'🦀" 1CHAR 5 "\'🦀"
2> error[0; 5) token("\'🦀") msg(Missing trailing `'` symbol to terminate the character literal) 2> error0..5 token("\'🦀") msg(Missing trailing `'` symbol to terminate the character literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0003_unclosed_char_with_ascii_escape.txt b/crates/ra_syntax/test_data/lexer/err/0003_unclosed_char_with_ascii_escape.txt
index 0ee22912d..cc2b4866a 100644
--- a/crates/ra_syntax/test_data/lexer/err/0003_unclosed_char_with_ascii_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0003_unclosed_char_with_ascii_escape.txt
@@ -1,2 +1,2 @@
1CHAR 5 "\'\\x7f" 1CHAR 5 "\'\\x7f"
2> error[0; 5) token("\'\\x7f") msg(Missing trailing `'` symbol to terminate the character literal) 2> error0..5 token("\'\\x7f") msg(Missing trailing `'` symbol to terminate the character literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0004_unclosed_char_with_unicode_escape.txt b/crates/ra_syntax/test_data/lexer/err/0004_unclosed_char_with_unicode_escape.txt
index 96fac42ce..a6d422cb3 100644
--- a/crates/ra_syntax/test_data/lexer/err/0004_unclosed_char_with_unicode_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0004_unclosed_char_with_unicode_escape.txt
@@ -1,2 +1,2 @@
1CHAR 9 "\'\\u{20AA}" 1CHAR 9 "\'\\u{20AA}"
2> error[0; 9) token("\'\\u{20AA}") msg(Missing trailing `'` symbol to terminate the character literal) 2> error0..9 token("\'\\u{20AA}") msg(Missing trailing `'` symbol to terminate the character literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0005_unclosed_char_with_space.txt b/crates/ra_syntax/test_data/lexer/err/0005_unclosed_char_with_space.txt
index 2059f3f81..47e7baa70 100644
--- a/crates/ra_syntax/test_data/lexer/err/0005_unclosed_char_with_space.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0005_unclosed_char_with_space.txt
@@ -1,2 +1,2 @@
1CHAR 2 "\' " 1CHAR 2 "\' "
2> error[0; 2) token("\' ") msg(Missing trailing `'` symbol to terminate the character literal) 2> error0..2 token("\' ") msg(Missing trailing `'` symbol to terminate the character literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0006_unclosed_char_with_slash.txt b/crates/ra_syntax/test_data/lexer/err/0006_unclosed_char_with_slash.txt
index 7dd376e59..511029d80 100644
--- a/crates/ra_syntax/test_data/lexer/err/0006_unclosed_char_with_slash.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0006_unclosed_char_with_slash.txt
@@ -1,2 +1,2 @@
1CHAR 2 "\'\\" 1CHAR 2 "\'\\"
2> error[0; 2) token("\'\\") msg(Missing trailing `'` symbol to terminate the character literal) 2> error0..2 token("\'\\") msg(Missing trailing `'` symbol to terminate the character literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0007_unclosed_char_with_slash_n.txt b/crates/ra_syntax/test_data/lexer/err/0007_unclosed_char_with_slash_n.txt
index ef7a0a147..d2ba5742c 100644
--- a/crates/ra_syntax/test_data/lexer/err/0007_unclosed_char_with_slash_n.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0007_unclosed_char_with_slash_n.txt
@@ -1,2 +1,2 @@
1CHAR 3 "\'\\n" 1CHAR 3 "\'\\n"
2> error[0; 3) token("\'\\n") msg(Missing trailing `'` symbol to terminate the character literal) 2> error0..3 token("\'\\n") msg(Missing trailing `'` symbol to terminate the character literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0008_unclosed_char_with_slash_single_quote.txt b/crates/ra_syntax/test_data/lexer/err/0008_unclosed_char_with_slash_single_quote.txt
index 13fc5ea9a..ae9a7f0e2 100644
--- a/crates/ra_syntax/test_data/lexer/err/0008_unclosed_char_with_slash_single_quote.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0008_unclosed_char_with_slash_single_quote.txt
@@ -1,2 +1,2 @@
1CHAR 3 "\'\\\'" 1CHAR 3 "\'\\\'"
2> error[0; 3) token("\'\\\'") msg(Missing trailing `'` symbol to terminate the character literal) 2> error0..3 token("\'\\\'") msg(Missing trailing `'` symbol to terminate the character literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0009_unclosed_byte_at_eof.txt b/crates/ra_syntax/test_data/lexer/err/0009_unclosed_byte_at_eof.txt
index 269d68c74..ff1504592 100644
--- a/crates/ra_syntax/test_data/lexer/err/0009_unclosed_byte_at_eof.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0009_unclosed_byte_at_eof.txt
@@ -1,2 +1,2 @@
1BYTE 2 "b\'" 1BYTE 2 "b\'"
2> error[0; 2) token("b\'") msg(Missing trailing `'` symbol to terminate the byte literal) 2> error0..2 token("b\'") msg(Missing trailing `'` symbol to terminate the byte literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0010_unclosed_byte_with_ferris.txt b/crates/ra_syntax/test_data/lexer/err/0010_unclosed_byte_with_ferris.txt
index 91a76e479..34f7bd6d4 100644
--- a/crates/ra_syntax/test_data/lexer/err/0010_unclosed_byte_with_ferris.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0010_unclosed_byte_with_ferris.txt
@@ -1,2 +1,2 @@
1BYTE 6 "b\'🦀" 1BYTE 6 "b\'🦀"
2> error[0; 6) token("b\'🦀") msg(Missing trailing `'` symbol to terminate the byte literal) 2> error0..6 token("b\'🦀") msg(Missing trailing `'` symbol to terminate the byte literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0011_unclosed_byte_with_ascii_escape.txt b/crates/ra_syntax/test_data/lexer/err/0011_unclosed_byte_with_ascii_escape.txt
index b8c804a18..c964d0f00 100644
--- a/crates/ra_syntax/test_data/lexer/err/0011_unclosed_byte_with_ascii_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0011_unclosed_byte_with_ascii_escape.txt
@@ -1,2 +1,2 @@
1BYTE 6 "b\'\\x7f" 1BYTE 6 "b\'\\x7f"
2> error[0; 6) token("b\'\\x7f") msg(Missing trailing `'` symbol to terminate the byte literal) 2> error0..6 token("b\'\\x7f") msg(Missing trailing `'` symbol to terminate the byte literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0012_unclosed_byte_with_unicode_escape.txt b/crates/ra_syntax/test_data/lexer/err/0012_unclosed_byte_with_unicode_escape.txt
index dfca22a59..cc65fb86f 100644
--- a/crates/ra_syntax/test_data/lexer/err/0012_unclosed_byte_with_unicode_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0012_unclosed_byte_with_unicode_escape.txt
@@ -1,2 +1,2 @@
1BYTE 10 "b\'\\u{20AA}" 1BYTE 10 "b\'\\u{20AA}"
2> error[0; 10) token("b\'\\u{20AA}") msg(Missing trailing `'` symbol to terminate the byte literal) 2> error0..10 token("b\'\\u{20AA}") msg(Missing trailing `'` symbol to terminate the byte literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0013_unclosed_byte_with_space.txt b/crates/ra_syntax/test_data/lexer/err/0013_unclosed_byte_with_space.txt
index 51a1cceab..800834a14 100644
--- a/crates/ra_syntax/test_data/lexer/err/0013_unclosed_byte_with_space.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0013_unclosed_byte_with_space.txt
@@ -1,2 +1,2 @@
1BYTE 3 "b\' " 1BYTE 3 "b\' "
2> error[0; 3) token("b\' ") msg(Missing trailing `'` symbol to terminate the byte literal) 2> error0..3 token("b\' ") msg(Missing trailing `'` symbol to terminate the byte literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0014_unclosed_byte_with_slash.txt b/crates/ra_syntax/test_data/lexer/err/0014_unclosed_byte_with_slash.txt
index 24e835c27..7b85ee646 100644
--- a/crates/ra_syntax/test_data/lexer/err/0014_unclosed_byte_with_slash.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0014_unclosed_byte_with_slash.txt
@@ -1,2 +1,2 @@
1BYTE 3 "b\'\\" 1BYTE 3 "b\'\\"
2> error[0; 3) token("b\'\\") msg(Missing trailing `'` symbol to terminate the byte literal) 2> error0..3 token("b\'\\") msg(Missing trailing `'` symbol to terminate the byte literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0015_unclosed_byte_with_slash_n.txt b/crates/ra_syntax/test_data/lexer/err/0015_unclosed_byte_with_slash_n.txt
index f1e39a41b..4b9a63117 100644
--- a/crates/ra_syntax/test_data/lexer/err/0015_unclosed_byte_with_slash_n.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0015_unclosed_byte_with_slash_n.txt
@@ -1,2 +1,2 @@
1BYTE 4 "b\'\\n" 1BYTE 4 "b\'\\n"
2> error[0; 4) token("b\'\\n") msg(Missing trailing `'` symbol to terminate the byte literal) 2> error0..4 token("b\'\\n") msg(Missing trailing `'` symbol to terminate the byte literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0016_unclosed_byte_with_slash_single_quote.txt b/crates/ra_syntax/test_data/lexer/err/0016_unclosed_byte_with_slash_single_quote.txt
index f8ffe815d..fe337f8d3 100644
--- a/crates/ra_syntax/test_data/lexer/err/0016_unclosed_byte_with_slash_single_quote.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0016_unclosed_byte_with_slash_single_quote.txt
@@ -1,2 +1,2 @@
1BYTE 4 "b\'\\\'" 1BYTE 4 "b\'\\\'"
2> error[0; 4) token("b\'\\\'") msg(Missing trailing `'` symbol to terminate the byte literal) 2> error0..4 token("b\'\\\'") msg(Missing trailing `'` symbol to terminate the byte literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0017_unclosed_string_at_eof.txt b/crates/ra_syntax/test_data/lexer/err/0017_unclosed_string_at_eof.txt
index 823daaf6f..d11a8d880 100644
--- a/crates/ra_syntax/test_data/lexer/err/0017_unclosed_string_at_eof.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0017_unclosed_string_at_eof.txt
@@ -1,2 +1,2 @@
1STRING 1 "\"" 1STRING 1 "\""
2> error[0; 1) token("\"") msg(Missing trailing `"` symbol to terminate the string literal) 2> error0..1 token("\"") msg(Missing trailing `"` symbol to terminate the string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0018_unclosed_string_with_ferris.txt b/crates/ra_syntax/test_data/lexer/err/0018_unclosed_string_with_ferris.txt
index 164580eb3..167f942d1 100644
--- a/crates/ra_syntax/test_data/lexer/err/0018_unclosed_string_with_ferris.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0018_unclosed_string_with_ferris.txt
@@ -1,2 +1,2 @@
1STRING 5 "\"🦀" 1STRING 5 "\"🦀"
2> error[0; 5) token("\"🦀") msg(Missing trailing `"` symbol to terminate the string literal) 2> error0..5 token("\"🦀") msg(Missing trailing `"` symbol to terminate the string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0019_unclosed_string_with_ascii_escape.txt b/crates/ra_syntax/test_data/lexer/err/0019_unclosed_string_with_ascii_escape.txt
index 4453827c3..224c653d2 100644
--- a/crates/ra_syntax/test_data/lexer/err/0019_unclosed_string_with_ascii_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0019_unclosed_string_with_ascii_escape.txt
@@ -1,2 +1,2 @@
1STRING 5 "\"\\x7f" 1STRING 5 "\"\\x7f"
2> error[0; 5) token("\"\\x7f") msg(Missing trailing `"` symbol to terminate the string literal) 2> error0..5 token("\"\\x7f") msg(Missing trailing `"` symbol to terminate the string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0020_unclosed_string_with_unicode_escape.txt b/crates/ra_syntax/test_data/lexer/err/0020_unclosed_string_with_unicode_escape.txt
index aa614f304..48975bbcb 100644
--- a/crates/ra_syntax/test_data/lexer/err/0020_unclosed_string_with_unicode_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0020_unclosed_string_with_unicode_escape.txt
@@ -1,2 +1,2 @@
1STRING 9 "\"\\u{20AA}" 1STRING 9 "\"\\u{20AA}"
2> error[0; 9) token("\"\\u{20AA}") msg(Missing trailing `"` symbol to terminate the string literal) 2> error0..9 token("\"\\u{20AA}") msg(Missing trailing `"` symbol to terminate the string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0021_unclosed_string_with_space.txt b/crates/ra_syntax/test_data/lexer/err/0021_unclosed_string_with_space.txt
index b7db1236f..a823cca7a 100644
--- a/crates/ra_syntax/test_data/lexer/err/0021_unclosed_string_with_space.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0021_unclosed_string_with_space.txt
@@ -1,2 +1,2 @@
1STRING 2 "\" " 1STRING 2 "\" "
2> error[0; 2) token("\" ") msg(Missing trailing `"` symbol to terminate the string literal) 2> error0..2 token("\" ") msg(Missing trailing `"` symbol to terminate the string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0022_unclosed_string_with_slash.txt b/crates/ra_syntax/test_data/lexer/err/0022_unclosed_string_with_slash.txt
index 9d3df3799..0914f001f 100644
--- a/crates/ra_syntax/test_data/lexer/err/0022_unclosed_string_with_slash.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0022_unclosed_string_with_slash.txt
@@ -1,2 +1,2 @@
1STRING 2 "\"\\" 1STRING 2 "\"\\"
2> error[0; 2) token("\"\\") msg(Missing trailing `"` symbol to terminate the string literal) 2> error0..2 token("\"\\") msg(Missing trailing `"` symbol to terminate the string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0023_unclosed_string_with_slash_n.txt b/crates/ra_syntax/test_data/lexer/err/0023_unclosed_string_with_slash_n.txt
index e3eb672b6..5674b55fd 100644
--- a/crates/ra_syntax/test_data/lexer/err/0023_unclosed_string_with_slash_n.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0023_unclosed_string_with_slash_n.txt
@@ -1,2 +1,2 @@
1STRING 3 "\"\\n" 1STRING 3 "\"\\n"
2> error[0; 3) token("\"\\n") msg(Missing trailing `"` symbol to terminate the string literal) 2> error0..3 token("\"\\n") msg(Missing trailing `"` symbol to terminate the string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0024_unclosed_string_with_slash_double_quote.txt b/crates/ra_syntax/test_data/lexer/err/0024_unclosed_string_with_slash_double_quote.txt
index 041d7fb6e..4c9a774e4 100644
--- a/crates/ra_syntax/test_data/lexer/err/0024_unclosed_string_with_slash_double_quote.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0024_unclosed_string_with_slash_double_quote.txt
@@ -1,2 +1,2 @@
1STRING 3 "\"\\\"" 1STRING 3 "\"\\\""
2> error[0; 3) token("\"\\\"") msg(Missing trailing `"` symbol to terminate the string literal) 2> error0..3 token("\"\\\"") msg(Missing trailing `"` symbol to terminate the string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0025_unclosed_byte_string_at_eof.txt b/crates/ra_syntax/test_data/lexer/err/0025_unclosed_byte_string_at_eof.txt
index be7970a83..04e6b0aa4 100644
--- a/crates/ra_syntax/test_data/lexer/err/0025_unclosed_byte_string_at_eof.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0025_unclosed_byte_string_at_eof.txt
@@ -1,2 +1,2 @@
1BYTE_STRING 2 "b\"" 1BYTE_STRING 2 "b\""
2> error[0; 2) token("b\"") msg(Missing trailing `"` symbol to terminate the byte string literal) 2> error0..2 token("b\"") msg(Missing trailing `"` symbol to terminate the byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0026_unclosed_byte_string_with_ferris.txt b/crates/ra_syntax/test_data/lexer/err/0026_unclosed_byte_string_with_ferris.txt
index bf9aab132..0576a0609 100644
--- a/crates/ra_syntax/test_data/lexer/err/0026_unclosed_byte_string_with_ferris.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0026_unclosed_byte_string_with_ferris.txt
@@ -1,2 +1,2 @@
1BYTE_STRING 6 "b\"🦀" 1BYTE_STRING 6 "b\"🦀"
2> error[0; 6) token("b\"🦀") msg(Missing trailing `"` symbol to terminate the byte string literal) 2> error0..6 token("b\"🦀") msg(Missing trailing `"` symbol to terminate the byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0027_unclosed_byte_string_with_ascii_escape.txt b/crates/ra_syntax/test_data/lexer/err/0027_unclosed_byte_string_with_ascii_escape.txt
index 76e16d7d3..541a013d8 100644
--- a/crates/ra_syntax/test_data/lexer/err/0027_unclosed_byte_string_with_ascii_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0027_unclosed_byte_string_with_ascii_escape.txt
@@ -1,2 +1,2 @@
1BYTE_STRING 6 "b\"\\x7f" 1BYTE_STRING 6 "b\"\\x7f"
2> error[0; 6) token("b\"\\x7f") msg(Missing trailing `"` symbol to terminate the byte string literal) 2> error0..6 token("b\"\\x7f") msg(Missing trailing `"` symbol to terminate the byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0028_unclosed_byte_string_with_unicode_escape.txt b/crates/ra_syntax/test_data/lexer/err/0028_unclosed_byte_string_with_unicode_escape.txt
index 09adffa16..71b0fb211 100644
--- a/crates/ra_syntax/test_data/lexer/err/0028_unclosed_byte_string_with_unicode_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0028_unclosed_byte_string_with_unicode_escape.txt
@@ -1,2 +1,2 @@
1BYTE_STRING 10 "b\"\\u{20AA}" 1BYTE_STRING 10 "b\"\\u{20AA}"
2> error[0; 10) token("b\"\\u{20AA}") msg(Missing trailing `"` symbol to terminate the byte string literal) 2> error0..10 token("b\"\\u{20AA}") msg(Missing trailing `"` symbol to terminate the byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0029_unclosed_byte_string_with_space.txt b/crates/ra_syntax/test_data/lexer/err/0029_unclosed_byte_string_with_space.txt
index fcb7253c8..bd5058bc1 100644
--- a/crates/ra_syntax/test_data/lexer/err/0029_unclosed_byte_string_with_space.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0029_unclosed_byte_string_with_space.txt
@@ -1,2 +1,2 @@
1BYTE_STRING 3 "b\" " 1BYTE_STRING 3 "b\" "
2> error[0; 3) token("b\" ") msg(Missing trailing `"` symbol to terminate the byte string literal) 2> error0..3 token("b\" ") msg(Missing trailing `"` symbol to terminate the byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0030_unclosed_byte_string_with_slash.txt b/crates/ra_syntax/test_data/lexer/err/0030_unclosed_byte_string_with_slash.txt
index 0a1b3e269..7f94f10ba 100644
--- a/crates/ra_syntax/test_data/lexer/err/0030_unclosed_byte_string_with_slash.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0030_unclosed_byte_string_with_slash.txt
@@ -1,2 +1,2 @@
1BYTE_STRING 3 "b\"\\" 1BYTE_STRING 3 "b\"\\"
2> error[0; 3) token("b\"\\") msg(Missing trailing `"` symbol to terminate the byte string literal) 2> error0..3 token("b\"\\") msg(Missing trailing `"` symbol to terminate the byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0031_unclosed_byte_string_with_slash_n.txt b/crates/ra_syntax/test_data/lexer/err/0031_unclosed_byte_string_with_slash_n.txt
index 1fb89d2b6..9c3c089d7 100644
--- a/crates/ra_syntax/test_data/lexer/err/0031_unclosed_byte_string_with_slash_n.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0031_unclosed_byte_string_with_slash_n.txt
@@ -1,2 +1,2 @@
1BYTE_STRING 4 "b\"\\n" 1BYTE_STRING 4 "b\"\\n"
2> error[0; 4) token("b\"\\n") msg(Missing trailing `"` symbol to terminate the byte string literal) 2> error0..4 token("b\"\\n") msg(Missing trailing `"` symbol to terminate the byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0032_unclosed_byte_string_with_slash_double_quote.txt b/crates/ra_syntax/test_data/lexer/err/0032_unclosed_byte_string_with_slash_double_quote.txt
index 718d36992..884b12c8e 100644
--- a/crates/ra_syntax/test_data/lexer/err/0032_unclosed_byte_string_with_slash_double_quote.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0032_unclosed_byte_string_with_slash_double_quote.txt
@@ -1,2 +1,2 @@
1BYTE_STRING 4 "b\"\\\"" 1BYTE_STRING 4 "b\"\\\""
2> error[0; 4) token("b\"\\\"") msg(Missing trailing `"` symbol to terminate the byte string literal) 2> error0..4 token("b\"\\\"") msg(Missing trailing `"` symbol to terminate the byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0033_unclosed_raw_string_at_eof.txt b/crates/ra_syntax/test_data/lexer/err/0033_unclosed_raw_string_at_eof.txt
index 93348f548..6fd59ccc0 100644
--- a/crates/ra_syntax/test_data/lexer/err/0033_unclosed_raw_string_at_eof.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0033_unclosed_raw_string_at_eof.txt
@@ -1,2 +1,2 @@
1RAW_STRING 4 "r##\"" 1RAW_STRING 4 "r##\""
2> error[0; 4) token("r##\"") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal) 2> error0..4 token("r##\"") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0034_unclosed_raw_string_with_ferris.txt b/crates/ra_syntax/test_data/lexer/err/0034_unclosed_raw_string_with_ferris.txt
index 42c70dfe8..8d9ca0e8f 100644
--- a/crates/ra_syntax/test_data/lexer/err/0034_unclosed_raw_string_with_ferris.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0034_unclosed_raw_string_with_ferris.txt
@@ -1,2 +1,2 @@
1RAW_STRING 8 "r##\"🦀" 1RAW_STRING 8 "r##\"🦀"
2> error[0; 8) token("r##\"🦀") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal) 2> error0..8 token("r##\"🦀") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0035_unclosed_raw_string_with_ascii_escape.txt b/crates/ra_syntax/test_data/lexer/err/0035_unclosed_raw_string_with_ascii_escape.txt
index 2bdeea0ff..a906380c7 100644
--- a/crates/ra_syntax/test_data/lexer/err/0035_unclosed_raw_string_with_ascii_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0035_unclosed_raw_string_with_ascii_escape.txt
@@ -1,2 +1,2 @@
1RAW_STRING 8 "r##\"\\x7f" 1RAW_STRING 8 "r##\"\\x7f"
2> error[0; 8) token("r##\"\\x7f") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal) 2> error0..8 token("r##\"\\x7f") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0036_unclosed_raw_string_with_unicode_escape.txt b/crates/ra_syntax/test_data/lexer/err/0036_unclosed_raw_string_with_unicode_escape.txt
index 667d4d79f..5667c6149 100644
--- a/crates/ra_syntax/test_data/lexer/err/0036_unclosed_raw_string_with_unicode_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0036_unclosed_raw_string_with_unicode_escape.txt
@@ -1,2 +1,2 @@
1RAW_STRING 12 "r##\"\\u{20AA}" 1RAW_STRING 12 "r##\"\\u{20AA}"
2> error[0; 12) token("r##\"\\u{20AA}") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal) 2> error0..12 token("r##\"\\u{20AA}") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0037_unclosed_raw_string_with_space.txt b/crates/ra_syntax/test_data/lexer/err/0037_unclosed_raw_string_with_space.txt
index dd9597a1a..141c8268e 100644
--- a/crates/ra_syntax/test_data/lexer/err/0037_unclosed_raw_string_with_space.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0037_unclosed_raw_string_with_space.txt
@@ -1,2 +1,2 @@
1RAW_STRING 5 "r##\" " 1RAW_STRING 5 "r##\" "
2> error[0; 5) token("r##\" ") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal) 2> error0..5 token("r##\" ") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0038_unclosed_raw_string_with_slash.txt b/crates/ra_syntax/test_data/lexer/err/0038_unclosed_raw_string_with_slash.txt
index 6ac6e3d62..f61d4cc91 100644
--- a/crates/ra_syntax/test_data/lexer/err/0038_unclosed_raw_string_with_slash.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0038_unclosed_raw_string_with_slash.txt
@@ -1,2 +1,2 @@
1RAW_STRING 5 "r##\"\\" 1RAW_STRING 5 "r##\"\\"
2> error[0; 5) token("r##\"\\") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal) 2> error0..5 token("r##\"\\") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0039_unclosed_raw_string_with_slash_n.txt b/crates/ra_syntax/test_data/lexer/err/0039_unclosed_raw_string_with_slash_n.txt
index 9d35443f5..12e2c0fc0 100644
--- a/crates/ra_syntax/test_data/lexer/err/0039_unclosed_raw_string_with_slash_n.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0039_unclosed_raw_string_with_slash_n.txt
@@ -1,2 +1,2 @@
1RAW_STRING 6 "r##\"\\n" 1RAW_STRING 6 "r##\"\\n"
2> error[0; 6) token("r##\"\\n") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal) 2> error0..6 token("r##\"\\n") msg(Missing trailing `"` with `#` symbols to terminate the raw string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0040_unclosed_raw_byte_string_at_eof.txt b/crates/ra_syntax/test_data/lexer/err/0040_unclosed_raw_byte_string_at_eof.txt
index 81fa39ea5..fe12cb5fc 100644
--- a/crates/ra_syntax/test_data/lexer/err/0040_unclosed_raw_byte_string_at_eof.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0040_unclosed_raw_byte_string_at_eof.txt
@@ -1,2 +1,2 @@
1RAW_BYTE_STRING 5 "br##\"" 1RAW_BYTE_STRING 5 "br##\""
2> error[0; 5) token("br##\"") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal) 2> error0..5 token("br##\"") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0041_unclosed_raw_byte_string_with_ferris.txt b/crates/ra_syntax/test_data/lexer/err/0041_unclosed_raw_byte_string_with_ferris.txt
index c2503a4d0..5be2a7861 100644
--- a/crates/ra_syntax/test_data/lexer/err/0041_unclosed_raw_byte_string_with_ferris.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0041_unclosed_raw_byte_string_with_ferris.txt
@@ -1,2 +1,2 @@
1RAW_BYTE_STRING 9 "br##\"🦀" 1RAW_BYTE_STRING 9 "br##\"🦀"
2> error[0; 9) token("br##\"🦀") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal) 2> error0..9 token("br##\"🦀") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0042_unclosed_raw_byte_string_with_ascii_escape.txt b/crates/ra_syntax/test_data/lexer/err/0042_unclosed_raw_byte_string_with_ascii_escape.txt
index 3bd3d8152..6cbe08d07 100644
--- a/crates/ra_syntax/test_data/lexer/err/0042_unclosed_raw_byte_string_with_ascii_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0042_unclosed_raw_byte_string_with_ascii_escape.txt
@@ -1,2 +1,2 @@
1RAW_BYTE_STRING 9 "br##\"\\x7f" 1RAW_BYTE_STRING 9 "br##\"\\x7f"
2> error[0; 9) token("br##\"\\x7f") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal) 2> error0..9 token("br##\"\\x7f") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0043_unclosed_raw_byte_string_with_unicode_escape.txt b/crates/ra_syntax/test_data/lexer/err/0043_unclosed_raw_byte_string_with_unicode_escape.txt
index a512f0428..f56a4f984 100644
--- a/crates/ra_syntax/test_data/lexer/err/0043_unclosed_raw_byte_string_with_unicode_escape.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0043_unclosed_raw_byte_string_with_unicode_escape.txt
@@ -1,2 +1,2 @@
1RAW_BYTE_STRING 13 "br##\"\\u{20AA}" 1RAW_BYTE_STRING 13 "br##\"\\u{20AA}"
2> error[0; 13) token("br##\"\\u{20AA}") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal) 2> error0..13 token("br##\"\\u{20AA}") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0044_unclosed_raw_byte_string_with_space.txt b/crates/ra_syntax/test_data/lexer/err/0044_unclosed_raw_byte_string_with_space.txt
index dc616a623..3d32ce34e 100644
--- a/crates/ra_syntax/test_data/lexer/err/0044_unclosed_raw_byte_string_with_space.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0044_unclosed_raw_byte_string_with_space.txt
@@ -1,2 +1,2 @@
1RAW_BYTE_STRING 6 "br##\" " 1RAW_BYTE_STRING 6 "br##\" "
2> error[0; 6) token("br##\" ") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal) 2> error0..6 token("br##\" ") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0045_unclosed_raw_byte_string_with_slash.txt b/crates/ra_syntax/test_data/lexer/err/0045_unclosed_raw_byte_string_with_slash.txt
index debafe380..320fea177 100644
--- a/crates/ra_syntax/test_data/lexer/err/0045_unclosed_raw_byte_string_with_slash.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0045_unclosed_raw_byte_string_with_slash.txt
@@ -1,2 +1,2 @@
1RAW_BYTE_STRING 6 "br##\"\\" 1RAW_BYTE_STRING 6 "br##\"\\"
2> error[0; 6) token("br##\"\\") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal) 2> error0..6 token("br##\"\\") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0046_unclosed_raw_byte_string_with_slash_n.txt b/crates/ra_syntax/test_data/lexer/err/0046_unclosed_raw_byte_string_with_slash_n.txt
index 524e617b7..b3a56380c 100644
--- a/crates/ra_syntax/test_data/lexer/err/0046_unclosed_raw_byte_string_with_slash_n.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0046_unclosed_raw_byte_string_with_slash_n.txt
@@ -1,2 +1,2 @@
1RAW_BYTE_STRING 7 "br##\"\\n" 1RAW_BYTE_STRING 7 "br##\"\\n"
2> error[0; 7) token("br##\"\\n") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal) 2> error0..7 token("br##\"\\n") msg(Missing trailing `"` with `#` symbols to terminate the raw byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0047_unstarted_raw_string_at_eof.txt b/crates/ra_syntax/test_data/lexer/err/0047_unstarted_raw_string_at_eof.txt
index 00b046840..5af1e2d97 100644
--- a/crates/ra_syntax/test_data/lexer/err/0047_unstarted_raw_string_at_eof.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0047_unstarted_raw_string_at_eof.txt
@@ -1,2 +1,2 @@
1RAW_STRING 3 "r##" 1RAW_STRING 3 "r##"
2> error[0; 3) token("r##") msg(Missing `"` symbol after `#` symbols to begin the raw string literal) 2> error0..3 token("r##") msg(Missing `"` symbol after `#` symbols to begin the raw string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0048_unstarted_raw_byte_string_at_eof.txt b/crates/ra_syntax/test_data/lexer/err/0048_unstarted_raw_byte_string_at_eof.txt
index 33b25e60f..aec7afd92 100644
--- a/crates/ra_syntax/test_data/lexer/err/0048_unstarted_raw_byte_string_at_eof.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0048_unstarted_raw_byte_string_at_eof.txt
@@ -1,2 +1,2 @@
1RAW_BYTE_STRING 4 "br##" 1RAW_BYTE_STRING 4 "br##"
2> error[0; 4) token("br##") msg(Missing `"` symbol after `#` symbols to begin the raw byte string literal) 2> error0..4 token("br##") msg(Missing `"` symbol after `#` symbols to begin the raw byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0049_unstarted_raw_string_with_ascii.txt b/crates/ra_syntax/test_data/lexer/err/0049_unstarted_raw_string_with_ascii.txt
index 290e0bd7c..e22fe5374 100644
--- a/crates/ra_syntax/test_data/lexer/err/0049_unstarted_raw_string_with_ascii.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0049_unstarted_raw_string_with_ascii.txt
@@ -7,4 +7,4 @@ IDENT 1 "a"
7WHITESPACE 1 " " 7WHITESPACE 1 " "
8IDENT 5 "quote" 8IDENT 5 "quote"
9BANG 1 "!" 9BANG 1 "!"
10> error[0; 4) token("r## ") msg(Missing `"` symbol after `#` symbols to begin the raw string literal) 10> error0..4 token("r## ") msg(Missing `"` symbol after `#` symbols to begin the raw string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0050_unstarted_raw_byte_string_with_ascii.txt b/crates/ra_syntax/test_data/lexer/err/0050_unstarted_raw_byte_string_with_ascii.txt
index 5c492906d..d74ea4c27 100644
--- a/crates/ra_syntax/test_data/lexer/err/0050_unstarted_raw_byte_string_with_ascii.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0050_unstarted_raw_byte_string_with_ascii.txt
@@ -7,4 +7,4 @@ IDENT 1 "a"
7WHITESPACE 1 " " 7WHITESPACE 1 " "
8IDENT 5 "quote" 8IDENT 5 "quote"
9BANG 1 "!" 9BANG 1 "!"
10> error[0; 5) token("br## ") msg(Missing `"` symbol after `#` symbols to begin the raw byte string literal) 10> error0..5 token("br## ") msg(Missing `"` symbol after `#` symbols to begin the raw byte string literal)
diff --git a/crates/ra_syntax/test_data/lexer/err/0051_unclosed_block_comment_at_eof.txt b/crates/ra_syntax/test_data/lexer/err/0051_unclosed_block_comment_at_eof.txt
index 5d04cdaa4..2a256e9df 100644
--- a/crates/ra_syntax/test_data/lexer/err/0051_unclosed_block_comment_at_eof.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0051_unclosed_block_comment_at_eof.txt
@@ -1,2 +1,2 @@
1COMMENT 2 "/*" 1COMMENT 2 "/*"
2> error[0; 2) token("/*") msg(Missing trailing `*/` symbols to terminate the block comment) 2> error0..2 token("/*") msg(Missing trailing `*/` symbols to terminate the block comment)
diff --git a/crates/ra_syntax/test_data/lexer/err/0052_unclosed_block_comment_with_content.txt b/crates/ra_syntax/test_data/lexer/err/0052_unclosed_block_comment_with_content.txt
index 8c6b678e3..8e8490302 100644
--- a/crates/ra_syntax/test_data/lexer/err/0052_unclosed_block_comment_with_content.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0052_unclosed_block_comment_with_content.txt
@@ -1,2 +1,2 @@
1COMMENT 11 "/* comment\n" 1COMMENT 11 "/* comment\n"
2> error[0; 11) token("/* comment\n") msg(Missing trailing `*/` symbols to terminate the block comment) 2> error0..11 token("/* comment\n") msg(Missing trailing `*/` symbols to terminate the block comment)
diff --git a/crates/ra_syntax/test_data/lexer/err/0053_unclosed_nested_block_comment_entirely.txt b/crates/ra_syntax/test_data/lexer/err/0053_unclosed_nested_block_comment_entirely.txt
index 250de34d9..b7d28fc05 100644
--- a/crates/ra_syntax/test_data/lexer/err/0053_unclosed_nested_block_comment_entirely.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0053_unclosed_nested_block_comment_entirely.txt
@@ -1,2 +1,2 @@
1COMMENT 9 "/* /* /*\n" 1COMMENT 9 "/* /* /*\n"
2> error[0; 9) token("/* /* /*\n") msg(Missing trailing `*/` symbols to terminate the block comment) 2> error0..9 token("/* /* /*\n") msg(Missing trailing `*/` symbols to terminate the block comment)
diff --git a/crates/ra_syntax/test_data/lexer/err/0054_unclosed_nested_block_comment_partially.txt b/crates/ra_syntax/test_data/lexer/err/0054_unclosed_nested_block_comment_partially.txt
index f97f2a8c7..4742d2c12 100644
--- a/crates/ra_syntax/test_data/lexer/err/0054_unclosed_nested_block_comment_partially.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0054_unclosed_nested_block_comment_partially.txt
@@ -1,2 +1,2 @@
1COMMENT 25 "/** /*! /* comment */ */\n" 1COMMENT 25 "/** /*! /* comment */ */\n"
2> error[0; 25) token("/** /*! /* comment */ */\n") msg(Missing trailing `*/` symbols to terminate the block comment) 2> error0..25 token("/** /*! /* comment */ */\n") msg(Missing trailing `*/` symbols to terminate the block comment)
diff --git a/crates/ra_syntax/test_data/lexer/err/0055_empty_int.txt b/crates/ra_syntax/test_data/lexer/err/0055_empty_int.txt
index 2fe5bd950..bcd094b6e 100644
--- a/crates/ra_syntax/test_data/lexer/err/0055_empty_int.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0055_empty_int.txt
@@ -24,16 +24,16 @@ INT_NUMBER 4 "0x_g"
24WHITESPACE 1 "\n" 24WHITESPACE 1 "\n"
25INT_NUMBER 4 "0x_G" 25INT_NUMBER 4 "0x_G"
26WHITESPACE 1 "\n" 26WHITESPACE 1 "\n"
27> error[0; 2) token("0b") msg(Missing digits after the integer base prefix) 27> error0..2 token("0b") msg(Missing digits after the integer base prefix)
28> error[3; 5) token("0o") msg(Missing digits after the integer base prefix) 28> error3..5 token("0o") msg(Missing digits after the integer base prefix)
29> error[6; 8) token("0x") msg(Missing digits after the integer base prefix) 29> error6..8 token("0x") msg(Missing digits after the integer base prefix)
30> error[10; 13) token("0b_") msg(Missing digits after the integer base prefix) 30> error10..13 token("0b_") msg(Missing digits after the integer base prefix)
31> error[14; 17) token("0o_") msg(Missing digits after the integer base prefix) 31> error14..17 token("0o_") msg(Missing digits after the integer base prefix)
32> error[18; 21) token("0x_") msg(Missing digits after the integer base prefix) 32> error18..21 token("0x_") msg(Missing digits after the integer base prefix)
33> error[23; 32) token("0bnoDigit") msg(Missing digits after the integer base prefix) 33> error23..32 token("0bnoDigit") msg(Missing digits after the integer base prefix)
34> error[33; 42) token("0onoDigit") msg(Missing digits after the integer base prefix) 34> error33..42 token("0onoDigit") msg(Missing digits after the integer base prefix)
35> error[43; 52) token("0xnoDigit") msg(Missing digits after the integer base prefix) 35> error43..52 token("0xnoDigit") msg(Missing digits after the integer base prefix)
36> error[54; 57) token("0xG") msg(Missing digits after the integer base prefix) 36> error54..57 token("0xG") msg(Missing digits after the integer base prefix)
37> error[58; 61) token("0xg") msg(Missing digits after the integer base prefix) 37> error58..61 token("0xg") msg(Missing digits after the integer base prefix)
38> error[63; 67) token("0x_g") msg(Missing digits after the integer base prefix) 38> error63..67 token("0x_g") msg(Missing digits after the integer base prefix)
39> error[68; 72) token("0x_G") msg(Missing digits after the integer base prefix) 39> error68..72 token("0x_G") msg(Missing digits after the integer base prefix)
diff --git a/crates/ra_syntax/test_data/lexer/err/0056_empty_exponent.txt b/crates/ra_syntax/test_data/lexer/err/0056_empty_exponent.txt
index ab35e20a5..6a645a6a4 100644
--- a/crates/ra_syntax/test_data/lexer/err/0056_empty_exponent.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0056_empty_exponent.txt
@@ -46,17 +46,17 @@ FLOAT_NUMBER 9 "42.2E+f32"
46WHITESPACE 1 "\n" 46WHITESPACE 1 "\n"
47FLOAT_NUMBER 9 "42.2E-f32" 47FLOAT_NUMBER 9 "42.2E-f32"
48WHITESPACE 1 "\n" 48WHITESPACE 1 "\n"
49> error[0; 2) token("0e") msg(Missing digits after the exponent symbol) 49> error0..2 token("0e") msg(Missing digits after the exponent symbol)
50> error[3; 5) token("0E") msg(Missing digits after the exponent symbol) 50> error3..5 token("0E") msg(Missing digits after the exponent symbol)
51> error[7; 11) token("42e+") msg(Missing digits after the exponent symbol) 51> error7..11 token("42e+") msg(Missing digits after the exponent symbol)
52> error[12; 16) token("42e-") msg(Missing digits after the exponent symbol) 52> error12..16 token("42e-") msg(Missing digits after the exponent symbol)
53> error[17; 21) token("42E+") msg(Missing digits after the exponent symbol) 53> error17..21 token("42E+") msg(Missing digits after the exponent symbol)
54> error[22; 26) token("42E-") msg(Missing digits after the exponent symbol) 54> error22..26 token("42E-") msg(Missing digits after the exponent symbol)
55> error[53; 59) token("42.2e+") msg(Missing digits after the exponent symbol) 55> error53..59 token("42.2e+") msg(Missing digits after the exponent symbol)
56> error[60; 66) token("42.2e-") msg(Missing digits after the exponent symbol) 56> error60..66 token("42.2e-") msg(Missing digits after the exponent symbol)
57> error[67; 73) token("42.2E+") msg(Missing digits after the exponent symbol) 57> error67..73 token("42.2E+") msg(Missing digits after the exponent symbol)
58> error[74; 80) token("42.2E-") msg(Missing digits after the exponent symbol) 58> error74..80 token("42.2E-") msg(Missing digits after the exponent symbol)
59> error[82; 91) token("42.2e+f32") msg(Missing digits after the exponent symbol) 59> error82..91 token("42.2e+f32") msg(Missing digits after the exponent symbol)
60> error[92; 101) token("42.2e-f32") msg(Missing digits after the exponent symbol) 60> error92..101 token("42.2e-f32") msg(Missing digits after the exponent symbol)
61> error[102; 111) token("42.2E+f32") msg(Missing digits after the exponent symbol) 61> error102..111 token("42.2E+f32") msg(Missing digits after the exponent symbol)
62> error[112; 121) token("42.2E-f32") msg(Missing digits after the exponent symbol) 62> error112..121 token("42.2E-f32") msg(Missing digits after the exponent symbol)
diff --git a/crates/ra_syntax/test_data/lexer/err/0057_lifetime_strarts_with_a_number.txt b/crates/ra_syntax/test_data/lexer/err/0057_lifetime_strarts_with_a_number.txt
index 89b38bfac..e138bcebc 100644
--- a/crates/ra_syntax/test_data/lexer/err/0057_lifetime_strarts_with_a_number.txt
+++ b/crates/ra_syntax/test_data/lexer/err/0057_lifetime_strarts_with_a_number.txt
@@ -2,5 +2,5 @@ LIFETIME 2 "\'1"
2WHITESPACE 1 "\n" 2WHITESPACE 1 "\n"
3LIFETIME 10 "\'1lifetime" 3LIFETIME 10 "\'1lifetime"
4WHITESPACE 1 "\n" 4WHITESPACE 1 "\n"
5> error[0; 2) token("\'1") msg(Lifetime name cannot start with a number) 5> error0..2 token("\'1") msg(Lifetime name cannot start with a number)
6> error[3; 13) token("\'1lifetime") msg(Lifetime name cannot start with a number) 6> error3..13 token("\'1lifetime") msg(Lifetime name cannot start with a number)
diff --git a/crates/ra_syntax/test_data/parser/err/0000_struct_field_missing_comma.rast b/crates/ra_syntax/test_data/parser/err/0000_struct_field_missing_comma.rast
index edcd936b0..81f0f575c 100644
--- a/crates/ra_syntax/test_data/parser/err/0000_struct_field_missing_comma.rast
+++ b/crates/ra_syntax/test_data/parser/err/0000_struct_field_missing_comma.rast
@@ -1,34 +1,34 @@
1SOURCE_FILE@[0; 34) 1SOURCE_FILE@0..34
2 STRUCT_DEF@[0; 34) 2 STRUCT_DEF@0..34
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 RECORD_FIELD_DEF_LIST@[9; 34) 8 RECORD_FIELD_DEF_LIST@9..34
9 L_CURLY@[9; 10) "{" 9 L_CURLY@9..10 "{"
10 WHITESPACE@[10; 15) "\n " 10 WHITESPACE@10..15 "\n "
11 RECORD_FIELD_DEF@[15; 21) 11 RECORD_FIELD_DEF@15..21
12 NAME@[15; 16) 12 NAME@15..16
13 IDENT@[15; 16) "a" 13 IDENT@15..16 "a"
14 COLON@[16; 17) ":" 14 COLON@16..17 ":"
15 WHITESPACE@[17; 18) " " 15 WHITESPACE@17..18 " "
16 PATH_TYPE@[18; 21) 16 PATH_TYPE@18..21
17 PATH@[18; 21) 17 PATH@18..21
18 PATH_SEGMENT@[18; 21) 18 PATH_SEGMENT@18..21
19 NAME_REF@[18; 21) 19 NAME_REF@18..21
20 IDENT@[18; 21) "u32" 20 IDENT@18..21 "u32"
21 WHITESPACE@[21; 26) "\n " 21 WHITESPACE@21..26 "\n "
22 RECORD_FIELD_DEF@[26; 32) 22 RECORD_FIELD_DEF@26..32
23 NAME@[26; 27) 23 NAME@26..27
24 IDENT@[26; 27) "b" 24 IDENT@26..27 "b"
25 COLON@[27; 28) ":" 25 COLON@27..28 ":"
26 WHITESPACE@[28; 29) " " 26 WHITESPACE@28..29 " "
27 PATH_TYPE@[29; 32) 27 PATH_TYPE@29..32
28 PATH@[29; 32) 28 PATH@29..32
29 PATH_SEGMENT@[29; 32) 29 PATH_SEGMENT@29..32
30 NAME_REF@[29; 32) 30 NAME_REF@29..32
31 IDENT@[29; 32) "u32" 31 IDENT@29..32 "u32"
32 WHITESPACE@[32; 33) "\n" 32 WHITESPACE@32..33 "\n"
33 R_CURLY@[33; 34) "}" 33 R_CURLY@33..34 "}"
34error [21; 21): expected COMMA 34error 21..21: expected COMMA
diff --git a/crates/ra_syntax/test_data/parser/err/0001_item_recovery_in_file.rast b/crates/ra_syntax/test_data/parser/err/0001_item_recovery_in_file.rast
index 2d653715e..97d0fe910 100644
--- a/crates/ra_syntax/test_data/parser/err/0001_item_recovery_in_file.rast
+++ b/crates/ra_syntax/test_data/parser/err/0001_item_recovery_in_file.rast
@@ -1,18 +1,18 @@
1SOURCE_FILE@[0; 21) 1SOURCE_FILE@0..21
2 ERROR@[0; 2) 2 ERROR@0..2
3 IF_KW@[0; 2) "if" 3 IF_KW@0..2 "if"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 ERROR@[3; 8) 5 ERROR@3..8
6 MATCH_KW@[3; 8) "match" 6 MATCH_KW@3..8 "match"
7 WHITESPACE@[8; 10) "\n\n" 7 WHITESPACE@8..10 "\n\n"
8 STRUCT_DEF@[10; 21) 8 STRUCT_DEF@10..21
9 STRUCT_KW@[10; 16) "struct" 9 STRUCT_KW@10..16 "struct"
10 WHITESPACE@[16; 17) " " 10 WHITESPACE@16..17 " "
11 NAME@[17; 18) 11 NAME@17..18
12 IDENT@[17; 18) "S" 12 IDENT@17..18 "S"
13 WHITESPACE@[18; 19) " " 13 WHITESPACE@18..19 " "
14 RECORD_FIELD_DEF_LIST@[19; 21) 14 RECORD_FIELD_DEF_LIST@19..21
15 L_CURLY@[19; 20) "{" 15 L_CURLY@19..20 "{"
16 R_CURLY@[20; 21) "}" 16 R_CURLY@20..21 "}"
17error [0; 0): expected an item 17error 0..0: expected an item
18error [3; 3): expected an item 18error 3..3: expected an item
diff --git a/crates/ra_syntax/test_data/parser/err/0002_duplicate_shebang.rast b/crates/ra_syntax/test_data/parser/err/0002_duplicate_shebang.rast
index 831bbf83f..6717995e9 100644
--- a/crates/ra_syntax/test_data/parser/err/0002_duplicate_shebang.rast
+++ b/crates/ra_syntax/test_data/parser/err/0002_duplicate_shebang.rast
@@ -1,39 +1,39 @@
1SOURCE_FILE@[0; 42) 1SOURCE_FILE@0..42
2 SHEBANG@[0; 20) "#!/use/bin/env rusti" 2 SHEBANG@0..20 "#!/use/bin/env rusti"
3 WHITESPACE@[20; 21) "\n" 3 WHITESPACE@20..21 "\n"
4 ATTR@[21; 23) 4 ATTR@21..23
5 POUND@[21; 22) "#" 5 POUND@21..22 "#"
6 BANG@[22; 23) "!" 6 BANG@22..23 "!"
7 ERROR@[23; 24) 7 ERROR@23..24
8 SLASH@[23; 24) "/" 8 SLASH@23..24 "/"
9 USE_ITEM@[24; 28) 9 USE_ITEM@24..28
10 USE_KW@[24; 27) "use" 10 USE_KW@24..27 "use"
11 ERROR@[27; 28) 11 ERROR@27..28
12 SLASH@[27; 28) "/" 12 SLASH@27..28 "/"
13 MACRO_CALL@[28; 31) 13 MACRO_CALL@28..31
14 PATH@[28; 31) 14 PATH@28..31
15 PATH_SEGMENT@[28; 31) 15 PATH_SEGMENT@28..31
16 NAME_REF@[28; 31) 16 NAME_REF@28..31
17 IDENT@[28; 31) "bin" 17 IDENT@28..31 "bin"
18 ERROR@[31; 32) 18 ERROR@31..32
19 SLASH@[31; 32) "/" 19 SLASH@31..32 "/"
20 MACRO_CALL@[32; 41) 20 MACRO_CALL@32..41
21 PATH@[32; 35) 21 PATH@32..35
22 PATH_SEGMENT@[32; 35) 22 PATH_SEGMENT@32..35
23 NAME_REF@[32; 35) 23 NAME_REF@32..35
24 IDENT@[32; 35) "env" 24 IDENT@32..35 "env"
25 WHITESPACE@[35; 36) " " 25 WHITESPACE@35..36 " "
26 NAME@[36; 41) 26 NAME@36..41
27 IDENT@[36; 41) "rusti" 27 IDENT@36..41 "rusti"
28 WHITESPACE@[41; 42) "\n" 28 WHITESPACE@41..42 "\n"
29error [23; 23): expected `[` 29error 23..23: expected `[`
30error [23; 23): expected an item 30error 23..23: expected an item
31error [27; 27): expected one of `*`, `::`, `{`, `self`, `super` or an identifier 31error 27..27: expected one of `*`, `::`, `{`, `self`, `super` or an identifier
32error [28; 28): expected SEMICOLON 32error 28..28: expected SEMICOLON
33error [31; 31): expected BANG 33error 31..31: expected BANG
34error [31; 31): expected `{`, `[`, `(` 34error 31..31: expected `{`, `[`, `(`
35error [31; 31): expected SEMICOLON 35error 31..31: expected SEMICOLON
36error [31; 31): expected an item 36error 31..31: expected an item
37error [35; 35): expected BANG 37error 35..35: expected BANG
38error [41; 41): expected `{`, `[`, `(` 38error 41..41: expected `{`, `[`, `(`
39error [41; 41): expected SEMICOLON 39error 41..41: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/err/0003_C++_semicolon.rast b/crates/ra_syntax/test_data/parser/err/0003_C++_semicolon.rast
index 6b89e7572..21c255698 100644
--- a/crates/ra_syntax/test_data/parser/err/0003_C++_semicolon.rast
+++ b/crates/ra_syntax/test_data/parser/err/0003_C++_semicolon.rast
@@ -1,39 +1,39 @@
1SOURCE_FILE@[0; 40) 1SOURCE_FILE@0..40
2 STRUCT_DEF@[0; 39) 2 STRUCT_DEF@0..39
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 RECORD_FIELD_DEF_LIST@[9; 39) 8 RECORD_FIELD_DEF_LIST@9..39
9 L_CURLY@[9; 10) "{" 9 L_CURLY@9..10 "{"
10 WHITESPACE@[10; 15) "\n " 10 WHITESPACE@10..15 "\n "
11 RECORD_FIELD_DEF@[15; 21) 11 RECORD_FIELD_DEF@15..21
12 NAME@[15; 16) 12 NAME@15..16
13 IDENT@[15; 16) "a" 13 IDENT@15..16 "a"
14 COLON@[16; 17) ":" 14 COLON@16..17 ":"
15 WHITESPACE@[17; 18) " " 15 WHITESPACE@17..18 " "
16 PATH_TYPE@[18; 21) 16 PATH_TYPE@18..21
17 PATH@[18; 21) 17 PATH@18..21
18 PATH_SEGMENT@[18; 21) 18 PATH_SEGMENT@18..21
19 NAME_REF@[18; 21) 19 NAME_REF@18..21
20 IDENT@[18; 21) "i32" 20 IDENT@18..21 "i32"
21 COMMA@[21; 22) "," 21 COMMA@21..22 ","
22 WHITESPACE@[22; 27) "\n " 22 WHITESPACE@22..27 "\n "
23 RECORD_FIELD_DEF@[27; 36) 23 RECORD_FIELD_DEF@27..36
24 NAME@[27; 28) 24 NAME@27..28
25 IDENT@[27; 28) "b" 25 IDENT@27..28 "b"
26 COLON@[28; 29) ":" 26 COLON@28..29 ":"
27 WHITESPACE@[29; 30) " " 27 WHITESPACE@29..30 " "
28 PATH_TYPE@[30; 36) 28 PATH_TYPE@30..36
29 PATH@[30; 36) 29 PATH@30..36
30 PATH_SEGMENT@[30; 36) 30 PATH_SEGMENT@30..36
31 NAME_REF@[30; 36) 31 NAME_REF@30..36
32 IDENT@[30; 36) "String" 32 IDENT@30..36 "String"
33 COMMA@[36; 37) "," 33 COMMA@36..37 ","
34 WHITESPACE@[37; 38) "\n" 34 WHITESPACE@37..38 "\n"
35 R_CURLY@[38; 39) "}" 35 R_CURLY@38..39 "}"
36 ERROR@[39; 40) 36 ERROR@39..40
37 SEMICOLON@[39; 40) ";" 37 SEMICOLON@39..40 ";"
38error [39; 39): expected item, found `;` 38error 39..39: expected item, found `;`
39consider removing this semicolon 39consider removing this semicolon
diff --git a/crates/ra_syntax/test_data/parser/err/0004_use_path_bad_segment.rast b/crates/ra_syntax/test_data/parser/err/0004_use_path_bad_segment.rast
index 1d27d4cd6..8c6b89dc2 100644
--- a/crates/ra_syntax/test_data/parser/err/0004_use_path_bad_segment.rast
+++ b/crates/ra_syntax/test_data/parser/err/0004_use_path_bad_segment.rast
@@ -1,16 +1,16 @@
1SOURCE_FILE@[0; 12) 1SOURCE_FILE@0..12
2 USE_ITEM@[0; 12) 2 USE_ITEM@0..12
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 11) 5 USE_TREE@4..11
6 PATH@[4; 11) 6 PATH@4..11
7 PATH@[4; 7) 7 PATH@4..7
8 PATH_SEGMENT@[4; 7) 8 PATH_SEGMENT@4..7
9 NAME_REF@[4; 7) 9 NAME_REF@4..7
10 IDENT@[4; 7) "foo" 10 IDENT@4..7 "foo"
11 COLON2@[7; 9) "::" 11 COLON2@7..9 "::"
12 PATH_SEGMENT@[9; 11) 12 PATH_SEGMENT@9..11
13 ERROR@[9; 11) 13 ERROR@9..11
14 INT_NUMBER@[9; 11) "92" 14 INT_NUMBER@9..11 "92"
15 SEMICOLON@[11; 12) ";" 15 SEMICOLON@11..12 ";"
16error [9; 9): expected identifier 16error 9..9: expected identifier
diff --git a/crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast b/crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast
index cc11421a9..95cc83caa 100644
--- a/crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast
+++ b/crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast
@@ -1,60 +1,60 @@
1SOURCE_FILE@[0; 54) 1SOURCE_FILE@0..54
2 FN_DEF@[0; 31) 2 FN_DEF@0..31
3 ATTR@[0; 18) 3 ATTR@0..18
4 POUND@[0; 1) "#" 4 POUND@0..1 "#"
5 L_BRACK@[1; 2) "[" 5 L_BRACK@1..2 "["
6 PATH@[2; 5) 6 PATH@2..5
7 PATH_SEGMENT@[2; 5) 7 PATH_SEGMENT@2..5
8 NAME_REF@[2; 5) 8 NAME_REF@2..5
9 IDENT@[2; 5) "foo" 9 IDENT@2..5 "foo"
10 TOKEN_TREE@[5; 17) 10 TOKEN_TREE@5..17
11 L_PAREN@[5; 6) "(" 11 L_PAREN@5..6 "("
12 IDENT@[6; 9) "foo" 12 IDENT@6..9 "foo"
13 COMMA@[9; 10) "," 13 COMMA@9..10 ","
14 WHITESPACE@[10; 11) " " 14 WHITESPACE@10..11 " "
15 PLUS@[11; 12) "+" 15 PLUS@11..12 "+"
16 COMMA@[12; 13) "," 16 COMMA@12..13 ","
17 WHITESPACE@[13; 14) " " 17 WHITESPACE@13..14 " "
18 INT_NUMBER@[14; 16) "92" 18 INT_NUMBER@14..16 "92"
19 R_PAREN@[16; 17) ")" 19 R_PAREN@16..17 ")"
20 R_BRACK@[17; 18) "]" 20 R_BRACK@17..18 "]"
21 WHITESPACE@[18; 19) "\n" 21 WHITESPACE@18..19 "\n"
22 FN_KW@[19; 21) "fn" 22 FN_KW@19..21 "fn"
23 WHITESPACE@[21; 22) " " 23 WHITESPACE@21..22 " "
24 NAME@[22; 25) 24 NAME@22..25
25 IDENT@[22; 25) "foo" 25 IDENT@22..25 "foo"
26 PARAM_LIST@[25; 27) 26 PARAM_LIST@25..27
27 L_PAREN@[25; 26) "(" 27 L_PAREN@25..26 "("
28 R_PAREN@[26; 27) ")" 28 R_PAREN@26..27 ")"
29 WHITESPACE@[27; 28) " " 29 WHITESPACE@27..28 " "
30 BLOCK_EXPR@[28; 31) 30 BLOCK_EXPR@28..31
31 BLOCK@[28; 31) 31 BLOCK@28..31
32 L_CURLY@[28; 29) "{" 32 L_CURLY@28..29 "{"
33 WHITESPACE@[29; 30) "\n" 33 WHITESPACE@29..30 "\n"
34 R_CURLY@[30; 31) "}" 34 R_CURLY@30..31 "}"
35 WHITESPACE@[31; 34) "\n\n\n" 35 WHITESPACE@31..34 "\n\n\n"
36 ATTR@[34; 53) 36 ATTR@34..53
37 POUND@[34; 35) "#" 37 POUND@34..35 "#"
38 L_BRACK@[35; 36) "[" 38 L_BRACK@35..36 "["
39 PATH@[36; 39) 39 PATH@36..39
40 PATH_SEGMENT@[36; 39) 40 PATH_SEGMENT@36..39
41 NAME_REF@[36; 39) 41 NAME_REF@36..39
42 IDENT@[36; 39) "foo" 42 IDENT@36..39 "foo"
43 TOKEN_TREE@[39; 53) 43 TOKEN_TREE@39..53
44 L_PAREN@[39; 40) "(" 44 L_PAREN@39..40 "("
45 WHITESPACE@[40; 41) "\n" 45 WHITESPACE@40..41 "\n"
46 FN_KW@[41; 43) "fn" 46 FN_KW@41..43 "fn"
47 WHITESPACE@[43; 44) " " 47 WHITESPACE@43..44 " "
48 IDENT@[44; 47) "foo" 48 IDENT@44..47 "foo"
49 TOKEN_TREE@[47; 49) 49 TOKEN_TREE@47..49
50 L_PAREN@[47; 48) "(" 50 L_PAREN@47..48 "("
51 R_PAREN@[48; 49) ")" 51 R_PAREN@48..49 ")"
52 WHITESPACE@[49; 50) " " 52 WHITESPACE@49..50 " "
53 TOKEN_TREE@[50; 53) 53 TOKEN_TREE@50..53
54 L_CURLY@[50; 51) "{" 54 L_CURLY@50..51 "{"
55 WHITESPACE@[51; 52) "\n" 55 WHITESPACE@51..52 "\n"
56 R_CURLY@[52; 53) "}" 56 R_CURLY@52..53 "}"
57 WHITESPACE@[53; 54) "\n" 57 WHITESPACE@53..54 "\n"
58error [53; 53): expected R_PAREN 58error 53..53: expected R_PAREN
59error [53; 53): expected `]` 59error 53..53: expected `]`
60error [53; 53): expected an item 60error 53..53: expected an item
diff --git a/crates/ra_syntax/test_data/parser/err/0006_named_field_recovery.rast b/crates/ra_syntax/test_data/parser/err/0006_named_field_recovery.rast
index 84fd92862..2d6364998 100644
--- a/crates/ra_syntax/test_data/parser/err/0006_named_field_recovery.rast
+++ b/crates/ra_syntax/test_data/parser/err/0006_named_field_recovery.rast
@@ -1,74 +1,74 @@
1SOURCE_FILE@[0; 74) 1SOURCE_FILE@0..74
2 STRUCT_DEF@[0; 73) 2 STRUCT_DEF@0..73
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 RECORD_FIELD_DEF_LIST@[9; 73) 8 RECORD_FIELD_DEF_LIST@9..73
9 L_CURLY@[9; 10) "{" 9 L_CURLY@9..10 "{"
10 WHITESPACE@[10; 15) "\n " 10 WHITESPACE@10..15 "\n "
11 RECORD_FIELD_DEF@[15; 21) 11 RECORD_FIELD_DEF@15..21
12 NAME@[15; 16) 12 NAME@15..16
13 IDENT@[15; 16) "f" 13 IDENT@15..16 "f"
14 COLON@[16; 17) ":" 14 COLON@16..17 ":"
15 WHITESPACE@[17; 18) " " 15 WHITESPACE@17..18 " "
16 PATH_TYPE@[18; 21) 16 PATH_TYPE@18..21
17 PATH@[18; 21) 17 PATH@18..21
18 PATH_SEGMENT@[18; 21) 18 PATH_SEGMENT@18..21
19 NAME_REF@[18; 21) 19 NAME_REF@18..21
20 IDENT@[18; 21) "u32" 20 IDENT@18..21 "u32"
21 COMMA@[21; 22) "," 21 COMMA@21..22 ","
22 WHITESPACE@[22; 27) "\n " 22 WHITESPACE@22..27 "\n "
23 VISIBILITY@[27; 30) 23 VISIBILITY@27..30
24 PUB_KW@[27; 30) "pub" 24 PUB_KW@27..30 "pub"
25 WHITESPACE@[30; 31) " " 25 WHITESPACE@30..31 " "
26 ERROR@[31; 33) 26 ERROR@31..33
27 INT_NUMBER@[31; 33) "92" 27 INT_NUMBER@31..33 "92"
28 WHITESPACE@[33; 38) "\n " 28 WHITESPACE@33..38 "\n "
29 ERROR@[38; 39) 29 ERROR@38..39
30 PLUS@[38; 39) "+" 30 PLUS@38..39 "+"
31 WHITESPACE@[39; 40) " " 31 WHITESPACE@39..40 " "
32 ERROR@[40; 41) 32 ERROR@40..41
33 MINUS@[40; 41) "-" 33 MINUS@40..41 "-"
34 WHITESPACE@[41; 42) " " 34 WHITESPACE@41..42 " "
35 ERROR@[42; 43) 35 ERROR@42..43
36 STAR@[42; 43) "*" 36 STAR@42..43 "*"
37 WHITESPACE@[43; 48) "\n " 37 WHITESPACE@43..48 "\n "
38 RECORD_FIELD_DEF@[48; 58) 38 RECORD_FIELD_DEF@48..58
39 VISIBILITY@[48; 51) 39 VISIBILITY@48..51
40 PUB_KW@[48; 51) "pub" 40 PUB_KW@48..51 "pub"
41 WHITESPACE@[51; 52) " " 41 WHITESPACE@51..52 " "
42 NAME@[52; 53) 42 NAME@52..53
43 IDENT@[52; 53) "x" 43 IDENT@52..53 "x"
44 COLON@[53; 54) ":" 44 COLON@53..54 ":"
45 WHITESPACE@[54; 55) " " 45 WHITESPACE@54..55 " "
46 PATH_TYPE@[55; 58) 46 PATH_TYPE@55..58
47 PATH@[55; 58) 47 PATH@55..58
48 PATH_SEGMENT@[55; 58) 48 PATH_SEGMENT@55..58
49 NAME_REF@[55; 58) 49 NAME_REF@55..58
50 IDENT@[55; 58) "u32" 50 IDENT@55..58 "u32"
51 COMMA@[58; 59) "," 51 COMMA@58..59 ","
52 WHITESPACE@[59; 64) "\n " 52 WHITESPACE@59..64 "\n "
53 RECORD_FIELD_DEF@[64; 70) 53 RECORD_FIELD_DEF@64..70
54 NAME@[64; 65) 54 NAME@64..65
55 IDENT@[64; 65) "z" 55 IDENT@64..65 "z"
56 COLON@[65; 66) ":" 56 COLON@65..66 ":"
57 WHITESPACE@[66; 67) " " 57 WHITESPACE@66..67 " "
58 PATH_TYPE@[67; 70) 58 PATH_TYPE@67..70
59 PATH@[67; 70) 59 PATH@67..70
60 PATH_SEGMENT@[67; 70) 60 PATH_SEGMENT@67..70
61 NAME_REF@[67; 70) 61 NAME_REF@67..70
62 IDENT@[67; 70) "f64" 62 IDENT@67..70 "f64"
63 COMMA@[70; 71) "," 63 COMMA@70..71 ","
64 WHITESPACE@[71; 72) "\n" 64 WHITESPACE@71..72 "\n"
65 R_CURLY@[72; 73) "}" 65 R_CURLY@72..73 "}"
66 WHITESPACE@[73; 74) "\n" 66 WHITESPACE@73..74 "\n"
67error [31; 31): expected field declaration 67error 31..31: expected field declaration
68error [33; 33): expected COMMA 68error 33..33: expected COMMA
69error [38; 38): expected field declaration 69error 38..38: expected field declaration
70error [39; 39): expected COMMA 70error 39..39: expected COMMA
71error [40; 40): expected field declaration 71error 40..40: expected field declaration
72error [41; 41): expected COMMA 72error 41..41: expected COMMA
73error [42; 42): expected field declaration 73error 42..42: expected field declaration
74error [43; 43): expected COMMA 74error 43..43: expected COMMA
diff --git a/crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast b/crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast
index c24e478f3..dc3e12091 100644
--- a/crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast
+++ b/crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast
@@ -1,33 +1,33 @@
1SOURCE_FILE@[0; 31) 1SOURCE_FILE@0..31
2 ERROR@[0; 1) 2 ERROR@0..1
3 R_CURLY@[0; 1) "}" 3 R_CURLY@0..1 "}"
4 WHITESPACE@[1; 3) "\n\n" 4 WHITESPACE@1..3 "\n\n"
5 STRUCT_DEF@[3; 12) 5 STRUCT_DEF@3..12
6 STRUCT_KW@[3; 9) "struct" 6 STRUCT_KW@3..9 "struct"
7 WHITESPACE@[9; 10) " " 7 WHITESPACE@9..10 " "
8 NAME@[10; 11) 8 NAME@10..11
9 IDENT@[10; 11) "S" 9 IDENT@10..11 "S"
10 SEMICOLON@[11; 12) ";" 10 SEMICOLON@11..12 ";"
11 WHITESPACE@[12; 14) "\n\n" 11 WHITESPACE@12..14 "\n\n"
12 ERROR@[14; 15) 12 ERROR@14..15
13 R_CURLY@[14; 15) "}" 13 R_CURLY@14..15 "}"
14 WHITESPACE@[15; 17) "\n\n" 14 WHITESPACE@15..17 "\n\n"
15 FN_DEF@[17; 27) 15 FN_DEF@17..27
16 FN_KW@[17; 19) "fn" 16 FN_KW@17..19 "fn"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 NAME@[20; 23) 18 NAME@20..23
19 IDENT@[20; 23) "foo" 19 IDENT@20..23 "foo"
20 PARAM_LIST@[23; 25) 20 PARAM_LIST@23..25
21 L_PAREN@[23; 24) "(" 21 L_PAREN@23..24 "("
22 R_PAREN@[24; 25) ")" 22 R_PAREN@24..25 ")"
23 BLOCK_EXPR@[25; 27) 23 BLOCK_EXPR@25..27
24 BLOCK@[25; 27) 24 BLOCK@25..27
25 L_CURLY@[25; 26) "{" 25 L_CURLY@25..26 "{"
26 R_CURLY@[26; 27) "}" 26 R_CURLY@26..27 "}"
27 WHITESPACE@[27; 29) "\n\n" 27 WHITESPACE@27..29 "\n\n"
28 ERROR@[29; 30) 28 ERROR@29..30
29 R_CURLY@[29; 30) "}" 29 R_CURLY@29..30 "}"
30 WHITESPACE@[30; 31) "\n" 30 WHITESPACE@30..31 "\n"
31error [0; 0): unmatched `}` 31error 0..0: unmatched `}`
32error [14; 14): unmatched `}` 32error 14..14: unmatched `}`
33error [29; 29): unmatched `}` 33error 29..29: unmatched `}`
diff --git a/crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast b/crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast
index 9f5041ae4..97539fcf2 100644
--- a/crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast
+++ b/crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast
@@ -1,81 +1,81 @@
1SOURCE_FILE@[0; 95) 1SOURCE_FILE@0..95
2 FN_DEF@[0; 12) 2 FN_DEF@0..12
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 12) 11 BLOCK_EXPR@9..12
12 BLOCK@[9; 12) 12 BLOCK@9..12
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 11) "\n" 14 WHITESPACE@10..11 "\n"
15 R_CURLY@[11; 12) "}" 15 R_CURLY@11..12 "}"
16 WHITESPACE@[12; 14) "\n\n" 16 WHITESPACE@12..14 "\n\n"
17 MACRO_CALL@[14; 19) 17 MACRO_CALL@14..19
18 PATH@[14; 17) 18 PATH@14..17
19 PATH_SEGMENT@[14; 17) 19 PATH_SEGMENT@14..17
20 NAME_REF@[14; 17) 20 NAME_REF@14..17
21 IDENT@[14; 17) "bar" 21 IDENT@14..17 "bar"
22 TOKEN_TREE@[17; 19) 22 TOKEN_TREE@17..19
23 L_PAREN@[17; 18) "(" 23 L_PAREN@17..18 "("
24 R_PAREN@[18; 19) ")" 24 R_PAREN@18..19 ")"
25 WHITESPACE@[19; 20) " " 25 WHITESPACE@19..20 " "
26 ERROR@[20; 80) 26 ERROR@20..80
27 L_CURLY@[20; 21) "{" 27 L_CURLY@20..21 "{"
28 WHITESPACE@[21; 26) "\n " 28 WHITESPACE@21..26 "\n "
29 IF_EXPR@[26; 78) 29 IF_EXPR@26..78
30 IF_KW@[26; 28) "if" 30 IF_KW@26..28 "if"
31 WHITESPACE@[28; 29) " " 31 WHITESPACE@28..29 " "
32 CONDITION@[29; 33) 32 CONDITION@29..33
33 LITERAL@[29; 33) 33 LITERAL@29..33
34 TRUE_KW@[29; 33) "true" 34 TRUE_KW@29..33 "true"
35 WHITESPACE@[33; 34) " " 35 WHITESPACE@33..34 " "
36 BLOCK_EXPR@[34; 51) 36 BLOCK_EXPR@34..51
37 BLOCK@[34; 51) 37 BLOCK@34..51
38 L_CURLY@[34; 35) "{" 38 L_CURLY@34..35 "{"
39 WHITESPACE@[35; 44) "\n " 39 WHITESPACE@35..44 "\n "
40 LITERAL@[44; 45) 40 LITERAL@44..45
41 INT_NUMBER@[44; 45) "1" 41 INT_NUMBER@44..45 "1"
42 WHITESPACE@[45; 50) "\n " 42 WHITESPACE@45..50 "\n "
43 R_CURLY@[50; 51) "}" 43 R_CURLY@50..51 "}"
44 WHITESPACE@[51; 52) " " 44 WHITESPACE@51..52 " "
45 ELSE_KW@[52; 56) "else" 45 ELSE_KW@52..56 "else"
46 WHITESPACE@[56; 57) " " 46 WHITESPACE@56..57 " "
47 BLOCK_EXPR@[57; 78) 47 BLOCK_EXPR@57..78
48 BLOCK@[57; 78) 48 BLOCK@57..78
49 L_CURLY@[57; 58) "{" 49 L_CURLY@57..58 "{"
50 WHITESPACE@[58; 67) "\n " 50 WHITESPACE@58..67 "\n "
51 BIN_EXPR@[67; 72) 51 BIN_EXPR@67..72
52 LITERAL@[67; 68) 52 LITERAL@67..68
53 INT_NUMBER@[67; 68) "2" 53 INT_NUMBER@67..68 "2"
54 WHITESPACE@[68; 69) " " 54 WHITESPACE@68..69 " "
55 PLUS@[69; 70) "+" 55 PLUS@69..70 "+"
56 WHITESPACE@[70; 71) " " 56 WHITESPACE@70..71 " "
57 LITERAL@[71; 72) 57 LITERAL@71..72
58 INT_NUMBER@[71; 72) "3" 58 INT_NUMBER@71..72 "3"
59 WHITESPACE@[72; 77) "\n " 59 WHITESPACE@72..77 "\n "
60 R_CURLY@[77; 78) "}" 60 R_CURLY@77..78 "}"
61 WHITESPACE@[78; 79) "\n" 61 WHITESPACE@78..79 "\n"
62 R_CURLY@[79; 80) "}" 62 R_CURLY@79..80 "}"
63 WHITESPACE@[80; 82) "\n\n" 63 WHITESPACE@80..82 "\n\n"
64 FN_DEF@[82; 94) 64 FN_DEF@82..94
65 FN_KW@[82; 84) "fn" 65 FN_KW@82..84 "fn"
66 WHITESPACE@[84; 85) " " 66 WHITESPACE@84..85 " "
67 NAME@[85; 88) 67 NAME@85..88
68 IDENT@[85; 88) "baz" 68 IDENT@85..88 "baz"
69 PARAM_LIST@[88; 90) 69 PARAM_LIST@88..90
70 L_PAREN@[88; 89) "(" 70 L_PAREN@88..89 "("
71 R_PAREN@[89; 90) ")" 71 R_PAREN@89..90 ")"
72 WHITESPACE@[90; 91) " " 72 WHITESPACE@90..91 " "
73 BLOCK_EXPR@[91; 94) 73 BLOCK_EXPR@91..94
74 BLOCK@[91; 94) 74 BLOCK@91..94
75 L_CURLY@[91; 92) "{" 75 L_CURLY@91..92 "{"
76 WHITESPACE@[92; 93) "\n" 76 WHITESPACE@92..93 "\n"
77 R_CURLY@[93; 94) "}" 77 R_CURLY@93..94 "}"
78 WHITESPACE@[94; 95) "\n" 78 WHITESPACE@94..95 "\n"
79error [17; 17): expected BANG 79error 17..17: expected BANG
80error [19; 19): expected SEMICOLON 80error 19..19: expected SEMICOLON
81error [20; 20): expected an item 81error 20..20: expected an item
diff --git a/crates/ra_syntax/test_data/parser/err/0009_broken_struct_type_parameter.rast b/crates/ra_syntax/test_data/parser/err/0009_broken_struct_type_parameter.rast
index 7ed80477d..aca02ece4 100644
--- a/crates/ra_syntax/test_data/parser/err/0009_broken_struct_type_parameter.rast
+++ b/crates/ra_syntax/test_data/parser/err/0009_broken_struct_type_parameter.rast
@@ -1,58 +1,58 @@
1SOURCE_FILE@[0; 43) 1SOURCE_FILE@0..43
2 STRUCT_DEF@[0; 11) 2 STRUCT_DEF@0..11
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 TYPE_PARAM_LIST@[8; 11) 7 TYPE_PARAM_LIST@8..11
8 L_ANGLE@[8; 9) "<" 8 L_ANGLE@8..9 "<"
9 ERROR@[9; 11) 9 ERROR@9..11
10 INT_NUMBER@[9; 11) "90" 10 INT_NUMBER@9..11 "90"
11 WHITESPACE@[11; 12) " " 11 WHITESPACE@11..12 " "
12 ERROR@[12; 13) 12 ERROR@12..13
13 PLUS@[12; 13) "+" 13 PLUS@12..13 "+"
14 WHITESPACE@[13; 14) " " 14 WHITESPACE@13..14 " "
15 ERROR@[14; 15) 15 ERROR@14..15
16 INT_NUMBER@[14; 15) "2" 16 INT_NUMBER@14..15 "2"
17 ERROR@[15; 16) 17 ERROR@15..16
18 R_ANGLE@[15; 16) ">" 18 R_ANGLE@15..16 ">"
19 WHITESPACE@[16; 17) " " 19 WHITESPACE@16..17 " "
20 ERROR@[17; 31) 20 ERROR@17..31
21 L_CURLY@[17; 18) "{" 21 L_CURLY@17..18 "{"
22 WHITESPACE@[18; 23) "\n " 22 WHITESPACE@18..23 "\n "
23 EXPR_STMT@[23; 24) 23 EXPR_STMT@23..24
24 PATH_EXPR@[23; 24) 24 PATH_EXPR@23..24
25 PATH@[23; 24) 25 PATH@23..24
26 PATH_SEGMENT@[23; 24) 26 PATH_SEGMENT@23..24
27 NAME_REF@[23; 24) 27 NAME_REF@23..24
28 IDENT@[23; 24) "f" 28 IDENT@23..24 "f"
29 EXPR_STMT@[24; 25) 29 EXPR_STMT@24..25
30 ERROR@[24; 25) 30 ERROR@24..25
31 COLON@[24; 25) ":" 31 COLON@24..25 ":"
32 WHITESPACE@[25; 26) " " 32 WHITESPACE@25..26 " "
33 PATH_EXPR@[26; 29) 33 PATH_EXPR@26..29
34 PATH@[26; 29) 34 PATH@26..29
35 PATH_SEGMENT@[26; 29) 35 PATH_SEGMENT@26..29
36 NAME_REF@[26; 29) 36 NAME_REF@26..29
37 IDENT@[26; 29) "u32" 37 IDENT@26..29 "u32"
38 WHITESPACE@[29; 30) "\n" 38 WHITESPACE@29..30 "\n"
39 R_CURLY@[30; 31) "}" 39 R_CURLY@30..31 "}"
40 WHITESPACE@[31; 33) "\n\n" 40 WHITESPACE@31..33 "\n\n"
41 STRUCT_DEF@[33; 42) 41 STRUCT_DEF@33..42
42 STRUCT_KW@[33; 39) "struct" 42 STRUCT_KW@33..39 "struct"
43 WHITESPACE@[39; 40) " " 43 WHITESPACE@39..40 " "
44 NAME@[40; 41) 44 NAME@40..41
45 IDENT@[40; 41) "T" 45 IDENT@40..41 "T"
46 SEMICOLON@[41; 42) ";" 46 SEMICOLON@41..42 ";"
47 WHITESPACE@[42; 43) "\n" 47 WHITESPACE@42..43 "\n"
48error [9; 9): expected type parameter 48error 9..9: expected type parameter
49error [11; 11): expected COMMA 49error 11..11: expected COMMA
50error [11; 11): expected R_ANGLE 50error 11..11: expected R_ANGLE
51error [11; 11): expected `;`, `{`, or `(` 51error 11..11: expected `;`, `{`, or `(`
52error [12; 12): expected an item 52error 12..12: expected an item
53error [14; 14): expected an item 53error 14..14: expected an item
54error [15; 15): expected an item 54error 15..15: expected an item
55error [17; 17): expected an item 55error 17..17: expected an item
56error [24; 24): expected SEMICOLON 56error 24..24: expected SEMICOLON
57error [24; 24): expected expression 57error 24..24: expected expression
58error [25; 25): expected SEMICOLON 58error 25..25: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast b/crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast
index 5559c3297..e10bb8174 100644
--- a/crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast
+++ b/crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast
@@ -1,45 +1,45 @@
1SOURCE_FILE@[0; 42) 1SOURCE_FILE@0..42
2 FN_DEF@[0; 41) 2 FN_DEF@0..41
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 41) 11 BLOCK_EXPR@10..41
12 BLOCK@[10; 41) 12 BLOCK@10..41
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 EXPR_STMT@[16; 24) 15 EXPR_STMT@16..24
16 LAMBDA_EXPR@[16; 24) 16 LAMBDA_EXPR@16..24
17 PARAM_LIST@[16; 18) 17 PARAM_LIST@16..18
18 PIPE@[16; 17) "|" 18 PIPE@16..17 "|"
19 PIPE@[17; 18) "|" 19 PIPE@17..18 "|"
20 WHITESPACE@[18; 19) " " 20 WHITESPACE@18..19 " "
21 RET_TYPE@[19; 24) 21 RET_TYPE@19..24
22 THIN_ARROW@[19; 21) "->" 22 THIN_ARROW@19..21 "->"
23 WHITESPACE@[21; 22) " " 23 WHITESPACE@21..22 " "
24 TUPLE_TYPE@[22; 24) 24 TUPLE_TYPE@22..24
25 L_PAREN@[22; 23) "(" 25 L_PAREN@22..23 "("
26 R_PAREN@[23; 24) ")" 26 R_PAREN@23..24 ")"
27 WHITESPACE@[24; 25) " " 27 WHITESPACE@24..25 " "
28 EXPR_STMT@[25; 39) 28 EXPR_STMT@25..39
29 BLOCK_EXPR@[25; 38) 29 BLOCK_EXPR@25..38
30 UNSAFE_KW@[25; 31) "unsafe" 30 UNSAFE_KW@25..31 "unsafe"
31 WHITESPACE@[31; 32) " " 31 WHITESPACE@31..32 " "
32 BLOCK@[32; 38) 32 BLOCK@32..38
33 L_CURLY@[32; 33) "{" 33 L_CURLY@32..33 "{"
34 WHITESPACE@[33; 34) " " 34 WHITESPACE@33..34 " "
35 TUPLE_EXPR@[34; 36) 35 TUPLE_EXPR@34..36
36 L_PAREN@[34; 35) "(" 36 L_PAREN@34..35 "("
37 R_PAREN@[35; 36) ")" 37 R_PAREN@35..36 ")"
38 WHITESPACE@[36; 37) " " 38 WHITESPACE@36..37 " "
39 R_CURLY@[37; 38) "}" 39 R_CURLY@37..38 "}"
40 SEMICOLON@[38; 39) ";" 40 SEMICOLON@38..39 ";"
41 WHITESPACE@[39; 40) "\n" 41 WHITESPACE@39..40 "\n"
42 R_CURLY@[40; 41) "}" 42 R_CURLY@40..41 "}"
43 WHITESPACE@[41; 42) "\n" 43 WHITESPACE@41..42 "\n"
44error [24; 24): expected `{` 44error 24..24: expected `{`
45error [24; 24): expected SEMICOLON 45error 24..24: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/err/0011_extern_struct.rast b/crates/ra_syntax/test_data/parser/err/0011_extern_struct.rast
index 99c212fd6..87c54c32c 100644
--- a/crates/ra_syntax/test_data/parser/err/0011_extern_struct.rast
+++ b/crates/ra_syntax/test_data/parser/err/0011_extern_struct.rast
@@ -1,13 +1,13 @@
1SOURCE_FILE@[0; 19) 1SOURCE_FILE@0..19
2 ERROR@[0; 6) 2 ERROR@0..6
3 ABI@[0; 6) 3 ABI@0..6
4 EXTERN_KW@[0; 6) "extern" 4 EXTERN_KW@0..6 "extern"
5 WHITESPACE@[6; 7) " " 5 WHITESPACE@6..7 " "
6 STRUCT_DEF@[7; 18) 6 STRUCT_DEF@7..18
7 STRUCT_KW@[7; 13) "struct" 7 STRUCT_KW@7..13 "struct"
8 WHITESPACE@[13; 14) " " 8 WHITESPACE@13..14 " "
9 NAME@[14; 17) 9 NAME@14..17
10 IDENT@[14; 17) "Foo" 10 IDENT@14..17 "Foo"
11 SEMICOLON@[17; 18) ";" 11 SEMICOLON@17..18 ";"
12 WHITESPACE@[18; 19) "\n" 12 WHITESPACE@18..19 "\n"
13error [6; 6): expected existential, fn, trait or impl 13error 6..6: expected existential, fn, trait or impl
diff --git a/crates/ra_syntax/test_data/parser/err/0012_broken_lambda.rast b/crates/ra_syntax/test_data/parser/err/0012_broken_lambda.rast
index 0a3c0313d..e1e782f5f 100644
--- a/crates/ra_syntax/test_data/parser/err/0012_broken_lambda.rast
+++ b/crates/ra_syntax/test_data/parser/err/0012_broken_lambda.rast
@@ -1,387 +1,387 @@
1SOURCE_FILE@[0; 389) 1SOURCE_FILE@0..389
2 FN_DEF@[0; 389) 2 FN_DEF@0..389
3 VISIBILITY@[0; 10) 3 VISIBILITY@0..10
4 PUB_KW@[0; 3) 4 PUB_KW@0..3
5 L_PAREN@[3; 4) 5 L_PAREN@3..4
6 SUPER_KW@[4; 9) 6 SUPER_KW@4..9
7 R_PAREN@[9; 10) 7 R_PAREN@9..10
8 WHITESPACE@[10; 11) 8 WHITESPACE@10..11
9 FN_KW@[11; 13) 9 FN_KW@11..13
10 WHITESPACE@[13; 14) 10 WHITESPACE@13..14
11 NAME@[14; 21) 11 NAME@14..21
12 IDENT@[14; 21) "process" 12 IDENT@14..21 "process"
13 TYPE_PARAM_LIST@[21; 38) 13 TYPE_PARAM_LIST@21..38
14 L_ANGLE@[21; 22) 14 L_ANGLE@21..22
15 LIFETIME_PARAM@[22; 24) 15 LIFETIME_PARAM@22..24
16 LIFETIME@[22; 24) "'a" 16 LIFETIME@22..24 "'a"
17 COMMA@[24; 25) 17 COMMA@24..25
18 WHITESPACE@[25; 26) 18 WHITESPACE@25..26
19 TYPE_PARAM@[26; 37) 19 TYPE_PARAM@26..37
20 NAME@[26; 27) 20 NAME@26..27
21 IDENT@[26; 27) "S" 21 IDENT@26..27 "S"
22 COLON@[27; 28) 22 COLON@27..28
23 WHITESPACE@[28; 29) 23 WHITESPACE@28..29
24 PATH@[29; 37) 24 PATH@29..37
25 PATH_SEGMENT@[29; 37) 25 PATH_SEGMENT@29..37
26 NAME_REF@[29; 33) 26 NAME_REF@29..33
27 IDENT@[29; 33) "Sink" 27 IDENT@29..33 "Sink"
28 TYPE_ARG_LIST@[33; 37) 28 TYPE_ARG_LIST@33..37
29 L_ANGLE@[33; 34) 29 L_ANGLE@33..34
30 LIFETIME_ARG@[34; 36) 30 LIFETIME_ARG@34..36
31 LIFETIME@[34; 36) "'a" 31 LIFETIME@34..36 "'a"
32 R_ANGLE@[36; 37) 32 R_ANGLE@36..37
33 R_ANGLE@[37; 38) 33 R_ANGLE@37..38
34 PARAM_LIST@[38; 93) 34 PARAM_LIST@38..93
35 L_PAREN@[38; 39) 35 L_PAREN@38..39
36 PARAM@[39; 54) 36 PARAM@39..54
37 BIND_PAT@[39; 46) 37 BIND_PAT@39..46
38 NAME@[39; 46) 38 NAME@39..46
39 IDENT@[39; 46) "builder" 39 IDENT@39..46 "builder"
40 COLON@[46; 47) 40 COLON@46..47
41 WHITESPACE@[47; 48) 41 WHITESPACE@47..48
42 REFERENCE_TYPE@[48; 54) 42 REFERENCE_TYPE@48..54
43 AMP@[48; 49) 43 AMP@48..49
44 MUT_KW@[49; 52) 44 MUT_KW@49..52
45 WHITESPACE@[52; 53) 45 WHITESPACE@52..53
46 PATH_TYPE@[53; 54) 46 PATH_TYPE@53..54
47 PATH@[53; 54) 47 PATH@53..54
48 PATH_SEGMENT@[53; 54) 48 PATH_SEGMENT@53..54
49 NAME_REF@[53; 54) 49 NAME_REF@53..54
50 IDENT@[53; 54) "S" 50 IDENT@53..54 "S"
51 COMMA@[54; 55) 51 COMMA@54..55
52 WHITESPACE@[55; 56) 52 WHITESPACE@55..56
53 PARAM@[56; 72) 53 PARAM@56..72
54 BIND_PAT@[56; 62) 54 BIND_PAT@56..62
55 NAME@[56; 62) 55 NAME@56..62
56 IDENT@[56; 62) "tokens" 56 IDENT@56..62 "tokens"
57 COLON@[62; 63) 57 COLON@62..63
58 WHITESPACE@[63; 64) 58 WHITESPACE@63..64
59 REFERENCE_TYPE@[64; 72) 59 REFERENCE_TYPE@64..72
60 AMP@[64; 65) 60 AMP@64..65
61 SLICE_TYPE@[65; 72) 61 SLICE_TYPE@65..72
62 L_BRACK@[65; 66) 62 L_BRACK@65..66
63 PATH_TYPE@[66; 71) 63 PATH_TYPE@66..71
64 PATH@[66; 71) 64 PATH@66..71
65 PATH_SEGMENT@[66; 71) 65 PATH_SEGMENT@66..71
66 NAME_REF@[66; 71) 66 NAME_REF@66..71
67 IDENT@[66; 71) "Token" 67 IDENT@66..71 "Token"
68 R_BRACK@[71; 72) 68 R_BRACK@71..72
69 COMMA@[72; 73) 69 COMMA@72..73
70 WHITESPACE@[73; 74) 70 WHITESPACE@73..74
71 PARAM@[74; 92) 71 PARAM@74..92
72 BIND_PAT@[74; 80) 72 BIND_PAT@74..80
73 NAME@[74; 80) 73 NAME@74..80
74 IDENT@[74; 80) "events" 74 IDENT@74..80 "events"
75 COLON@[80; 81) 75 COLON@80..81
76 WHITESPACE@[81; 82) 76 WHITESPACE@81..82
77 PATH_TYPE@[82; 92) 77 PATH_TYPE@82..92
78 PATH@[82; 92) 78 PATH@82..92
79 PATH_SEGMENT@[82; 92) 79 PATH_SEGMENT@82..92
80 NAME_REF@[82; 85) 80 NAME_REF@82..85
81 IDENT@[82; 85) "Vec" 81 IDENT@82..85 "Vec"
82 TYPE_ARG_LIST@[85; 92) 82 TYPE_ARG_LIST@85..92
83 L_ANGLE@[85; 86) 83 L_ANGLE@85..86
84 TYPE_ARG@[86; 91) 84 TYPE_ARG@86..91
85 PATH_TYPE@[86; 91) 85 PATH_TYPE@86..91
86 PATH@[86; 91) 86 PATH@86..91
87 PATH_SEGMENT@[86; 91) 87 PATH_SEGMENT@86..91
88 NAME_REF@[86; 91) 88 NAME_REF@86..91
89 IDENT@[86; 91) "Event" 89 IDENT@86..91 "Event"
90 R_ANGLE@[91; 92) 90 R_ANGLE@91..92
91 R_PAREN@[92; 93) 91 R_PAREN@92..93
92 WHITESPACE@[93; 94) 92 WHITESPACE@93..94
93 BLOCK_EXPR@[94; 389) 93 BLOCK_EXPR@94..389
94 L_CURLY@[94; 95) 94 L_CURLY@94..95
95 WHITESPACE@[95; 100) 95 WHITESPACE@95..100
96 LET_STMT@[100; 125) 96 LET_STMT@100..125
97 LET_KW@[100; 103) 97 LET_KW@100..103
98 WHITESPACE@[103; 104) 98 WHITESPACE@103..104
99 BIND_PAT@[104; 120) 99 BIND_PAT@104..120
100 MUT_KW@[104; 107) 100 MUT_KW@104..107
101 WHITESPACE@[107; 108) 101 WHITESPACE@107..108
102 NAME@[108; 120) 102 NAME@108..120
103 IDENT@[108; 120) "next_tok_idx" 103 IDENT@108..120 "next_tok_idx"
104 WHITESPACE@[120; 121) 104 WHITESPACE@120..121
105 EQ@[121; 122) 105 EQ@121..122
106 WHITESPACE@[122; 123) 106 WHITESPACE@122..123
107 LITERAL@[123; 124) 107 LITERAL@123..124
108 INT_NUMBER@[123; 124) "0" 108 INT_NUMBER@123..124 "0"
109 SEMICOLON@[124; 125) 109 SEMICOLON@124..125
110 WHITESPACE@[125; 130) 110 WHITESPACE@125..130
111 LET_STMT@[130; 389) 111 LET_STMT@130..389
112 LET_KW@[130; 133) 112 LET_KW@130..133
113 WHITESPACE@[133; 134) 113 WHITESPACE@133..134
114 BIND_PAT@[134; 140) 114 BIND_PAT@134..140
115 NAME@[134; 140) 115 NAME@134..140
116 IDENT@[134; 140) "eat_ws" 116 IDENT@134..140 "eat_ws"
117 WHITESPACE@[140; 141) 117 WHITESPACE@140..141
118 EQ@[141; 142) 118 EQ@141..142
119 WHITESPACE@[142; 143) 119 WHITESPACE@142..143
120 LAMBDA_EXPR@[143; 389) 120 LAMBDA_EXPR@143..389
121 PARAM_LIST@[143; 388) 121 PARAM_LIST@143..388
122 PIPE@[143; 144) 122 PIPE@143..144
123 PARAM@[144; 159) 123 PARAM@144..159
124 BIND_PAT@[144; 147) 124 BIND_PAT@144..147
125 NAME@[144; 147) 125 NAME@144..147
126 IDENT@[144; 147) "idx" 126 IDENT@144..147 "idx"
127 COLON@[147; 148) 127 COLON@147..148
128 WHITESPACE@[148; 149) 128 WHITESPACE@148..149
129 REFERENCE_TYPE@[149; 159) 129 REFERENCE_TYPE@149..159
130 AMP@[149; 150) 130 AMP@149..150
131 MUT_KW@[150; 153) 131 MUT_KW@150..153
132 WHITESPACE@[153; 154) 132 WHITESPACE@153..154
133 PATH_TYPE@[154; 159) 133 PATH_TYPE@154..159
134 PATH@[154; 159) 134 PATH@154..159
135 PATH_SEGMENT@[154; 159) 135 PATH_SEGMENT@154..159
136 NAME_REF@[154; 159) 136 NAME_REF@154..159
137 IDENT@[154; 159) "usize" 137 IDENT@154..159 "usize"
138 COMMA@[159; 160) 138 COMMA@159..160
139 WHITESPACE@[160; 161) 139 WHITESPACE@160..161
140 PARAM@[161; 167) 140 PARAM@161..167
141 REF_PAT@[161; 167) 141 REF_PAT@161..167
142 AMP@[161; 162) 142 AMP@161..162
143 MUT_KW@[162; 165) 143 MUT_KW@162..165
144 WHITESPACE@[165; 166) 144 WHITESPACE@165..166
145 err: `expected pattern` 145 err: `expected pattern`
146 ERROR@[166; 167) 146 ERROR@166..167
147 PIPE@[166; 167) 147 PIPE@166..167
148 err: `expected COMMA` 148 err: `expected COMMA`
149 WHITESPACE@[167; 168) 149 WHITESPACE@167..168
150 err: `expected pattern` 150 err: `expected pattern`
151 PARAM@[168; 169) 151 PARAM@168..169
152 ERROR@[168; 169) 152 ERROR@168..169
153 L_CURLY@[168; 169) 153 L_CURLY@168..169
154 err: `expected COMMA` 154 err: `expected COMMA`
155 WHITESPACE@[169; 178) 155 WHITESPACE@169..178
156 err: `expected pattern` 156 err: `expected pattern`
157 PARAM@[178; 183) 157 PARAM@178..183
158 ERROR@[178; 183) 158 ERROR@178..183
159 WHILE_KW@[178; 183) 159 WHILE_KW@178..183
160 err: `expected COMMA` 160 err: `expected COMMA`
161 WHITESPACE@[183; 184) 161 WHITESPACE@183..184
162 err: `expected pattern` 162 err: `expected pattern`
163 PARAM@[184; 187) 163 PARAM@184..187
164 ERROR@[184; 187) 164 ERROR@184..187
165 LET_KW@[184; 187) 165 LET_KW@184..187
166 err: `expected COMMA` 166 err: `expected COMMA`
167 WHITESPACE@[187; 188) 167 WHITESPACE@187..188
168 PARAM@[188; 199) 168 PARAM@188..199
169 TUPLE_STRUCT_PAT@[188; 199) 169 TUPLE_STRUCT_PAT@188..199
170 PATH@[188; 192) 170 PATH@188..192
171 PATH_SEGMENT@[188; 192) 171 PATH_SEGMENT@188..192
172 NAME_REF@[188; 192) 172 NAME_REF@188..192
173 IDENT@[188; 192) "Some" 173 IDENT@188..192 "Some"
174 L_PAREN@[192; 193) 174 L_PAREN@192..193
175 BIND_PAT@[193; 198) 175 BIND_PAT@193..198
176 NAME@[193; 198) 176 NAME@193..198
177 IDENT@[193; 198) "token" 177 IDENT@193..198 "token"
178 R_PAREN@[198; 199) 178 R_PAREN@198..199
179 err: `expected COMMA` 179 err: `expected COMMA`
180 WHITESPACE@[199; 200) 180 WHITESPACE@199..200
181 err: `expected pattern` 181 err: `expected pattern`
182 PARAM@[200; 201) 182 PARAM@200..201
183 ERROR@[200; 201) 183 ERROR@200..201
184 EQ@[200; 201) 184 EQ@200..201
185 err: `expected COMMA` 185 err: `expected COMMA`
186 WHITESPACE@[201; 202) 186 WHITESPACE@201..202
187 PARAM@[202; 208) 187 PARAM@202..208
188 BIND_PAT@[202; 208) 188 BIND_PAT@202..208
189 NAME@[202; 208) 189 NAME@202..208
190 IDENT@[202; 208) "tokens" 190 IDENT@202..208 "tokens"
191 err: `expected COMMA` 191 err: `expected COMMA`
192 err: `expected pattern` 192 err: `expected pattern`
193 PARAM@[208; 209) 193 PARAM@208..209
194 ERROR@[208; 209) 194 ERROR@208..209
195 DOT@[208; 209) 195 DOT@208..209
196 err: `expected COMMA` 196 err: `expected COMMA`
197 PARAM@[209; 218) 197 PARAM@209..218
198 TUPLE_STRUCT_PAT@[209; 218) 198 TUPLE_STRUCT_PAT@209..218
199 PATH@[209; 212) 199 PATH@209..212
200 PATH_SEGMENT@[209; 212) 200 PATH_SEGMENT@209..212
201 NAME_REF@[209; 212) 201 NAME_REF@209..212
202 IDENT@[209; 212) "get" 202 IDENT@209..212 "get"
203 L_PAREN@[212; 213) 203 L_PAREN@212..213
204 err: `expected pattern` 204 err: `expected pattern`
205 ERROR@[213; 214) 205 ERROR@213..214
206 STAR@[213; 214) 206 STAR@213..214
207 err: `expected COMMA` 207 err: `expected COMMA`
208 BIND_PAT@[214; 217) 208 BIND_PAT@214..217
209 NAME@[214; 217) 209 NAME@214..217
210 IDENT@[214; 217) "idx" 210 IDENT@214..217 "idx"
211 R_PAREN@[217; 218) 211 R_PAREN@217..218
212 err: `expected COMMA` 212 err: `expected COMMA`
213 WHITESPACE@[218; 219) 213 WHITESPACE@218..219
214 err: `expected pattern` 214 err: `expected pattern`
215 PARAM@[219; 220) 215 PARAM@219..220
216 ERROR@[219; 220) 216 ERROR@219..220
217 L_CURLY@[219; 220) 217 L_CURLY@219..220
218 err: `expected COMMA` 218 err: `expected COMMA`
219 WHITESPACE@[220; 233) 219 WHITESPACE@220..233
220 err: `expected pattern` 220 err: `expected pattern`
221 PARAM@[233; 235) 221 PARAM@233..235
222 ERROR@[233; 235) 222 ERROR@233..235
223 IF_KW@[233; 235) 223 IF_KW@233..235
224 err: `expected COMMA` 224 err: `expected COMMA`
225 WHITESPACE@[235; 236) 225 WHITESPACE@235..236
226 err: `expected pattern` 226 err: `expected pattern`
227 PARAM@[236; 237) 227 PARAM@236..237
228 ERROR@[236; 237) 228 ERROR@236..237
229 BANG@[236; 237) 229 BANG@236..237
230 err: `expected COMMA` 230 err: `expected COMMA`
231 PARAM@[237; 242) 231 PARAM@237..242
232 BIND_PAT@[237; 242) 232 BIND_PAT@237..242
233 NAME@[237; 242) 233 NAME@237..242
234 IDENT@[237; 242) "token" 234 IDENT@237..242 "token"
235 err: `expected COMMA` 235 err: `expected COMMA`
236 err: `expected pattern` 236 err: `expected pattern`
237 PARAM@[242; 243) 237 PARAM@242..243
238 ERROR@[242; 243) 238 ERROR@242..243
239 DOT@[242; 243) 239 DOT@242..243
240 err: `expected COMMA` 240 err: `expected COMMA`
241 PARAM@[243; 247) 241 PARAM@243..247
242 BIND_PAT@[243; 247) 242 BIND_PAT@243..247
243 NAME@[243; 247) 243 NAME@243..247
244 IDENT@[243; 247) "kind" 244 IDENT@243..247 "kind"
245 err: `expected COMMA` 245 err: `expected COMMA`
246 err: `expected pattern` 246 err: `expected pattern`
247 PARAM@[247; 248) 247 PARAM@247..248
248 ERROR@[247; 248) 248 ERROR@247..248
249 DOT@[247; 248) 249 DOT@247..248
250 err: `expected COMMA` 250 err: `expected COMMA`
251 PARAM@[248; 259) 251 PARAM@248..259
252 TUPLE_STRUCT_PAT@[248; 259) 252 TUPLE_STRUCT_PAT@248..259
253 PATH@[248; 257) 253 PATH@248..257
254 PATH_SEGMENT@[248; 257) 254 PATH_SEGMENT@248..257
255 NAME_REF@[248; 257) 255 NAME_REF@248..257
256 IDENT@[248; 257) "is_trivia" 256 IDENT@248..257 "is_trivia"
257 L_PAREN@[257; 258) 257 L_PAREN@257..258
258 R_PAREN@[258; 259) 258 R_PAREN@258..259
259 err: `expected COMMA` 259 err: `expected COMMA`
260 WHITESPACE@[259; 260) 260 WHITESPACE@259..260
261 err: `expected pattern` 261 err: `expected pattern`
262 PARAM@[260; 261) 262 PARAM@260..261
263 ERROR@[260; 261) 263 ERROR@260..261
264 L_CURLY@[260; 261) 264 L_CURLY@260..261
265 err: `expected COMMA` 265 err: `expected COMMA`
266 WHITESPACE@[261; 278) 266 WHITESPACE@261..278
267 PARAM@[278; 283) 267 PARAM@278..283
268 BIND_PAT@[278; 283) 268 BIND_PAT@278..283
269 NAME@[278; 283) 269 NAME@278..283
270 IDENT@[278; 283) "break" 270 IDENT@278..283 "break"
271 err: `expected COMMA` 271 err: `expected COMMA`
272 err: `expected pattern` 272 err: `expected pattern`
273 PARAM@[283; 284) 273 PARAM@283..284
274 ERROR@[283; 284) 274 ERROR@283..284
275 SEMICOLON@[283; 284) 275 SEMICOLON@283..284
276 err: `expected COMMA` 276 err: `expected COMMA`
277 WHITESPACE@[284; 297) 277 WHITESPACE@284..297
278 err: `expected pattern` 278 err: `expected pattern`
279 PARAM@[297; 298) 279 PARAM@297..298
280 ERROR@[297; 298) 280 ERROR@297..298
281 R_CURLY@[297; 298) 281 R_CURLY@297..298
282 err: `expected COMMA` 282 err: `expected COMMA`
283 WHITESPACE@[298; 311) 283 WHITESPACE@298..311
284 PARAM@[311; 318) 284 PARAM@311..318
285 BIND_PAT@[311; 318) 285 BIND_PAT@311..318
286 NAME@[311; 318) 286 NAME@311..318
287 IDENT@[311; 318) "builder" 287 IDENT@311..318 "builder"
288 err: `expected COMMA` 288 err: `expected COMMA`
289 err: `expected pattern` 289 err: `expected pattern`
290 PARAM@[318; 319) 290 PARAM@318..319
291 ERROR@[318; 319) 291 ERROR@318..319
292 DOT@[318; 319) 292 DOT@318..319
293 err: `expected COMMA` 293 err: `expected COMMA`
294 PARAM@[319; 346) 294 PARAM@319..346
295 TUPLE_STRUCT_PAT@[319; 346) 295 TUPLE_STRUCT_PAT@319..346
296 PATH@[319; 323) 296 PATH@319..323
297 PATH_SEGMENT@[319; 323) 297 PATH_SEGMENT@319..323
298 NAME_REF@[319; 323) 298 NAME_REF@319..323
299 IDENT@[319; 323) "leaf" 299 IDENT@319..323 "leaf"
300 L_PAREN@[323; 324) 300 L_PAREN@323..324
301 BIND_PAT@[324; 329) 301 BIND_PAT@324..329
302 NAME@[324; 329) 302 NAME@324..329
303 IDENT@[324; 329) "token" 303 IDENT@324..329 "token"
304 err: `expected COMMA` 304 err: `expected COMMA`
305 err: `expected pattern` 305 err: `expected pattern`
306 ERROR@[329; 330) 306 ERROR@329..330
307 DOT@[329; 330) 307 DOT@329..330
308 err: `expected COMMA` 308 err: `expected COMMA`
309 BIND_PAT@[330; 334) 309 BIND_PAT@330..334
310 NAME@[330; 334) 310 NAME@330..334
311 IDENT@[330; 334) "kind" 311 IDENT@330..334 "kind"
312 COMMA@[334; 335) 312 COMMA@334..335
313 WHITESPACE@[335; 336) 313 WHITESPACE@335..336
314 BIND_PAT@[336; 341) 314 BIND_PAT@336..341
315 NAME@[336; 341) 315 NAME@336..341
316 IDENT@[336; 341) "token" 316 IDENT@336..341 "token"
317 err: `expected COMMA` 317 err: `expected COMMA`
318 err: `expected pattern` 318 err: `expected pattern`
319 ERROR@[341; 342) 319 ERROR@341..342
320 DOT@[341; 342) 320 DOT@341..342
321 err: `expected COMMA` 321 err: `expected COMMA`
322 BIND_PAT@[342; 345) 322 BIND_PAT@342..345
323 NAME@[342; 345) 323 NAME@342..345
324 IDENT@[342; 345) "len" 324 IDENT@342..345 "len"
325 R_PAREN@[345; 346) 325 R_PAREN@345..346
326 err: `expected COMMA` 326 err: `expected COMMA`
327 err: `expected pattern` 327 err: `expected pattern`
328 PARAM@[346; 347) 328 PARAM@346..347
329 ERROR@[346; 347) 329 ERROR@346..347
330 SEMICOLON@[346; 347) 330 SEMICOLON@346..347
331 err: `expected COMMA` 331 err: `expected COMMA`
332 WHITESPACE@[347; 360) 332 WHITESPACE@347..360
333 err: `expected pattern` 333 err: `expected pattern`
334 PARAM@[360; 361) 334 PARAM@360..361
335 ERROR@[360; 361) 335 ERROR@360..361
336 STAR@[360; 361) 336 STAR@360..361
337 err: `expected COMMA` 337 err: `expected COMMA`
338 PARAM@[361; 364) 338 PARAM@361..364
339 BIND_PAT@[361; 364) 339 BIND_PAT@361..364
340 NAME@[361; 364) 340 NAME@361..364
341 IDENT@[361; 364) "idx" 341 IDENT@361..364 "idx"
342 err: `expected COMMA` 342 err: `expected COMMA`
343 WHITESPACE@[364; 365) 343 WHITESPACE@364..365
344 err: `expected pattern` 344 err: `expected pattern`
345 PARAM@[365; 366) 345 PARAM@365..366
346 ERROR@[365; 366) 346 ERROR@365..366
347 PLUS@[365; 366) 347 PLUS@365..366
348 err: `expected COMMA` 348 err: `expected COMMA`
349 err: `expected pattern` 349 err: `expected pattern`
350 PARAM@[366; 367) 350 PARAM@366..367
351 ERROR@[366; 367) 351 ERROR@366..367
352 EQ@[366; 367) 352 EQ@366..367
353 err: `expected COMMA` 353 err: `expected COMMA`
354 WHITESPACE@[367; 368) 354 WHITESPACE@367..368
355 PARAM@[368; 369) 355 PARAM@368..369
356 LITERAL@[368; 369) 356 LITERAL@368..369
357 INT_NUMBER@[368; 369) "1" 357 INT_NUMBER@368..369 "1"
358 err: `expected COMMA` 358 err: `expected COMMA`
359 WHITESPACE@[369; 378) 359 WHITESPACE@369..378
360 err: `expected pattern` 360 err: `expected pattern`
361 PARAM@[378; 379) 361 PARAM@378..379
362 ERROR@[378; 379) 362 ERROR@378..379
363 R_CURLY@[378; 379) 363 R_CURLY@378..379
364 err: `expected COMMA` 364 err: `expected COMMA`
365 WHITESPACE@[379; 384) 365 WHITESPACE@379..384
366 err: `expected pattern` 366 err: `expected pattern`
367 PARAM@[384; 385) 367 PARAM@384..385
368 ERROR@[384; 385) 368 ERROR@384..385
369 R_CURLY@[384; 385) 369 R_CURLY@384..385
370 err: `expected COMMA` 370 err: `expected COMMA`
371 err: `expected pattern` 371 err: `expected pattern`
372 PARAM@[385; 386) 372 PARAM@385..386
373 ERROR@[385; 386) 373 ERROR@385..386
374 SEMICOLON@[385; 386) 374 SEMICOLON@385..386
375 err: `expected COMMA` 375 err: `expected COMMA`
376 WHITESPACE@[386; 387) 376 WHITESPACE@386..387
377 err: `expected pattern` 377 err: `expected pattern`
378 PARAM@[387; 388) 378 PARAM@387..388
379 ERROR@[387; 388) 379 ERROR@387..388
380 R_CURLY@[387; 388) 380 R_CURLY@387..388
381 err: `expected COMMA` 381 err: `expected COMMA`
382 err: `expected PIPE` 382 err: `expected PIPE`
383 WHITESPACE@[388; 389) 383 WHITESPACE@388..389
384 err: `expected expression` 384 err: `expected expression`
385 err: `expected SEMI` 385 err: `expected SEMI`
386 err: `expected R_CURLY` 386 err: `expected R_CURLY`
387 ERROR@[389; 389) 387 ERROR@389..389
diff --git a/crates/ra_syntax/test_data/parser/err/0013_invalid_type.rast b/crates/ra_syntax/test_data/parser/err/0013_invalid_type.rast
index cb570dc1c..211e5fd46 100644
--- a/crates/ra_syntax/test_data/parser/err/0013_invalid_type.rast
+++ b/crates/ra_syntax/test_data/parser/err/0013_invalid_type.rast
@@ -1,89 +1,89 @@
1SOURCE_FILE@[0; 86) 1SOURCE_FILE@0..86
2 STRUCT_DEF@[0; 72) 2 STRUCT_DEF@0..72
3 VISIBILITY@[0; 3) 3 VISIBILITY@0..3
4 PUB_KW@[0; 3) "pub" 4 PUB_KW@0..3 "pub"
5 WHITESPACE@[3; 4) " " 5 WHITESPACE@3..4 " "
6 STRUCT_KW@[4; 10) "struct" 6 STRUCT_KW@4..10 "struct"
7 WHITESPACE@[10; 11) " " 7 WHITESPACE@10..11 " "
8 NAME@[11; 16) 8 NAME@11..16
9 IDENT@[11; 16) "Cache" 9 IDENT@11..16 "Cache"
10 TUPLE_FIELD_DEF_LIST@[16; 72) 10 TUPLE_FIELD_DEF_LIST@16..72
11 L_PAREN@[16; 17) "(" 11 L_PAREN@16..17 "("
12 WHITESPACE@[17; 22) "\n " 12 WHITESPACE@17..22 "\n "
13 TUPLE_FIELD_DEF@[22; 68) 13 TUPLE_FIELD_DEF@22..68
14 PATH_TYPE@[22; 68) 14 PATH_TYPE@22..68
15 PATH@[22; 68) 15 PATH@22..68
16 PATH_SEGMENT@[22; 68) 16 PATH_SEGMENT@22..68
17 NAME_REF@[22; 29) 17 NAME_REF@22..29
18 IDENT@[22; 29) "RefCell" 18 IDENT@22..29 "RefCell"
19 TYPE_ARG_LIST@[29; 68) 19 TYPE_ARG_LIST@29..68
20 L_ANGLE@[29; 30) "<" 20 L_ANGLE@29..30 "<"
21 TYPE_ARG@[30; 68) 21 TYPE_ARG@30..68
22 PATH_TYPE@[30; 68) 22 PATH_TYPE@30..68
23 PATH@[30; 68) 23 PATH@30..68
24 PATH_SEGMENT@[30; 68) 24 PATH_SEGMENT@30..68
25 NAME_REF@[30; 37) 25 NAME_REF@30..37
26 IDENT@[30; 37) "HashMap" 26 IDENT@30..37 "HashMap"
27 TYPE_ARG_LIST@[37; 68) 27 TYPE_ARG_LIST@37..68
28 L_ANGLE@[37; 38) "<" 28 L_ANGLE@37..38 "<"
29 WHITESPACE@[38; 47) "\n " 29 WHITESPACE@38..47 "\n "
30 TYPE_ARG@[47; 53) 30 TYPE_ARG@47..53
31 PATH_TYPE@[47; 53) 31 PATH_TYPE@47..53
32 PATH@[47; 53) 32 PATH@47..53
33 PATH_SEGMENT@[47; 53) 33 PATH_SEGMENT@47..53
34 NAME_REF@[47; 53) 34 NAME_REF@47..53
35 IDENT@[47; 53) "TypeId" 35 IDENT@47..53 "TypeId"
36 COMMA@[53; 54) "," 36 COMMA@53..54 ","
37 WHITESPACE@[54; 63) "\n " 37 WHITESPACE@54..63 "\n "
38 TYPE_ARG@[63; 68) 38 TYPE_ARG@63..68
39 PATH_TYPE@[63; 68) 39 PATH_TYPE@63..68
40 PATH@[63; 68) 40 PATH@63..68
41 PATH_SEGMENT@[63; 68) 41 PATH_SEGMENT@63..68
42 NAME_REF@[63; 66) 42 NAME_REF@63..66
43 IDENT@[63; 66) "Box" 43 IDENT@63..66 "Box"
44 TYPE_ARG_LIST@[66; 68) 44 TYPE_ARG_LIST@66..68
45 L_ANGLE@[66; 67) "<" 45 L_ANGLE@66..67 "<"
46 TYPE_ARG@[67; 68) 46 TYPE_ARG@67..68
47 ERROR@[67; 68) 47 ERROR@67..68
48 AT@[67; 68) "@" 48 AT@67..68 "@"
49 WHITESPACE@[68; 69) " " 49 WHITESPACE@68..69 " "
50 TUPLE_FIELD_DEF@[69; 72) 50 TUPLE_FIELD_DEF@69..72
51 PATH_TYPE@[69; 72) 51 PATH_TYPE@69..72
52 PATH@[69; 72) 52 PATH@69..72
53 PATH_SEGMENT@[69; 72) 53 PATH_SEGMENT@69..72
54 NAME_REF@[69; 72) 54 NAME_REF@69..72
55 IDENT@[69; 72) "Any" 55 IDENT@69..72 "Any"
56 ERROR@[72; 72) 56 ERROR@72..72
57 ERROR@[72; 73) 57 ERROR@72..73
58 R_ANGLE@[72; 73) ">" 58 R_ANGLE@72..73 ">"
59 ERROR@[73; 74) 59 ERROR@73..74
60 COMMA@[73; 74) "," 60 COMMA@73..74 ","
61 WHITESPACE@[74; 79) "\n " 61 WHITESPACE@74..79 "\n "
62 ERROR@[79; 80) 62 ERROR@79..80
63 R_ANGLE@[79; 80) ">" 63 R_ANGLE@79..80 ">"
64 ERROR@[80; 81) 64 ERROR@80..81
65 R_ANGLE@[80; 81) ">" 65 R_ANGLE@80..81 ">"
66 WHITESPACE@[81; 82) "\n" 66 WHITESPACE@81..82 "\n"
67 ERROR@[82; 83) 67 ERROR@82..83
68 R_PAREN@[82; 83) ")" 68 R_PAREN@82..83 ")"
69 ERROR@[83; 84) 69 ERROR@83..84
70 SEMICOLON@[83; 84) ";" 70 SEMICOLON@83..84 ";"
71 WHITESPACE@[84; 86) "\n\n" 71 WHITESPACE@84..86 "\n\n"
72error [67; 67): expected type 72error 67..67: expected type
73error [68; 68): expected COMMA 73error 68..68: expected COMMA
74error [68; 68): expected R_ANGLE 74error 68..68: expected R_ANGLE
75error [68; 68): expected COMMA 75error 68..68: expected COMMA
76error [68; 68): expected R_ANGLE 76error 68..68: expected R_ANGLE
77error [68; 68): expected COMMA 77error 68..68: expected COMMA
78error [68; 68): expected R_ANGLE 78error 68..68: expected R_ANGLE
79error [68; 68): expected COMMA 79error 68..68: expected COMMA
80error [72; 72): expected COMMA 80error 72..72: expected COMMA
81error [72; 72): expected a type 81error 72..72: expected a type
82error [72; 72): expected R_PAREN 82error 72..72: expected R_PAREN
83error [72; 72): expected SEMICOLON 83error 72..72: expected SEMICOLON
84error [72; 72): expected an item 84error 72..72: expected an item
85error [73; 73): expected an item 85error 73..73: expected an item
86error [79; 79): expected an item 86error 79..79: expected an item
87error [80; 80): expected an item 87error 80..80: expected an item
88error [82; 82): expected an item 88error 82..82: expected an item
89error [83; 83): expected an item 89error 83..83: expected an item
diff --git a/crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast b/crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast
index a25d641b8..61c361833 100644
--- a/crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast
+++ b/crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast
@@ -1,32 +1,32 @@
1SOURCE_FILE@[0; 23) 1SOURCE_FILE@0..23
2 FN_DEF@[0; 22) 2 FN_DEF@0..22
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 TYPE_PARAM_LIST@[6; 9) 7 TYPE_PARAM_LIST@6..9
8 L_ANGLE@[6; 7) "<" 8 L_ANGLE@6..7 "<"
9 TYPE_PARAM@[7; 8) 9 TYPE_PARAM@7..8
10 NAME@[7; 8) 10 NAME@7..8
11 IDENT@[7; 8) "T" 11 IDENT@7..8 "T"
12 R_ANGLE@[8; 9) ">" 12 R_ANGLE@8..9 ">"
13 PARAM_LIST@[9; 11) 13 PARAM_LIST@9..11
14 L_PAREN@[9; 10) "(" 14 L_PAREN@9..10 "("
15 R_PAREN@[10; 11) ")" 15 R_PAREN@10..11 ")"
16 WHITESPACE@[11; 12) " " 16 WHITESPACE@11..12 " "
17 WHERE_CLAUSE@[12; 19) 17 WHERE_CLAUSE@12..19
18 WHERE_KW@[12; 17) "where" 18 WHERE_KW@12..17 "where"
19 WHITESPACE@[17; 18) " " 19 WHITESPACE@17..18 " "
20 WHERE_PRED@[18; 19) 20 WHERE_PRED@18..19
21 PATH_TYPE@[18; 19) 21 PATH_TYPE@18..19
22 PATH@[18; 19) 22 PATH@18..19
23 PATH_SEGMENT@[18; 19) 23 PATH_SEGMENT@18..19
24 NAME_REF@[18; 19) 24 NAME_REF@18..19
25 IDENT@[18; 19) "T" 25 IDENT@18..19 "T"
26 WHITESPACE@[19; 20) " " 26 WHITESPACE@19..20 " "
27 BLOCK_EXPR@[20; 22) 27 BLOCK_EXPR@20..22
28 BLOCK@[20; 22) 28 BLOCK@20..22
29 L_CURLY@[20; 21) "{" 29 L_CURLY@20..21 "{"
30 R_CURLY@[21; 22) "}" 30 R_CURLY@21..22 "}"
31 WHITESPACE@[22; 23) "\n" 31 WHITESPACE@22..23 "\n"
32error [19; 19): expected colon 32error 19..19: expected colon
diff --git a/crates/ra_syntax/test_data/parser/err/0015_curly_in_params.rast b/crates/ra_syntax/test_data/parser/err/0015_curly_in_params.rast
index 36b848be3..b18378cff 100644
--- a/crates/ra_syntax/test_data/parser/err/0015_curly_in_params.rast
+++ b/crates/ra_syntax/test_data/parser/err/0015_curly_in_params.rast
@@ -1,24 +1,24 @@
1SOURCE_FILE@[0; 14) 1SOURCE_FILE@0..14
2 FN_DEF@[0; 7) 2 FN_DEF@0..7
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 7) 7 PARAM_LIST@6..7
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 ERROR@[7; 8) 9 ERROR@7..8
10 R_CURLY@[7; 8) "}" 10 R_CURLY@7..8 "}"
11 ERROR@[8; 9) 11 ERROR@8..9
12 R_PAREN@[8; 9) ")" 12 R_PAREN@8..9 ")"
13 WHITESPACE@[9; 10) " " 13 WHITESPACE@9..10 " "
14 ERROR@[10; 13) 14 ERROR@10..13
15 L_CURLY@[10; 11) "{" 15 L_CURLY@10..11 "{"
16 WHITESPACE@[11; 12) "\n" 16 WHITESPACE@11..12 "\n"
17 R_CURLY@[12; 13) "}" 17 R_CURLY@12..13 "}"
18 WHITESPACE@[13; 14) "\n" 18 WHITESPACE@13..14 "\n"
19error [7; 7): expected value parameter 19error 7..7: expected value parameter
20error [7; 7): expected R_PAREN 20error 7..7: expected R_PAREN
21error [7; 7): expected a block 21error 7..7: expected a block
22error [7; 7): unmatched `}` 22error 7..7: unmatched `}`
23error [8; 8): expected an item 23error 8..8: expected an item
24error [10; 10): expected an item 24error 10..10: expected an item
diff --git a/crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast b/crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast
index aca5a3ada..92bb47316 100644
--- a/crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast
+++ b/crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast
@@ -1,44 +1,44 @@
1SOURCE_FILE@[0; 56) 1SOURCE_FILE@0..56
2 FN_DEF@[0; 55) 2 FN_DEF@0..55
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 55) 11 BLOCK_EXPR@9..55
12 BLOCK@[9; 55) 12 BLOCK@9..55
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 38) 15 EXPR_STMT@15..38
16 CALL_EXPR@[15; 38) 16 CALL_EXPR@15..38
17 PATH_EXPR@[15; 18) 17 PATH_EXPR@15..18
18 PATH@[15; 18) 18 PATH@15..18
19 PATH_SEGMENT@[15; 18) 19 PATH_SEGMENT@15..18
20 NAME_REF@[15; 18) 20 NAME_REF@15..18
21 IDENT@[15; 18) "foo" 21 IDENT@15..18 "foo"
22 ARG_LIST@[18; 38) 22 ARG_LIST@18..38
23 L_PAREN@[18; 19) "(" 23 L_PAREN@18..19 "("
24 WHITESPACE@[19; 28) "\n " 24 WHITESPACE@19..28 "\n "
25 LITERAL@[28; 29) 25 LITERAL@28..29
26 INT_NUMBER@[28; 29) "1" 26 INT_NUMBER@28..29 "1"
27 COMMA@[29; 30) "," 27 COMMA@29..30 ","
28 WHITESPACE@[30; 31) " " 28 WHITESPACE@30..31 " "
29 LITERAL@[31; 32) 29 LITERAL@31..32
30 INT_NUMBER@[31; 32) "2" 30 INT_NUMBER@31..32 "2"
31 WHITESPACE@[32; 37) "\n " 31 WHITESPACE@32..37 "\n "
32 R_PAREN@[37; 38) ")" 32 R_PAREN@37..38 ")"
33 WHITESPACE@[38; 43) "\n " 33 WHITESPACE@38..43 "\n "
34 EXPR_STMT@[43; 53) 34 EXPR_STMT@43..53
35 RETURN_EXPR@[43; 52) 35 RETURN_EXPR@43..52
36 RETURN_KW@[43; 49) "return" 36 RETURN_KW@43..49 "return"
37 WHITESPACE@[49; 50) " " 37 WHITESPACE@49..50 " "
38 LITERAL@[50; 52) 38 LITERAL@50..52
39 INT_NUMBER@[50; 52) "92" 39 INT_NUMBER@50..52 "92"
40 SEMICOLON@[52; 53) ";" 40 SEMICOLON@52..53 ";"
41 WHITESPACE@[53; 54) "\n" 41 WHITESPACE@53..54 "\n"
42 R_CURLY@[54; 55) "}" 42 R_CURLY@54..55 "}"
43 WHITESPACE@[55; 56) "\n" 43 WHITESPACE@55..56 "\n"
44error [38; 38): expected SEMICOLON 44error 38..38: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast b/crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast
index f9f4b9bc2..7bc718302 100644
--- a/crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast
+++ b/crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast
@@ -1,47 +1,47 @@
1SOURCE_FILE@[0; 47) 1SOURCE_FILE@0..47
2 FN_DEF@[0; 46) 2 FN_DEF@0..46
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 16) 7 PARAM_LIST@6..16
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 PARAM@[7; 15) 9 PARAM@7..15
10 BIND_PAT@[7; 10) 10 BIND_PAT@7..10
11 NAME@[7; 10) 11 NAME@7..10
12 IDENT@[7; 10) "foo" 12 IDENT@7..10 "foo"
13 COLON@[10; 11) ":" 13 COLON@10..11 ":"
14 WHITESPACE@[11; 12) " " 14 WHITESPACE@11..12 " "
15 PATH_TYPE@[12; 15) 15 PATH_TYPE@12..15
16 PATH@[12; 15) 16 PATH@12..15
17 PATH_SEGMENT@[12; 15) 17 PATH_SEGMENT@12..15
18 NAME_REF@[12; 15) 18 NAME_REF@12..15
19 IDENT@[12; 15) "i32" 19 IDENT@12..15 "i32"
20 R_PAREN@[15; 16) ")" 20 R_PAREN@15..16 ")"
21 WHITESPACE@[16; 17) " " 21 WHITESPACE@16..17 " "
22 BLOCK_EXPR@[17; 46) 22 BLOCK_EXPR@17..46
23 BLOCK@[17; 46) 23 BLOCK@17..46
24 L_CURLY@[17; 18) "{" 24 L_CURLY@17..18 "{"
25 WHITESPACE@[18; 23) "\n " 25 WHITESPACE@18..23 "\n "
26 LET_STMT@[23; 36) 26 LET_STMT@23..36
27 LET_KW@[23; 26) "let" 27 LET_KW@23..26 "let"
28 WHITESPACE@[26; 27) " " 28 WHITESPACE@26..27 " "
29 BIND_PAT@[27; 30) 29 BIND_PAT@27..30
30 NAME@[27; 30) 30 NAME@27..30
31 IDENT@[27; 30) "bar" 31 IDENT@27..30 "bar"
32 WHITESPACE@[30; 31) " " 32 WHITESPACE@30..31 " "
33 EQ@[31; 32) "=" 33 EQ@31..32 "="
34 WHITESPACE@[32; 33) " " 34 WHITESPACE@32..33 " "
35 LITERAL@[33; 35) 35 LITERAL@33..35
36 INT_NUMBER@[33; 35) "92" 36 INT_NUMBER@33..35 "92"
37 SEMICOLON@[35; 36) ";" 37 SEMICOLON@35..36 ";"
38 WHITESPACE@[36; 41) "\n " 38 WHITESPACE@36..41 "\n "
39 BIN_EXPR@[41; 44) 39 BIN_EXPR@41..44
40 LITERAL@[41; 42) 40 LITERAL@41..42
41 INT_NUMBER@[41; 42) "1" 41 INT_NUMBER@41..42 "1"
42 WHITESPACE@[42; 43) " " 42 WHITESPACE@42..43 " "
43 PLUS@[43; 44) "+" 43 PLUS@43..44 "+"
44 WHITESPACE@[44; 45) "\n" 44 WHITESPACE@44..45 "\n"
45 R_CURLY@[45; 46) "}" 45 R_CURLY@45..46 "}"
46 WHITESPACE@[46; 47) "\n" 46 WHITESPACE@46..47 "\n"
47error [44; 44): expected expression 47error 44..44: expected expression
diff --git a/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast b/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast
index 9a8f76673..63194f974 100644
--- a/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast
+++ b/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast
@@ -1,132 +1,132 @@
1SOURCE_FILE@[0; 183) 1SOURCE_FILE@0..183
2 IMPL_DEF@[0; 182) 2 IMPL_DEF@0..182
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 13) 5 PATH_TYPE@5..13
6 PATH@[5; 13) 6 PATH@5..13
7 PATH_SEGMENT@[5; 13) 7 PATH_SEGMENT@5..13
8 NAME_REF@[5; 13) 8 NAME_REF@5..13
9 IDENT@[5; 13) "FnScopes" 9 IDENT@5..13 "FnScopes"
10 WHITESPACE@[13; 14) " " 10 WHITESPACE@13..14 " "
11 ITEM_LIST@[14; 182) 11 ITEM_LIST@14..182
12 L_CURLY@[14; 15) "{" 12 L_CURLY@14..15 "{"
13 WHITESPACE@[15; 20) "\n " 13 WHITESPACE@15..20 "\n "
14 FN_DEF@[20; 161) 14 FN_DEF@20..161
15 FN_KW@[20; 22) "fn" 15 FN_KW@20..22 "fn"
16 WHITESPACE@[22; 23) " " 16 WHITESPACE@22..23 " "
17 NAME@[23; 32) 17 NAME@23..32
18 IDENT@[23; 32) "new_scope" 18 IDENT@23..32 "new_scope"
19 PARAM_LIST@[32; 35) 19 PARAM_LIST@32..35
20 L_PAREN@[32; 33) "(" 20 L_PAREN@32..33 "("
21 PARAM@[33; 34) 21 PARAM@33..34
22 REF_PAT@[33; 34) 22 REF_PAT@33..34
23 AMP@[33; 34) "&" 23 AMP@33..34 "&"
24 R_PAREN@[34; 35) ")" 24 R_PAREN@34..35 ")"
25 WHITESPACE@[35; 36) " " 25 WHITESPACE@35..36 " "
26 RET_TYPE@[36; 46) 26 RET_TYPE@36..46
27 THIN_ARROW@[36; 38) "->" 27 THIN_ARROW@36..38 "->"
28 WHITESPACE@[38; 39) " " 28 WHITESPACE@38..39 " "
29 PATH_TYPE@[39; 46) 29 PATH_TYPE@39..46
30 PATH@[39; 46) 30 PATH@39..46
31 PATH_SEGMENT@[39; 46) 31 PATH_SEGMENT@39..46
32 NAME_REF@[39; 46) 32 NAME_REF@39..46
33 IDENT@[39; 46) "ScopeId" 33 IDENT@39..46 "ScopeId"
34 WHITESPACE@[46; 47) " " 34 WHITESPACE@46..47 " "
35 BLOCK_EXPR@[47; 161) 35 BLOCK_EXPR@47..161
36 BLOCK@[47; 161) 36 BLOCK@47..161
37 L_CURLY@[47; 48) "{" 37 L_CURLY@47..48 "{"
38 WHITESPACE@[48; 57) "\n " 38 WHITESPACE@48..57 "\n "
39 LET_STMT@[57; 85) 39 LET_STMT@57..85
40 LET_KW@[57; 60) "let" 40 LET_KW@57..60 "let"
41 WHITESPACE@[60; 61) " " 41 WHITESPACE@60..61 " "
42 BIND_PAT@[61; 64) 42 BIND_PAT@61..64
43 NAME@[61; 64) 43 NAME@61..64
44 IDENT@[61; 64) "res" 44 IDENT@61..64 "res"
45 WHITESPACE@[64; 65) " " 45 WHITESPACE@64..65 " "
46 EQ@[65; 66) "=" 46 EQ@65..66 "="
47 WHITESPACE@[66; 67) " " 47 WHITESPACE@66..67 " "
48 METHOD_CALL_EXPR@[67; 84) 48 METHOD_CALL_EXPR@67..84
49 FIELD_EXPR@[67; 78) 49 FIELD_EXPR@67..78
50 PATH_EXPR@[67; 71) 50 PATH_EXPR@67..71
51 PATH@[67; 71) 51 PATH@67..71
52 PATH_SEGMENT@[67; 71) 52 PATH_SEGMENT@67..71
53 SELF_KW@[67; 71) "self" 53 SELF_KW@67..71 "self"
54 DOT@[71; 72) "." 54 DOT@71..72 "."
55 NAME_REF@[72; 78) 55 NAME_REF@72..78
56 IDENT@[72; 78) "scopes" 56 IDENT@72..78 "scopes"
57 DOT@[78; 79) "." 57 DOT@78..79 "."
58 NAME_REF@[79; 82) 58 NAME_REF@79..82
59 IDENT@[79; 82) "len" 59 IDENT@79..82 "len"
60 ARG_LIST@[82; 84) 60 ARG_LIST@82..84
61 L_PAREN@[82; 83) "(" 61 L_PAREN@82..83 "("
62 R_PAREN@[83; 84) ")" 62 R_PAREN@83..84 ")"
63 SEMICOLON@[84; 85) ";" 63 SEMICOLON@84..85 ";"
64 WHITESPACE@[85; 94) "\n " 64 WHITESPACE@85..94 "\n "
65 METHOD_CALL_EXPR@[94; 155) 65 METHOD_CALL_EXPR@94..155
66 FIELD_EXPR@[94; 105) 66 FIELD_EXPR@94..105
67 PATH_EXPR@[94; 98) 67 PATH_EXPR@94..98
68 PATH@[94; 98) 68 PATH@94..98
69 PATH_SEGMENT@[94; 98) 69 PATH_SEGMENT@94..98
70 SELF_KW@[94; 98) "self" 70 SELF_KW@94..98 "self"
71 DOT@[98; 99) "." 71 DOT@98..99 "."
72 NAME_REF@[99; 105) 72 NAME_REF@99..105
73 IDENT@[99; 105) "scopes" 73 IDENT@99..105 "scopes"
74 DOT@[105; 106) "." 74 DOT@105..106 "."
75 NAME_REF@[106; 110) 75 NAME_REF@106..110
76 IDENT@[106; 110) "push" 76 IDENT@106..110 "push"
77 ARG_LIST@[110; 155) 77 ARG_LIST@110..155
78 L_PAREN@[110; 111) "(" 78 L_PAREN@110..111 "("
79 RECORD_LIT@[111; 154) 79 RECORD_LIT@111..154
80 PATH@[111; 120) 80 PATH@111..120
81 PATH_SEGMENT@[111; 120) 81 PATH_SEGMENT@111..120
82 NAME_REF@[111; 120) 82 NAME_REF@111..120
83 IDENT@[111; 120) "ScopeData" 83 IDENT@111..120 "ScopeData"
84 WHITESPACE@[120; 121) " " 84 WHITESPACE@120..121 " "
85 RECORD_FIELD_LIST@[121; 154) 85 RECORD_FIELD_LIST@121..154
86 L_CURLY@[121; 122) "{" 86 L_CURLY@121..122 "{"
87 WHITESPACE@[122; 123) " " 87 WHITESPACE@122..123 " "
88 RECORD_FIELD@[123; 135) 88 RECORD_FIELD@123..135
89 NAME_REF@[123; 129) 89 NAME_REF@123..129
90 IDENT@[123; 129) "parent" 90 IDENT@123..129 "parent"
91 COLON@[129; 130) ":" 91 COLON@129..130 ":"
92 WHITESPACE@[130; 131) " " 92 WHITESPACE@130..131 " "
93 PATH_EXPR@[131; 135) 93 PATH_EXPR@131..135
94 PATH@[131; 135) 94 PATH@131..135
95 PATH_SEGMENT@[131; 135) 95 PATH_SEGMENT@131..135
96 NAME_REF@[131; 135) 96 NAME_REF@131..135
97 IDENT@[131; 135) "None" 97 IDENT@131..135 "None"
98 COMMA@[135; 136) "," 98 COMMA@135..136 ","
99 WHITESPACE@[136; 137) " " 99 WHITESPACE@136..137 " "
100 RECORD_FIELD@[137; 152) 100 RECORD_FIELD@137..152
101 NAME_REF@[137; 144) 101 NAME_REF@137..144
102 IDENT@[137; 144) "entries" 102 IDENT@137..144 "entries"
103 COLON@[144; 145) ":" 103 COLON@144..145 ":"
104 WHITESPACE@[145; 146) " " 104 WHITESPACE@145..146 " "
105 MACRO_CALL@[146; 152) 105 MACRO_CALL@146..152
106 PATH@[146; 149) 106 PATH@146..149
107 PATH_SEGMENT@[146; 149) 107 PATH_SEGMENT@146..149
108 NAME_REF@[146; 149) 108 NAME_REF@146..149
109 IDENT@[146; 149) "vec" 109 IDENT@146..149 "vec"
110 BANG@[149; 150) "!" 110 BANG@149..150 "!"
111 TOKEN_TREE@[150; 152) 111 TOKEN_TREE@150..152
112 L_BRACK@[150; 151) "[" 112 L_BRACK@150..151 "["
113 R_BRACK@[151; 152) "]" 113 R_BRACK@151..152 "]"
114 WHITESPACE@[152; 153) " " 114 WHITESPACE@152..153 " "
115 R_CURLY@[153; 154) "}" 115 R_CURLY@153..154 "}"
116 R_PAREN@[154; 155) ")" 116 R_PAREN@154..155 ")"
117 WHITESPACE@[155; 160) "\n " 117 WHITESPACE@155..160 "\n "
118 R_CURLY@[160; 161) "}" 118 R_CURLY@160..161 "}"
119 WHITESPACE@[161; 167) "\n\n " 119 WHITESPACE@161..167 "\n\n "
120 FN_DEF@[167; 180) 120 FN_DEF@167..180
121 FN_KW@[167; 169) "fn" 121 FN_KW@167..169 "fn"
122 WHITESPACE@[169; 170) " " 122 WHITESPACE@169..170 " "
123 NAME@[170; 180) 123 NAME@170..180
124 IDENT@[170; 180) "set_parent" 124 IDENT@170..180 "set_parent"
125 WHITESPACE@[180; 181) "\n" 125 WHITESPACE@180..181 "\n"
126 R_CURLY@[181; 182) "}" 126 R_CURLY@181..182 "}"
127 WHITESPACE@[182; 183) "\n" 127 WHITESPACE@182..183 "\n"
128error [34; 34): expected pattern 128error 34..34: expected pattern
129error [34; 34): expected COLON 129error 34..34: expected COLON
130error [34; 34): expected type 130error 34..34: expected type
131error [180; 180): expected function arguments 131error 180..180: expected function arguments
132error [180; 180): expected a block 132error 180..180: expected a block
diff --git a/crates/ra_syntax/test_data/parser/err/0019_let_recover.rast b/crates/ra_syntax/test_data/parser/err/0019_let_recover.rast
index e283091e1..d20bb60f1 100644
--- a/crates/ra_syntax/test_data/parser/err/0019_let_recover.rast
+++ b/crates/ra_syntax/test_data/parser/err/0019_let_recover.rast
@@ -1,107 +1,107 @@
1SOURCE_FILE@[0; 139) 1SOURCE_FILE@0..139
2 FN_DEF@[0; 138) 2 FN_DEF@0..138
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 138) 11 BLOCK_EXPR@9..138
12 BLOCK@[9; 138) 12 BLOCK@9..138
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 24) 15 LET_STMT@15..24
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 BIND_PAT@[19; 22) 18 BIND_PAT@19..22
19 NAME@[19; 22) 19 NAME@19..22
20 IDENT@[19; 22) "foo" 20 IDENT@19..22 "foo"
21 WHITESPACE@[22; 23) " " 21 WHITESPACE@22..23 " "
22 EQ@[23; 24) "=" 22 EQ@23..24 "="
23 WHITESPACE@[24; 29) "\n " 23 WHITESPACE@24..29 "\n "
24 LET_STMT@[29; 41) 24 LET_STMT@29..41
25 LET_KW@[29; 32) "let" 25 LET_KW@29..32 "let"
26 WHITESPACE@[32; 33) " " 26 WHITESPACE@32..33 " "
27 BIND_PAT@[33; 36) 27 BIND_PAT@33..36
28 NAME@[33; 36) 28 NAME@33..36
29 IDENT@[33; 36) "bar" 29 IDENT@33..36 "bar"
30 WHITESPACE@[36; 37) " " 30 WHITESPACE@36..37 " "
31 EQ@[37; 38) "=" 31 EQ@37..38 "="
32 WHITESPACE@[38; 39) " " 32 WHITESPACE@38..39 " "
33 LITERAL@[39; 40) 33 LITERAL@39..40
34 INT_NUMBER@[39; 40) "1" 34 INT_NUMBER@39..40 "1"
35 SEMICOLON@[40; 41) ";" 35 SEMICOLON@40..41 ";"
36 WHITESPACE@[41; 46) "\n " 36 WHITESPACE@41..46 "\n "
37 LET_STMT@[46; 49) 37 LET_STMT@46..49
38 LET_KW@[46; 49) "let" 38 LET_KW@46..49 "let"
39 WHITESPACE@[49; 54) "\n " 39 WHITESPACE@49..54 "\n "
40 LET_STMT@[54; 67) 40 LET_STMT@54..67
41 LET_KW@[54; 57) "let" 41 LET_KW@54..57 "let"
42 WHITESPACE@[57; 58) " " 42 WHITESPACE@57..58 " "
43 BIND_PAT@[58; 61) 43 BIND_PAT@58..61
44 NAME@[58; 61) 44 NAME@58..61
45 IDENT@[58; 61) "baz" 45 IDENT@58..61 "baz"
46 WHITESPACE@[61; 62) " " 46 WHITESPACE@61..62 " "
47 EQ@[62; 63) "=" 47 EQ@62..63 "="
48 WHITESPACE@[63; 64) " " 48 WHITESPACE@63..64 " "
49 LITERAL@[64; 66) 49 LITERAL@64..66
50 INT_NUMBER@[64; 66) "92" 50 INT_NUMBER@64..66 "92"
51 SEMICOLON@[66; 67) ";" 51 SEMICOLON@66..67 ";"
52 WHITESPACE@[67; 72) "\n " 52 WHITESPACE@67..72 "\n "
53 LET_STMT@[72; 75) 53 LET_STMT@72..75
54 LET_KW@[72; 75) "let" 54 LET_KW@72..75 "let"
55 WHITESPACE@[75; 80) "\n " 55 WHITESPACE@75..80 "\n "
56 EXPR_STMT@[80; 90) 56 EXPR_STMT@80..90
57 IF_EXPR@[80; 90) 57 IF_EXPR@80..90
58 IF_KW@[80; 82) "if" 58 IF_KW@80..82 "if"
59 WHITESPACE@[82; 83) " " 59 WHITESPACE@82..83 " "
60 CONDITION@[83; 87) 60 CONDITION@83..87
61 LITERAL@[83; 87) 61 LITERAL@83..87
62 TRUE_KW@[83; 87) "true" 62 TRUE_KW@83..87 "true"
63 WHITESPACE@[87; 88) " " 63 WHITESPACE@87..88 " "
64 BLOCK_EXPR@[88; 90) 64 BLOCK_EXPR@88..90
65 BLOCK@[88; 90) 65 BLOCK@88..90
66 L_CURLY@[88; 89) "{" 66 L_CURLY@88..89 "{"
67 R_CURLY@[89; 90) "}" 67 R_CURLY@89..90 "}"
68 WHITESPACE@[90; 95) "\n " 68 WHITESPACE@90..95 "\n "
69 LET_STMT@[95; 98) 69 LET_STMT@95..98
70 LET_KW@[95; 98) "let" 70 LET_KW@95..98 "let"
71 WHITESPACE@[98; 103) "\n " 71 WHITESPACE@98..103 "\n "
72 EXPR_STMT@[103; 116) 72 EXPR_STMT@103..116
73 WHILE_EXPR@[103; 116) 73 WHILE_EXPR@103..116
74 WHILE_KW@[103; 108) "while" 74 WHILE_KW@103..108 "while"
75 WHITESPACE@[108; 109) " " 75 WHITESPACE@108..109 " "
76 CONDITION@[109; 113) 76 CONDITION@109..113
77 LITERAL@[109; 113) 77 LITERAL@109..113
78 TRUE_KW@[109; 113) "true" 78 TRUE_KW@109..113 "true"
79 WHITESPACE@[113; 114) " " 79 WHITESPACE@113..114 " "
80 BLOCK_EXPR@[114; 116) 80 BLOCK_EXPR@114..116
81 BLOCK@[114; 116) 81 BLOCK@114..116
82 L_CURLY@[114; 115) "{" 82 L_CURLY@114..115 "{"
83 R_CURLY@[115; 116) "}" 83 R_CURLY@115..116 "}"
84 WHITESPACE@[116; 121) "\n " 84 WHITESPACE@116..121 "\n "
85 LET_STMT@[121; 124) 85 LET_STMT@121..124
86 LET_KW@[121; 124) "let" 86 LET_KW@121..124 "let"
87 WHITESPACE@[124; 129) "\n " 87 WHITESPACE@124..129 "\n "
88 LOOP_EXPR@[129; 136) 88 LOOP_EXPR@129..136
89 LOOP_KW@[129; 133) "loop" 89 LOOP_KW@129..133 "loop"
90 WHITESPACE@[133; 134) " " 90 WHITESPACE@133..134 " "
91 BLOCK_EXPR@[134; 136) 91 BLOCK_EXPR@134..136
92 BLOCK@[134; 136) 92 BLOCK@134..136
93 L_CURLY@[134; 135) "{" 93 L_CURLY@134..135 "{"
94 R_CURLY@[135; 136) "}" 94 R_CURLY@135..136 "}"
95 WHITESPACE@[136; 137) "\n" 95 WHITESPACE@136..137 "\n"
96 R_CURLY@[137; 138) "}" 96 R_CURLY@137..138 "}"
97 WHITESPACE@[138; 139) "\n" 97 WHITESPACE@138..139 "\n"
98error [24; 24): expected expression 98error 24..24: expected expression
99error [24; 24): expected SEMICOLON 99error 24..24: expected SEMICOLON
100error [49; 49): expected pattern 100error 49..49: expected pattern
101error [49; 49): expected SEMICOLON 101error 49..49: expected SEMICOLON
102error [75; 75): expected pattern 102error 75..75: expected pattern
103error [75; 75): expected SEMICOLON 103error 75..75: expected SEMICOLON
104error [98; 98): expected pattern 104error 98..98: expected pattern
105error [98; 98): expected SEMICOLON 105error 98..98: expected SEMICOLON
106error [124; 124): expected pattern 106error 124..124: expected pattern
107error [124; 124): expected SEMICOLON 107error 124..124: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast b/crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast
index c11dc23f5..1185f44f9 100644
--- a/crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast
+++ b/crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast
@@ -1,21 +1,21 @@
1SOURCE_FILE@[0; 16) 1SOURCE_FILE@0..16
2 FN_DEF@[0; 2) 2 FN_DEF@0..2
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 4) "\n\n" 4 WHITESPACE@2..4 "\n\n"
5 FN_DEF@[4; 15) 5 FN_DEF@4..15
6 FN_KW@[4; 6) "fn" 6 FN_KW@4..6 "fn"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 NAME@[7; 10) 8 NAME@7..10
9 IDENT@[7; 10) "foo" 9 IDENT@7..10 "foo"
10 PARAM_LIST@[10; 12) 10 PARAM_LIST@10..12
11 L_PAREN@[10; 11) "(" 11 L_PAREN@10..11 "("
12 R_PAREN@[11; 12) ")" 12 R_PAREN@11..12 ")"
13 WHITESPACE@[12; 13) " " 13 WHITESPACE@12..13 " "
14 BLOCK_EXPR@[13; 15) 14 BLOCK_EXPR@13..15
15 BLOCK@[13; 15) 15 BLOCK@13..15
16 L_CURLY@[13; 14) "{" 16 L_CURLY@13..14 "{"
17 R_CURLY@[14; 15) "}" 17 R_CURLY@14..15 "}"
18 WHITESPACE@[15; 16) "\n" 18 WHITESPACE@15..16 "\n"
19error [2; 2): expected a name 19error 2..2: expected a name
20error [2; 2): expected function arguments 20error 2..2: expected function arguments
21error [2; 2): expected a block 21error 2..2: expected a block
diff --git a/crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast b/crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast
index ae04122d8..c7bf4caa0 100644
--- a/crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast
+++ b/crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast
@@ -1,35 +1,35 @@
1SOURCE_FILE@[0; 22) 1SOURCE_FILE@0..22
2 FN_DEF@[0; 21) 2 FN_DEF@0..21
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 17) 7 PARAM_LIST@6..17
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 PARAM@[7; 13) 9 PARAM@7..13
10 BIND_PAT@[7; 8) 10 BIND_PAT@7..8
11 NAME@[7; 8) 11 NAME@7..8
12 IDENT@[7; 8) "x" 12 IDENT@7..8 "x"
13 COLON@[8; 9) ":" 13 COLON@8..9 ":"
14 WHITESPACE@[9; 10) " " 14 WHITESPACE@9..10 " "
15 PATH_TYPE@[10; 13) 15 PATH_TYPE@10..13
16 PATH@[10; 13) 16 PATH@10..13
17 PATH_SEGMENT@[10; 13) 17 PATH_SEGMENT@10..13
18 NAME_REF@[10; 13) 18 NAME_REF@10..13
19 IDENT@[10; 13) "i32" 19 IDENT@10..13 "i32"
20 COMMA@[13; 14) "," 20 COMMA@13..14 ","
21 WHITESPACE@[14; 15) " " 21 WHITESPACE@14..15 " "
22 PARAM@[15; 16) 22 PARAM@15..16
23 BIND_PAT@[15; 16) 23 BIND_PAT@15..16
24 NAME@[15; 16) 24 NAME@15..16
25 IDENT@[15; 16) "y" 25 IDENT@15..16 "y"
26 R_PAREN@[16; 17) ")" 26 R_PAREN@16..17 ")"
27 WHITESPACE@[17; 18) " " 27 WHITESPACE@17..18 " "
28 BLOCK_EXPR@[18; 21) 28 BLOCK_EXPR@18..21
29 BLOCK@[18; 21) 29 BLOCK@18..21
30 L_CURLY@[18; 19) "{" 30 L_CURLY@18..19 "{"
31 WHITESPACE@[19; 20) "\n" 31 WHITESPACE@19..20 "\n"
32 R_CURLY@[20; 21) "}" 32 R_CURLY@20..21 "}"
33 WHITESPACE@[21; 22) "\n" 33 WHITESPACE@21..22 "\n"
34error [16; 16): expected COLON 34error 16..16: expected COLON
35error [16; 16): expected type 35error 16..16: expected type
diff --git a/crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast b/crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast
index 465749f95..cc0d75cc8 100644
--- a/crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast
+++ b/crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast
@@ -1,183 +1,183 @@
1SOURCE_FILE@[0; 112) 1SOURCE_FILE@0..112
2 FN_DEF@[0; 33) 2 FN_DEF@0..33
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "a" 6 IDENT@3..4 "a"
7 PARAM_LIST@[4; 6) 7 PARAM_LIST@4..6
8 L_PAREN@[4; 5) "(" 8 L_PAREN@4..5 "("
9 R_PAREN@[5; 6) ")" 9 R_PAREN@5..6 ")"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 BLOCK_EXPR@[7; 33) 11 BLOCK_EXPR@7..33
12 BLOCK@[7; 33) 12 BLOCK@7..33
13 L_CURLY@[7; 8) "{" 13 L_CURLY@7..8 "{"
14 WHITESPACE@[8; 9) " " 14 WHITESPACE@8..9 " "
15 EXPR_STMT@[9; 17) 15 EXPR_STMT@9..17
16 ARRAY_EXPR@[9; 17) 16 ARRAY_EXPR@9..17
17 L_BRACK@[9; 10) "[" 17 L_BRACK@9..10 "["
18 LITERAL@[10; 11) 18 LITERAL@10..11
19 INT_NUMBER@[10; 11) "1" 19 INT_NUMBER@10..11 "1"
20 COMMA@[11; 12) "," 20 COMMA@11..12 ","
21 WHITESPACE@[12; 13) " " 21 WHITESPACE@12..13 " "
22 LITERAL@[13; 14) 22 LITERAL@13..14
23 INT_NUMBER@[13; 14) "2" 23 INT_NUMBER@13..14 "2"
24 COMMA@[14; 15) "," 24 COMMA@14..15 ","
25 WHITESPACE@[15; 16) " " 25 WHITESPACE@15..16 " "
26 ERROR@[16; 17) 26 ERROR@16..17
27 AT@[16; 17) "@" 27 AT@16..17 "@"
28 EXPR_STMT@[17; 18) 28 EXPR_STMT@17..18
29 ERROR@[17; 18) 29 ERROR@17..18
30 COMMA@[17; 18) "," 30 COMMA@17..18 ","
31 WHITESPACE@[18; 19) " " 31 WHITESPACE@18..19 " "
32 STRUCT_DEF@[19; 26) 32 STRUCT_DEF@19..26
33 STRUCT_KW@[19; 25) "struct" 33 STRUCT_KW@19..25 "struct"
34 ERROR@[25; 26) 34 ERROR@25..26
35 COMMA@[25; 26) "," 35 COMMA@25..26 ","
36 WHITESPACE@[26; 27) " " 36 WHITESPACE@26..27 " "
37 LET_STMT@[27; 31) 37 LET_STMT@27..31
38 LET_KW@[27; 30) "let" 38 LET_KW@27..30 "let"
39 ERROR@[30; 31) 39 ERROR@30..31
40 R_BRACK@[30; 31) "]" 40 R_BRACK@30..31 "]"
41 WHITESPACE@[31; 32) " " 41 WHITESPACE@31..32 " "
42 R_CURLY@[32; 33) "}" 42 R_CURLY@32..33 "}"
43 WHITESPACE@[33; 34) "\n" 43 WHITESPACE@33..34 "\n"
44 FN_DEF@[34; 68) 44 FN_DEF@34..68
45 FN_KW@[34; 36) "fn" 45 FN_KW@34..36 "fn"
46 WHITESPACE@[36; 37) " " 46 WHITESPACE@36..37 " "
47 NAME@[37; 38) 47 NAME@37..38
48 IDENT@[37; 38) "b" 48 IDENT@37..38 "b"
49 PARAM_LIST@[38; 40) 49 PARAM_LIST@38..40
50 L_PAREN@[38; 39) "(" 50 L_PAREN@38..39 "("
51 R_PAREN@[39; 40) ")" 51 R_PAREN@39..40 ")"
52 WHITESPACE@[40; 41) " " 52 WHITESPACE@40..41 " "
53 BLOCK_EXPR@[41; 68) 53 BLOCK_EXPR@41..68
54 BLOCK@[41; 68) 54 BLOCK@41..68
55 L_CURLY@[41; 42) "{" 55 L_CURLY@41..42 "{"
56 WHITESPACE@[42; 43) " " 56 WHITESPACE@42..43 " "
57 EXPR_STMT@[43; 54) 57 EXPR_STMT@43..54
58 CALL_EXPR@[43; 54) 58 CALL_EXPR@43..54
59 PATH_EXPR@[43; 46) 59 PATH_EXPR@43..46
60 PATH@[43; 46) 60 PATH@43..46
61 PATH_SEGMENT@[43; 46) 61 PATH_SEGMENT@43..46
62 NAME_REF@[43; 46) 62 NAME_REF@43..46
63 IDENT@[43; 46) "foo" 63 IDENT@43..46 "foo"
64 ARG_LIST@[46; 54) 64 ARG_LIST@46..54
65 L_PAREN@[46; 47) "(" 65 L_PAREN@46..47 "("
66 LITERAL@[47; 48) 66 LITERAL@47..48
67 INT_NUMBER@[47; 48) "1" 67 INT_NUMBER@47..48 "1"
68 COMMA@[48; 49) "," 68 COMMA@48..49 ","
69 WHITESPACE@[49; 50) " " 69 WHITESPACE@49..50 " "
70 LITERAL@[50; 51) 70 LITERAL@50..51
71 INT_NUMBER@[50; 51) "2" 71 INT_NUMBER@50..51 "2"
72 COMMA@[51; 52) "," 72 COMMA@51..52 ","
73 WHITESPACE@[52; 53) " " 73 WHITESPACE@52..53 " "
74 ERROR@[53; 54) 74 ERROR@53..54
75 AT@[53; 54) "@" 75 AT@53..54 "@"
76 EXPR_STMT@[54; 55) 76 EXPR_STMT@54..55
77 ERROR@[54; 55) 77 ERROR@54..55
78 COMMA@[54; 55) "," 78 COMMA@54..55 ","
79 WHITESPACE@[55; 56) " " 79 WHITESPACE@55..56 " "
80 IMPL_DEF@[56; 60) 80 IMPL_DEF@56..60
81 IMPL_KW@[56; 60) "impl" 81 IMPL_KW@56..60 "impl"
82 EXPR_STMT@[60; 61) 82 EXPR_STMT@60..61
83 ERROR@[60; 61) 83 ERROR@60..61
84 COMMA@[60; 61) "," 84 COMMA@60..61 ","
85 WHITESPACE@[61; 62) " " 85 WHITESPACE@61..62 " "
86 LET_STMT@[62; 65) 86 LET_STMT@62..65
87 LET_KW@[62; 65) "let" 87 LET_KW@62..65 "let"
88 ERROR@[65; 66) 88 ERROR@65..66
89 R_PAREN@[65; 66) ")" 89 R_PAREN@65..66 ")"
90 WHITESPACE@[66; 67) " " 90 WHITESPACE@66..67 " "
91 R_CURLY@[67; 68) "}" 91 R_CURLY@67..68 "}"
92 WHITESPACE@[68; 69) "\n" 92 WHITESPACE@68..69 "\n"
93 FN_DEF@[69; 111) 93 FN_DEF@69..111
94 FN_KW@[69; 71) "fn" 94 FN_KW@69..71 "fn"
95 WHITESPACE@[71; 72) " " 95 WHITESPACE@71..72 " "
96 NAME@[72; 73) 96 NAME@72..73
97 IDENT@[72; 73) "c" 97 IDENT@72..73 "c"
98 PARAM_LIST@[73; 75) 98 PARAM_LIST@73..75
99 L_PAREN@[73; 74) "(" 99 L_PAREN@73..74 "("
100 R_PAREN@[74; 75) ")" 100 R_PAREN@74..75 ")"
101 WHITESPACE@[75; 76) " " 101 WHITESPACE@75..76 " "
102 BLOCK_EXPR@[76; 111) 102 BLOCK_EXPR@76..111
103 BLOCK@[76; 111) 103 BLOCK@76..111
104 L_CURLY@[76; 77) "{" 104 L_CURLY@76..77 "{"
105 WHITESPACE@[77; 78) " " 105 WHITESPACE@77..78 " "
106 EXPR_STMT@[78; 93) 106 EXPR_STMT@78..93
107 METHOD_CALL_EXPR@[78; 93) 107 METHOD_CALL_EXPR@78..93
108 PATH_EXPR@[78; 81) 108 PATH_EXPR@78..81
109 PATH@[78; 81) 109 PATH@78..81
110 PATH_SEGMENT@[78; 81) 110 PATH_SEGMENT@78..81
111 NAME_REF@[78; 81) 111 NAME_REF@78..81
112 IDENT@[78; 81) "foo" 112 IDENT@78..81 "foo"
113 DOT@[81; 82) "." 113 DOT@81..82 "."
114 NAME_REF@[82; 85) 114 NAME_REF@82..85
115 IDENT@[82; 85) "bar" 115 IDENT@82..85 "bar"
116 ARG_LIST@[85; 93) 116 ARG_LIST@85..93
117 L_PAREN@[85; 86) "(" 117 L_PAREN@85..86 "("
118 LITERAL@[86; 87) 118 LITERAL@86..87
119 INT_NUMBER@[86; 87) "1" 119 INT_NUMBER@86..87 "1"
120 COMMA@[87; 88) "," 120 COMMA@87..88 ","
121 WHITESPACE@[88; 89) " " 121 WHITESPACE@88..89 " "
122 LITERAL@[89; 90) 122 LITERAL@89..90
123 INT_NUMBER@[89; 90) "2" 123 INT_NUMBER@89..90 "2"
124 COMMA@[90; 91) "," 124 COMMA@90..91 ","
125 WHITESPACE@[91; 92) " " 125 WHITESPACE@91..92 " "
126 ERROR@[92; 93) 126 ERROR@92..93
127 AT@[92; 93) "@" 127 AT@92..93 "@"
128 EXPR_STMT@[93; 94) 128 EXPR_STMT@93..94
129 ERROR@[93; 94) 129 ERROR@93..94
130 COMMA@[93; 94) "," 130 COMMA@93..94 ","
131 WHITESPACE@[94; 95) " " 131 WHITESPACE@94..95 " "
132 EXPR_STMT@[95; 96) 132 EXPR_STMT@95..96
133 ERROR@[95; 96) 133 ERROR@95..96
134 R_BRACK@[95; 96) "]" 134 R_BRACK@95..96 "]"
135 EXPR_STMT@[96; 97) 135 EXPR_STMT@96..97
136 ERROR@[96; 97) 136 ERROR@96..97
137 COMMA@[96; 97) "," 137 COMMA@96..97 ","
138 WHITESPACE@[97; 98) " " 138 WHITESPACE@97..98 " "
139 TRAIT_DEF@[98; 104) 139 TRAIT_DEF@98..104
140 TRAIT_KW@[98; 103) "trait" 140 TRAIT_KW@98..103 "trait"
141 ERROR@[103; 104) 141 ERROR@103..104
142 COMMA@[103; 104) "," 142 COMMA@103..104 ","
143 WHITESPACE@[104; 105) " " 143 WHITESPACE@104..105 " "
144 LET_STMT@[105; 108) 144 LET_STMT@105..108
145 LET_KW@[105; 108) "let" 145 LET_KW@105..108 "let"
146 ERROR@[108; 109) 146 ERROR@108..109
147 R_PAREN@[108; 109) ")" 147 R_PAREN@108..109 ")"
148 WHITESPACE@[109; 110) " " 148 WHITESPACE@109..110 " "
149 R_CURLY@[110; 111) "}" 149 R_CURLY@110..111 "}"
150 WHITESPACE@[111; 112) "\n" 150 WHITESPACE@111..112 "\n"
151error [16; 16): expected expression 151error 16..16: expected expression
152error [17; 17): expected R_BRACK 152error 17..17: expected R_BRACK
153error [17; 17): expected SEMICOLON 153error 17..17: expected SEMICOLON
154error [17; 17): expected expression 154error 17..17: expected expression
155error [18; 18): expected SEMICOLON 155error 18..18: expected SEMICOLON
156error [25; 25): expected a name 156error 25..25: expected a name
157error [26; 26): expected `;`, `{`, or `(` 157error 26..26: expected `;`, `{`, or `(`
158error [30; 30): expected pattern 158error 30..30: expected pattern
159error [31; 31): expected SEMICOLON 159error 31..31: expected SEMICOLON
160error [53; 53): expected expression 160error 53..53: expected expression
161error [54; 54): expected SEMICOLON 161error 54..54: expected SEMICOLON
162error [54; 54): expected expression 162error 54..54: expected expression
163error [55; 55): expected SEMICOLON 163error 55..55: expected SEMICOLON
164error [60; 60): expected type 164error 60..60: expected type
165error [60; 60): expected `{` 165error 60..60: expected `{`
166error [60; 60): expected expression 166error 60..60: expected expression
167error [61; 61): expected SEMICOLON 167error 61..61: expected SEMICOLON
168error [65; 65): expected pattern 168error 65..65: expected pattern
169error [65; 65): expected SEMICOLON 169error 65..65: expected SEMICOLON
170error [65; 65): expected expression 170error 65..65: expected expression
171error [92; 92): expected expression 171error 92..92: expected expression
172error [93; 93): expected SEMICOLON 172error 93..93: expected SEMICOLON
173error [93; 93): expected expression 173error 93..93: expected expression
174error [94; 94): expected SEMICOLON 174error 94..94: expected SEMICOLON
175error [95; 95): expected expression 175error 95..95: expected expression
176error [96; 96): expected SEMICOLON 176error 96..96: expected SEMICOLON
177error [96; 96): expected expression 177error 96..96: expected expression
178error [97; 97): expected SEMICOLON 178error 97..97: expected SEMICOLON
179error [103; 103): expected a name 179error 103..103: expected a name
180error [104; 104): expected `{` 180error 104..104: expected `{`
181error [108; 108): expected pattern 181error 108..108: expected pattern
182error [108; 108): expected SEMICOLON 182error 108..108: expected SEMICOLON
183error [108; 108): expected expression 183error 108..108: expected expression
diff --git a/crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast b/crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast
index 97abe9510..c37594146 100644
--- a/crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast
+++ b/crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast
@@ -1,44 +1,44 @@
1SOURCE_FILE@[0; 94) 1SOURCE_FILE@0..94
2 FN_DEF@[0; 55) 2 FN_DEF@0..55
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 55) 11 BLOCK_EXPR@10..55
12 BLOCK@[10; 55) 12 BLOCK@10..55
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 MACRO_CALL@[16; 49) 15 MACRO_CALL@16..49
16 PATH@[16; 19) 16 PATH@16..19
17 PATH_SEGMENT@[16; 19) 17 PATH_SEGMENT@16..19
18 NAME_REF@[16; 19) 18 NAME_REF@16..19
19 IDENT@[16; 19) "foo" 19 IDENT@16..19 "foo"
20 BANG@[19; 20) "!" 20 BANG@19..20 "!"
21 WHITESPACE@[20; 21) " " 21 WHITESPACE@20..21 " "
22 TOKEN_TREE@[21; 49) 22 TOKEN_TREE@21..49
23 L_PAREN@[21; 22) "(" 23 L_PAREN@21..22 "("
24 WHITESPACE@[22; 31) "\n " 24 WHITESPACE@22..31 "\n "
25 IDENT@[31; 34) "bar" 25 IDENT@31..34 "bar"
26 COMMA@[34; 35) "," 26 COMMA@34..35 ","
27 WHITESPACE@[35; 36) " " 27 WHITESPACE@35..36 " "
28 STRING@[36; 41) "\"baz\"" 28 STRING@36..41 "\"baz\""
29 COMMA@[41; 42) "," 29 COMMA@41..42 ","
30 WHITESPACE@[42; 43) " " 30 WHITESPACE@42..43 " "
31 INT_NUMBER@[43; 44) "1" 31 INT_NUMBER@43..44 "1"
32 COMMA@[44; 45) "," 32 COMMA@44..45 ","
33 WHITESPACE@[45; 46) " " 33 WHITESPACE@45..46 " "
34 FLOAT_NUMBER@[46; 49) "2.0" 34 FLOAT_NUMBER@46..49 "2.0"
35 WHITESPACE@[49; 54) "\n " 35 WHITESPACE@49..54 "\n "
36 R_CURLY@[54; 55) "}" 36 R_CURLY@54..55 "}"
37 WHITESPACE@[55; 56) " " 37 WHITESPACE@55..56 " "
38 COMMENT@[56; 91) "//~ ERROR incorrect c ..." 38 COMMENT@56..91 "//~ ERROR incorrect c ..."
39 WHITESPACE@[91; 92) "\n" 39 WHITESPACE@91..92 "\n"
40 ERROR@[92; 93) 40 ERROR@92..93
41 R_CURLY@[92; 93) "}" 41 R_CURLY@92..93 "}"
42 WHITESPACE@[93; 94) "\n" 42 WHITESPACE@93..94 "\n"
43error [49; 49): unmatched `}` 43error 49..49: unmatched `}`
44error [92; 92): unmatched `}` 44error 92..92: unmatched `}`
diff --git a/crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast b/crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast
index a3cf3e60a..4296355f2 100644
--- a/crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast
+++ b/crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast
@@ -1,321 +1,321 @@
1SOURCE_FILE@[0; 240) 1SOURCE_FILE@0..240
2 FN_DEF@[0; 53) 2 FN_DEF@0..53
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "f" 6 IDENT@3..4 "f"
7 TYPE_PARAM_LIST@[4; 48) 7 TYPE_PARAM_LIST@4..48
8 L_ANGLE@[4; 5) "<" 8 L_ANGLE@4..5 "<"
9 TYPE_PARAM@[5; 47) 9 TYPE_PARAM@5..47
10 NAME@[5; 6) 10 NAME@5..6
11 IDENT@[5; 6) "T" 11 IDENT@5..6 "T"
12 COLON@[6; 7) ":" 12 COLON@6..7 ":"
13 WHITESPACE@[7; 8) " " 13 WHITESPACE@7..8 " "
14 TYPE_BOUND_LIST@[8; 47) 14 TYPE_BOUND_LIST@8..47
15 TYPE_BOUND@[8; 14) 15 TYPE_BOUND@8..14
16 L_PAREN@[8; 9) "(" 16 L_PAREN@8..9 "("
17 PATH_TYPE@[9; 13) 17 PATH_TYPE@9..13
18 PATH@[9; 13) 18 PATH@9..13
19 PATH_SEGMENT@[9; 13) 19 PATH_SEGMENT@9..13
20 NAME_REF@[9; 13) 20 NAME_REF@9..13
21 IDENT@[9; 13) "Copy" 21 IDENT@9..13 "Copy"
22 R_PAREN@[13; 14) ")" 22 R_PAREN@13..14 ")"
23 WHITESPACE@[14; 15) " " 23 WHITESPACE@14..15 " "
24 PLUS@[15; 16) "+" 24 PLUS@15..16 "+"
25 WHITESPACE@[16; 17) " " 25 WHITESPACE@16..17 " "
26 TYPE_BOUND@[17; 25) 26 TYPE_BOUND@17..25
27 L_PAREN@[17; 18) "(" 27 L_PAREN@17..18 "("
28 QUESTION@[18; 19) "?" 28 QUESTION@18..19 "?"
29 PATH_TYPE@[19; 24) 29 PATH_TYPE@19..24
30 PATH@[19; 24) 30 PATH@19..24
31 PATH_SEGMENT@[19; 24) 31 PATH_SEGMENT@19..24
32 NAME_REF@[19; 24) 32 NAME_REF@19..24
33 IDENT@[19; 24) "Sized" 33 IDENT@19..24 "Sized"
34 R_PAREN@[24; 25) ")" 34 R_PAREN@24..25 ")"
35 WHITESPACE@[25; 26) " " 35 WHITESPACE@25..26 " "
36 PLUS@[26; 27) "+" 36 PLUS@26..27 "+"
37 WHITESPACE@[27; 28) " " 37 WHITESPACE@27..28 " "
38 TYPE_BOUND@[28; 47) 38 TYPE_BOUND@28..47
39 L_PAREN@[28; 29) "(" 39 L_PAREN@28..29 "("
40 FOR_TYPE@[29; 46) 40 FOR_TYPE@29..46
41 FOR_KW@[29; 32) "for" 41 FOR_KW@29..32 "for"
42 TYPE_PARAM_LIST@[32; 36) 42 TYPE_PARAM_LIST@32..36
43 L_ANGLE@[32; 33) "<" 43 L_ANGLE@32..33 "<"
44 LIFETIME_PARAM@[33; 35) 44 LIFETIME_PARAM@33..35
45 LIFETIME@[33; 35) "\'a" 45 LIFETIME@33..35 "\'a"
46 R_ANGLE@[35; 36) ">" 46 R_ANGLE@35..36 ">"
47 WHITESPACE@[36; 37) " " 47 WHITESPACE@36..37 " "
48 PATH_TYPE@[37; 46) 48 PATH_TYPE@37..46
49 PATH@[37; 46) 49 PATH@37..46
50 PATH_SEGMENT@[37; 46) 50 PATH_SEGMENT@37..46
51 NAME_REF@[37; 42) 51 NAME_REF@37..42
52 IDENT@[37; 42) "Trait" 52 IDENT@37..42 "Trait"
53 TYPE_ARG_LIST@[42; 46) 53 TYPE_ARG_LIST@42..46
54 L_ANGLE@[42; 43) "<" 54 L_ANGLE@42..43 "<"
55 LIFETIME_ARG@[43; 45) 55 LIFETIME_ARG@43..45
56 LIFETIME@[43; 45) "\'a" 56 LIFETIME@43..45 "\'a"
57 R_ANGLE@[45; 46) ">" 57 R_ANGLE@45..46 ">"
58 R_PAREN@[46; 47) ")" 58 R_PAREN@46..47 ")"
59 R_ANGLE@[47; 48) ">" 59 R_ANGLE@47..48 ">"
60 PARAM_LIST@[48; 50) 60 PARAM_LIST@48..50
61 L_PAREN@[48; 49) "(" 61 L_PAREN@48..49 "("
62 R_PAREN@[49; 50) ")" 62 R_PAREN@49..50 ")"
63 WHITESPACE@[50; 51) " " 63 WHITESPACE@50..51 " "
64 BLOCK_EXPR@[51; 53) 64 BLOCK_EXPR@51..53
65 BLOCK@[51; 53) 65 BLOCK@51..53
66 L_CURLY@[51; 52) "{" 66 L_CURLY@51..52 "{"
67 R_CURLY@[52; 53) "}" 67 R_CURLY@52..53 "}"
68 WHITESPACE@[53; 55) "\n\n" 68 WHITESPACE@53..55 "\n\n"
69 FN_DEF@[55; 239) 69 FN_DEF@55..239
70 FN_KW@[55; 57) "fn" 70 FN_KW@55..57 "fn"
71 WHITESPACE@[57; 58) " " 71 WHITESPACE@57..58 " "
72 NAME@[58; 62) 72 NAME@58..62
73 IDENT@[58; 62) "main" 73 IDENT@58..62 "main"
74 PARAM_LIST@[62; 64) 74 PARAM_LIST@62..64
75 L_PAREN@[62; 63) "(" 75 L_PAREN@62..63 "("
76 R_PAREN@[63; 64) ")" 76 R_PAREN@63..64 ")"
77 WHITESPACE@[64; 65) " " 77 WHITESPACE@64..65 " "
78 BLOCK_EXPR@[65; 239) 78 BLOCK_EXPR@65..239
79 BLOCK@[65; 239) 79 BLOCK@65..239
80 L_CURLY@[65; 66) "{" 80 L_CURLY@65..66 "{"
81 WHITESPACE@[66; 71) "\n " 81 WHITESPACE@66..71 "\n "
82 LET_STMT@[71; 121) 82 LET_STMT@71..121
83 LET_KW@[71; 74) "let" 83 LET_KW@71..74 "let"
84 WHITESPACE@[74; 75) " " 84 WHITESPACE@74..75 " "
85 PLACEHOLDER_PAT@[75; 76) 85 PLACEHOLDER_PAT@75..76
86 UNDERSCORE@[75; 76) "_" 86 UNDERSCORE@75..76 "_"
87 COLON@[76; 77) ":" 87 COLON@76..77 ":"
88 WHITESPACE@[77; 78) " " 88 WHITESPACE@77..78 " "
89 DYN_TRAIT_TYPE@[78; 121) 89 DYN_TRAIT_TYPE@78..121
90 TYPE_BOUND_LIST@[78; 121) 90 TYPE_BOUND_LIST@78..121
91 TYPE_BOUND@[78; 88) 91 TYPE_BOUND@78..88
92 PATH_TYPE@[78; 88) 92 PATH_TYPE@78..88
93 PATH@[78; 88) 93 PATH@78..88
94 PATH_SEGMENT@[78; 88) 94 PATH_SEGMENT@78..88
95 NAME_REF@[78; 81) 95 NAME_REF@78..81
96 IDENT@[78; 81) "Box" 96 IDENT@78..81 "Box"
97 TYPE_ARG_LIST@[81; 88) 97 TYPE_ARG_LIST@81..88
98 L_ANGLE@[81; 82) "<" 98 L_ANGLE@81..82 "<"
99 TYPE_ARG@[82; 88) 99 TYPE_ARG@82..88
100 PAREN_TYPE@[82; 88) 100 PAREN_TYPE@82..88
101 L_PAREN@[82; 83) "(" 101 L_PAREN@82..83 "("
102 PATH_TYPE@[83; 87) 102 PATH_TYPE@83..87
103 PATH@[83; 87) 103 PATH@83..87
104 PATH_SEGMENT@[83; 87) 104 PATH_SEGMENT@83..87
105 NAME_REF@[83; 87) 105 NAME_REF@83..87
106 IDENT@[83; 87) "Copy" 106 IDENT@83..87 "Copy"
107 R_PAREN@[87; 88) ")" 107 R_PAREN@87..88 ")"
108 WHITESPACE@[88; 89) " " 108 WHITESPACE@88..89 " "
109 PLUS@[89; 90) "+" 109 PLUS@89..90 "+"
110 WHITESPACE@[90; 91) " " 110 WHITESPACE@90..91 " "
111 TYPE_BOUND@[91; 99) 111 TYPE_BOUND@91..99
112 L_PAREN@[91; 92) "(" 112 L_PAREN@91..92 "("
113 QUESTION@[92; 93) "?" 113 QUESTION@92..93 "?"
114 PATH_TYPE@[93; 98) 114 PATH_TYPE@93..98
115 PATH@[93; 98) 115 PATH@93..98
116 PATH_SEGMENT@[93; 98) 116 PATH_SEGMENT@93..98
117 NAME_REF@[93; 98) 117 NAME_REF@93..98
118 IDENT@[93; 98) "Sized" 118 IDENT@93..98 "Sized"
119 R_PAREN@[98; 99) ")" 119 R_PAREN@98..99 ")"
120 WHITESPACE@[99; 100) " " 120 WHITESPACE@99..100 " "
121 PLUS@[100; 101) "+" 121 PLUS@100..101 "+"
122 WHITESPACE@[101; 102) " " 122 WHITESPACE@101..102 " "
123 TYPE_BOUND@[102; 121) 123 TYPE_BOUND@102..121
124 L_PAREN@[102; 103) "(" 124 L_PAREN@102..103 "("
125 FOR_TYPE@[103; 120) 125 FOR_TYPE@103..120
126 FOR_KW@[103; 106) "for" 126 FOR_KW@103..106 "for"
127 TYPE_PARAM_LIST@[106; 110) 127 TYPE_PARAM_LIST@106..110
128 L_ANGLE@[106; 107) "<" 128 L_ANGLE@106..107 "<"
129 LIFETIME_PARAM@[107; 109) 129 LIFETIME_PARAM@107..109
130 LIFETIME@[107; 109) "\'a" 130 LIFETIME@107..109 "\'a"
131 R_ANGLE@[109; 110) ">" 131 R_ANGLE@109..110 ">"
132 WHITESPACE@[110; 111) " " 132 WHITESPACE@110..111 " "
133 PATH_TYPE@[111; 120) 133 PATH_TYPE@111..120
134 PATH@[111; 120) 134 PATH@111..120
135 PATH_SEGMENT@[111; 120) 135 PATH_SEGMENT@111..120
136 NAME_REF@[111; 116) 136 NAME_REF@111..116
137 IDENT@[111; 116) "Trait" 137 IDENT@111..116 "Trait"
138 TYPE_ARG_LIST@[116; 120) 138 TYPE_ARG_LIST@116..120
139 L_ANGLE@[116; 117) "<" 139 L_ANGLE@116..117 "<"
140 LIFETIME_ARG@[117; 119) 140 LIFETIME_ARG@117..119
141 LIFETIME@[117; 119) "\'a" 141 LIFETIME@117..119 "\'a"
142 R_ANGLE@[119; 120) ">" 142 R_ANGLE@119..120 ">"
143 R_PAREN@[120; 121) ")" 143 R_PAREN@120..121 ")"
144 EXPR_STMT@[121; 123) 144 EXPR_STMT@121..123
145 ERROR@[121; 122) 145 ERROR@121..122
146 R_ANGLE@[121; 122) ">" 146 R_ANGLE@121..122 ">"
147 SEMICOLON@[122; 123) ";" 147 SEMICOLON@122..123 ";"
148 WHITESPACE@[123; 128) "\n " 148 WHITESPACE@123..128 "\n "
149 LET_STMT@[128; 141) 149 LET_STMT@128..141
150 LET_KW@[128; 131) "let" 150 LET_KW@128..131 "let"
151 WHITESPACE@[131; 132) " " 151 WHITESPACE@131..132 " "
152 PLACEHOLDER_PAT@[132; 133) 152 PLACEHOLDER_PAT@132..133
153 UNDERSCORE@[132; 133) "_" 153 UNDERSCORE@132..133 "_"
154 COLON@[133; 134) ":" 154 COLON@133..134 ":"
155 WHITESPACE@[134; 135) " " 155 WHITESPACE@134..135 " "
156 PATH_TYPE@[135; 141) 156 PATH_TYPE@135..141
157 PATH@[135; 141) 157 PATH@135..141
158 PATH_SEGMENT@[135; 141) 158 PATH_SEGMENT@135..141
159 NAME_REF@[135; 138) 159 NAME_REF@135..138
160 IDENT@[135; 138) "Box" 160 IDENT@135..138 "Box"
161 TYPE_ARG_LIST@[138; 141) 161 TYPE_ARG_LIST@138..141
162 L_ANGLE@[138; 139) "<" 162 L_ANGLE@138..139 "<"
163 TYPE_ARG@[139; 141) 163 TYPE_ARG@139..141
164 PAREN_TYPE@[139; 141) 164 PAREN_TYPE@139..141
165 L_PAREN@[139; 140) "(" 165 L_PAREN@139..140 "("
166 ERROR@[140; 141) 166 ERROR@140..141
167 QUESTION@[140; 141) "?" 167 QUESTION@140..141 "?"
168 EXPR_STMT@[141; 146) 168 EXPR_STMT@141..146
169 PATH_EXPR@[141; 146) 169 PATH_EXPR@141..146
170 PATH@[141; 146) 170 PATH@141..146
171 PATH_SEGMENT@[141; 146) 171 PATH_SEGMENT@141..146
172 NAME_REF@[141; 146) 172 NAME_REF@141..146
173 IDENT@[141; 146) "Sized" 173 IDENT@141..146 "Sized"
174 EXPR_STMT@[146; 147) 174 EXPR_STMT@146..147
175 ERROR@[146; 147) 175 ERROR@146..147
176 R_PAREN@[146; 147) ")" 176 R_PAREN@146..147 ")"
177 WHITESPACE@[147; 148) " " 177 WHITESPACE@147..148 " "
178 EXPR_STMT@[148; 149) 178 EXPR_STMT@148..149
179 ERROR@[148; 149) 179 ERROR@148..149
180 PLUS@[148; 149) "+" 180 PLUS@148..149 "+"
181 WHITESPACE@[149; 150) " " 181 WHITESPACE@149..150 " "
182 EXPR_STMT@[150; 180) 182 EXPR_STMT@150..180
183 TUPLE_EXPR@[150; 180) 183 TUPLE_EXPR@150..180
184 L_PAREN@[150; 151) "(" 184 L_PAREN@150..151 "("
185 BIN_EXPR@[151; 180) 185 BIN_EXPR@151..180
186 BIN_EXPR@[151; 178) 186 BIN_EXPR@151..178
187 BIN_EXPR@[151; 169) 187 BIN_EXPR@151..169
188 BIN_EXPR@[151; 167) 188 BIN_EXPR@151..167
189 BIN_EXPR@[151; 164) 189 BIN_EXPR@151..164
190 FOR_EXPR@[151; 157) 190 FOR_EXPR@151..157
191 FOR_KW@[151; 154) "for" 191 FOR_KW@151..154 "for"
192 ERROR@[154; 155) 192 ERROR@154..155
193 L_ANGLE@[154; 155) "<" 193 L_ANGLE@154..155 "<"
194 ERROR@[155; 157) 194 ERROR@155..157
195 LIFETIME@[155; 157) "\'a" 195 LIFETIME@155..157 "\'a"
196 R_ANGLE@[157; 158) ">" 196 R_ANGLE@157..158 ">"
197 WHITESPACE@[158; 159) " " 197 WHITESPACE@158..159 " "
198 PATH_EXPR@[159; 164) 198 PATH_EXPR@159..164
199 PATH@[159; 164) 199 PATH@159..164
200 PATH_SEGMENT@[159; 164) 200 PATH_SEGMENT@159..164
201 NAME_REF@[159; 164) 201 NAME_REF@159..164
202 IDENT@[159; 164) "Trait" 202 IDENT@159..164 "Trait"
203 L_ANGLE@[164; 165) "<" 203 L_ANGLE@164..165 "<"
204 ERROR@[165; 167) 204 ERROR@165..167
205 LIFETIME@[165; 167) "\'a" 205 LIFETIME@165..167 "\'a"
206 R_ANGLE@[167; 168) ">" 206 R_ANGLE@167..168 ">"
207 ERROR@[168; 169) 207 ERROR@168..169
208 R_PAREN@[168; 169) ")" 208 R_PAREN@168..169 ")"
209 WHITESPACE@[169; 170) " " 209 WHITESPACE@169..170 " "
210 PLUS@[170; 171) "+" 210 PLUS@170..171 "+"
211 WHITESPACE@[171; 172) " " 211 WHITESPACE@171..172 " "
212 PAREN_EXPR@[172; 178) 212 PAREN_EXPR@172..178
213 L_PAREN@[172; 173) "(" 213 L_PAREN@172..173 "("
214 PATH_EXPR@[173; 177) 214 PATH_EXPR@173..177
215 PATH@[173; 177) 215 PATH@173..177
216 PATH_SEGMENT@[173; 177) 216 PATH_SEGMENT@173..177
217 NAME_REF@[173; 177) 217 NAME_REF@173..177
218 IDENT@[173; 177) "Copy" 218 IDENT@173..177 "Copy"
219 R_PAREN@[177; 178) ")" 219 R_PAREN@177..178 ")"
220 R_ANGLE@[178; 179) ">" 220 R_ANGLE@178..179 ">"
221 ERROR@[179; 180) 221 ERROR@179..180
222 SEMICOLON@[179; 180) ";" 222 SEMICOLON@179..180 ";"
223 WHITESPACE@[180; 185) "\n " 223 WHITESPACE@180..185 "\n "
224 LET_STMT@[185; 235) 224 LET_STMT@185..235
225 LET_KW@[185; 188) "let" 225 LET_KW@185..188 "let"
226 WHITESPACE@[188; 189) " " 226 WHITESPACE@188..189 " "
227 PLACEHOLDER_PAT@[189; 190) 227 PLACEHOLDER_PAT@189..190
228 UNDERSCORE@[189; 190) "_" 228 UNDERSCORE@189..190 "_"
229 COLON@[190; 191) ":" 229 COLON@190..191 ":"
230 WHITESPACE@[191; 192) " " 230 WHITESPACE@191..192 " "
231 DYN_TRAIT_TYPE@[192; 235) 231 DYN_TRAIT_TYPE@192..235
232 TYPE_BOUND_LIST@[192; 235) 232 TYPE_BOUND_LIST@192..235
233 TYPE_BOUND@[192; 215) 233 TYPE_BOUND@192..215
234 PATH_TYPE@[192; 215) 234 PATH_TYPE@192..215
235 PATH@[192; 215) 235 PATH@192..215
236 PATH_SEGMENT@[192; 215) 236 PATH_SEGMENT@192..215
237 NAME_REF@[192; 195) 237 NAME_REF@192..195
238 IDENT@[192; 195) "Box" 238 IDENT@192..195 "Box"
239 TYPE_ARG_LIST@[195; 215) 239 TYPE_ARG_LIST@195..215
240 L_ANGLE@[195; 196) "<" 240 L_ANGLE@195..196 "<"
241 TYPE_ARG@[196; 215) 241 TYPE_ARG@196..215
242 PAREN_TYPE@[196; 215) 242 PAREN_TYPE@196..215
243 L_PAREN@[196; 197) "(" 243 L_PAREN@196..197 "("
244 FOR_TYPE@[197; 214) 244 FOR_TYPE@197..214
245 FOR_KW@[197; 200) "for" 245 FOR_KW@197..200 "for"
246 TYPE_PARAM_LIST@[200; 204) 246 TYPE_PARAM_LIST@200..204
247 L_ANGLE@[200; 201) "<" 247 L_ANGLE@200..201 "<"
248 LIFETIME_PARAM@[201; 203) 248 LIFETIME_PARAM@201..203
249 LIFETIME@[201; 203) "\'a" 249 LIFETIME@201..203 "\'a"
250 R_ANGLE@[203; 204) ">" 250 R_ANGLE@203..204 ">"
251 WHITESPACE@[204; 205) " " 251 WHITESPACE@204..205 " "
252 PATH_TYPE@[205; 214) 252 PATH_TYPE@205..214
253 PATH@[205; 214) 253 PATH@205..214
254 PATH_SEGMENT@[205; 214) 254 PATH_SEGMENT@205..214
255 NAME_REF@[205; 210) 255 NAME_REF@205..210
256 IDENT@[205; 210) "Trait" 256 IDENT@205..210 "Trait"
257 TYPE_ARG_LIST@[210; 214) 257 TYPE_ARG_LIST@210..214
258 L_ANGLE@[210; 211) "<" 258 L_ANGLE@210..211 "<"
259 LIFETIME_ARG@[211; 213) 259 LIFETIME_ARG@211..213
260 LIFETIME@[211; 213) "\'a" 260 LIFETIME@211..213 "\'a"
261 R_ANGLE@[213; 214) ">" 261 R_ANGLE@213..214 ">"
262 R_PAREN@[214; 215) ")" 262 R_PAREN@214..215 ")"
263 WHITESPACE@[215; 216) " " 263 WHITESPACE@215..216 " "
264 PLUS@[216; 217) "+" 264 PLUS@216..217 "+"
265 WHITESPACE@[217; 218) " " 265 WHITESPACE@217..218 " "
266 TYPE_BOUND@[218; 224) 266 TYPE_BOUND@218..224
267 L_PAREN@[218; 219) "(" 267 L_PAREN@218..219 "("
268 PATH_TYPE@[219; 223) 268 PATH_TYPE@219..223
269 PATH@[219; 223) 269 PATH@219..223
270 PATH_SEGMENT@[219; 223) 270 PATH_SEGMENT@219..223
271 NAME_REF@[219; 223) 271 NAME_REF@219..223
272 IDENT@[219; 223) "Copy" 272 IDENT@219..223 "Copy"
273 R_PAREN@[223; 224) ")" 273 R_PAREN@223..224 ")"
274 WHITESPACE@[224; 225) " " 274 WHITESPACE@224..225 " "
275 PLUS@[225; 226) "+" 275 PLUS@225..226 "+"
276 WHITESPACE@[226; 227) " " 276 WHITESPACE@226..227 " "
277 TYPE_BOUND@[227; 235) 277 TYPE_BOUND@227..235
278 L_PAREN@[227; 228) "(" 278 L_PAREN@227..228 "("
279 QUESTION@[228; 229) "?" 279 QUESTION@228..229 "?"
280 PATH_TYPE@[229; 234) 280 PATH_TYPE@229..234
281 PATH@[229; 234) 281 PATH@229..234
282 PATH_SEGMENT@[229; 234) 282 PATH_SEGMENT@229..234
283 NAME_REF@[229; 234) 283 NAME_REF@229..234
284 IDENT@[229; 234) "Sized" 284 IDENT@229..234 "Sized"
285 R_PAREN@[234; 235) ")" 285 R_PAREN@234..235 ")"
286 EXPR_STMT@[235; 237) 286 EXPR_STMT@235..237
287 ERROR@[235; 236) 287 ERROR@235..236
288 R_ANGLE@[235; 236) ">" 288 R_ANGLE@235..236 ">"
289 SEMICOLON@[236; 237) ";" 289 SEMICOLON@236..237 ";"
290 WHITESPACE@[237; 238) "\n" 290 WHITESPACE@237..238 "\n"
291 R_CURLY@[238; 239) "}" 291 R_CURLY@238..239 "}"
292 WHITESPACE@[239; 240) "\n" 292 WHITESPACE@239..240 "\n"
293error [88; 88): expected COMMA 293error 88..88: expected COMMA
294error [88; 88): expected R_ANGLE 294error 88..88: expected R_ANGLE
295error [121; 121): expected SEMICOLON 295error 121..121: expected SEMICOLON
296error [121; 121): expected expression 296error 121..121: expected expression
297error [140; 140): expected type 297error 140..140: expected type
298error [141; 141): expected R_PAREN 298error 141..141: expected R_PAREN
299error [141; 141): expected COMMA 299error 141..141: expected COMMA
300error [141; 141): expected R_ANGLE 300error 141..141: expected R_ANGLE
301error [141; 141): expected SEMICOLON 301error 141..141: expected SEMICOLON
302error [146; 146): expected SEMICOLON 302error 146..146: expected SEMICOLON
303error [146; 146): expected expression 303error 146..146: expected expression
304error [147; 147): expected SEMICOLON 304error 147..147: expected SEMICOLON
305error [148; 148): expected expression 305error 148..148: expected expression
306error [149; 149): expected SEMICOLON 306error 149..149: expected SEMICOLON
307error [154; 154): expected pattern 307error 154..154: expected pattern
308error [155; 155): expected IN_KW 308error 155..155: expected IN_KW
309error [155; 155): expected expression 309error 155..155: expected expression
310error [157; 157): expected a block 310error 157..157: expected a block
311error [165; 165): expected expression 311error 165..165: expected expression
312error [168; 168): expected expression 312error 168..168: expected expression
313error [179; 179): expected expression 313error 179..179: expected expression
314error [180; 180): expected COMMA 314error 180..180: expected COMMA
315error [180; 180): expected expression 315error 180..180: expected expression
316error [180; 180): expected R_PAREN 316error 180..180: expected R_PAREN
317error [180; 180): expected SEMICOLON 317error 180..180: expected SEMICOLON
318error [215; 215): expected COMMA 318error 215..215: expected COMMA
319error [215; 215): expected R_ANGLE 319error 215..215: expected R_ANGLE
320error [235; 235): expected SEMICOLON 320error 235..235: expected SEMICOLON
321error [235; 235): expected expression 321error 235..235: expected expression
diff --git a/crates/ra_syntax/test_data/parser/err/0025_nope.rast b/crates/ra_syntax/test_data/parser/err/0025_nope.rast
index 2b37ce94d..195c08bd9 100644
--- a/crates/ra_syntax/test_data/parser/err/0025_nope.rast
+++ b/crates/ra_syntax/test_data/parser/err/0025_nope.rast
@@ -1,204 +1,204 @@
1SOURCE_FILE@[0; 575) 1SOURCE_FILE@0..575
2 FN_DEF@[0; 574) 2 FN_DEF@0..574
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 574) 11 BLOCK_EXPR@10..574
12 BLOCK@[10; 574) 12 BLOCK@10..574
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 ENUM_DEF@[16; 152) 15 ENUM_DEF@16..152
16 ENUM_KW@[16; 20) "enum" 16 ENUM_KW@16..20 "enum"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 NAME@[21; 25) 18 NAME@21..25
19 IDENT@[21; 25) "Test" 19 IDENT@21..25 "Test"
20 WHITESPACE@[25; 26) " " 20 WHITESPACE@25..26 " "
21 ENUM_VARIANT_LIST@[26; 152) 21 ENUM_VARIANT_LIST@26..152
22 L_CURLY@[26; 27) "{" 22 L_CURLY@26..27 "{"
23 WHITESPACE@[27; 36) "\n " 23 WHITESPACE@27..36 "\n "
24 ENUM_VARIANT@[36; 40) 24 ENUM_VARIANT@36..40
25 NAME@[36; 40) 25 NAME@36..40
26 IDENT@[36; 40) "Var1" 26 IDENT@36..40 "Var1"
27 COMMA@[40; 41) "," 27 COMMA@40..41 ","
28 WHITESPACE@[41; 50) "\n " 28 WHITESPACE@41..50 "\n "
29 ENUM_VARIANT@[50; 62) 29 ENUM_VARIANT@50..62
30 NAME@[50; 54) 30 NAME@50..54
31 IDENT@[50; 54) "Var2" 31 IDENT@50..54 "Var2"
32 TUPLE_FIELD_DEF_LIST@[54; 62) 32 TUPLE_FIELD_DEF_LIST@54..62
33 L_PAREN@[54; 55) "(" 33 L_PAREN@54..55 "("
34 TUPLE_FIELD_DEF@[55; 61) 34 TUPLE_FIELD_DEF@55..61
35 PATH_TYPE@[55; 61) 35 PATH_TYPE@55..61
36 PATH@[55; 61) 36 PATH@55..61
37 PATH_SEGMENT@[55; 61) 37 PATH_SEGMENT@55..61
38 NAME_REF@[55; 61) 38 NAME_REF@55..61
39 IDENT@[55; 61) "String" 39 IDENT@55..61 "String"
40 R_PAREN@[61; 62) ")" 40 R_PAREN@61..62 ")"
41 COMMA@[62; 63) "," 41 COMMA@62..63 ","
42 WHITESPACE@[63; 72) "\n " 42 WHITESPACE@63..72 "\n "
43 ENUM_VARIANT@[72; 145) 43 ENUM_VARIANT@72..145
44 NAME@[72; 76) 44 NAME@72..76
45 IDENT@[72; 76) "Var3" 45 IDENT@72..76 "Var3"
46 WHITESPACE@[76; 77) " " 46 WHITESPACE@76..77 " "
47 RECORD_FIELD_DEF_LIST@[77; 145) 47 RECORD_FIELD_DEF_LIST@77..145
48 L_CURLY@[77; 78) "{" 48 L_CURLY@77..78 "{"
49 WHITESPACE@[78; 91) "\n " 49 WHITESPACE@78..91 "\n "
50 RECORD_FIELD_DEF@[91; 95) 50 RECORD_FIELD_DEF@91..95
51 NAME@[91; 94) 51 NAME@91..94
52 IDENT@[91; 94) "abc" 52 IDENT@91..94 "abc"
53 COLON@[94; 95) ":" 53 COLON@94..95 ":"
54 WHITESPACE@[95; 96) " " 54 WHITESPACE@95..96 " "
55 ERROR@[96; 98) 55 ERROR@96..98
56 L_CURLY@[96; 97) "{" 56 L_CURLY@96..97 "{"
57 R_CURLY@[97; 98) "}" 57 R_CURLY@97..98 "}"
58 ERROR@[98; 99) 58 ERROR@98..99
59 COMMA@[98; 99) "," 59 COMMA@98..99 ","
60 WHITESPACE@[99; 100) " " 60 WHITESPACE@99..100 " "
61 COMMENT@[100; 135) "//~ ERROR: expected t ..." 61 COMMENT@100..135 "//~ ERROR: expected t ..."
62 WHITESPACE@[135; 144) "\n " 62 WHITESPACE@135..144 "\n "
63 R_CURLY@[144; 145) "}" 63 R_CURLY@144..145 "}"
64 COMMA@[145; 146) "," 64 COMMA@145..146 ","
65 WHITESPACE@[146; 151) "\n " 65 WHITESPACE@146..151 "\n "
66 R_CURLY@[151; 152) "}" 66 R_CURLY@151..152 "}"
67 WHITESPACE@[152; 158) "\n\n " 67 WHITESPACE@152..158 "\n\n "
68 COMMENT@[158; 171) "// recover..." 68 COMMENT@158..171 "// recover..."
69 WHITESPACE@[171; 176) "\n " 69 WHITESPACE@171..176 "\n "
70 LET_STMT@[176; 186) 70 LET_STMT@176..186
71 LET_KW@[176; 179) "let" 71 LET_KW@176..179 "let"
72 WHITESPACE@[179; 180) " " 72 WHITESPACE@179..180 " "
73 BIND_PAT@[180; 181) 73 BIND_PAT@180..181
74 NAME@[180; 181) 74 NAME@180..181
75 IDENT@[180; 181) "a" 75 IDENT@180..181 "a"
76 WHITESPACE@[181; 182) " " 76 WHITESPACE@181..182 " "
77 EQ@[182; 183) "=" 77 EQ@182..183 "="
78 WHITESPACE@[183; 184) " " 78 WHITESPACE@183..184 " "
79 LITERAL@[184; 185) 79 LITERAL@184..185
80 INT_NUMBER@[184; 185) "1" 80 INT_NUMBER@184..185 "1"
81 SEMICOLON@[185; 186) ";" 81 SEMICOLON@185..186 ";"
82 WHITESPACE@[186; 191) "\n " 82 WHITESPACE@186..191 "\n "
83 ENUM_DEF@[191; 223) 83 ENUM_DEF@191..223
84 ENUM_KW@[191; 195) "enum" 84 ENUM_KW@191..195 "enum"
85 WHITESPACE@[195; 196) " " 85 WHITESPACE@195..196 " "
86 NAME@[196; 201) 86 NAME@196..201
87 IDENT@[196; 201) "Test2" 87 IDENT@196..201 "Test2"
88 WHITESPACE@[201; 202) " " 88 WHITESPACE@201..202 " "
89 ENUM_VARIANT_LIST@[202; 223) 89 ENUM_VARIANT_LIST@202..223
90 L_CURLY@[202; 203) "{" 90 L_CURLY@202..203 "{"
91 WHITESPACE@[203; 212) "\n " 91 WHITESPACE@203..212 "\n "
92 ENUM_VARIANT@[212; 216) 92 ENUM_VARIANT@212..216
93 NAME@[212; 216) 93 NAME@212..216
94 IDENT@[212; 216) "Fine" 94 IDENT@212..216 "Fine"
95 COMMA@[216; 217) "," 95 COMMA@216..217 ","
96 WHITESPACE@[217; 222) "\n " 96 WHITESPACE@217..222 "\n "
97 R_CURLY@[222; 223) "}" 97 R_CURLY@222..223 "}"
98 WHITESPACE@[223; 229) "\n\n " 98 WHITESPACE@223..229 "\n\n "
99 ENUM_DEF@[229; 300) 99 ENUM_DEF@229..300
100 ENUM_KW@[229; 233) "enum" 100 ENUM_KW@229..233 "enum"
101 WHITESPACE@[233; 234) " " 101 WHITESPACE@233..234 " "
102 NAME@[234; 239) 102 NAME@234..239
103 IDENT@[234; 239) "Test3" 103 IDENT@234..239 "Test3"
104 WHITESPACE@[239; 240) " " 104 WHITESPACE@239..240 " "
105 ENUM_VARIANT_LIST@[240; 300) 105 ENUM_VARIANT_LIST@240..300
106 L_CURLY@[240; 241) "{" 106 L_CURLY@240..241 "{"
107 WHITESPACE@[241; 250) "\n " 107 WHITESPACE@241..250 "\n "
108 ENUM_VARIANT@[250; 293) 108 ENUM_VARIANT@250..293
109 NAME@[250; 259) 109 NAME@250..259
110 IDENT@[250; 259) "StillFine" 110 IDENT@250..259 "StillFine"
111 WHITESPACE@[259; 260) " " 111 WHITESPACE@259..260 " "
112 RECORD_FIELD_DEF_LIST@[260; 293) 112 RECORD_FIELD_DEF_LIST@260..293
113 L_CURLY@[260; 261) "{" 113 L_CURLY@260..261 "{"
114 WHITESPACE@[261; 274) "\n " 114 WHITESPACE@261..274 "\n "
115 RECORD_FIELD_DEF@[274; 282) 115 RECORD_FIELD_DEF@274..282
116 NAME@[274; 277) 116 NAME@274..277
117 IDENT@[274; 277) "def" 117 IDENT@274..277 "def"
118 COLON@[277; 278) ":" 118 COLON@277..278 ":"
119 WHITESPACE@[278; 279) " " 119 WHITESPACE@278..279 " "
120 PATH_TYPE@[279; 282) 120 PATH_TYPE@279..282
121 PATH@[279; 282) 121 PATH@279..282
122 PATH_SEGMENT@[279; 282) 122 PATH_SEGMENT@279..282
123 NAME_REF@[279; 282) 123 NAME_REF@279..282
124 IDENT@[279; 282) "i32" 124 IDENT@279..282 "i32"
125 COMMA@[282; 283) "," 125 COMMA@282..283 ","
126 WHITESPACE@[283; 292) "\n " 126 WHITESPACE@283..292 "\n "
127 R_CURLY@[292; 293) "}" 127 R_CURLY@292..293 "}"
128 COMMA@[293; 294) "," 128 COMMA@293..294 ","
129 WHITESPACE@[294; 299) "\n " 129 WHITESPACE@294..299 "\n "
130 R_CURLY@[299; 300) "}" 130 R_CURLY@299..300 "}"
131 WHITESPACE@[300; 306) "\n\n " 131 WHITESPACE@300..306 "\n\n "
132 EXPR_STMT@[306; 459) 132 EXPR_STMT@306..459
133 BLOCK_EXPR@[306; 459) 133 BLOCK_EXPR@306..459
134 BLOCK@[306; 459) 134 BLOCK@306..459
135 L_CURLY@[306; 307) "{" 135 L_CURLY@306..307 "{"
136 WHITESPACE@[307; 316) "\n " 136 WHITESPACE@307..316 "\n "
137 ENUM_DEF@[316; 453) 137 ENUM_DEF@316..453
138 COMMENT@[316; 329) "// fail again" 138 COMMENT@316..329 "// fail again"
139 WHITESPACE@[329; 338) "\n " 139 WHITESPACE@329..338 "\n "
140 ENUM_KW@[338; 342) "enum" 140 ENUM_KW@338..342 "enum"
141 WHITESPACE@[342; 343) " " 141 WHITESPACE@342..343 " "
142 NAME@[343; 348) 142 NAME@343..348
143 IDENT@[343; 348) "Test4" 143 IDENT@343..348 "Test4"
144 WHITESPACE@[348; 349) " " 144 WHITESPACE@348..349 " "
145 ENUM_VARIANT_LIST@[349; 453) 145 ENUM_VARIANT_LIST@349..453
146 L_CURLY@[349; 350) "{" 146 L_CURLY@349..350 "{"
147 WHITESPACE@[350; 363) "\n " 147 WHITESPACE@350..363 "\n "
148 ENUM_VARIANT@[363; 372) 148 ENUM_VARIANT@363..372
149 NAME@[363; 367) 149 NAME@363..367
150 IDENT@[363; 367) "Nope" 150 IDENT@363..367 "Nope"
151 TUPLE_FIELD_DEF_LIST@[367; 372) 151 TUPLE_FIELD_DEF_LIST@367..372
152 L_PAREN@[367; 368) "(" 152 L_PAREN@367..368 "("
153 TUPLE_FIELD_DEF@[368; 371) 153 TUPLE_FIELD_DEF@368..371
154 PATH_TYPE@[368; 371) 154 PATH_TYPE@368..371
155 PATH@[368; 371) 155 PATH@368..371
156 PATH_SEGMENT@[368; 371) 156 PATH_SEGMENT@368..371
157 NAME_REF@[368; 371) 157 NAME_REF@368..371
158 IDENT@[368; 371) "i32" 158 IDENT@368..371 "i32"
159 WHITESPACE@[371; 372) " " 159 WHITESPACE@371..372 " "
160 ERROR@[372; 372) 160 ERROR@372..372
161 ERROR@[372; 374) 161 ERROR@372..374
162 L_CURLY@[372; 373) "{" 162 L_CURLY@372..373 "{"
163 R_CURLY@[373; 374) "}" 163 R_CURLY@373..374 "}"
164 ERROR@[374; 375) 164 ERROR@374..375
165 R_PAREN@[374; 375) ")" 165 R_PAREN@374..375 ")"
166 WHITESPACE@[375; 376) " " 166 WHITESPACE@375..376 " "
167 COMMENT@[376; 396) "//~ ERROR: found `{`" 167 COMMENT@376..396 "//~ ERROR: found `{`"
168 WHITESPACE@[396; 422) "\n ..." 168 WHITESPACE@396..422 "\n ..."
169 COMMENT@[422; 443) "//~^ ERROR: found `{`" 169 COMMENT@422..443 "//~^ ERROR: found `{`"
170 WHITESPACE@[443; 452) "\n " 170 WHITESPACE@443..452 "\n "
171 R_CURLY@[452; 453) "}" 171 R_CURLY@452..453 "}"
172 WHITESPACE@[453; 458) "\n " 172 WHITESPACE@453..458 "\n "
173 R_CURLY@[458; 459) "}" 173 R_CURLY@458..459 "}"
174 WHITESPACE@[459; 464) "\n " 174 WHITESPACE@459..464 "\n "
175 COMMENT@[464; 486) "// still recover later" 175 COMMENT@464..486 "// still recover later"
176 WHITESPACE@[486; 491) "\n " 176 WHITESPACE@486..491 "\n "
177 LET_STMT@[491; 510) 177 LET_STMT@491..510
178 LET_KW@[491; 494) "let" 178 LET_KW@491..494 "let"
179 WHITESPACE@[494; 495) " " 179 WHITESPACE@494..495 " "
180 BIND_PAT@[495; 505) 180 BIND_PAT@495..505
181 NAME@[495; 505) 181 NAME@495..505
182 IDENT@[495; 505) "bad_syntax" 182 IDENT@495..505 "bad_syntax"
183 WHITESPACE@[505; 506) " " 183 WHITESPACE@505..506 " "
184 EQ@[506; 507) "=" 184 EQ@506..507 "="
185 WHITESPACE@[507; 508) " " 185 WHITESPACE@507..508 " "
186 ERROR@[508; 509) 186 ERROR@508..509
187 UNDERSCORE@[508; 509) "_" 187 UNDERSCORE@508..509 "_"
188 SEMICOLON@[509; 510) ";" 188 SEMICOLON@509..510 ";"
189 WHITESPACE@[510; 511) " " 189 WHITESPACE@510..511 " "
190 COMMENT@[511; 572) "//~ ERROR: expected e ..." 190 COMMENT@511..572 "//~ ERROR: expected e ..."
191 WHITESPACE@[572; 573) "\n" 191 WHITESPACE@572..573 "\n"
192 R_CURLY@[573; 574) "}" 192 R_CURLY@573..574 "}"
193 WHITESPACE@[574; 575) "\n" 193 WHITESPACE@574..575 "\n"
194error [95; 95): expected type 194error 95..95: expected type
195error [95; 95): expected COMMA 195error 95..95: expected COMMA
196error [96; 96): expected field 196error 96..96: expected field
197error [98; 98): expected field declaration 197error 98..98: expected field declaration
198error [371; 371): expected COMMA 198error 371..371: expected COMMA
199error [372; 372): expected a type 199error 372..372: expected a type
200error [372; 372): expected R_PAREN 200error 372..372: expected R_PAREN
201error [372; 372): expected COMMA 201error 372..372: expected COMMA
202error [372; 372): expected enum variant 202error 372..372: expected enum variant
203error [374; 374): expected enum variant 203error 374..374: expected enum variant
204error [508; 508): expected expression 204error 508..508: expected expression
diff --git a/crates/ra_syntax/test_data/parser/err/0026_imp_recovery.rast b/crates/ra_syntax/test_data/parser/err/0026_imp_recovery.rast
index f239b7b1e..bf07409fb 100644
--- a/crates/ra_syntax/test_data/parser/err/0026_imp_recovery.rast
+++ b/crates/ra_syntax/test_data/parser/err/0026_imp_recovery.rast
@@ -1,49 +1,49 @@
1SOURCE_FILE@[0; 38) 1SOURCE_FILE@0..38
2 IMPL_DEF@[0; 14) 2 IMPL_DEF@0..14
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 TYPE_PARAM_LIST@[4; 14) 4 TYPE_PARAM_LIST@4..14
5 L_ANGLE@[4; 5) "<" 5 L_ANGLE@4..5 "<"
6 TYPE_PARAM@[5; 13) 6 TYPE_PARAM@5..13
7 NAME@[5; 6) 7 NAME@5..6
8 IDENT@[5; 6) "T" 8 IDENT@5..6 "T"
9 COLON@[6; 7) ":" 9 COLON@6..7 ":"
10 WHITESPACE@[7; 8) " " 10 WHITESPACE@7..8 " "
11 TYPE_BOUND_LIST@[8; 13) 11 TYPE_BOUND_LIST@8..13
12 TYPE_BOUND@[8; 13) 12 TYPE_BOUND@8..13
13 PATH_TYPE@[8; 13) 13 PATH_TYPE@8..13
14 PATH@[8; 13) 14 PATH@8..13
15 PATH_SEGMENT@[8; 13) 15 PATH_SEGMENT@8..13
16 NAME_REF@[8; 13) 16 NAME_REF@8..13
17 IDENT@[8; 13) "Clone" 17 IDENT@8..13 "Clone"
18 R_ANGLE@[13; 14) ">" 18 R_ANGLE@13..14 ">"
19 WHITESPACE@[14; 15) "\n" 19 WHITESPACE@14..15 "\n"
20 IMPL_DEF@[15; 37) 20 IMPL_DEF@15..37
21 IMPL_KW@[15; 19) "impl" 21 IMPL_KW@15..19 "impl"
22 TYPE_PARAM_LIST@[19; 22) 22 TYPE_PARAM_LIST@19..22
23 L_ANGLE@[19; 20) "<" 23 L_ANGLE@19..20 "<"
24 TYPE_PARAM@[20; 21) 24 TYPE_PARAM@20..21
25 NAME@[20; 21) 25 NAME@20..21
26 IDENT@[20; 21) "T" 26 IDENT@20..21 "T"
27 R_ANGLE@[21; 22) ">" 27 R_ANGLE@21..22 ">"
28 WHITESPACE@[22; 23) " " 28 WHITESPACE@22..23 " "
29 PATH_TYPE@[23; 34) 29 PATH_TYPE@23..34
30 PATH@[23; 34) 30 PATH@23..34
31 PATH_SEGMENT@[23; 34) 31 PATH_SEGMENT@23..34
32 NAME_REF@[23; 31) 32 NAME_REF@23..31
33 IDENT@[23; 31) "OnceCell" 33 IDENT@23..31 "OnceCell"
34 TYPE_ARG_LIST@[31; 34) 34 TYPE_ARG_LIST@31..34
35 L_ANGLE@[31; 32) "<" 35 L_ANGLE@31..32 "<"
36 TYPE_ARG@[32; 33) 36 TYPE_ARG@32..33
37 PATH_TYPE@[32; 33) 37 PATH_TYPE@32..33
38 PATH@[32; 33) 38 PATH@32..33
39 PATH_SEGMENT@[32; 33) 39 PATH_SEGMENT@32..33
40 NAME_REF@[32; 33) 40 NAME_REF@32..33
41 IDENT@[32; 33) "T" 41 IDENT@32..33 "T"
42 R_ANGLE@[33; 34) ">" 42 R_ANGLE@33..34 ">"
43 WHITESPACE@[34; 35) " " 43 WHITESPACE@34..35 " "
44 ITEM_LIST@[35; 37) 44 ITEM_LIST@35..37
45 L_CURLY@[35; 36) "{" 45 L_CURLY@35..36 "{"
46 R_CURLY@[36; 37) "}" 46 R_CURLY@36..37 "}"
47 WHITESPACE@[37; 38) "\n" 47 WHITESPACE@37..38 "\n"
48error [14; 14): expected trait or type 48error 14..14: expected trait or type
49error [14; 14): expected `{` 49error 14..14: expected `{`
diff --git a/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast b/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast
index 4a28bcabf..f2fada510 100644
--- a/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast
+++ b/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast
@@ -1,29 +1,29 @@
1SOURCE_FILE@[0; 30) 1SOURCE_FILE@0..30
2 FN_DEF@[0; 29) 2 FN_DEF@0..29
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 13) "\n " 10 WHITESPACE@8..13 "\n "
11 WHERE_CLAUSE@[13; 26) 11 WHERE_CLAUSE@13..26
12 WHERE_KW@[13; 18) "where" 12 WHERE_KW@13..18 "where"
13 WHITESPACE@[18; 19) " " 13 WHITESPACE@18..19 " "
14 WHERE_PRED@[19; 26) 14 WHERE_PRED@19..26
15 FOR_TYPE@[19; 26) 15 FOR_TYPE@19..26
16 FOR_KW@[19; 22) "for" 16 FOR_KW@19..22 "for"
17 TYPE_PARAM_LIST@[22; 26) 17 TYPE_PARAM_LIST@22..26
18 L_ANGLE@[22; 23) "<" 18 L_ANGLE@22..23 "<"
19 LIFETIME_PARAM@[23; 25) 19 LIFETIME_PARAM@23..25
20 LIFETIME@[23; 25) "\'a" 20 LIFETIME@23..25 "\'a"
21 R_ANGLE@[25; 26) ">" 21 R_ANGLE@25..26 ">"
22 WHITESPACE@[26; 27) "\n" 22 WHITESPACE@26..27 "\n"
23 BLOCK_EXPR@[27; 29) 23 BLOCK_EXPR@27..29
24 BLOCK@[27; 29) 24 BLOCK@27..29
25 L_CURLY@[27; 28) "{" 25 L_CURLY@27..28 "{"
26 R_CURLY@[28; 29) "}" 26 R_CURLY@28..29 "}"
27 WHITESPACE@[29; 30) "\n" 27 WHITESPACE@29..30 "\n"
28error [26; 26): expected a path 28error 26..26: expected a path
29error [26; 26): expected colon 29error 26..26: expected colon
diff --git a/crates/ra_syntax/test_data/parser/err/0029_field_completion.rast b/crates/ra_syntax/test_data/parser/err/0029_field_completion.rast
index 177849476..56682f966 100644
--- a/crates/ra_syntax/test_data/parser/err/0029_field_completion.rast
+++ b/crates/ra_syntax/test_data/parser/err/0029_field_completion.rast
@@ -1,36 +1,36 @@
1SOURCE_FILE@[0; 24) 1SOURCE_FILE@0..24
2 FN_DEF@[0; 23) 2 FN_DEF@0..23
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 12) 7 PARAM_LIST@6..12
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 PARAM@[7; 11) 9 PARAM@7..11
10 BIND_PAT@[7; 8) 10 BIND_PAT@7..8
11 NAME@[7; 8) 11 NAME@7..8
12 IDENT@[7; 8) "a" 12 IDENT@7..8 "a"
13 COLON@[8; 9) ":" 13 COLON@8..9 ":"
14 WHITESPACE@[9; 10) " " 14 WHITESPACE@9..10 " "
15 PATH_TYPE@[10; 11) 15 PATH_TYPE@10..11
16 PATH@[10; 11) 16 PATH@10..11
17 PATH_SEGMENT@[10; 11) 17 PATH_SEGMENT@10..11
18 NAME_REF@[10; 11) 18 NAME_REF@10..11
19 IDENT@[10; 11) "A" 19 IDENT@10..11 "A"
20 R_PAREN@[11; 12) ")" 20 R_PAREN@11..12 ")"
21 WHITESPACE@[12; 13) " " 21 WHITESPACE@12..13 " "
22 BLOCK_EXPR@[13; 23) 22 BLOCK_EXPR@13..23
23 BLOCK@[13; 23) 23 BLOCK@13..23
24 L_CURLY@[13; 14) "{" 24 L_CURLY@13..14 "{"
25 WHITESPACE@[14; 19) "\n " 25 WHITESPACE@14..19 "\n "
26 FIELD_EXPR@[19; 21) 26 FIELD_EXPR@19..21
27 PATH_EXPR@[19; 20) 27 PATH_EXPR@19..20
28 PATH@[19; 20) 28 PATH@19..20
29 PATH_SEGMENT@[19; 20) 29 PATH_SEGMENT@19..20
30 NAME_REF@[19; 20) 30 NAME_REF@19..20
31 IDENT@[19; 20) "a" 31 IDENT@19..20 "a"
32 DOT@[20; 21) "." 32 DOT@20..21 "."
33 WHITESPACE@[21; 22) "\n" 33 WHITESPACE@21..22 "\n"
34 R_CURLY@[22; 23) "}" 34 R_CURLY@22..23 "}"
35 WHITESPACE@[23; 24) "\n" 35 WHITESPACE@23..24 "\n"
36error [21; 21): expected field name or number 36error 21..21: expected field name or number
diff --git a/crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast b/crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast
index 00d9fd511..aac476430 100644
--- a/crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast
+++ b/crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast
@@ -1,125 +1,125 @@
1SOURCE_FILE@[0; 350) 1SOURCE_FILE@0..350
2 FN_DEF@[0; 349) 2 FN_DEF@0..349
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 8) 5 NAME@3..8
6 IDENT@[3; 8) "block" 6 IDENT@3..8 "block"
7 PARAM_LIST@[8; 10) 7 PARAM_LIST@8..10
8 L_PAREN@[8; 9) "(" 8 L_PAREN@8..9 "("
9 R_PAREN@[9; 10) ")" 9 R_PAREN@9..10 ")"
10 WHITESPACE@[10; 11) " " 10 WHITESPACE@10..11 " "
11 BLOCK_EXPR@[11; 349) 11 BLOCK_EXPR@11..349
12 BLOCK@[11; 349) 12 BLOCK@11..349
13 L_CURLY@[11; 12) "{" 13 L_CURLY@11..12 "{"
14 WHITESPACE@[12; 17) "\n " 14 WHITESPACE@12..17 "\n "
15 LET_STMT@[17; 129) 15 LET_STMT@17..129
16 LET_KW@[17; 20) "let" 16 LET_KW@17..20 "let"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 BIND_PAT@[21; 26) 18 BIND_PAT@21..26
19 NAME@[21; 26) 19 NAME@21..26
20 IDENT@[21; 26) "inner" 20 IDENT@21..26 "inner"
21 WHITESPACE@[26; 27) " " 21 WHITESPACE@26..27 " "
22 EQ@[27; 28) "=" 22 EQ@27..28 "="
23 WHITESPACE@[28; 29) " " 23 WHITESPACE@28..29 " "
24 BLOCK_EXPR@[29; 128) 24 BLOCK_EXPR@29..128
25 BLOCK@[29; 128) 25 BLOCK@29..128
26 L_CURLY@[29; 30) "{" 26 L_CURLY@29..30 "{"
27 WHITESPACE@[30; 39) "\n " 27 WHITESPACE@30..39 "\n "
28 ATTR@[39; 83) 28 ATTR@39..83
29 POUND@[39; 40) "#" 29 POUND@39..40 "#"
30 BANG@[40; 41) "!" 30 BANG@40..41 "!"
31 L_BRACK@[41; 42) "[" 31 L_BRACK@41..42 "["
32 PATH@[42; 45) 32 PATH@42..45
33 PATH_SEGMENT@[42; 45) 33 PATH_SEGMENT@42..45
34 NAME_REF@[42; 45) 34 NAME_REF@42..45
35 IDENT@[42; 45) "doc" 35 IDENT@42..45 "doc"
36 TOKEN_TREE@[45; 82) 36 TOKEN_TREE@45..82
37 L_PAREN@[45; 46) "(" 37 L_PAREN@45..46 "("
38 STRING@[46; 81) "\"Inner attributes not ..." 38 STRING@46..81 "\"Inner attributes not ..."
39 R_PAREN@[81; 82) ")" 39 R_PAREN@81..82 ")"
40 R_BRACK@[82; 83) "]" 40 R_BRACK@82..83 "]"
41 WHITESPACE@[83; 92) "\n " 41 WHITESPACE@83..92 "\n "
42 COMMENT@[92; 122) "//! Nor are ModuleDoc ..." 42 COMMENT@92..122 "//! Nor are ModuleDoc ..."
43 WHITESPACE@[122; 127) "\n " 43 WHITESPACE@122..127 "\n "
44 R_CURLY@[127; 128) "}" 44 R_CURLY@127..128 "}"
45 SEMICOLON@[128; 129) ";" 45 SEMICOLON@128..129 ";"
46 WHITESPACE@[129; 134) "\n " 46 WHITESPACE@129..134 "\n "
47 EXPR_STMT@[134; 257) 47 EXPR_STMT@134..257
48 IF_EXPR@[134; 257) 48 IF_EXPR@134..257
49 IF_KW@[134; 136) "if" 49 IF_KW@134..136 "if"
50 WHITESPACE@[136; 137) " " 50 WHITESPACE@136..137 " "
51 CONDITION@[137; 141) 51 CONDITION@137..141
52 LITERAL@[137; 141) 52 LITERAL@137..141
53 TRUE_KW@[137; 141) "true" 53 TRUE_KW@137..141 "true"
54 WHITESPACE@[141; 142) " " 54 WHITESPACE@141..142 " "
55 BLOCK_EXPR@[142; 257) 55 BLOCK_EXPR@142..257
56 BLOCK@[142; 257) 56 BLOCK@142..257
57 L_CURLY@[142; 143) "{" 57 L_CURLY@142..143 "{"
58 WHITESPACE@[143; 152) "\n " 58 WHITESPACE@143..152 "\n "
59 ATTR@[152; 171) 59 ATTR@152..171
60 POUND@[152; 153) "#" 60 POUND@152..153 "#"
61 BANG@[153; 154) "!" 61 BANG@153..154 "!"
62 L_BRACK@[154; 155) "[" 62 L_BRACK@154..155 "["
63 PATH@[155; 158) 63 PATH@155..158
64 PATH_SEGMENT@[155; 158) 64 PATH_SEGMENT@155..158
65 NAME_REF@[155; 158) 65 NAME_REF@155..158
66 IDENT@[155; 158) "doc" 66 IDENT@155..158 "doc"
67 TOKEN_TREE@[158; 170) 67 TOKEN_TREE@158..170
68 L_PAREN@[158; 159) "(" 68 L_PAREN@158..159 "("
69 STRING@[159; 169) "\"Nor here\"" 69 STRING@159..169 "\"Nor here\""
70 R_PAREN@[169; 170) ")" 70 R_PAREN@169..170 ")"
71 R_BRACK@[170; 171) "]" 71 R_BRACK@170..171 "]"
72 WHITESPACE@[171; 180) "\n " 72 WHITESPACE@171..180 "\n "
73 ATTR@[180; 212) 73 ATTR@180..212
74 POUND@[180; 181) "#" 74 POUND@180..181 "#"
75 BANG@[181; 182) "!" 75 BANG@181..182 "!"
76 L_BRACK@[182; 183) "[" 76 L_BRACK@182..183 "["
77 PATH@[183; 186) 77 PATH@183..186
78 PATH_SEGMENT@[183; 186) 78 PATH_SEGMENT@183..186
79 NAME_REF@[183; 186) 79 NAME_REF@183..186
80 IDENT@[183; 186) "doc" 80 IDENT@183..186 "doc"
81 TOKEN_TREE@[186; 211) 81 TOKEN_TREE@186..211
82 L_PAREN@[186; 187) "(" 82 L_PAREN@186..187 "("
83 STRING@[187; 210) "\"We error on each attr\"" 83 STRING@187..210 "\"We error on each attr\""
84 R_PAREN@[210; 211) ")" 84 R_PAREN@210..211 ")"
85 R_BRACK@[211; 212) "]" 85 R_BRACK@211..212 "]"
86 WHITESPACE@[212; 221) "\n " 86 WHITESPACE@212..221 "\n "
87 COMMENT@[221; 251) "//! Nor are ModuleDoc ..." 87 COMMENT@221..251 "//! Nor are ModuleDoc ..."
88 WHITESPACE@[251; 256) "\n " 88 WHITESPACE@251..256 "\n "
89 R_CURLY@[256; 257) "}" 89 R_CURLY@256..257 "}"
90 WHITESPACE@[257; 262) "\n " 90 WHITESPACE@257..262 "\n "
91 WHILE_EXPR@[262; 347) 91 WHILE_EXPR@262..347
92 WHILE_KW@[262; 267) "while" 92 WHILE_KW@262..267 "while"
93 WHITESPACE@[267; 268) " " 93 WHITESPACE@267..268 " "
94 CONDITION@[268; 272) 94 CONDITION@268..272
95 LITERAL@[268; 272) 95 LITERAL@268..272
96 TRUE_KW@[268; 272) "true" 96 TRUE_KW@268..272 "true"
97 WHITESPACE@[272; 273) " " 97 WHITESPACE@272..273 " "
98 BLOCK_EXPR@[273; 347) 98 BLOCK_EXPR@273..347
99 BLOCK@[273; 347) 99 BLOCK@273..347
100 L_CURLY@[273; 274) "{" 100 L_CURLY@273..274 "{"
101 WHITESPACE@[274; 283) "\n " 101 WHITESPACE@274..283 "\n "
102 ATTR@[283; 302) 102 ATTR@283..302
103 POUND@[283; 284) "#" 103 POUND@283..284 "#"
104 BANG@[284; 285) "!" 104 BANG@284..285 "!"
105 L_BRACK@[285; 286) "[" 105 L_BRACK@285..286 "["
106 PATH@[286; 289) 106 PATH@286..289
107 PATH_SEGMENT@[286; 289) 107 PATH_SEGMENT@286..289
108 NAME_REF@[286; 289) 108 NAME_REF@286..289
109 IDENT@[286; 289) "doc" 109 IDENT@286..289 "doc"
110 TOKEN_TREE@[289; 301) 110 TOKEN_TREE@289..301
111 L_PAREN@[289; 290) "(" 111 L_PAREN@289..290 "("
112 STRING@[290; 300) "\"Nor here\"" 112 STRING@290..300 "\"Nor here\""
113 R_PAREN@[300; 301) ")" 113 R_PAREN@300..301 ")"
114 R_BRACK@[301; 302) "]" 114 R_BRACK@301..302 "]"
115 WHITESPACE@[302; 311) "\n " 115 WHITESPACE@302..311 "\n "
116 COMMENT@[311; 341) "//! Nor are ModuleDoc ..." 116 COMMENT@311..341 "//! Nor are ModuleDoc ..."
117 WHITESPACE@[341; 346) "\n " 117 WHITESPACE@341..346 "\n "
118 R_CURLY@[346; 347) "}" 118 R_CURLY@346..347 "}"
119 WHITESPACE@[347; 348) "\n" 119 WHITESPACE@347..348 "\n"
120 R_CURLY@[348; 349) "}" 120 R_CURLY@348..349 "}"
121 WHITESPACE@[349; 350) "\n" 121 WHITESPACE@349..350 "\n"
122error [39; 83): A block in this position cannot accept inner attributes 122error 39..83: A block in this position cannot accept inner attributes
123error [152; 171): A block in this position cannot accept inner attributes 123error 152..171: A block in this position cannot accept inner attributes
124error [180; 212): A block in this position cannot accept inner attributes 124error 180..212: A block in this position cannot accept inner attributes
125error [283; 302): A block in this position cannot accept inner attributes 125error 283..302: A block in this position cannot accept inner attributes
diff --git a/crates/ra_syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast b/crates/ra_syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast
index b80101e60..f98de7f15 100644
--- a/crates/ra_syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast
+++ b/crates/ra_syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast
@@ -1,204 +1,204 @@
1SOURCE_FILE@[0; 293) 1SOURCE_FILE@0..293
2 FN_DEF@[0; 292) 2 FN_DEF@0..292
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 292) 11 BLOCK_EXPR@9..292
12 BLOCK@[9; 292) 12 BLOCK@9..292
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 101) 15 EXPR_STMT@15..101
16 MATCH_EXPR@[15; 101) 16 MATCH_EXPR@15..101
17 MATCH_KW@[15; 20) "match" 17 MATCH_KW@15..20 "match"
18 WHITESPACE@[20; 21) " " 18 WHITESPACE@20..21 " "
19 TUPLE_EXPR@[21; 23) 19 TUPLE_EXPR@21..23
20 L_PAREN@[21; 22) "(" 20 L_PAREN@21..22 "("
21 R_PAREN@[22; 23) ")" 21 R_PAREN@22..23 ")"
22 WHITESPACE@[23; 24) " " 22 WHITESPACE@23..24 " "
23 MATCH_ARM_LIST@[24; 101) 23 MATCH_ARM_LIST@24..101
24 L_CURLY@[24; 25) "{" 24 L_CURLY@24..25 "{"
25 WHITESPACE@[25; 34) "\n " 25 WHITESPACE@25..34 "\n "
26 MATCH_ARM@[34; 41) 26 MATCH_ARM@34..41
27 PLACEHOLDER_PAT@[34; 35) 27 PLACEHOLDER_PAT@34..35
28 UNDERSCORE@[34; 35) "_" 28 UNDERSCORE@34..35 "_"
29 WHITESPACE@[35; 36) " " 29 WHITESPACE@35..36 " "
30 FAT_ARROW@[36; 38) "=>" 30 FAT_ARROW@36..38 "=>"
31 WHITESPACE@[38; 39) " " 31 WHITESPACE@38..39 " "
32 TUPLE_EXPR@[39; 41) 32 TUPLE_EXPR@39..41
33 L_PAREN@[39; 40) "(" 33 L_PAREN@39..40 "("
34 R_PAREN@[40; 41) ")" 34 R_PAREN@40..41 ")"
35 COMMA@[41; 42) "," 35 COMMA@41..42 ","
36 WHITESPACE@[42; 51) "\n " 36 WHITESPACE@42..51 "\n "
37 MATCH_ARM@[51; 78) 37 MATCH_ARM@51..78
38 ATTR@[51; 52) 38 ATTR@51..52
39 POUND@[51; 52) "#" 39 POUND@51..52 "#"
40 ERROR@[52; 53) 40 ERROR@52..53
41 BANG@[52; 53) "!" 41 BANG@52..53 "!"
42 ARRAY_EXPR@[53; 78) 42 ARRAY_EXPR@53..78
43 L_BRACK@[53; 54) "[" 43 L_BRACK@53..54 "["
44 CALL_EXPR@[54; 77) 44 CALL_EXPR@54..77
45 PATH_EXPR@[54; 57) 45 PATH_EXPR@54..57
46 PATH@[54; 57) 46 PATH@54..57
47 PATH_SEGMENT@[54; 57) 47 PATH_SEGMENT@54..57
48 NAME_REF@[54; 57) 48 NAME_REF@54..57
49 IDENT@[54; 57) "doc" 49 IDENT@54..57 "doc"
50 ARG_LIST@[57; 77) 50 ARG_LIST@57..77
51 L_PAREN@[57; 58) "(" 51 L_PAREN@57..58 "("
52 LITERAL@[58; 76) 52 LITERAL@58..76
53 STRING@[58; 76) "\"Not allowed here\"" 53 STRING@58..76 "\"Not allowed here\""
54 R_PAREN@[76; 77) ")" 54 R_PAREN@76..77 ")"
55 R_BRACK@[77; 78) "]" 55 R_BRACK@77..78 "]"
56 WHITESPACE@[78; 87) "\n " 56 WHITESPACE@78..87 "\n "
57 MATCH_ARM@[87; 94) 57 MATCH_ARM@87..94
58 PLACEHOLDER_PAT@[87; 88) 58 PLACEHOLDER_PAT@87..88
59 UNDERSCORE@[87; 88) "_" 59 UNDERSCORE@87..88 "_"
60 WHITESPACE@[88; 89) " " 60 WHITESPACE@88..89 " "
61 FAT_ARROW@[89; 91) "=>" 61 FAT_ARROW@89..91 "=>"
62 WHITESPACE@[91; 92) " " 62 WHITESPACE@91..92 " "
63 TUPLE_EXPR@[92; 94) 63 TUPLE_EXPR@92..94
64 L_PAREN@[92; 93) "(" 64 L_PAREN@92..93 "("
65 R_PAREN@[93; 94) ")" 65 R_PAREN@93..94 ")"
66 COMMA@[94; 95) "," 66 COMMA@94..95 ","
67 WHITESPACE@[95; 100) "\n " 67 WHITESPACE@95..100 "\n "
68 R_CURLY@[100; 101) "}" 68 R_CURLY@100..101 "}"
69 WHITESPACE@[101; 107) "\n\n " 69 WHITESPACE@101..107 "\n\n "
70 EXPR_STMT@[107; 185) 70 EXPR_STMT@107..185
71 MATCH_EXPR@[107; 185) 71 MATCH_EXPR@107..185
72 MATCH_KW@[107; 112) "match" 72 MATCH_KW@107..112 "match"
73 WHITESPACE@[112; 113) " " 73 WHITESPACE@112..113 " "
74 TUPLE_EXPR@[113; 115) 74 TUPLE_EXPR@113..115
75 L_PAREN@[113; 114) "(" 75 L_PAREN@113..114 "("
76 R_PAREN@[114; 115) ")" 76 R_PAREN@114..115 ")"
77 WHITESPACE@[115; 116) " " 77 WHITESPACE@115..116 " "
78 MATCH_ARM_LIST@[116; 185) 78 MATCH_ARM_LIST@116..185
79 L_CURLY@[116; 117) "{" 79 L_CURLY@116..117 "{"
80 WHITESPACE@[117; 126) "\n " 80 WHITESPACE@117..126 "\n "
81 MATCH_ARM@[126; 133) 81 MATCH_ARM@126..133
82 PLACEHOLDER_PAT@[126; 127) 82 PLACEHOLDER_PAT@126..127
83 UNDERSCORE@[126; 127) "_" 83 UNDERSCORE@126..127 "_"
84 WHITESPACE@[127; 128) " " 84 WHITESPACE@127..128 " "
85 FAT_ARROW@[128; 130) "=>" 85 FAT_ARROW@128..130 "=>"
86 WHITESPACE@[130; 131) " " 86 WHITESPACE@130..131 " "
87 TUPLE_EXPR@[131; 133) 87 TUPLE_EXPR@131..133
88 L_PAREN@[131; 132) "(" 88 L_PAREN@131..132 "("
89 R_PAREN@[132; 133) ")" 89 R_PAREN@132..133 ")"
90 COMMA@[133; 134) "," 90 COMMA@133..134 ","
91 WHITESPACE@[134; 143) "\n " 91 WHITESPACE@134..143 "\n "
92 MATCH_ARM@[143; 150) 92 MATCH_ARM@143..150
93 PLACEHOLDER_PAT@[143; 144) 93 PLACEHOLDER_PAT@143..144
94 UNDERSCORE@[143; 144) "_" 94 UNDERSCORE@143..144 "_"
95 WHITESPACE@[144; 145) " " 95 WHITESPACE@144..145 " "
96 FAT_ARROW@[145; 147) "=>" 96 FAT_ARROW@145..147 "=>"
97 WHITESPACE@[147; 148) " " 97 WHITESPACE@147..148 " "
98 TUPLE_EXPR@[148; 150) 98 TUPLE_EXPR@148..150
99 L_PAREN@[148; 149) "(" 99 L_PAREN@148..149 "("
100 R_PAREN@[149; 150) ")" 100 R_PAREN@149..150 ")"
101 COMMA@[150; 151) "," 101 COMMA@150..151 ","
102 WHITESPACE@[151; 160) "\n " 102 WHITESPACE@151..160 "\n "
103 MATCH_ARM@[160; 179) 103 MATCH_ARM@160..179
104 ATTR@[160; 161) 104 ATTR@160..161
105 POUND@[160; 161) "#" 105 POUND@160..161 "#"
106 ERROR@[161; 162) 106 ERROR@161..162
107 BANG@[161; 162) "!" 107 BANG@161..162 "!"
108 ARRAY_EXPR@[162; 179) 108 ARRAY_EXPR@162..179
109 L_BRACK@[162; 163) "[" 109 L_BRACK@162..163 "["
110 CALL_EXPR@[163; 178) 110 CALL_EXPR@163..178
111 PATH_EXPR@[163; 166) 111 PATH_EXPR@163..166
112 PATH@[163; 166) 112 PATH@163..166
113 PATH_SEGMENT@[163; 166) 113 PATH_SEGMENT@163..166
114 NAME_REF@[163; 166) 114 NAME_REF@163..166
115 IDENT@[163; 166) "doc" 115 IDENT@163..166 "doc"
116 ARG_LIST@[166; 178) 116 ARG_LIST@166..178
117 L_PAREN@[166; 167) "(" 117 L_PAREN@166..167 "("
118 LITERAL@[167; 177) 118 LITERAL@167..177
119 STRING@[167; 177) "\"Nor here\"" 119 STRING@167..177 "\"Nor here\""
120 R_PAREN@[177; 178) ")" 120 R_PAREN@177..178 ")"
121 R_BRACK@[178; 179) "]" 121 R_BRACK@178..179 "]"
122 WHITESPACE@[179; 184) "\n " 122 WHITESPACE@179..184 "\n "
123 R_CURLY@[184; 185) "}" 123 R_CURLY@184..185 "}"
124 WHITESPACE@[185; 191) "\n\n " 124 WHITESPACE@185..191 "\n\n "
125 MATCH_EXPR@[191; 290) 125 MATCH_EXPR@191..290
126 MATCH_KW@[191; 196) "match" 126 MATCH_KW@191..196 "match"
127 WHITESPACE@[196; 197) " " 127 WHITESPACE@196..197 " "
128 TUPLE_EXPR@[197; 199) 128 TUPLE_EXPR@197..199
129 L_PAREN@[197; 198) "(" 129 L_PAREN@197..198 "("
130 R_PAREN@[198; 199) ")" 130 R_PAREN@198..199 ")"
131 WHITESPACE@[199; 200) " " 131 WHITESPACE@199..200 " "
132 MATCH_ARM_LIST@[200; 290) 132 MATCH_ARM_LIST@200..290
133 L_CURLY@[200; 201) "{" 133 L_CURLY@200..201 "{"
134 WHITESPACE@[201; 210) "\n " 134 WHITESPACE@201..210 "\n "
135 MATCH_ARM@[210; 250) 135 MATCH_ARM@210..250
136 ATTR@[210; 222) 136 ATTR@210..222
137 POUND@[210; 211) "#" 137 POUND@210..211 "#"
138 L_BRACK@[211; 212) "[" 138 L_BRACK@211..212 "["
139 PATH@[212; 215) 139 PATH@212..215
140 PATH_SEGMENT@[212; 215) 140 PATH_SEGMENT@212..215
141 NAME_REF@[212; 215) 141 NAME_REF@212..215
142 IDENT@[212; 215) "cfg" 142 IDENT@212..215 "cfg"
143 TOKEN_TREE@[215; 221) 143 TOKEN_TREE@215..221
144 L_PAREN@[215; 216) "(" 144 L_PAREN@215..216 "("
145 IDENT@[216; 220) "test" 145 IDENT@216..220 "test"
146 R_PAREN@[220; 221) ")" 146 R_PAREN@220..221 ")"
147 R_BRACK@[221; 222) "]" 147 R_BRACK@221..222 "]"
148 WHITESPACE@[222; 231) "\n " 148 WHITESPACE@222..231 "\n "
149 ATTR@[231; 232) 149 ATTR@231..232
150 POUND@[231; 232) "#" 150 POUND@231..232 "#"
151 ERROR@[232; 233) 151 ERROR@232..233
152 BANG@[232; 233) "!" 152 BANG@232..233 "!"
153 ARRAY_EXPR@[233; 250) 153 ARRAY_EXPR@233..250
154 L_BRACK@[233; 234) "[" 154 L_BRACK@233..234 "["
155 CALL_EXPR@[234; 249) 155 CALL_EXPR@234..249
156 PATH_EXPR@[234; 237) 156 PATH_EXPR@234..237
157 PATH@[234; 237) 157 PATH@234..237
158 PATH_SEGMENT@[234; 237) 158 PATH_SEGMENT@234..237
159 NAME_REF@[234; 237) 159 NAME_REF@234..237
160 IDENT@[234; 237) "doc" 160 IDENT@234..237 "doc"
161 ARG_LIST@[237; 249) 161 ARG_LIST@237..249
162 L_PAREN@[237; 238) "(" 162 L_PAREN@237..238 "("
163 LITERAL@[238; 248) 163 LITERAL@238..248
164 STRING@[238; 248) "\"Nor here\"" 164 STRING@238..248 "\"Nor here\""
165 R_PAREN@[248; 249) ")" 165 R_PAREN@248..249 ")"
166 R_BRACK@[249; 250) "]" 166 R_BRACK@249..250 "]"
167 WHITESPACE@[250; 259) "\n " 167 WHITESPACE@250..259 "\n "
168 MATCH_ARM@[259; 266) 168 MATCH_ARM@259..266
169 PLACEHOLDER_PAT@[259; 260) 169 PLACEHOLDER_PAT@259..260
170 UNDERSCORE@[259; 260) "_" 170 UNDERSCORE@259..260 "_"
171 WHITESPACE@[260; 261) " " 171 WHITESPACE@260..261 " "
172 FAT_ARROW@[261; 263) "=>" 172 FAT_ARROW@261..263 "=>"
173 WHITESPACE@[263; 264) " " 173 WHITESPACE@263..264 " "
174 TUPLE_EXPR@[264; 266) 174 TUPLE_EXPR@264..266
175 L_PAREN@[264; 265) "(" 175 L_PAREN@264..265 "("
176 R_PAREN@[265; 266) ")" 176 R_PAREN@265..266 ")"
177 COMMA@[266; 267) "," 177 COMMA@266..267 ","
178 WHITESPACE@[267; 276) "\n " 178 WHITESPACE@267..276 "\n "
179 MATCH_ARM@[276; 283) 179 MATCH_ARM@276..283
180 PLACEHOLDER_PAT@[276; 277) 180 PLACEHOLDER_PAT@276..277
181 UNDERSCORE@[276; 277) "_" 181 UNDERSCORE@276..277 "_"
182 WHITESPACE@[277; 278) " " 182 WHITESPACE@277..278 " "
183 FAT_ARROW@[278; 280) "=>" 183 FAT_ARROW@278..280 "=>"
184 WHITESPACE@[280; 281) " " 184 WHITESPACE@280..281 " "
185 TUPLE_EXPR@[281; 283) 185 TUPLE_EXPR@281..283
186 L_PAREN@[281; 282) "(" 186 L_PAREN@281..282 "("
187 R_PAREN@[282; 283) ")" 187 R_PAREN@282..283 ")"
188 COMMA@[283; 284) "," 188 COMMA@283..284 ","
189 WHITESPACE@[284; 289) "\n " 189 WHITESPACE@284..289 "\n "
190 R_CURLY@[289; 290) "}" 190 R_CURLY@289..290 "}"
191 WHITESPACE@[290; 291) "\n" 191 WHITESPACE@290..291 "\n"
192 R_CURLY@[291; 292) "}" 192 R_CURLY@291..292 "}"
193 WHITESPACE@[292; 293) "\n" 193 WHITESPACE@292..293 "\n"
194error [52; 52): expected `[` 194error 52..52: expected `[`
195error [52; 52): expected pattern 195error 52..52: expected pattern
196error [53; 53): expected FAT_ARROW 196error 53..53: expected FAT_ARROW
197error [78; 78): expected COMMA 197error 78..78: expected COMMA
198error [161; 161): expected `[` 198error 161..161: expected `[`
199error [161; 161): expected pattern 199error 161..161: expected pattern
200error [162; 162): expected FAT_ARROW 200error 162..162: expected FAT_ARROW
201error [232; 232): expected `[` 201error 232..232: expected `[`
202error [232; 232): expected pattern 202error 232..232: expected pattern
203error [233; 233): expected FAT_ARROW 203error 233..233: expected FAT_ARROW
204error [250; 250): expected COMMA 204error 250..250: expected COMMA
diff --git a/crates/ra_syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast b/crates/ra_syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast
index e914e688b..d0017c883 100644
--- a/crates/ra_syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast
+++ b/crates/ra_syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast
@@ -1,67 +1,67 @@
1SOURCE_FILE@[0; 89) 1SOURCE_FILE@0..89
2 FN_DEF@[0; 88) 2 FN_DEF@0..88
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 88) 11 BLOCK_EXPR@9..88
12 BLOCK@[9; 88) 12 BLOCK@9..88
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 MATCH_EXPR@[15; 86) 15 MATCH_EXPR@15..86
16 MATCH_KW@[15; 20) "match" 16 MATCH_KW@15..20 "match"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 TUPLE_EXPR@[21; 23) 18 TUPLE_EXPR@21..23
19 L_PAREN@[21; 22) "(" 19 L_PAREN@21..22 "("
20 R_PAREN@[22; 23) ")" 20 R_PAREN@22..23 ")"
21 WHITESPACE@[23; 24) " " 21 WHITESPACE@23..24 " "
22 MATCH_ARM_LIST@[24; 86) 22 MATCH_ARM_LIST@24..86
23 L_CURLY@[24; 25) "{" 23 L_CURLY@24..25 "{"
24 WHITESPACE@[25; 34) "\n " 24 WHITESPACE@25..34 "\n "
25 MATCH_ARM@[34; 41) 25 MATCH_ARM@34..41
26 PLACEHOLDER_PAT@[34; 35) 26 PLACEHOLDER_PAT@34..35
27 UNDERSCORE@[34; 35) "_" 27 UNDERSCORE@34..35 "_"
28 WHITESPACE@[35; 36) " " 28 WHITESPACE@35..36 " "
29 FAT_ARROW@[36; 38) "=>" 29 FAT_ARROW@36..38 "=>"
30 WHITESPACE@[38; 39) " " 30 WHITESPACE@38..39 " "
31 TUPLE_EXPR@[39; 41) 31 TUPLE_EXPR@39..41
32 L_PAREN@[39; 40) "(" 32 L_PAREN@39..40 "("
33 R_PAREN@[40; 41) ")" 33 R_PAREN@40..41 ")"
34 COMMA@[41; 42) "," 34 COMMA@41..42 ","
35 WHITESPACE@[42; 51) "\n " 35 WHITESPACE@42..51 "\n "
36 MATCH_ARM@[51; 58) 36 MATCH_ARM@51..58
37 PLACEHOLDER_PAT@[51; 52) 37 PLACEHOLDER_PAT@51..52
38 UNDERSCORE@[51; 52) "_" 38 UNDERSCORE@51..52 "_"
39 WHITESPACE@[52; 53) " " 39 WHITESPACE@52..53 " "
40 FAT_ARROW@[53; 55) "=>" 40 FAT_ARROW@53..55 "=>"
41 WHITESPACE@[55; 56) " " 41 WHITESPACE@55..56 " "
42 TUPLE_EXPR@[56; 58) 42 TUPLE_EXPR@56..58
43 L_PAREN@[56; 57) "(" 43 L_PAREN@56..57 "("
44 R_PAREN@[57; 58) ")" 44 R_PAREN@57..58 ")"
45 COMMA@[58; 59) "," 45 COMMA@58..59 ","
46 WHITESPACE@[59; 68) "\n " 46 WHITESPACE@59..68 "\n "
47 MATCH_ARM@[68; 80) 47 MATCH_ARM@68..80
48 ATTR@[68; 80) 48 ATTR@68..80
49 POUND@[68; 69) "#" 49 POUND@68..69 "#"
50 L_BRACK@[69; 70) "[" 50 L_BRACK@69..70 "["
51 PATH@[70; 73) 51 PATH@70..73
52 PATH_SEGMENT@[70; 73) 52 PATH_SEGMENT@70..73
53 NAME_REF@[70; 73) 53 NAME_REF@70..73
54 IDENT@[70; 73) "cfg" 54 IDENT@70..73 "cfg"
55 TOKEN_TREE@[73; 79) 55 TOKEN_TREE@73..79
56 L_PAREN@[73; 74) "(" 56 L_PAREN@73..74 "("
57 IDENT@[74; 78) "test" 57 IDENT@74..78 "test"
58 R_PAREN@[78; 79) ")" 58 R_PAREN@78..79 ")"
59 R_BRACK@[79; 80) "]" 59 R_BRACK@79..80 "]"
60 WHITESPACE@[80; 85) "\n " 60 WHITESPACE@80..85 "\n "
61 R_CURLY@[85; 86) "}" 61 R_CURLY@85..86 "}"
62 WHITESPACE@[86; 87) "\n" 62 WHITESPACE@86..87 "\n"
63 R_CURLY@[87; 88) "}" 63 R_CURLY@87..88 "}"
64 WHITESPACE@[88; 89) "\n" 64 WHITESPACE@88..89 "\n"
65error [80; 80): expected pattern 65error 80..80: expected pattern
66error [80; 80): expected FAT_ARROW 66error 80..80: expected FAT_ARROW
67error [80; 80): expected expression 67error 80..80: expected expression
diff --git a/crates/ra_syntax/test_data/parser/err/0034_bad_box_pattern.rast b/crates/ra_syntax/test_data/parser/err/0034_bad_box_pattern.rast
index 2ab9ee56f..2c0bddec8 100644
--- a/crates/ra_syntax/test_data/parser/err/0034_bad_box_pattern.rast
+++ b/crates/ra_syntax/test_data/parser/err/0034_bad_box_pattern.rast
@@ -1,96 +1,96 @@
1SOURCE_FILE@[0; 91) 1SOURCE_FILE@0..91
2 FN_DEF@[0; 89) 2 FN_DEF@0..89
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 89) 11 BLOCK_EXPR@10..89
12 BLOCK@[10; 89) 12 BLOCK@10..89
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 LET_STMT@[16; 27) 15 LET_STMT@16..27
16 LET_KW@[16; 19) "let" 16 LET_KW@16..19 "let"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 BIND_PAT@[20; 27) 18 BIND_PAT@20..27
19 REF_KW@[20; 23) "ref" 19 REF_KW@20..23 "ref"
20 WHITESPACE@[23; 24) " " 20 WHITESPACE@23..24 " "
21 ERROR@[24; 27) 21 ERROR@24..27
22 BOX_KW@[24; 27) "box" 22 BOX_KW@24..27 "box"
23 WHITESPACE@[27; 28) " " 23 WHITESPACE@27..28 " "
24 EXPR_STMT@[28; 35) 24 EXPR_STMT@28..35
25 BIN_EXPR@[28; 34) 25 BIN_EXPR@28..34
26 PATH_EXPR@[28; 29) 26 PATH_EXPR@28..29
27 PATH@[28; 29) 27 PATH@28..29
28 PATH_SEGMENT@[28; 29) 28 PATH_SEGMENT@28..29
29 NAME_REF@[28; 29) 29 NAME_REF@28..29
30 IDENT@[28; 29) "i" 30 IDENT@28..29 "i"
31 WHITESPACE@[29; 30) " " 31 WHITESPACE@29..30 " "
32 EQ@[30; 31) "=" 32 EQ@30..31 "="
33 WHITESPACE@[31; 32) " " 33 WHITESPACE@31..32 " "
34 TUPLE_EXPR@[32; 34) 34 TUPLE_EXPR@32..34
35 L_PAREN@[32; 33) "(" 35 L_PAREN@32..33 "("
36 R_PAREN@[33; 34) ")" 36 R_PAREN@33..34 ")"
37 SEMICOLON@[34; 35) ";" 37 SEMICOLON@34..35 ";"
38 WHITESPACE@[35; 40) "\n " 38 WHITESPACE@35..40 "\n "
39 LET_STMT@[40; 51) 39 LET_STMT@40..51
40 LET_KW@[40; 43) "let" 40 LET_KW@40..43 "let"
41 WHITESPACE@[43; 44) " " 41 WHITESPACE@43..44 " "
42 BIND_PAT@[44; 51) 42 BIND_PAT@44..51
43 MUT_KW@[44; 47) "mut" 43 MUT_KW@44..47 "mut"
44 WHITESPACE@[47; 48) " " 44 WHITESPACE@47..48 " "
45 ERROR@[48; 51) 45 ERROR@48..51
46 BOX_KW@[48; 51) "box" 46 BOX_KW@48..51 "box"
47 WHITESPACE@[51; 52) " " 47 WHITESPACE@51..52 " "
48 EXPR_STMT@[52; 59) 48 EXPR_STMT@52..59
49 BIN_EXPR@[52; 58) 49 BIN_EXPR@52..58
50 PATH_EXPR@[52; 53) 50 PATH_EXPR@52..53
51 PATH@[52; 53) 51 PATH@52..53
52 PATH_SEGMENT@[52; 53) 52 PATH_SEGMENT@52..53
53 NAME_REF@[52; 53) 53 NAME_REF@52..53
54 IDENT@[52; 53) "i" 54 IDENT@52..53 "i"
55 WHITESPACE@[53; 54) " " 55 WHITESPACE@53..54 " "
56 EQ@[54; 55) "=" 56 EQ@54..55 "="
57 WHITESPACE@[55; 56) " " 57 WHITESPACE@55..56 " "
58 TUPLE_EXPR@[56; 58) 58 TUPLE_EXPR@56..58
59 L_PAREN@[56; 57) "(" 59 L_PAREN@56..57 "("
60 R_PAREN@[57; 58) ")" 60 R_PAREN@57..58 ")"
61 SEMICOLON@[58; 59) ";" 61 SEMICOLON@58..59 ";"
62 WHITESPACE@[59; 64) "\n " 62 WHITESPACE@59..64 "\n "
63 LET_STMT@[64; 79) 63 LET_STMT@64..79
64 LET_KW@[64; 67) "let" 64 LET_KW@64..67 "let"
65 WHITESPACE@[67; 68) " " 65 WHITESPACE@67..68 " "
66 BIND_PAT@[68; 79) 66 BIND_PAT@68..79
67 REF_KW@[68; 71) "ref" 67 REF_KW@68..71 "ref"
68 WHITESPACE@[71; 72) " " 68 WHITESPACE@71..72 " "
69 MUT_KW@[72; 75) "mut" 69 MUT_KW@72..75 "mut"
70 WHITESPACE@[75; 76) " " 70 WHITESPACE@75..76 " "
71 ERROR@[76; 79) 71 ERROR@76..79
72 BOX_KW@[76; 79) "box" 72 BOX_KW@76..79 "box"
73 WHITESPACE@[79; 80) " " 73 WHITESPACE@79..80 " "
74 EXPR_STMT@[80; 87) 74 EXPR_STMT@80..87
75 BIN_EXPR@[80; 86) 75 BIN_EXPR@80..86
76 PATH_EXPR@[80; 81) 76 PATH_EXPR@80..81
77 PATH@[80; 81) 77 PATH@80..81
78 PATH_SEGMENT@[80; 81) 78 PATH_SEGMENT@80..81
79 NAME_REF@[80; 81) 79 NAME_REF@80..81
80 IDENT@[80; 81) "i" 80 IDENT@80..81 "i"
81 WHITESPACE@[81; 82) " " 81 WHITESPACE@81..82 " "
82 EQ@[82; 83) "=" 82 EQ@82..83 "="
83 WHITESPACE@[83; 84) " " 83 WHITESPACE@83..84 " "
84 TUPLE_EXPR@[84; 86) 84 TUPLE_EXPR@84..86
85 L_PAREN@[84; 85) "(" 85 L_PAREN@84..85 "("
86 R_PAREN@[85; 86) ")" 86 R_PAREN@85..86 ")"
87 SEMICOLON@[86; 87) ";" 87 SEMICOLON@86..87 ";"
88 WHITESPACE@[87; 88) "\n" 88 WHITESPACE@87..88 "\n"
89 R_CURLY@[88; 89) "}" 89 R_CURLY@88..89 "}"
90 WHITESPACE@[89; 91) "\n\n" 90 WHITESPACE@89..91 "\n\n"
91error [24; 24): expected a name 91error 24..24: expected a name
92error [27; 27): expected SEMICOLON 92error 27..27: expected SEMICOLON
93error [48; 48): expected a name 93error 48..48: expected a name
94error [51; 51): expected SEMICOLON 94error 51..51: expected SEMICOLON
95error [76; 76): expected a name 95error 76..76: expected a name
96error [79; 79): expected SEMICOLON 96error 79..79: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/err/0035_use_recover.rast b/crates/ra_syntax/test_data/parser/err/0035_use_recover.rast
index f255b0a6b..83851f5d2 100644
--- a/crates/ra_syntax/test_data/parser/err/0035_use_recover.rast
+++ b/crates/ra_syntax/test_data/parser/err/0035_use_recover.rast
@@ -1,54 +1,54 @@
1SOURCE_FILE@[0; 48) 1SOURCE_FILE@0..48
2 USE_ITEM@[0; 13) 2 USE_ITEM@0..13
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 12) 5 USE_TREE@4..12
6 PATH@[4; 12) 6 PATH@4..12
7 PATH@[4; 7) 7 PATH@4..7
8 PATH_SEGMENT@[4; 7) 8 PATH_SEGMENT@4..7
9 NAME_REF@[4; 7) 9 NAME_REF@4..7
10 IDENT@[4; 7) "foo" 10 IDENT@4..7 "foo"
11 COLON2@[7; 9) "::" 11 COLON2@7..9 "::"
12 PATH_SEGMENT@[9; 12) 12 PATH_SEGMENT@9..12
13 NAME_REF@[9; 12) 13 NAME_REF@9..12
14 IDENT@[9; 12) "bar" 14 IDENT@9..12 "bar"
15 SEMICOLON@[12; 13) ";" 15 SEMICOLON@12..13 ";"
16 WHITESPACE@[13; 14) "\n" 16 WHITESPACE@13..14 "\n"
17 USE_ITEM@[14; 17) 17 USE_ITEM@14..17
18 USE_KW@[14; 17) "use" 18 USE_KW@14..17 "use"
19 WHITESPACE@[17; 18) "\n" 19 WHITESPACE@17..18 "\n"
20 USE_ITEM@[18; 33) 20 USE_ITEM@18..33
21 USE_KW@[18; 21) "use" 21 USE_KW@18..21 "use"
22 WHITESPACE@[21; 22) " " 22 WHITESPACE@21..22 " "
23 USE_TREE@[22; 32) 23 USE_TREE@22..32
24 PATH@[22; 32) 24 PATH@22..32
25 PATH@[22; 27) 25 PATH@22..27
26 PATH_SEGMENT@[22; 27) 26 PATH_SEGMENT@22..27
27 CRATE_KW@[22; 27) "crate" 27 CRATE_KW@22..27 "crate"
28 COLON2@[27; 29) "::" 28 COLON2@27..29 "::"
29 PATH_SEGMENT@[29; 32) 29 PATH_SEGMENT@29..32
30 NAME_REF@[29; 32) 30 NAME_REF@29..32
31 IDENT@[29; 32) "baz" 31 IDENT@29..32 "baz"
32 SEMICOLON@[32; 33) ";" 32 SEMICOLON@32..33 ";"
33 WHITESPACE@[33; 34) "\n" 33 WHITESPACE@33..34 "\n"
34 USE_ITEM@[34; 37) 34 USE_ITEM@34..37
35 USE_KW@[34; 37) "use" 35 USE_KW@34..37 "use"
36 WHITESPACE@[37; 38) "\n" 36 WHITESPACE@37..38 "\n"
37 FN_DEF@[38; 47) 37 FN_DEF@38..47
38 FN_KW@[38; 40) "fn" 38 FN_KW@38..40 "fn"
39 WHITESPACE@[40; 41) " " 39 WHITESPACE@40..41 " "
40 NAME@[41; 42) 40 NAME@41..42
41 IDENT@[41; 42) "f" 41 IDENT@41..42 "f"
42 PARAM_LIST@[42; 44) 42 PARAM_LIST@42..44
43 L_PAREN@[42; 43) "(" 43 L_PAREN@42..43 "("
44 R_PAREN@[43; 44) ")" 44 R_PAREN@43..44 ")"
45 WHITESPACE@[44; 45) " " 45 WHITESPACE@44..45 " "
46 BLOCK_EXPR@[45; 47) 46 BLOCK_EXPR@45..47
47 BLOCK@[45; 47) 47 BLOCK@45..47
48 L_CURLY@[45; 46) "{" 48 L_CURLY@45..46 "{"
49 R_CURLY@[46; 47) "}" 49 R_CURLY@46..47 "}"
50 WHITESPACE@[47; 48) "\n" 50 WHITESPACE@47..48 "\n"
51error [17; 17): expected one of `*`, `::`, `{`, `self`, `super` or an identifier 51error 17..17: expected one of `*`, `::`, `{`, `self`, `super` or an identifier
52error [17; 17): expected SEMICOLON 52error 17..17: expected SEMICOLON
53error [37; 37): expected one of `*`, `::`, `{`, `self`, `super` or an identifier 53error 37..37: expected one of `*`, `::`, `{`, `self`, `super` or an identifier
54error [37; 37): expected SEMICOLON 54error 37..37: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/err/0036_partial_use.rast b/crates/ra_syntax/test_data/parser/err/0036_partial_use.rast
index 1f2b4f6d9..f926b67d2 100644
--- a/crates/ra_syntax/test_data/parser/err/0036_partial_use.rast
+++ b/crates/ra_syntax/test_data/parser/err/0036_partial_use.rast
@@ -1,51 +1,51 @@
1SOURCE_FILE@[0; 37) 1SOURCE_FILE@0..37
2 USE_ITEM@[0; 36) 2 USE_ITEM@0..36
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 36) 5 USE_TREE@4..36
6 PATH@[4; 7) 6 PATH@4..7
7 PATH_SEGMENT@[4; 7) 7 PATH_SEGMENT@4..7
8 NAME_REF@[4; 7) 8 NAME_REF@4..7
9 IDENT@[4; 7) "std" 9 IDENT@4..7 "std"
10 COLON2@[7; 9) "::" 10 COLON2@7..9 "::"
11 USE_TREE_LIST@[9; 36) 11 USE_TREE_LIST@9..36
12 L_CURLY@[9; 10) "{" 12 L_CURLY@9..10 "{"
13 USE_TREE@[10; 22) 13 USE_TREE@10..22
14 PATH@[10; 22) 14 PATH@10..22
15 PATH@[10; 15) 15 PATH@10..15
16 PATH_SEGMENT@[10; 15) 16 PATH_SEGMENT@10..15
17 NAME_REF@[10; 15) 17 NAME_REF@10..15
18 IDENT@[10; 15) "error" 18 IDENT@10..15 "error"
19 COLON2@[15; 17) "::" 19 COLON2@15..17 "::"
20 PATH_SEGMENT@[17; 22) 20 PATH_SEGMENT@17..22
21 NAME_REF@[17; 22) 21 NAME_REF@17..22
22 IDENT@[17; 22) "Error" 22 IDENT@17..22 "Error"
23 ERROR@[22; 23) 23 ERROR@22..23
24 SEMICOLON@[22; 23) ";" 24 SEMICOLON@22..23 ";"
25 WHITESPACE@[23; 24) "\n" 25 WHITESPACE@23..24 "\n"
26 ERROR@[24; 27) 26 ERROR@24..27
27 USE_KW@[24; 27) "use" 27 USE_KW@24..27 "use"
28 WHITESPACE@[27; 28) " " 28 WHITESPACE@27..28 " "
29 USE_TREE@[28; 35) 29 USE_TREE@28..35
30 PATH@[28; 35) 30 PATH@28..35
31 PATH@[28; 31) 31 PATH@28..31
32 PATH_SEGMENT@[28; 31) 32 PATH_SEGMENT@28..31
33 NAME_REF@[28; 31) 33 NAME_REF@28..31
34 IDENT@[28; 31) "std" 34 IDENT@28..31 "std"
35 COLON2@[31; 33) "::" 35 COLON2@31..33 "::"
36 PATH_SEGMENT@[33; 35) 36 PATH_SEGMENT@33..35
37 NAME_REF@[33; 35) 37 NAME_REF@33..35
38 IDENT@[33; 35) "io" 38 IDENT@33..35 "io"
39 ERROR@[35; 36) 39 ERROR@35..36
40 SEMICOLON@[35; 36) ";" 40 SEMICOLON@35..36 ";"
41 WHITESPACE@[36; 37) "\n" 41 WHITESPACE@36..37 "\n"
42error [22; 22): expected COMMA 42error 22..22: expected COMMA
43error [22; 22): expected one of `*`, `::`, `{`, `self`, `super` or an identifier 43error 22..22: expected one of `*`, `::`, `{`, `self`, `super` or an identifier
44error [23; 23): expected COMMA 44error 23..23: expected COMMA
45error [24; 24): expected one of `*`, `::`, `{`, `self`, `super` or an identifier 45error 24..24: expected one of `*`, `::`, `{`, `self`, `super` or an identifier
46error [27; 27): expected COMMA 46error 27..27: expected COMMA
47error [35; 35): expected COMMA 47error 35..35: expected COMMA
48error [35; 35): expected one of `*`, `::`, `{`, `self`, `super` or an identifier 48error 35..35: expected one of `*`, `::`, `{`, `self`, `super` or an identifier
49error [36; 36): expected COMMA 49error 36..36: expected COMMA
50error [36; 36): expected R_CURLY 50error 36..36: expected R_CURLY
51error [36; 36): expected SEMICOLON 51error 36..36: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast b/crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast
index 5319bf936..a328222aa 100644
--- a/crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast
+++ b/crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast
@@ -1,99 +1,99 @@
1SOURCE_FILE@[0; 118) 1SOURCE_FILE@0..118
2 IMPL_DEF@[0; 117) 2 IMPL_DEF@0..117
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 6) 5 PATH_TYPE@5..6
6 PATH@[5; 6) 6 PATH@5..6
7 PATH_SEGMENT@[5; 6) 7 PATH_SEGMENT@5..6
8 NAME_REF@[5; 6) 8 NAME_REF@5..6
9 IDENT@[5; 6) "T" 9 IDENT@5..6 "T"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 FOR_KW@[7; 10) "for" 11 FOR_KW@7..10 "for"
12 WHITESPACE@[10; 11) " " 12 WHITESPACE@10..11 " "
13 TUPLE_TYPE@[11; 13) 13 TUPLE_TYPE@11..13
14 L_PAREN@[11; 12) "(" 14 L_PAREN@11..12 "("
15 R_PAREN@[12; 13) ")" 15 R_PAREN@12..13 ")"
16 WHITESPACE@[13; 14) " " 16 WHITESPACE@13..14 " "
17 ITEM_LIST@[14; 117) 17 ITEM_LIST@14..117
18 L_CURLY@[14; 15) "{" 18 L_CURLY@14..15 "{"
19 WHITESPACE@[15; 20) "\n " 19 WHITESPACE@15..20 "\n "
20 FN_DEF@[20; 31) 20 FN_DEF@20..31
21 FN_KW@[20; 22) "fn" 21 FN_KW@20..22 "fn"
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 NAME@[23; 26) 23 NAME@23..26
24 IDENT@[23; 26) "foo" 24 IDENT@23..26 "foo"
25 PARAM_LIST@[26; 28) 25 PARAM_LIST@26..28
26 L_PAREN@[26; 27) "(" 26 L_PAREN@26..27 "("
27 R_PAREN@[27; 28) ")" 27 R_PAREN@27..28 ")"
28 WHITESPACE@[28; 29) " " 28 WHITESPACE@28..29 " "
29 BLOCK_EXPR@[29; 31) 29 BLOCK_EXPR@29..31
30 BLOCK@[29; 31) 30 BLOCK@29..31
31 L_CURLY@[29; 30) "{" 31 L_CURLY@29..30 "{"
32 R_CURLY@[30; 31) "}" 32 R_CURLY@30..31 "}"
33 WHITESPACE@[31; 36) "\n " 33 WHITESPACE@31..36 "\n "
34 FN_DEF@[36; 51) 34 FN_DEF@36..51
35 VISIBILITY@[36; 39) 35 VISIBILITY@36..39
36 PUB_KW@[36; 39) "pub" 36 PUB_KW@36..39 "pub"
37 WHITESPACE@[39; 40) " " 37 WHITESPACE@39..40 " "
38 FN_KW@[40; 42) "fn" 38 FN_KW@40..42 "fn"
39 WHITESPACE@[42; 43) " " 39 WHITESPACE@42..43 " "
40 NAME@[43; 46) 40 NAME@43..46
41 IDENT@[43; 46) "bar" 41 IDENT@43..46 "bar"
42 PARAM_LIST@[46; 48) 42 PARAM_LIST@46..48
43 L_PAREN@[46; 47) "(" 43 L_PAREN@46..47 "("
44 R_PAREN@[47; 48) ")" 44 R_PAREN@47..48 ")"
45 WHITESPACE@[48; 49) " " 45 WHITESPACE@48..49 " "
46 BLOCK_EXPR@[49; 51) 46 BLOCK_EXPR@49..51
47 BLOCK@[49; 51) 47 BLOCK@49..51
48 L_CURLY@[49; 50) "{" 48 L_CURLY@49..50 "{"
49 R_CURLY@[50; 51) "}" 49 R_CURLY@50..51 "}"
50 WHITESPACE@[51; 56) "\n " 50 WHITESPACE@51..56 "\n "
51 TYPE_ALIAS_DEF@[56; 81) 51 TYPE_ALIAS_DEF@56..81
52 VISIBILITY@[56; 66) 52 VISIBILITY@56..66
53 PUB_KW@[56; 59) "pub" 53 PUB_KW@56..59 "pub"
54 L_PAREN@[59; 60) "(" 54 L_PAREN@59..60 "("
55 CRATE_KW@[60; 65) "crate" 55 CRATE_KW@60..65 "crate"
56 R_PAREN@[65; 66) ")" 56 R_PAREN@65..66 ")"
57 WHITESPACE@[66; 67) " " 57 WHITESPACE@66..67 " "
58 TYPE_KW@[67; 71) "type" 58 TYPE_KW@67..71 "type"
59 WHITESPACE@[71; 72) " " 59 WHITESPACE@71..72 " "
60 NAME@[72; 75) 60 NAME@72..75
61 IDENT@[72; 75) "Baz" 61 IDENT@72..75 "Baz"
62 WHITESPACE@[75; 76) " " 62 WHITESPACE@75..76 " "
63 EQ@[76; 77) "=" 63 EQ@76..77 "="
64 WHITESPACE@[77; 78) " " 64 WHITESPACE@77..78 " "
65 TUPLE_TYPE@[78; 80) 65 TUPLE_TYPE@78..80
66 L_PAREN@[78; 79) "(" 66 L_PAREN@78..79 "("
67 R_PAREN@[79; 80) ")" 67 R_PAREN@79..80 ")"
68 SEMICOLON@[80; 81) ";" 68 SEMICOLON@80..81 ";"
69 WHITESPACE@[81; 86) "\n " 69 WHITESPACE@81..86 "\n "
70 CONST_DEF@[86; 115) 70 CONST_DEF@86..115
71 VISIBILITY@[86; 96) 71 VISIBILITY@86..96
72 PUB_KW@[86; 89) "pub" 72 PUB_KW@86..89 "pub"
73 L_PAREN@[89; 90) "(" 73 L_PAREN@89..90 "("
74 CRATE_KW@[90; 95) "crate" 74 CRATE_KW@90..95 "crate"
75 R_PAREN@[95; 96) ")" 75 R_PAREN@95..96 ")"
76 WHITESPACE@[96; 97) " " 76 WHITESPACE@96..97 " "
77 CONST_KW@[97; 102) "const" 77 CONST_KW@97..102 "const"
78 WHITESPACE@[102; 103) " " 78 WHITESPACE@102..103 " "
79 NAME@[103; 104) 79 NAME@103..104
80 IDENT@[103; 104) "C" 80 IDENT@103..104 "C"
81 COLON@[104; 105) ":" 81 COLON@104..105 ":"
82 WHITESPACE@[105; 106) " " 82 WHITESPACE@105..106 " "
83 PATH_TYPE@[106; 109) 83 PATH_TYPE@106..109
84 PATH@[106; 109) 84 PATH@106..109
85 PATH_SEGMENT@[106; 109) 85 PATH_SEGMENT@106..109
86 NAME_REF@[106; 109) 86 NAME_REF@106..109
87 IDENT@[106; 109) "i32" 87 IDENT@106..109 "i32"
88 WHITESPACE@[109; 110) " " 88 WHITESPACE@109..110 " "
89 EQ@[110; 111) "=" 89 EQ@110..111 "="
90 WHITESPACE@[111; 112) " " 90 WHITESPACE@111..112 " "
91 LITERAL@[112; 114) 91 LITERAL@112..114
92 INT_NUMBER@[112; 114) "92" 92 INT_NUMBER@112..114 "92"
93 SEMICOLON@[114; 115) ";" 93 SEMICOLON@114..115 ";"
94 WHITESPACE@[115; 116) "\n" 94 WHITESPACE@115..116 "\n"
95 R_CURLY@[116; 117) "}" 95 R_CURLY@116..117 "}"
96 WHITESPACE@[117; 118) "\n" 96 WHITESPACE@117..118 "\n"
97error [36; 39): Unnecessary visibility qualifier 97error 36..39: Unnecessary visibility qualifier
98error [56; 66): Unnecessary visibility qualifier 98error 56..66: Unnecessary visibility qualifier
99error [86; 96): Unnecessary visibility qualifier 99error 86..96: Unnecessary visibility qualifier
diff --git a/crates/ra_syntax/test_data/parser/err/0038_endless_inclusive_range.rast b/crates/ra_syntax/test_data/parser/err/0038_endless_inclusive_range.rast
index 9efdf7ef4..bcd1fad69 100644
--- a/crates/ra_syntax/test_data/parser/err/0038_endless_inclusive_range.rast
+++ b/crates/ra_syntax/test_data/parser/err/0038_endless_inclusive_range.rast
@@ -1,30 +1,30 @@
1SOURCE_FILE@[0; 33) 1SOURCE_FILE@0..33
2 FN_DEF@[0; 32) 2 FN_DEF@0..32
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 32) 11 BLOCK_EXPR@10..32
12 BLOCK@[10; 32) 12 BLOCK@10..32
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 EXPR_STMT@[16; 21) 15 EXPR_STMT@16..21
16 RANGE_EXPR@[16; 20) 16 RANGE_EXPR@16..20
17 LITERAL@[16; 17) 17 LITERAL@16..17
18 INT_NUMBER@[16; 17) "0" 18 INT_NUMBER@16..17 "0"
19 DOT2EQ@[17; 20) "..=" 19 DOT2EQ@17..20 "..="
20 SEMICOLON@[20; 21) ";" 20 SEMICOLON@20..21 ";"
21 WHITESPACE@[21; 26) "\n " 21 WHITESPACE@21..26 "\n "
22 EXPR_STMT@[26; 30) 22 EXPR_STMT@26..30
23 RANGE_EXPR@[26; 29) 23 RANGE_EXPR@26..29
24 DOT2EQ@[26; 29) "..=" 24 DOT2EQ@26..29 "..="
25 SEMICOLON@[29; 30) ";" 25 SEMICOLON@29..30 ";"
26 WHITESPACE@[30; 31) "\n" 26 WHITESPACE@30..31 "\n"
27 R_CURLY@[31; 32) "}" 27 R_CURLY@31..32 "}"
28 WHITESPACE@[32; 33) "\n" 28 WHITESPACE@32..33 "\n"
29error [16; 20): An inclusive range must have an end expression 29error 16..20: An inclusive range must have an end expression
30error [26; 29): An inclusive range must have an end expression 30error 26..29: An inclusive range must have an end expression
diff --git a/crates/ra_syntax/test_data/parser/err/0039_lambda_recovery.rast b/crates/ra_syntax/test_data/parser/err/0039_lambda_recovery.rast
index edf9c3247..433ea7bad 100644
--- a/crates/ra_syntax/test_data/parser/err/0039_lambda_recovery.rast
+++ b/crates/ra_syntax/test_data/parser/err/0039_lambda_recovery.rast
@@ -1,83 +1,83 @@
1SOURCE_FILE@[0; 83) 1SOURCE_FILE@0..83
2 FN_DEF@[0; 82) 2 FN_DEF@0..82
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 RET_TYPE@[9; 15) 11 RET_TYPE@9..15
12 THIN_ARROW@[9; 11) "->" 12 THIN_ARROW@9..11 "->"
13 WHITESPACE@[11; 12) " " 13 WHITESPACE@11..12 " "
14 PATH_TYPE@[12; 15) 14 PATH_TYPE@12..15
15 PATH@[12; 15) 15 PATH@12..15
16 PATH_SEGMENT@[12; 15) 16 PATH_SEGMENT@12..15
17 NAME_REF@[12; 15) 17 NAME_REF@12..15
18 IDENT@[12; 15) "i32" 18 IDENT@12..15 "i32"
19 WHITESPACE@[15; 16) " " 19 WHITESPACE@15..16 " "
20 BLOCK_EXPR@[16; 82) 20 BLOCK_EXPR@16..82
21 BLOCK@[16; 82) 21 BLOCK@16..82
22 L_CURLY@[16; 17) "{" 22 L_CURLY@16..17 "{"
23 WHITESPACE@[17; 22) "\n " 23 WHITESPACE@17..22 "\n "
24 EXPR_STMT@[22; 80) 24 EXPR_STMT@22..80
25 METHOD_CALL_EXPR@[22; 79) 25 METHOD_CALL_EXPR@22..79
26 METHOD_CALL_EXPR@[22; 57) 26 METHOD_CALL_EXPR@22..57
27 METHOD_CALL_EXPR@[22; 38) 27 METHOD_CALL_EXPR@22..38
28 ARRAY_EXPR@[22; 31) 28 ARRAY_EXPR@22..31
29 L_BRACK@[22; 23) "[" 29 L_BRACK@22..23 "["
30 LITERAL@[23; 24) 30 LITERAL@23..24
31 INT_NUMBER@[23; 24) "1" 31 INT_NUMBER@23..24 "1"
32 COMMA@[24; 25) "," 32 COMMA@24..25 ","
33 WHITESPACE@[25; 26) " " 33 WHITESPACE@25..26 " "
34 LITERAL@[26; 27) 34 LITERAL@26..27
35 INT_NUMBER@[26; 27) "2" 35 INT_NUMBER@26..27 "2"
36 COMMA@[27; 28) "," 36 COMMA@27..28 ","
37 WHITESPACE@[28; 29) " " 37 WHITESPACE@28..29 " "
38 LITERAL@[29; 30) 38 LITERAL@29..30
39 INT_NUMBER@[29; 30) "3" 39 INT_NUMBER@29..30 "3"
40 R_BRACK@[30; 31) "]" 40 R_BRACK@30..31 "]"
41 DOT@[31; 32) "." 41 DOT@31..32 "."
42 NAME_REF@[32; 36) 42 NAME_REF@32..36
43 IDENT@[32; 36) "iter" 43 IDENT@32..36 "iter"
44 ARG_LIST@[36; 38) 44 ARG_LIST@36..38
45 L_PAREN@[36; 37) "(" 45 L_PAREN@36..37 "("
46 R_PAREN@[37; 38) ")" 46 R_PAREN@37..38 ")"
47 WHITESPACE@[38; 47) "\n " 47 WHITESPACE@38..47 "\n "
48 DOT@[47; 48) "." 48 DOT@47..48 "."
49 NAME_REF@[48; 51) 49 NAME_REF@48..51
50 IDENT@[48; 51) "map" 50 IDENT@48..51 "map"
51 ARG_LIST@[51; 57) 51 ARG_LIST@51..57
52 L_PAREN@[51; 52) "(" 52 L_PAREN@51..52 "("
53 LAMBDA_EXPR@[52; 56) 53 LAMBDA_EXPR@52..56
54 PARAM_LIST@[52; 56) 54 PARAM_LIST@52..56
55 PIPE@[52; 53) "|" 55 PIPE@52..53 "|"
56 PARAM@[53; 55) 56 PARAM@53..55
57 BIND_PAT@[53; 55) 57 BIND_PAT@53..55
58 NAME@[53; 55) 58 NAME@53..55
59 IDENT@[53; 55) "it" 59 IDENT@53..55 "it"
60 PIPE@[55; 56) "|" 60 PIPE@55..56 "|"
61 R_PAREN@[56; 57) ")" 61 R_PAREN@56..57 ")"
62 WHITESPACE@[57; 66) "\n " 62 WHITESPACE@57..66 "\n "
63 DOT@[66; 67) "." 63 DOT@66..67 "."
64 NAME_REF@[67; 70) 64 NAME_REF@67..70
65 IDENT@[67; 70) "max" 65 IDENT@67..70 "max"
66 TYPE_ARG_LIST@[70; 77) 66 TYPE_ARG_LIST@70..77
67 COLON2@[70; 72) "::" 67 COLON2@70..72 "::"
68 L_ANGLE@[72; 73) "<" 68 L_ANGLE@72..73 "<"
69 TYPE_ARG@[73; 76) 69 TYPE_ARG@73..76
70 PATH_TYPE@[73; 76) 70 PATH_TYPE@73..76
71 PATH@[73; 76) 71 PATH@73..76
72 PATH_SEGMENT@[73; 76) 72 PATH_SEGMENT@73..76
73 NAME_REF@[73; 76) 73 NAME_REF@73..76
74 IDENT@[73; 76) "i32" 74 IDENT@73..76 "i32"
75 R_ANGLE@[76; 77) ">" 75 R_ANGLE@76..77 ">"
76 ARG_LIST@[77; 79) 76 ARG_LIST@77..79
77 L_PAREN@[77; 78) "(" 77 L_PAREN@77..78 "("
78 R_PAREN@[78; 79) ")" 78 R_PAREN@78..79 ")"
79 SEMICOLON@[79; 80) ";" 79 SEMICOLON@79..80 ";"
80 WHITESPACE@[80; 81) "\n" 80 WHITESPACE@80..81 "\n"
81 R_CURLY@[81; 82) "}" 81 R_CURLY@81..82 "}"
82 WHITESPACE@[82; 83) "\n" 82 WHITESPACE@82..83 "\n"
83error [56; 56): expected expression 83error 56..56: expected expression
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0001_array_type_missing_semi.rast b/crates/ra_syntax/test_data/parser/inline/err/0001_array_type_missing_semi.rast
index 9d807c84f..bf70ebca4 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0001_array_type_missing_semi.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0001_array_type_missing_semi.rast
@@ -1,27 +1,27 @@
1SOURCE_FILE@[0; 18) 1SOURCE_FILE@0..18
2 TYPE_ALIAS_DEF@[0; 12) 2 TYPE_ALIAS_DEF@0..12
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "T" 6 IDENT@5..6 "T"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 SLICE_TYPE@[9; 12) 10 SLICE_TYPE@9..12
11 L_BRACK@[9; 10) "[" 11 L_BRACK@9..10 "["
12 TUPLE_TYPE@[10; 12) 12 TUPLE_TYPE@10..12
13 L_PAREN@[10; 11) "(" 13 L_PAREN@10..11 "("
14 R_PAREN@[11; 12) ")" 14 R_PAREN@11..12 ")"
15 WHITESPACE@[12; 13) " " 15 WHITESPACE@12..13 " "
16 ERROR@[13; 15) 16 ERROR@13..15
17 INT_NUMBER@[13; 15) "92" 17 INT_NUMBER@13..15 "92"
18 ERROR@[15; 16) 18 ERROR@15..16
19 R_BRACK@[15; 16) "]" 19 R_BRACK@15..16 "]"
20 ERROR@[16; 17) 20 ERROR@16..17
21 SEMICOLON@[16; 17) ";" 21 SEMICOLON@16..17 ";"
22 WHITESPACE@[17; 18) "\n" 22 WHITESPACE@17..18 "\n"
23error [12; 12): expected `;` or `]` 23error 12..12: expected `;` or `]`
24error [12; 12): expected SEMICOLON 24error 12..12: expected SEMICOLON
25error [13; 13): expected an item 25error 13..13: expected an item
26error [15; 15): expected an item 26error 15..15: expected an item
27error [16; 16): expected an item 27error 16..16: expected an item
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0002_misplaced_label_err.rast b/crates/ra_syntax/test_data/parser/inline/err/0002_misplaced_label_err.rast
index a85855f8c..85bf276a0 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0002_misplaced_label_err.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0002_misplaced_label_err.rast
@@ -1,29 +1,29 @@
1SOURCE_FILE@[0; 30) 1SOURCE_FILE@0..30
2 FN_DEF@[0; 29) 2 FN_DEF@0..29
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 29) 11 BLOCK_EXPR@10..29
12 BLOCK@[10; 29) 12 BLOCK@10..29
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 EXPR_STMT@[16; 22) 15 EXPR_STMT@16..22
16 ERROR@[16; 22) 16 ERROR@16..22
17 LABEL@[16; 22) 17 LABEL@16..22
18 LIFETIME@[16; 21) "\'loop" 18 LIFETIME@16..21 "\'loop"
19 COLON@[21; 22) ":" 19 COLON@21..22 ":"
20 WHITESPACE@[22; 23) " " 20 WHITESPACE@22..23 " "
21 IMPL_DEF@[23; 27) 21 IMPL_DEF@23..27
22 IMPL_KW@[23; 27) "impl" 22 IMPL_KW@23..27 "impl"
23 WHITESPACE@[27; 28) "\n" 23 WHITESPACE@27..28 "\n"
24 R_CURLY@[28; 29) "}" 24 R_CURLY@28..29 "}"
25 WHITESPACE@[29; 30) "\n" 25 WHITESPACE@29..30 "\n"
26error [22; 22): expected a loop 26error 22..22: expected a loop
27error [22; 22): expected SEMICOLON 27error 22..22: expected SEMICOLON
28error [27; 27): expected type 28error 27..27: expected type
29error [27; 27): expected `{` 29error 27..27: expected `{`
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0003_pointer_type_no_mutability.rast b/crates/ra_syntax/test_data/parser/inline/err/0003_pointer_type_no_mutability.rast
index e9efad674..95bcc3c0a 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0003_pointer_type_no_mutability.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0003_pointer_type_no_mutability.rast
@@ -1,17 +1,17 @@
1SOURCE_FILE@[0; 14) 1SOURCE_FILE@0..14
2 TYPE_ALIAS_DEF@[0; 13) 2 TYPE_ALIAS_DEF@0..13
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "T" 6 IDENT@5..6 "T"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 POINTER_TYPE@[9; 12) 10 POINTER_TYPE@9..12
11 STAR@[9; 10) "*" 11 STAR@9..10 "*"
12 TUPLE_TYPE@[10; 12) 12 TUPLE_TYPE@10..12
13 L_PAREN@[10; 11) "(" 13 L_PAREN@10..11 "("
14 R_PAREN@[11; 12) ")" 14 R_PAREN@11..12 ")"
15 SEMICOLON@[12; 13) ";" 15 SEMICOLON@12..13 ";"
16 WHITESPACE@[13; 14) "\n" 16 WHITESPACE@13..14 "\n"
17error [10; 10): expected mut or const in raw pointer type (use `*mut T` or `*const T` as appropriate) 17error 10..10: expected mut or const in raw pointer type (use `*mut T` or `*const T` as appropriate)
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0004_impl_type.rast b/crates/ra_syntax/test_data/parser/inline/err/0004_impl_type.rast
index 124f0a891..fd939be8d 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0004_impl_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0004_impl_type.rast
@@ -1,79 +1,79 @@
1SOURCE_FILE@[0; 87) 1SOURCE_FILE@0..87
2 IMPL_DEF@[0; 12) 2 IMPL_DEF@0..12
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 9) 5 PATH_TYPE@5..9
6 PATH@[5; 9) 6 PATH@5..9
7 PATH_SEGMENT@[5; 9) 7 PATH_SEGMENT@5..9
8 NAME_REF@[5; 9) 8 NAME_REF@5..9
9 IDENT@[5; 9) "Type" 9 IDENT@5..9 "Type"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 ITEM_LIST@[10; 12) 11 ITEM_LIST@10..12
12 L_CURLY@[10; 11) "{" 12 L_CURLY@10..11 "{"
13 R_CURLY@[11; 12) "}" 13 R_CURLY@11..12 "}"
14 WHITESPACE@[12; 13) "\n" 14 WHITESPACE@12..13 "\n"
15 IMPL_DEF@[13; 33) 15 IMPL_DEF@13..33
16 IMPL_KW@[13; 17) "impl" 16 IMPL_KW@13..17 "impl"
17 WHITESPACE@[17; 18) " " 17 WHITESPACE@17..18 " "
18 PATH_TYPE@[18; 24) 18 PATH_TYPE@18..24
19 PATH@[18; 24) 19 PATH@18..24
20 PATH_SEGMENT@[18; 24) 20 PATH_SEGMENT@18..24
21 NAME_REF@[18; 24) 21 NAME_REF@18..24
22 IDENT@[18; 24) "Trait1" 22 IDENT@18..24 "Trait1"
23 WHITESPACE@[24; 25) " " 23 WHITESPACE@24..25 " "
24 FOR_KW@[25; 28) "for" 24 FOR_KW@25..28 "for"
25 WHITESPACE@[28; 29) " " 25 WHITESPACE@28..29 " "
26 PATH_TYPE@[29; 30) 26 PATH_TYPE@29..30
27 PATH@[29; 30) 27 PATH@29..30
28 PATH_SEGMENT@[29; 30) 28 PATH_SEGMENT@29..30
29 NAME_REF@[29; 30) 29 NAME_REF@29..30
30 IDENT@[29; 30) "T" 30 IDENT@29..30 "T"
31 WHITESPACE@[30; 31) " " 31 WHITESPACE@30..31 " "
32 ITEM_LIST@[31; 33) 32 ITEM_LIST@31..33
33 L_CURLY@[31; 32) "{" 33 L_CURLY@31..32 "{"
34 R_CURLY@[32; 33) "}" 34 R_CURLY@32..33 "}"
35 WHITESPACE@[33; 34) "\n" 35 WHITESPACE@33..34 "\n"
36 IMPL_DEF@[34; 38) 36 IMPL_DEF@34..38
37 IMPL_KW@[34; 38) "impl" 37 IMPL_KW@34..38 "impl"
38 WHITESPACE@[38; 39) " " 38 WHITESPACE@38..39 " "
39 IMPL_DEF@[39; 54) 39 IMPL_DEF@39..54
40 IMPL_KW@[39; 43) "impl" 40 IMPL_KW@39..43 "impl"
41 WHITESPACE@[43; 44) " " 41 WHITESPACE@43..44 " "
42 PATH_TYPE@[44; 51) 42 PATH_TYPE@44..51
43 PATH@[44; 51) 43 PATH@44..51
44 PATH_SEGMENT@[44; 51) 44 PATH_SEGMENT@44..51
45 NAME_REF@[44; 51) 45 NAME_REF@44..51
46 IDENT@[44; 51) "NotType" 46 IDENT@44..51 "NotType"
47 WHITESPACE@[51; 52) " " 47 WHITESPACE@51..52 " "
48 ITEM_LIST@[52; 54) 48 ITEM_LIST@52..54
49 L_CURLY@[52; 53) "{" 49 L_CURLY@52..53 "{"
50 R_CURLY@[53; 54) "}" 50 R_CURLY@53..54 "}"
51 WHITESPACE@[54; 55) "\n" 51 WHITESPACE@54..55 "\n"
52 IMPL_DEF@[55; 70) 52 IMPL_DEF@55..70
53 IMPL_KW@[55; 59) "impl" 53 IMPL_KW@55..59 "impl"
54 WHITESPACE@[59; 60) " " 54 WHITESPACE@59..60 " "
55 PATH_TYPE@[60; 66) 55 PATH_TYPE@60..66
56 PATH@[60; 66) 56 PATH@60..66
57 PATH_SEGMENT@[60; 66) 57 PATH_SEGMENT@60..66
58 NAME_REF@[60; 66) 58 NAME_REF@60..66
59 IDENT@[60; 66) "Trait2" 59 IDENT@60..66 "Trait2"
60 WHITESPACE@[66; 67) " " 60 WHITESPACE@66..67 " "
61 FOR_KW@[67; 70) "for" 61 FOR_KW@67..70 "for"
62 WHITESPACE@[70; 71) " " 62 WHITESPACE@70..71 " "
63 IMPL_DEF@[71; 86) 63 IMPL_DEF@71..86
64 IMPL_KW@[71; 75) "impl" 64 IMPL_KW@71..75 "impl"
65 WHITESPACE@[75; 76) " " 65 WHITESPACE@75..76 " "
66 PATH_TYPE@[76; 83) 66 PATH_TYPE@76..83
67 PATH@[76; 83) 67 PATH@76..83
68 PATH_SEGMENT@[76; 83) 68 PATH_SEGMENT@76..83
69 NAME_REF@[76; 83) 69 NAME_REF@76..83
70 IDENT@[76; 83) "NotType" 70 IDENT@76..83 "NotType"
71 WHITESPACE@[83; 84) " " 71 WHITESPACE@83..84 " "
72 ITEM_LIST@[84; 86) 72 ITEM_LIST@84..86
73 L_CURLY@[84; 85) "{" 73 L_CURLY@84..85 "{"
74 R_CURLY@[85; 86) "}" 74 R_CURLY@85..86 "}"
75 WHITESPACE@[86; 87) "\n" 75 WHITESPACE@86..87 "\n"
76error [38; 38): expected trait or type 76error 38..38: expected trait or type
77error [38; 38): expected `{` 77error 38..38: expected `{`
78error [70; 70): expected trait or type 78error 70..70: expected trait or type
79error [70; 70): expected `{` 79error 70..70: expected `{`
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0005_fn_pointer_type_missing_fn.rast b/crates/ra_syntax/test_data/parser/inline/err/0005_fn_pointer_type_missing_fn.rast
index b8a494085..90202d764 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0005_fn_pointer_type_missing_fn.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0005_fn_pointer_type_missing_fn.rast
@@ -1,23 +1,23 @@
1SOURCE_FILE@[0; 20) 1SOURCE_FILE@0..20
2 TYPE_ALIAS_DEF@[0; 15) 2 TYPE_ALIAS_DEF@0..15
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "F" 6 IDENT@5..6 "F"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 UNSAFE_KW@[9; 15) "unsafe" 10 UNSAFE_KW@9..15 "unsafe"
11 WHITESPACE@[15; 16) " " 11 WHITESPACE@15..16 " "
12 ERROR@[16; 17) 12 ERROR@16..17
13 L_PAREN@[16; 17) "(" 13 L_PAREN@16..17 "("
14 ERROR@[17; 18) 14 ERROR@17..18
15 R_PAREN@[17; 18) ")" 15 R_PAREN@17..18 ")"
16 ERROR@[18; 19) 16 ERROR@18..19
17 SEMICOLON@[18; 19) ";" 17 SEMICOLON@18..19 ";"
18 WHITESPACE@[19; 20) "\n" 18 WHITESPACE@19..20 "\n"
19error [15; 15): expected `fn` 19error 15..15: expected `fn`
20error [15; 15): expected SEMICOLON 20error 15..15: expected SEMICOLON
21error [16; 16): expected an item 21error 16..16: expected an item
22error [17; 17): expected an item 22error 17..17: expected an item
23error [18; 18): expected an item 23error 18..18: expected an item
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0006_unsafe_block_in_mod.rast b/crates/ra_syntax/test_data/parser/inline/err/0006_unsafe_block_in_mod.rast
index 690acdca3..b901c17f7 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0006_unsafe_block_in_mod.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0006_unsafe_block_in_mod.rast
@@ -1,37 +1,37 @@
1SOURCE_FILE@[0; 33) 1SOURCE_FILE@0..33
2 FN_DEF@[0; 10) 2 FN_DEF@0..10
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 BLOCK_EXPR@[8; 10) 10 BLOCK_EXPR@8..10
11 BLOCK@[8; 10) 11 BLOCK@8..10
12 L_CURLY@[8; 9) "{" 12 L_CURLY@8..9 "{"
13 R_CURLY@[9; 10) "}" 13 R_CURLY@9..10 "}"
14 WHITESPACE@[10; 11) " " 14 WHITESPACE@10..11 " "
15 ERROR@[11; 17) 15 ERROR@11..17
16 UNSAFE_KW@[11; 17) "unsafe" 16 UNSAFE_KW@11..17 "unsafe"
17 WHITESPACE@[17; 18) " " 17 WHITESPACE@17..18 " "
18 ERROR@[18; 21) 18 ERROR@18..21
19 L_CURLY@[18; 19) "{" 19 L_CURLY@18..19 "{"
20 WHITESPACE@[19; 20) " " 20 WHITESPACE@19..20 " "
21 R_CURLY@[20; 21) "}" 21 R_CURLY@20..21 "}"
22 WHITESPACE@[21; 22) " " 22 WHITESPACE@21..22 " "
23 FN_DEF@[22; 32) 23 FN_DEF@22..32
24 FN_KW@[22; 24) "fn" 24 FN_KW@22..24 "fn"
25 WHITESPACE@[24; 25) " " 25 WHITESPACE@24..25 " "
26 NAME@[25; 28) 26 NAME@25..28
27 IDENT@[25; 28) "bar" 27 IDENT@25..28 "bar"
28 PARAM_LIST@[28; 30) 28 PARAM_LIST@28..30
29 L_PAREN@[28; 29) "(" 29 L_PAREN@28..29 "("
30 R_PAREN@[29; 30) ")" 30 R_PAREN@29..30 ")"
31 BLOCK_EXPR@[30; 32) 31 BLOCK_EXPR@30..32
32 BLOCK@[30; 32) 32 BLOCK@30..32
33 L_CURLY@[30; 31) "{" 33 L_CURLY@30..31 "{"
34 R_CURLY@[31; 32) "}" 34 R_CURLY@31..32 "}"
35 WHITESPACE@[32; 33) "\n" 35 WHITESPACE@32..33 "\n"
36error [11; 11): expected an item 36error 11..11: expected an item
37error [18; 18): expected an item 37error 18..18: expected an item
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0007_async_without_semicolon.rast b/crates/ra_syntax/test_data/parser/inline/err/0007_async_without_semicolon.rast
index c3f7eb477..3f48b86ed 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0007_async_without_semicolon.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0007_async_without_semicolon.rast
@@ -1,32 +1,32 @@
1SOURCE_FILE@[0; 30) 1SOURCE_FILE@0..30
2 FN_DEF@[0; 29) 2 FN_DEF@0..29
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 29) 11 BLOCK_EXPR@9..29
12 BLOCK@[9; 29) 12 BLOCK@9..29
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 11) " " 14 WHITESPACE@10..11 " "
15 LET_STMT@[11; 27) 15 LET_STMT@11..27
16 LET_KW@[11; 14) "let" 16 LET_KW@11..14 "let"
17 WHITESPACE@[14; 15) " " 17 WHITESPACE@14..15 " "
18 PLACEHOLDER_PAT@[15; 16) 18 PLACEHOLDER_PAT@15..16
19 UNDERSCORE@[15; 16) "_" 19 UNDERSCORE@15..16 "_"
20 WHITESPACE@[16; 17) " " 20 WHITESPACE@16..17 " "
21 EQ@[17; 18) "=" 21 EQ@17..18 "="
22 WHITESPACE@[18; 19) " " 22 WHITESPACE@18..19 " "
23 BLOCK_EXPR@[19; 27) 23 BLOCK_EXPR@19..27
24 ASYNC_KW@[19; 24) "async" 24 ASYNC_KW@19..24 "async"
25 WHITESPACE@[24; 25) " " 25 WHITESPACE@24..25 " "
26 BLOCK@[25; 27) 26 BLOCK@25..27
27 L_CURLY@[25; 26) "{" 27 L_CURLY@25..26 "{"
28 R_CURLY@[26; 27) "}" 28 R_CURLY@26..27 "}"
29 WHITESPACE@[27; 28) " " 29 WHITESPACE@27..28 " "
30 R_CURLY@[28; 29) "}" 30 R_CURLY@28..29 "}"
31 WHITESPACE@[29; 30) "\n" 31 WHITESPACE@29..30 "\n"
32error [27; 27): expected SEMICOLON 32error 27..27: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0008_pub_expr.rast b/crates/ra_syntax/test_data/parser/inline/err/0008_pub_expr.rast
index a345f8488..be02eaeeb 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0008_pub_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0008_pub_expr.rast
@@ -1,26 +1,26 @@
1SOURCE_FILE@[0; 21) 1SOURCE_FILE@0..21
2 FN_DEF@[0; 20) 2 FN_DEF@0..20
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 20) 11 BLOCK_EXPR@9..20
12 BLOCK@[9; 20) 12 BLOCK@9..20
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 11) " " 14 WHITESPACE@10..11 " "
15 ERROR@[11; 14) 15 ERROR@11..14
16 VISIBILITY@[11; 14) 16 VISIBILITY@11..14
17 PUB_KW@[11; 14) "pub" 17 PUB_KW@11..14 "pub"
18 WHITESPACE@[14; 15) " " 18 WHITESPACE@14..15 " "
19 EXPR_STMT@[15; 18) 19 EXPR_STMT@15..18
20 LITERAL@[15; 17) 20 LITERAL@15..17
21 INT_NUMBER@[15; 17) "92" 21 INT_NUMBER@15..17 "92"
22 SEMICOLON@[17; 18) ";" 22 SEMICOLON@17..18 ";"
23 WHITESPACE@[18; 19) " " 23 WHITESPACE@18..19 " "
24 R_CURLY@[19; 20) "}" 24 R_CURLY@19..20 "}"
25 WHITESPACE@[20; 21) "\n" 25 WHITESPACE@20..21 "\n"
26error [14; 14): expected an item 26error 14..14: expected an item
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast b/crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast
index c3a70147a..b344e4f7f 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast
@@ -1,61 +1,61 @@
1SOURCE_FILE@[0; 48) 1SOURCE_FILE@0..48
2 FN_DEF@[0; 47) 2 FN_DEF@0..47
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 47) 11 BLOCK_EXPR@9..47
12 BLOCK@[9; 47) 12 BLOCK@9..47
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 14) "\n " 14 WHITESPACE@10..14 "\n "
15 EXPR_STMT@[14; 25) 15 EXPR_STMT@14..25
16 ATTR@[14; 18) 16 ATTR@14..18
17 POUND@[14; 15) "#" 17 POUND@14..15 "#"
18 L_BRACK@[15; 16) "[" 18 L_BRACK@15..16 "["
19 PATH@[16; 17) 19 PATH@16..17
20 PATH_SEGMENT@[16; 17) 20 PATH_SEGMENT@16..17
21 NAME_REF@[16; 17) 21 NAME_REF@16..17
22 IDENT@[16; 17) "A" 22 IDENT@16..17 "A"
23 R_BRACK@[17; 18) "]" 23 R_BRACK@17..18 "]"
24 WHITESPACE@[18; 19) " " 24 WHITESPACE@18..19 " "
25 BIN_EXPR@[19; 24) 25 BIN_EXPR@19..24
26 LITERAL@[19; 20) 26 LITERAL@19..20
27 INT_NUMBER@[19; 20) "1" 27 INT_NUMBER@19..20 "1"
28 WHITESPACE@[20; 21) " " 28 WHITESPACE@20..21 " "
29 PLUS@[21; 22) "+" 29 PLUS@21..22 "+"
30 WHITESPACE@[22; 23) " " 30 WHITESPACE@22..23 " "
31 LITERAL@[23; 24) 31 LITERAL@23..24
32 INT_NUMBER@[23; 24) "2" 32 INT_NUMBER@23..24 "2"
33 SEMICOLON@[24; 25) ";" 33 SEMICOLON@24..25 ";"
34 WHITESPACE@[25; 29) "\n " 34 WHITESPACE@25..29 "\n "
35 EXPR_STMT@[29; 45) 35 EXPR_STMT@29..45
36 ATTR@[29; 33) 36 ATTR@29..33
37 POUND@[29; 30) "#" 37 POUND@29..30 "#"
38 L_BRACK@[30; 31) "[" 38 L_BRACK@30..31 "["
39 PATH@[31; 32) 39 PATH@31..32
40 PATH_SEGMENT@[31; 32) 40 PATH_SEGMENT@31..32
41 NAME_REF@[31; 32) 41 NAME_REF@31..32
42 IDENT@[31; 32) "B" 42 IDENT@31..32 "B"
43 R_BRACK@[32; 33) "]" 43 R_BRACK@32..33 "]"
44 WHITESPACE@[33; 34) " " 44 WHITESPACE@33..34 " "
45 IF_EXPR@[34; 44) 45 IF_EXPR@34..44
46 IF_KW@[34; 36) "if" 46 IF_KW@34..36 "if"
47 WHITESPACE@[36; 37) " " 47 WHITESPACE@36..37 " "
48 CONDITION@[37; 41) 48 CONDITION@37..41
49 LITERAL@[37; 41) 49 LITERAL@37..41
50 TRUE_KW@[37; 41) "true" 50 TRUE_KW@37..41 "true"
51 WHITESPACE@[41; 42) " " 51 WHITESPACE@41..42 " "
52 BLOCK_EXPR@[42; 44) 52 BLOCK_EXPR@42..44
53 BLOCK@[42; 44) 53 BLOCK@42..44
54 L_CURLY@[42; 43) "{" 54 L_CURLY@42..43 "{"
55 R_CURLY@[43; 44) "}" 55 R_CURLY@43..44 "}"
56 SEMICOLON@[44; 45) ";" 56 SEMICOLON@44..45 ";"
57 WHITESPACE@[45; 46) "\n" 57 WHITESPACE@45..46 "\n"
58 R_CURLY@[46; 47) "}" 58 R_CURLY@46..47 "}"
59 WHITESPACE@[47; 48) "\n" 59 WHITESPACE@47..48 "\n"
60error [24; 24): attributes are not allowed on BIN_EXPR 60error 24..24: attributes are not allowed on BIN_EXPR
61error [44; 44): attributes are not allowed on IF_EXPR 61error 44..44: attributes are not allowed on IF_EXPR
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0010_bad_tuple_index_expr.rast b/crates/ra_syntax/test_data/parser/inline/err/0010_bad_tuple_index_expr.rast
index 61d737abe..5339a84d7 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0010_bad_tuple_index_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0010_bad_tuple_index_expr.rast
@@ -1,53 +1,53 @@
1SOURCE_FILE@[0; 47) 1SOURCE_FILE@0..47
2 FN_DEF@[0; 46) 2 FN_DEF@0..46
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 46) 11 BLOCK_EXPR@9..46
12 BLOCK@[9; 46) 12 BLOCK@9..46
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 20) 15 EXPR_STMT@15..20
16 FIELD_EXPR@[15; 19) 16 FIELD_EXPR@15..19
17 PATH_EXPR@[15; 16) 17 PATH_EXPR@15..16
18 PATH@[15; 16) 18 PATH@15..16
19 PATH_SEGMENT@[15; 16) 19 PATH_SEGMENT@15..16
20 NAME_REF@[15; 16) 20 NAME_REF@15..16
21 IDENT@[15; 16) "x" 21 IDENT@15..16 "x"
22 DOT@[16; 17) "." 22 DOT@16..17 "."
23 FLOAT_NUMBER@[17; 19) "0." 23 FLOAT_NUMBER@17..19 "0."
24 SEMICOLON@[19; 20) ";" 24 SEMICOLON@19..20 ";"
25 WHITESPACE@[20; 25) "\n " 25 WHITESPACE@20..25 "\n "
26 EXPR_STMT@[25; 32) 26 EXPR_STMT@25..32
27 FIELD_EXPR@[25; 31) 27 FIELD_EXPR@25..31
28 PATH_EXPR@[25; 26) 28 PATH_EXPR@25..26
29 PATH@[25; 26) 29 PATH@25..26
30 PATH_SEGMENT@[25; 26) 30 PATH_SEGMENT@25..26
31 NAME_REF@[25; 26) 31 NAME_REF@25..26
32 IDENT@[25; 26) "x" 32 IDENT@25..26 "x"
33 DOT@[26; 27) "." 33 DOT@26..27 "."
34 NAME_REF@[27; 31) 34 NAME_REF@27..31
35 INT_NUMBER@[27; 31) "1i32" 35 INT_NUMBER@27..31 "1i32"
36 SEMICOLON@[31; 32) ";" 36 SEMICOLON@31..32 ";"
37 WHITESPACE@[32; 37) "\n " 37 WHITESPACE@32..37 "\n "
38 EXPR_STMT@[37; 44) 38 EXPR_STMT@37..44
39 FIELD_EXPR@[37; 43) 39 FIELD_EXPR@37..43
40 PATH_EXPR@[37; 38) 40 PATH_EXPR@37..38
41 PATH@[37; 38) 41 PATH@37..38
42 PATH_SEGMENT@[37; 38) 42 PATH_SEGMENT@37..38
43 NAME_REF@[37; 38) 43 NAME_REF@37..38
44 IDENT@[37; 38) "x" 44 IDENT@37..38 "x"
45 DOT@[38; 39) "." 45 DOT@38..39 "."
46 NAME_REF@[39; 43) 46 NAME_REF@39..43
47 INT_NUMBER@[39; 43) "0x01" 47 INT_NUMBER@39..43 "0x01"
48 SEMICOLON@[43; 44) ";" 48 SEMICOLON@43..44 ";"
49 WHITESPACE@[44; 45) "\n" 49 WHITESPACE@44..45 "\n"
50 R_CURLY@[45; 46) "}" 50 R_CURLY@45..46 "}"
51 WHITESPACE@[46; 47) "\n" 51 WHITESPACE@46..47 "\n"
52error [27; 31): Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix 52error 27..31: Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix
53error [39; 43): Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix 53error 39..43: Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast b/crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast
index f6ac0feaf..20ed39046 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast
@@ -1,41 +1,41 @@
1SOURCE_FILE@[0; 50) 1SOURCE_FILE@0..50
2 ERROR@[0; 6) 2 ERROR@0..6
3 UNSAFE_KW@[0; 6) "unsafe" 3 UNSAFE_KW@0..6 "unsafe"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 FN_DEF@[7; 24) 5 FN_DEF@7..24
6 ASYNC_KW@[7; 12) "async" 6 ASYNC_KW@7..12 "async"
7 WHITESPACE@[12; 13) " " 7 WHITESPACE@12..13 " "
8 FN_KW@[13; 15) "fn" 8 FN_KW@13..15 "fn"
9 WHITESPACE@[15; 16) " " 9 WHITESPACE@15..16 " "
10 NAME@[16; 19) 10 NAME@16..19
11 IDENT@[16; 19) "foo" 11 IDENT@16..19 "foo"
12 PARAM_LIST@[19; 21) 12 PARAM_LIST@19..21
13 L_PAREN@[19; 20) "(" 13 L_PAREN@19..20 "("
14 R_PAREN@[20; 21) ")" 14 R_PAREN@20..21 ")"
15 WHITESPACE@[21; 22) " " 15 WHITESPACE@21..22 " "
16 BLOCK_EXPR@[22; 24) 16 BLOCK_EXPR@22..24
17 BLOCK@[22; 24) 17 BLOCK@22..24
18 L_CURLY@[22; 23) "{" 18 L_CURLY@22..23 "{"
19 R_CURLY@[23; 24) "}" 19 R_CURLY@23..24 "}"
20 WHITESPACE@[24; 25) "\n" 20 WHITESPACE@24..25 "\n"
21 ERROR@[25; 31) 21 ERROR@25..31
22 UNSAFE_KW@[25; 31) "unsafe" 22 UNSAFE_KW@25..31 "unsafe"
23 WHITESPACE@[31; 32) " " 23 WHITESPACE@31..32 " "
24 FN_DEF@[32; 49) 24 FN_DEF@32..49
25 CONST_KW@[32; 37) "const" 25 CONST_KW@32..37 "const"
26 WHITESPACE@[37; 38) " " 26 WHITESPACE@37..38 " "
27 FN_KW@[38; 40) "fn" 27 FN_KW@38..40 "fn"
28 WHITESPACE@[40; 41) " " 28 WHITESPACE@40..41 " "
29 NAME@[41; 44) 29 NAME@41..44
30 IDENT@[41; 44) "bar" 30 IDENT@41..44 "bar"
31 PARAM_LIST@[44; 46) 31 PARAM_LIST@44..46
32 L_PAREN@[44; 45) "(" 32 L_PAREN@44..45 "("
33 R_PAREN@[45; 46) ")" 33 R_PAREN@45..46 ")"
34 WHITESPACE@[46; 47) " " 34 WHITESPACE@46..47 " "
35 BLOCK_EXPR@[47; 49) 35 BLOCK_EXPR@47..49
36 BLOCK@[47; 49) 36 BLOCK@47..49
37 L_CURLY@[47; 48) "{" 37 L_CURLY@47..48 "{"
38 R_CURLY@[48; 49) "}" 38 R_CURLY@48..49 "}"
39 WHITESPACE@[49; 50) "\n" 39 WHITESPACE@49..50 "\n"
40error [6; 6): expected existential, fn, trait or impl 40error 6..6: expected existential, fn, trait or impl
41error [31; 31): expected existential, fn, trait or impl 41error 31..31: expected existential, fn, trait or impl
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0013_static_underscore.rast b/crates/ra_syntax/test_data/parser/inline/err/0013_static_underscore.rast
index 62fca0a39..ebcc26e0d 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0013_static_underscore.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0013_static_underscore.rast
@@ -1,21 +1,21 @@
1SOURCE_FILE@[0; 19) 1SOURCE_FILE@0..19
2 STATIC_DEF@[0; 18) 2 STATIC_DEF@0..18
3 STATIC_KW@[0; 6) "static" 3 STATIC_KW@0..6 "static"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 ERROR@[7; 8) 5 ERROR@7..8
6 UNDERSCORE@[7; 8) "_" 6 UNDERSCORE@7..8 "_"
7 COLON@[8; 9) ":" 7 COLON@8..9 ":"
8 WHITESPACE@[9; 10) " " 8 WHITESPACE@9..10 " "
9 PATH_TYPE@[10; 13) 9 PATH_TYPE@10..13
10 PATH@[10; 13) 10 PATH@10..13
11 PATH_SEGMENT@[10; 13) 11 PATH_SEGMENT@10..13
12 NAME_REF@[10; 13) 12 NAME_REF@10..13
13 IDENT@[10; 13) "i32" 13 IDENT@10..13 "i32"
14 WHITESPACE@[13; 14) " " 14 WHITESPACE@13..14 " "
15 EQ@[14; 15) "=" 15 EQ@14..15 "="
16 WHITESPACE@[15; 16) " " 16 WHITESPACE@15..16 " "
17 LITERAL@[16; 17) 17 LITERAL@16..17
18 INT_NUMBER@[16; 17) "5" 18 INT_NUMBER@16..17 "5"
19 SEMICOLON@[17; 18) ";" 19 SEMICOLON@17..18 ";"
20 WHITESPACE@[18; 19) "\n" 20 WHITESPACE@18..19 "\n"
21error [7; 7): expected a name 21error 7..7: expected a name
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast b/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast
index aa960d3ef..88567263e 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast
@@ -1,59 +1,59 @@
1SOURCE_FILE@[0; 62) 1SOURCE_FILE@0..62
2 TRAIT_DEF@[0; 61) 2 TRAIT_DEF@0..61
3 TRAIT_KW@[0; 5) "trait" 3 TRAIT_KW@0..5 "trait"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 7) 5 NAME@6..7
6 IDENT@[6; 7) "T" 6 IDENT@6..7 "T"
7 WHITESPACE@[7; 8) " " 7 WHITESPACE@7..8 " "
8 ITEM_LIST@[8; 61) 8 ITEM_LIST@8..61
9 L_CURLY@[8; 9) "{" 9 L_CURLY@8..9 "{"
10 WHITESPACE@[9; 14) "\n " 10 WHITESPACE@9..14 "\n "
11 MACRO_CALL@[14; 21) 11 MACRO_CALL@14..21
12 PATH@[14; 21) 12 PATH@14..21
13 PATH_SEGMENT@[14; 21) 13 PATH_SEGMENT@14..21
14 NAME_REF@[14; 21) 14 NAME_REF@14..21
15 IDENT@[14; 21) "default" 15 IDENT@14..21 "default"
16 WHITESPACE@[21; 22) " " 16 WHITESPACE@21..22 " "
17 TYPE_ALIAS_DEF@[22; 35) 17 TYPE_ALIAS_DEF@22..35
18 TYPE_KW@[22; 26) "type" 18 TYPE_KW@22..26 "type"
19 WHITESPACE@[26; 27) " " 19 WHITESPACE@26..27 " "
20 NAME@[27; 28) 20 NAME@27..28
21 IDENT@[27; 28) "T" 21 IDENT@27..28 "T"
22 WHITESPACE@[28; 29) " " 22 WHITESPACE@28..29 " "
23 EQ@[29; 30) "=" 23 EQ@29..30 "="
24 WHITESPACE@[30; 31) " " 24 WHITESPACE@30..31 " "
25 PATH_TYPE@[31; 34) 25 PATH_TYPE@31..34
26 PATH@[31; 34) 26 PATH@31..34
27 PATH_SEGMENT@[31; 34) 27 PATH_SEGMENT@31..34
28 NAME_REF@[31; 34) 28 NAME_REF@31..34
29 IDENT@[31; 34) "Bar" 29 IDENT@31..34 "Bar"
30 SEMICOLON@[34; 35) ";" 30 SEMICOLON@34..35 ";"
31 WHITESPACE@[35; 40) "\n " 31 WHITESPACE@35..40 "\n "
32 MACRO_CALL@[40; 47) 32 MACRO_CALL@40..47
33 PATH@[40; 47) 33 PATH@40..47
34 PATH_SEGMENT@[40; 47) 34 PATH_SEGMENT@40..47
35 NAME_REF@[40; 47) 35 NAME_REF@40..47
36 IDENT@[40; 47) "default" 36 IDENT@40..47 "default"
37 WHITESPACE@[47; 48) " " 37 WHITESPACE@47..48 " "
38 FN_DEF@[48; 59) 38 FN_DEF@48..59
39 FN_KW@[48; 50) "fn" 39 FN_KW@48..50 "fn"
40 WHITESPACE@[50; 51) " " 40 WHITESPACE@50..51 " "
41 NAME@[51; 54) 41 NAME@51..54
42 IDENT@[51; 54) "foo" 42 IDENT@51..54 "foo"
43 PARAM_LIST@[54; 56) 43 PARAM_LIST@54..56
44 L_PAREN@[54; 55) "(" 44 L_PAREN@54..55 "("
45 R_PAREN@[55; 56) ")" 45 R_PAREN@55..56 ")"
46 WHITESPACE@[56; 57) " " 46 WHITESPACE@56..57 " "
47 BLOCK_EXPR@[57; 59) 47 BLOCK_EXPR@57..59
48 BLOCK@[57; 59) 48 BLOCK@57..59
49 L_CURLY@[57; 58) "{" 49 L_CURLY@57..58 "{"
50 R_CURLY@[58; 59) "}" 50 R_CURLY@58..59 "}"
51 WHITESPACE@[59; 60) "\n" 51 WHITESPACE@59..60 "\n"
52 R_CURLY@[60; 61) "}" 52 R_CURLY@60..61 "}"
53 WHITESPACE@[61; 62) "\n" 53 WHITESPACE@61..62 "\n"
54error [21; 21): expected BANG 54error 21..21: expected BANG
55error [21; 21): expected `{`, `[`, `(` 55error 21..21: expected `{`, `[`, `(`
56error [21; 21): expected SEMICOLON 56error 21..21: expected SEMICOLON
57error [47; 47): expected BANG 57error 47..47: expected BANG
58error [47; 47): expected `{`, `[`, `(` 58error 47..47: expected `{`, `[`, `(`
59error [47; 47): expected SEMICOLON 59error 47..47: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/inline/err/0014_record_literal_before_ellipsis_recovery.rast b/crates/ra_syntax/test_data/parser/inline/err/0014_record_literal_before_ellipsis_recovery.rast
index 75043c9c0..578befa56 100644
--- a/crates/ra_syntax/test_data/parser/inline/err/0014_record_literal_before_ellipsis_recovery.rast
+++ b/crates/ra_syntax/test_data/parser/inline/err/0014_record_literal_before_ellipsis_recovery.rast
@@ -1,49 +1,49 @@
1SOURCE_FILE@[0; 45) 1SOURCE_FILE@0..45
2 FN_DEF@[0; 44) 2 FN_DEF@0..44
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 44) 11 BLOCK_EXPR@10..44
12 BLOCK@[10; 44) 12 BLOCK@10..44
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 RECORD_LIT@[16; 42) 15 RECORD_LIT@16..42
16 PATH@[16; 17) 16 PATH@16..17
17 PATH_SEGMENT@[16; 17) 17 PATH_SEGMENT@16..17
18 NAME_REF@[16; 17) 18 NAME_REF@16..17
19 IDENT@[16; 17) "S" 19 IDENT@16..17 "S"
20 WHITESPACE@[17; 18) " " 20 WHITESPACE@17..18 " "
21 RECORD_FIELD_LIST@[18; 42) 21 RECORD_FIELD_LIST@18..42
22 L_CURLY@[18; 19) "{" 22 L_CURLY@18..19 "{"
23 WHITESPACE@[19; 20) " " 23 WHITESPACE@19..20 " "
24 RECORD_FIELD@[20; 40) 24 RECORD_FIELD@20..40
25 NAME_REF@[20; 25) 25 NAME_REF@20..25
26 IDENT@[20; 25) "field" 26 IDENT@20..25 "field"
27 WHITESPACE@[25; 26) " " 27 WHITESPACE@25..26 " "
28 RANGE_EXPR@[26; 40) 28 RANGE_EXPR@26..40
29 DOT2@[26; 28) ".." 29 DOT2@26..28 ".."
30 CALL_EXPR@[28; 40) 30 CALL_EXPR@28..40
31 PATH_EXPR@[28; 38) 31 PATH_EXPR@28..38
32 PATH@[28; 38) 32 PATH@28..38
33 PATH@[28; 29) 33 PATH@28..29
34 PATH_SEGMENT@[28; 29) 34 PATH_SEGMENT@28..29
35 NAME_REF@[28; 29) 35 NAME_REF@28..29
36 IDENT@[28; 29) "S" 36 IDENT@28..29 "S"
37 COLON2@[29; 31) "::" 37 COLON2@29..31 "::"
38 PATH_SEGMENT@[31; 38) 38 PATH_SEGMENT@31..38
39 NAME_REF@[31; 38) 39 NAME_REF@31..38
40 IDENT@[31; 38) "default" 40 IDENT@31..38 "default"
41 ARG_LIST@[38; 40) 41 ARG_LIST@38..40
42 L_PAREN@[38; 39) "(" 42 L_PAREN@38..39 "("
43 R_PAREN@[39; 40) ")" 43 R_PAREN@39..40 ")"
44 WHITESPACE@[40; 41) " " 44 WHITESPACE@40..41 " "
45 R_CURLY@[41; 42) "}" 45 R_CURLY@41..42 "}"
46 WHITESPACE@[42; 43) "\n" 46 WHITESPACE@42..43 "\n"
47 R_CURLY@[43; 44) "}" 47 R_CURLY@43..44 "}"
48 WHITESPACE@[44; 45) "\n" 48 WHITESPACE@44..45 "\n"
49error [25; 25): expected COLON 49error 25..25: expected COLON
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast b/crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast
index 25c6ef7e3..a1fabb557 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast
@@ -1,72 +1,72 @@
1SOURCE_FILE@[0; 83) 1SOURCE_FILE@0..83
2 IMPL_DEF@[0; 82) 2 IMPL_DEF@0..82
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 6) 5 PATH_TYPE@5..6
6 PATH@[5; 6) 6 PATH@5..6
7 PATH_SEGMENT@[5; 6) 7 PATH_SEGMENT@5..6
8 NAME_REF@[5; 6) 8 NAME_REF@5..6
9 IDENT@[5; 6) "F" 9 IDENT@5..6 "F"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 ITEM_LIST@[7; 82) 11 ITEM_LIST@7..82
12 L_CURLY@[7; 8) "{" 12 L_CURLY@7..8 "{"
13 WHITESPACE@[8; 13) "\n " 13 WHITESPACE@8..13 "\n "
14 TYPE_ALIAS_DEF@[13; 27) 14 TYPE_ALIAS_DEF@13..27
15 TYPE_KW@[13; 17) "type" 15 TYPE_KW@13..17 "type"
16 WHITESPACE@[17; 18) " " 16 WHITESPACE@17..18 " "
17 NAME@[18; 19) 17 NAME@18..19
18 IDENT@[18; 19) "A" 18 IDENT@18..19 "A"
19 COLON@[19; 20) ":" 19 COLON@19..20 ":"
20 WHITESPACE@[20; 21) " " 20 WHITESPACE@20..21 " "
21 TYPE_BOUND_LIST@[21; 26) 21 TYPE_BOUND_LIST@21..26
22 TYPE_BOUND@[21; 26) 22 TYPE_BOUND@21..26
23 PATH_TYPE@[21; 26) 23 PATH_TYPE@21..26
24 PATH@[21; 26) 24 PATH@21..26
25 PATH_SEGMENT@[21; 26) 25 PATH_SEGMENT@21..26
26 NAME_REF@[21; 26) 26 NAME_REF@21..26
27 IDENT@[21; 26) "Clone" 27 IDENT@21..26 "Clone"
28 SEMICOLON@[26; 27) ";" 28 SEMICOLON@26..27 ";"
29 WHITESPACE@[27; 32) "\n " 29 WHITESPACE@27..32 "\n "
30 CONST_DEF@[32; 45) 30 CONST_DEF@32..45
31 CONST_KW@[32; 37) "const" 31 CONST_KW@32..37 "const"
32 WHITESPACE@[37; 38) " " 32 WHITESPACE@37..38 " "
33 NAME@[38; 39) 33 NAME@38..39
34 IDENT@[38; 39) "B" 34 IDENT@38..39 "B"
35 COLON@[39; 40) ":" 35 COLON@39..40 ":"
36 WHITESPACE@[40; 41) " " 36 WHITESPACE@40..41 " "
37 PATH_TYPE@[41; 44) 37 PATH_TYPE@41..44
38 PATH@[41; 44) 38 PATH@41..44
39 PATH_SEGMENT@[41; 44) 39 PATH_SEGMENT@41..44
40 NAME_REF@[41; 44) 40 NAME_REF@41..44
41 IDENT@[41; 44) "i32" 41 IDENT@41..44 "i32"
42 SEMICOLON@[44; 45) ";" 42 SEMICOLON@44..45 ";"
43 WHITESPACE@[45; 50) "\n " 43 WHITESPACE@45..50 "\n "
44 FN_DEF@[50; 61) 44 FN_DEF@50..61
45 FN_KW@[50; 52) "fn" 45 FN_KW@50..52 "fn"
46 WHITESPACE@[52; 53) " " 46 WHITESPACE@52..53 " "
47 NAME@[53; 56) 47 NAME@53..56
48 IDENT@[53; 56) "foo" 48 IDENT@53..56 "foo"
49 PARAM_LIST@[56; 58) 49 PARAM_LIST@56..58
50 L_PAREN@[56; 57) "(" 50 L_PAREN@56..57 "("
51 R_PAREN@[57; 58) ")" 51 R_PAREN@57..58 ")"
52 WHITESPACE@[58; 59) " " 52 WHITESPACE@58..59 " "
53 BLOCK_EXPR@[59; 61) 53 BLOCK_EXPR@59..61
54 BLOCK@[59; 61) 54 BLOCK@59..61
55 L_CURLY@[59; 60) "{" 55 L_CURLY@59..60 "{"
56 R_CURLY@[60; 61) "}" 56 R_CURLY@60..61 "}"
57 WHITESPACE@[61; 66) "\n " 57 WHITESPACE@61..66 "\n "
58 FN_DEF@[66; 80) 58 FN_DEF@66..80
59 FN_KW@[66; 68) "fn" 59 FN_KW@66..68 "fn"
60 WHITESPACE@[68; 69) " " 60 WHITESPACE@68..69 " "
61 NAME@[69; 72) 61 NAME@69..72
62 IDENT@[69; 72) "bar" 62 IDENT@69..72 "bar"
63 PARAM_LIST@[72; 79) 63 PARAM_LIST@72..79
64 L_PAREN@[72; 73) "(" 64 L_PAREN@72..73 "("
65 SELF_PARAM@[73; 78) 65 SELF_PARAM@73..78
66 AMP@[73; 74) "&" 66 AMP@73..74 "&"
67 SELF_KW@[74; 78) "self" 67 SELF_KW@74..78 "self"
68 R_PAREN@[78; 79) ")" 68 R_PAREN@78..79 ")"
69 SEMICOLON@[79; 80) ";" 69 SEMICOLON@79..80 ";"
70 WHITESPACE@[80; 81) "\n" 70 WHITESPACE@80..81 "\n"
71 R_CURLY@[81; 82) "}" 71 R_CURLY@81..82 "}"
72 WHITESPACE@[82; 83) "\n" 72 WHITESPACE@82..83 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast b/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast
index 69c459daf..bd74b44a6 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast
@@ -1,135 +1,135 @@
1SOURCE_FILE@[0; 250) 1SOURCE_FILE@0..250
2 USE_ITEM@[0; 58) 2 USE_ITEM@0..58
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 57) 5 USE_TREE@4..57
6 USE_TREE_LIST@[4; 57) 6 USE_TREE_LIST@4..57
7 L_CURLY@[4; 5) "{" 7 L_CURLY@4..5 "{"
8 USE_TREE@[5; 28) 8 USE_TREE@5..28
9 PATH@[5; 28) 9 PATH@5..28
10 PATH@[5; 22) 10 PATH@5..22
11 PATH@[5; 16) 11 PATH@5..16
12 PATH@[5; 10) 12 PATH@5..10
13 PATH_SEGMENT@[5; 10) 13 PATH_SEGMENT@5..10
14 CRATE_KW@[5; 10) "crate" 14 CRATE_KW@5..10 "crate"
15 COLON2@[10; 12) "::" 15 COLON2@10..12 "::"
16 PATH_SEGMENT@[12; 16) 16 PATH_SEGMENT@12..16
17 NAME_REF@[12; 16) 17 NAME_REF@12..16
18 IDENT@[12; 16) "path" 18 IDENT@12..16 "path"
19 COLON2@[16; 18) "::" 19 COLON2@16..18 "::"
20 PATH_SEGMENT@[18; 22) 20 PATH_SEGMENT@18..22
21 NAME_REF@[18; 22) 21 NAME_REF@18..22
22 IDENT@[18; 22) "from" 22 IDENT@18..22 "from"
23 COLON2@[22; 24) "::" 23 COLON2@22..24 "::"
24 PATH_SEGMENT@[24; 28) 24 PATH_SEGMENT@24..28
25 NAME_REF@[24; 28) 25 NAME_REF@24..28
26 IDENT@[24; 28) "root" 26 IDENT@24..28 "root"
27 COMMA@[28; 29) "," 27 COMMA@28..29 ","
28 WHITESPACE@[29; 30) " " 28 WHITESPACE@29..30 " "
29 USE_TREE@[30; 56) 29 USE_TREE@30..56
30 PATH@[30; 56) 30 PATH@30..56
31 PATH@[30; 44) 31 PATH@30..44
32 PATH@[30; 38) 32 PATH@30..38
33 PATH@[30; 32) 33 PATH@30..32
34 PATH_SEGMENT@[30; 32) 34 PATH_SEGMENT@30..32
35 NAME_REF@[30; 32) 35 NAME_REF@30..32
36 IDENT@[30; 32) "or" 36 IDENT@30..32 "or"
37 COLON2@[32; 34) "::" 37 COLON2@32..34 "::"
38 PATH_SEGMENT@[34; 38) 38 PATH_SEGMENT@34..38
39 NAME_REF@[34; 38) 39 NAME_REF@34..38
40 IDENT@[34; 38) "path" 40 IDENT@34..38 "path"
41 COLON2@[38; 40) "::" 41 COLON2@38..40 "::"
42 PATH_SEGMENT@[40; 44) 42 PATH_SEGMENT@40..44
43 NAME_REF@[40; 44) 43 NAME_REF@40..44
44 IDENT@[40; 44) "from" 44 IDENT@40..44 "from"
45 COLON2@[44; 46) "::" 45 COLON2@44..46 "::"
46 PATH_SEGMENT@[46; 56) 46 PATH_SEGMENT@46..56
47 NAME_REF@[46; 56) 47 NAME_REF@46..56
48 IDENT@[46; 56) "crate_name" 48 IDENT@46..56 "crate_name"
49 R_CURLY@[56; 57) "}" 49 R_CURLY@56..57 "}"
50 SEMICOLON@[57; 58) ";" 50 SEMICOLON@57..58 ";"
51 WHITESPACE@[58; 59) " " 51 WHITESPACE@58..59 " "
52 COMMENT@[59; 97) "// Rust 2018 (with a ..." 52 COMMENT@59..97 "// Rust 2018 (with a ..."
53 WHITESPACE@[97; 98) "\n" 53 WHITESPACE@97..98 "\n"
54 USE_ITEM@[98; 121) 54 USE_ITEM@98..121
55 USE_KW@[98; 101) "use" 55 USE_KW@98..101 "use"
56 WHITESPACE@[101; 102) " " 56 WHITESPACE@101..102 " "
57 USE_TREE@[102; 120) 57 USE_TREE@102..120
58 USE_TREE_LIST@[102; 120) 58 USE_TREE_LIST@102..120
59 L_CURLY@[102; 103) "{" 59 L_CURLY@102..103 "{"
60 USE_TREE@[103; 119) 60 USE_TREE@103..119
61 PATH@[103; 119) 61 PATH@103..119
62 PATH@[103; 113) 62 PATH@103..113
63 PATH@[103; 107) 63 PATH@103..107
64 PATH_SEGMENT@[103; 107) 64 PATH_SEGMENT@103..107
65 NAME_REF@[103; 107) 65 NAME_REF@103..107
66 IDENT@[103; 107) "path" 66 IDENT@103..107 "path"
67 COLON2@[107; 109) "::" 67 COLON2@107..109 "::"
68 PATH_SEGMENT@[109; 113) 68 PATH_SEGMENT@109..113
69 NAME_REF@[109; 113) 69 NAME_REF@109..113
70 IDENT@[109; 113) "from" 70 IDENT@109..113 "from"
71 COLON2@[113; 115) "::" 71 COLON2@113..115 "::"
72 PATH_SEGMENT@[115; 119) 72 PATH_SEGMENT@115..119
73 NAME_REF@[115; 119) 73 NAME_REF@115..119
74 IDENT@[115; 119) "root" 74 IDENT@115..119 "root"
75 R_CURLY@[119; 120) "}" 75 R_CURLY@119..120 "}"
76 SEMICOLON@[120; 121) ";" 76 SEMICOLON@120..121 ";"
77 WHITESPACE@[121; 122) " " 77 WHITESPACE@121..122 " "
78 COMMENT@[122; 134) "// Rust 2015" 78 COMMENT@122..134 "// Rust 2015"
79 WHITESPACE@[134; 135) "\n" 79 WHITESPACE@134..135 "\n"
80 USE_ITEM@[135; 166) 80 USE_ITEM@135..166
81 USE_KW@[135; 138) "use" 81 USE_KW@135..138 "use"
82 WHITESPACE@[138; 139) " " 82 WHITESPACE@138..139 " "
83 USE_TREE@[139; 165) 83 USE_TREE@139..165
84 COLON2@[139; 141) "::" 84 COLON2@139..141 "::"
85 USE_TREE_LIST@[141; 165) 85 USE_TREE_LIST@141..165
86 L_CURLY@[141; 142) "{" 86 L_CURLY@141..142 "{"
87 USE_TREE@[142; 164) 87 USE_TREE@142..164
88 PATH@[142; 164) 88 PATH@142..164
89 PATH@[142; 158) 89 PATH@142..158
90 PATH@[142; 146) 90 PATH@142..146
91 PATH_SEGMENT@[142; 146) 91 PATH_SEGMENT@142..146
92 NAME_REF@[142; 146) 92 NAME_REF@142..146
93 IDENT@[142; 146) "some" 93 IDENT@142..146 "some"
94 COLON2@[146; 148) "::" 94 COLON2@146..148 "::"
95 PATH_SEGMENT@[148; 158) 95 PATH_SEGMENT@148..158
96 NAME_REF@[148; 158) 96 NAME_REF@148..158
97 IDENT@[148; 158) "arbritrary" 97 IDENT@148..158 "arbritrary"
98 COLON2@[158; 160) "::" 98 COLON2@158..160 "::"
99 PATH_SEGMENT@[160; 164) 99 PATH_SEGMENT@160..164
100 NAME_REF@[160; 164) 100 NAME_REF@160..164
101 IDENT@[160; 164) "path" 101 IDENT@160..164 "path"
102 R_CURLY@[164; 165) "}" 102 R_CURLY@164..165 "}"
103 SEMICOLON@[165; 166) ";" 103 SEMICOLON@165..166 ";"
104 WHITESPACE@[166; 167) " " 104 WHITESPACE@166..167 " "
105 COMMENT@[167; 179) "// Rust 2015" 105 COMMENT@167..179 "// Rust 2015"
106 WHITESPACE@[179; 180) "\n" 106 WHITESPACE@179..180 "\n"
107 USE_ITEM@[180; 206) 107 USE_ITEM@180..206
108 USE_KW@[180; 183) "use" 108 USE_KW@180..183 "use"
109 WHITESPACE@[183; 184) " " 109 WHITESPACE@183..184 " "
110 USE_TREE@[184; 205) 110 USE_TREE@184..205
111 COLON2@[184; 186) "::" 111 COLON2@184..186 "::"
112 USE_TREE_LIST@[186; 205) 112 USE_TREE_LIST@186..205
113 L_CURLY@[186; 187) "{" 113 L_CURLY@186..187 "{"
114 USE_TREE@[187; 204) 114 USE_TREE@187..204
115 USE_TREE_LIST@[187; 204) 115 USE_TREE_LIST@187..204
116 L_CURLY@[187; 188) "{" 116 L_CURLY@187..188 "{"
117 USE_TREE@[188; 203) 117 USE_TREE@188..203
118 USE_TREE_LIST@[188; 203) 118 USE_TREE_LIST@188..203
119 L_CURLY@[188; 189) "{" 119 L_CURLY@188..189 "{"
120 USE_TREE@[189; 202) 120 USE_TREE@189..202
121 PATH@[189; 202) 121 PATH@189..202
122 PATH@[189; 194) 122 PATH@189..194
123 PATH_SEGMENT@[189; 194) 123 PATH_SEGMENT@189..194
124 CRATE_KW@[189; 194) "crate" 124 CRATE_KW@189..194 "crate"
125 COLON2@[194; 196) "::" 125 COLON2@194..196 "::"
126 PATH_SEGMENT@[196; 202) 126 PATH_SEGMENT@196..202
127 NAME_REF@[196; 202) 127 NAME_REF@196..202
128 IDENT@[196; 202) "export" 128 IDENT@196..202 "export"
129 R_CURLY@[202; 203) "}" 129 R_CURLY@202..203 "}"
130 R_CURLY@[203; 204) "}" 130 R_CURLY@203..204 "}"
131 R_CURLY@[204; 205) "}" 131 R_CURLY@204..205 "}"
132 SEMICOLON@[205; 206) ";" 132 SEMICOLON@205..206 ";"
133 WHITESPACE@[206; 207) " " 133 WHITESPACE@206..207 " "
134 COMMENT@[207; 249) "// Nonsensical but pe ..." 134 COMMENT@207..249 "// Nonsensical but pe ..."
135 WHITESPACE@[249; 250) "\n" 135 WHITESPACE@249..250 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast b/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast
index e3f5a7f04..a46d76fde 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast
@@ -1,62 +1,62 @@
1SOURCE_FILE@[0; 49) 1SOURCE_FILE@0..49
2 FN_DEF@[0; 48) 2 FN_DEF@0..48
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "test" 6 IDENT@3..7 "test"
7 TYPE_PARAM_LIST@[7; 10) 7 TYPE_PARAM_LIST@7..10
8 L_ANGLE@[7; 8) "<" 8 L_ANGLE@7..8 "<"
9 TYPE_PARAM@[8; 9) 9 TYPE_PARAM@8..9
10 NAME@[8; 9) 10 NAME@8..9
11 IDENT@[8; 9) "F" 11 IDENT@8..9 "F"
12 R_ANGLE@[9; 10) ">" 12 R_ANGLE@9..10 ">"
13 PARAM_LIST@[10; 12) 13 PARAM_LIST@10..12
14 L_PAREN@[10; 11) "(" 14 L_PAREN@10..11 "("
15 R_PAREN@[11; 12) ")" 15 R_PAREN@11..12 ")"
16 WHITESPACE@[12; 13) "\n" 16 WHITESPACE@12..13 "\n"
17 WHERE_CLAUSE@[13; 44) 17 WHERE_CLAUSE@13..44
18 WHERE_KW@[13; 18) "where" 18 WHERE_KW@13..18 "where"
19 WHITESPACE@[18; 22) "\n " 19 WHITESPACE@18..22 "\n "
20 WHERE_PRED@[22; 44) 20 WHERE_PRED@22..44
21 FOR_TYPE@[22; 31) 21 FOR_TYPE@22..31
22 FOR_KW@[22; 25) "for" 22 FOR_KW@22..25 "for"
23 TYPE_PARAM_LIST@[25; 29) 23 TYPE_PARAM_LIST@25..29
24 L_ANGLE@[25; 26) "<" 24 L_ANGLE@25..26 "<"
25 LIFETIME_PARAM@[26; 28) 25 LIFETIME_PARAM@26..28
26 LIFETIME@[26; 28) "\'a" 26 LIFETIME@26..28 "\'a"
27 R_ANGLE@[28; 29) ">" 27 R_ANGLE@28..29 ">"
28 WHITESPACE@[29; 30) " " 28 WHITESPACE@29..30 " "
29 PATH_TYPE@[30; 31) 29 PATH_TYPE@30..31
30 PATH@[30; 31) 30 PATH@30..31
31 PATH_SEGMENT@[30; 31) 31 PATH_SEGMENT@30..31
32 NAME_REF@[30; 31) 32 NAME_REF@30..31
33 IDENT@[30; 31) "F" 33 IDENT@30..31 "F"
34 COLON@[31; 32) ":" 34 COLON@31..32 ":"
35 WHITESPACE@[32; 33) " " 35 WHITESPACE@32..33 " "
36 TYPE_BOUND_LIST@[33; 44) 36 TYPE_BOUND_LIST@33..44
37 TYPE_BOUND@[33; 44) 37 TYPE_BOUND@33..44
38 PATH_TYPE@[33; 44) 38 PATH_TYPE@33..44
39 PATH@[33; 44) 39 PATH@33..44
40 PATH_SEGMENT@[33; 44) 40 PATH_SEGMENT@33..44
41 NAME_REF@[33; 35) 41 NAME_REF@33..35
42 IDENT@[33; 35) "Fn" 42 IDENT@33..35 "Fn"
43 PARAM_LIST@[35; 44) 43 PARAM_LIST@35..44
44 L_PAREN@[35; 36) "(" 44 L_PAREN@35..36 "("
45 PARAM@[36; 43) 45 PARAM@36..43
46 REFERENCE_TYPE@[36; 43) 46 REFERENCE_TYPE@36..43
47 AMP@[36; 37) "&" 47 AMP@36..37 "&"
48 LIFETIME@[37; 39) "\'a" 48 LIFETIME@37..39 "\'a"
49 WHITESPACE@[39; 40) " " 49 WHITESPACE@39..40 " "
50 PATH_TYPE@[40; 43) 50 PATH_TYPE@40..43
51 PATH@[40; 43) 51 PATH@40..43
52 PATH_SEGMENT@[40; 43) 52 PATH_SEGMENT@40..43
53 NAME_REF@[40; 43) 53 NAME_REF@40..43
54 IDENT@[40; 43) "str" 54 IDENT@40..43 "str"
55 R_PAREN@[43; 44) ")" 55 R_PAREN@43..44 ")"
56 WHITESPACE@[44; 45) "\n" 56 WHITESPACE@44..45 "\n"
57 BLOCK_EXPR@[45; 48) 57 BLOCK_EXPR@45..48
58 BLOCK@[45; 48) 58 BLOCK@45..48
59 L_CURLY@[45; 46) "{" 59 L_CURLY@45..46 "{"
60 WHITESPACE@[46; 47) " " 60 WHITESPACE@46..47 " "
61 R_CURLY@[47; 48) "}" 61 R_CURLY@47..48 "}"
62 WHITESPACE@[48; 49) "\n" 62 WHITESPACE@48..49 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0004_value_parameters_no_patterns.rast b/crates/ra_syntax/test_data/parser/inline/ok/0004_value_parameters_no_patterns.rast
index a0cf1e4f6..20eba09f5 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0004_value_parameters_no_patterns.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0004_value_parameters_no_patterns.rast
@@ -1,60 +1,60 @@
1SOURCE_FILE@[0; 39) 1SOURCE_FILE@0..39
2 TYPE_ALIAS_DEF@[0; 38) 2 TYPE_ALIAS_DEF@0..38
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "F" 6 IDENT@5..6 "F"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 PATH_TYPE@[9; 37) 10 PATH_TYPE@9..37
11 PATH@[9; 37) 11 PATH@9..37
12 PATH_SEGMENT@[9; 37) 12 PATH_SEGMENT@9..37
13 NAME_REF@[9; 12) 13 NAME_REF@9..12
14 IDENT@[9; 12) "Box" 14 IDENT@9..12 "Box"
15 TYPE_ARG_LIST@[12; 37) 15 TYPE_ARG_LIST@12..37
16 L_ANGLE@[12; 13) "<" 16 L_ANGLE@12..13 "<"
17 TYPE_ARG@[13; 36) 17 TYPE_ARG@13..36
18 PATH_TYPE@[13; 36) 18 PATH_TYPE@13..36
19 PATH@[13; 36) 19 PATH@13..36
20 PATH_SEGMENT@[13; 36) 20 PATH_SEGMENT@13..36
21 NAME_REF@[13; 15) 21 NAME_REF@13..15
22 IDENT@[13; 15) "Fn" 22 IDENT@13..15 "Fn"
23 PARAM_LIST@[15; 36) 23 PARAM_LIST@15..36
24 L_PAREN@[15; 16) "(" 24 L_PAREN@15..16 "("
25 PARAM@[16; 19) 25 PARAM@16..19
26 PATH_TYPE@[16; 19) 26 PATH_TYPE@16..19
27 PATH@[16; 19) 27 PATH@16..19
28 PATH_SEGMENT@[16; 19) 28 PATH_SEGMENT@16..19
29 NAME_REF@[16; 19) 29 NAME_REF@16..19
30 IDENT@[16; 19) "i32" 30 IDENT@16..19 "i32"
31 COMMA@[19; 20) "," 31 COMMA@19..20 ","
32 WHITESPACE@[20; 21) " " 32 WHITESPACE@20..21 " "
33 PARAM@[21; 25) 33 PARAM@21..25
34 REFERENCE_TYPE@[21; 25) 34 REFERENCE_TYPE@21..25
35 AMP@[21; 22) "&" 35 AMP@21..22 "&"
36 PATH_TYPE@[22; 25) 36 PATH_TYPE@22..25
37 PATH@[22; 25) 37 PATH@22..25
38 PATH_SEGMENT@[22; 25) 38 PATH_SEGMENT@22..25
39 NAME_REF@[22; 25) 39 NAME_REF@22..25
40 IDENT@[22; 25) "i32" 40 IDENT@22..25 "i32"
41 COMMA@[25; 26) "," 41 COMMA@25..26 ","
42 WHITESPACE@[26; 27) " " 42 WHITESPACE@26..27 " "
43 PARAM@[27; 31) 43 PARAM@27..31
44 REFERENCE_TYPE@[27; 31) 44 REFERENCE_TYPE@27..31
45 AMP@[27; 28) "&" 45 AMP@27..28 "&"
46 PATH_TYPE@[28; 31) 46 PATH_TYPE@28..31
47 PATH@[28; 31) 47 PATH@28..31
48 PATH_SEGMENT@[28; 31) 48 PATH_SEGMENT@28..31
49 NAME_REF@[28; 31) 49 NAME_REF@28..31
50 IDENT@[28; 31) "i32" 50 IDENT@28..31 "i32"
51 COMMA@[31; 32) "," 51 COMMA@31..32 ","
52 WHITESPACE@[32; 33) " " 52 WHITESPACE@32..33 " "
53 PARAM@[33; 35) 53 PARAM@33..35
54 TUPLE_TYPE@[33; 35) 54 TUPLE_TYPE@33..35
55 L_PAREN@[33; 34) "(" 55 L_PAREN@33..34 "("
56 R_PAREN@[34; 35) ")" 56 R_PAREN@34..35 ")"
57 R_PAREN@[35; 36) ")" 57 R_PAREN@35..36 ")"
58 R_ANGLE@[36; 37) ">" 58 R_ANGLE@36..37 ">"
59 SEMICOLON@[37; 38) ";" 59 SEMICOLON@37..38 ";"
60 WHITESPACE@[38; 39) "\n" 60 WHITESPACE@38..39 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0005_function_type_params.rast b/crates/ra_syntax/test_data/parser/inline/ok/0005_function_type_params.rast
index 8ae7909f9..5181fcd2b 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0005_function_type_params.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0005_function_type_params.rast
@@ -1,38 +1,38 @@
1SOURCE_FILE@[0; 28) 1SOURCE_FILE@0..28
2 FN_DEF@[0; 27) 2 FN_DEF@0..27
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 TYPE_PARAM_LIST@[6; 23) 7 TYPE_PARAM_LIST@6..23
8 L_ANGLE@[6; 7) "<" 8 L_ANGLE@6..7 "<"
9 TYPE_PARAM@[7; 22) 9 TYPE_PARAM@7..22
10 NAME@[7; 8) 10 NAME@7..8
11 IDENT@[7; 8) "T" 11 IDENT@7..8 "T"
12 COLON@[8; 9) ":" 12 COLON@8..9 ":"
13 WHITESPACE@[9; 10) " " 13 WHITESPACE@9..10 " "
14 TYPE_BOUND_LIST@[10; 22) 14 TYPE_BOUND_LIST@10..22
15 TYPE_BOUND@[10; 15) 15 TYPE_BOUND@10..15
16 PATH_TYPE@[10; 15) 16 PATH_TYPE@10..15
17 PATH@[10; 15) 17 PATH@10..15
18 PATH_SEGMENT@[10; 15) 18 PATH_SEGMENT@10..15
19 NAME_REF@[10; 15) 19 NAME_REF@10..15
20 IDENT@[10; 15) "Clone" 20 IDENT@10..15 "Clone"
21 WHITESPACE@[15; 16) " " 21 WHITESPACE@15..16 " "
22 PLUS@[16; 17) "+" 22 PLUS@16..17 "+"
23 WHITESPACE@[17; 18) " " 23 WHITESPACE@17..18 " "
24 TYPE_BOUND@[18; 22) 24 TYPE_BOUND@18..22
25 PATH_TYPE@[18; 22) 25 PATH_TYPE@18..22
26 PATH@[18; 22) 26 PATH@18..22
27 PATH_SEGMENT@[18; 22) 27 PATH_SEGMENT@18..22
28 NAME_REF@[18; 22) 28 NAME_REF@18..22
29 IDENT@[18; 22) "Copy" 29 IDENT@18..22 "Copy"
30 R_ANGLE@[22; 23) ">" 30 R_ANGLE@22..23 ">"
31 PARAM_LIST@[23; 25) 31 PARAM_LIST@23..25
32 L_PAREN@[23; 24) "(" 32 L_PAREN@23..24 "("
33 R_PAREN@[24; 25) ")" 33 R_PAREN@24..25 ")"
34 BLOCK_EXPR@[25; 27) 34 BLOCK_EXPR@25..27
35 BLOCK@[25; 27) 35 BLOCK@25..27
36 L_CURLY@[25; 26) "{" 36 L_CURLY@25..26 "{"
37 R_CURLY@[26; 27) "}" 37 R_CURLY@26..27 "}"
38 WHITESPACE@[27; 28) "\n" 38 WHITESPACE@27..28 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast b/crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast
index 757ac092a..dd41b44e1 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast
@@ -1,121 +1,121 @@
1SOURCE_FILE@[0; 128) 1SOURCE_FILE@0..128
2 IMPL_DEF@[0; 127) 2 IMPL_DEF@0..127
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 6) 5 PATH_TYPE@5..6
6 PATH@[5; 6) 6 PATH@5..6
7 PATH_SEGMENT@[5; 6) 7 PATH_SEGMENT@5..6
8 NAME_REF@[5; 6) 8 NAME_REF@5..6
9 IDENT@[5; 6) "S" 9 IDENT@5..6 "S"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 ITEM_LIST@[7; 127) 11 ITEM_LIST@7..127
12 L_CURLY@[7; 8) "{" 12 L_CURLY@7..8 "{"
13 WHITESPACE@[8; 13) "\n " 13 WHITESPACE@8..13 "\n "
14 FN_DEF@[13; 26) 14 FN_DEF@13..26
15 FN_KW@[13; 15) "fn" 15 FN_KW@13..15 "fn"
16 WHITESPACE@[15; 16) " " 16 WHITESPACE@15..16 " "
17 NAME@[16; 17) 17 NAME@16..17
18 IDENT@[16; 17) "a" 18 IDENT@16..17 "a"
19 PARAM_LIST@[17; 23) 19 PARAM_LIST@17..23
20 L_PAREN@[17; 18) "(" 20 L_PAREN@17..18 "("
21 SELF_PARAM@[18; 22) 21 SELF_PARAM@18..22
22 SELF_KW@[18; 22) "self" 22 SELF_KW@18..22 "self"
23 R_PAREN@[22; 23) ")" 23 R_PAREN@22..23 ")"
24 WHITESPACE@[23; 24) " " 24 WHITESPACE@23..24 " "
25 BLOCK_EXPR@[24; 26) 25 BLOCK_EXPR@24..26
26 BLOCK@[24; 26) 26 BLOCK@24..26
27 L_CURLY@[24; 25) "{" 27 L_CURLY@24..25 "{"
28 R_CURLY@[25; 26) "}" 28 R_CURLY@25..26 "}"
29 WHITESPACE@[26; 31) "\n " 29 WHITESPACE@26..31 "\n "
30 FN_DEF@[31; 46) 30 FN_DEF@31..46
31 FN_KW@[31; 33) "fn" 31 FN_KW@31..33 "fn"
32 WHITESPACE@[33; 34) " " 32 WHITESPACE@33..34 " "
33 NAME@[34; 35) 33 NAME@34..35
34 IDENT@[34; 35) "b" 34 IDENT@34..35 "b"
35 PARAM_LIST@[35; 43) 35 PARAM_LIST@35..43
36 L_PAREN@[35; 36) "(" 36 L_PAREN@35..36 "("
37 SELF_PARAM@[36; 41) 37 SELF_PARAM@36..41
38 AMP@[36; 37) "&" 38 AMP@36..37 "&"
39 SELF_KW@[37; 41) "self" 39 SELF_KW@37..41 "self"
40 COMMA@[41; 42) "," 40 COMMA@41..42 ","
41 R_PAREN@[42; 43) ")" 41 R_PAREN@42..43 ")"
42 WHITESPACE@[43; 44) " " 42 WHITESPACE@43..44 " "
43 BLOCK_EXPR@[44; 46) 43 BLOCK_EXPR@44..46
44 BLOCK@[44; 46) 44 BLOCK@44..46
45 L_CURLY@[44; 45) "{" 45 L_CURLY@44..45 "{"
46 R_CURLY@[45; 46) "}" 46 R_CURLY@45..46 "}"
47 WHITESPACE@[46; 51) "\n " 47 WHITESPACE@46..51 "\n "
48 FN_DEF@[51; 69) 48 FN_DEF@51..69
49 FN_KW@[51; 53) "fn" 49 FN_KW@51..53 "fn"
50 WHITESPACE@[53; 54) " " 50 WHITESPACE@53..54 " "
51 NAME@[54; 55) 51 NAME@54..55
52 IDENT@[54; 55) "c" 52 IDENT@54..55 "c"
53 PARAM_LIST@[55; 66) 53 PARAM_LIST@55..66
54 L_PAREN@[55; 56) "(" 54 L_PAREN@55..56 "("
55 SELF_PARAM@[56; 64) 55 SELF_PARAM@56..64
56 AMP@[56; 57) "&" 56 AMP@56..57 "&"
57 LIFETIME@[57; 59) "\'a" 57 LIFETIME@57..59 "\'a"
58 WHITESPACE@[59; 60) " " 58 WHITESPACE@59..60 " "
59 SELF_KW@[60; 64) "self" 59 SELF_KW@60..64 "self"
60 COMMA@[64; 65) "," 60 COMMA@64..65 ","
61 R_PAREN@[65; 66) ")" 61 R_PAREN@65..66 ")"
62 WHITESPACE@[66; 67) " " 62 WHITESPACE@66..67 " "
63 BLOCK_EXPR@[67; 69) 63 BLOCK_EXPR@67..69
64 BLOCK@[67; 69) 64 BLOCK@67..69
65 L_CURLY@[67; 68) "{" 65 L_CURLY@67..68 "{"
66 R_CURLY@[68; 69) "}" 66 R_CURLY@68..69 "}"
67 WHITESPACE@[69; 74) "\n " 67 WHITESPACE@69..74 "\n "
68 FN_DEF@[74; 103) 68 FN_DEF@74..103
69 FN_KW@[74; 76) "fn" 69 FN_KW@74..76 "fn"
70 WHITESPACE@[76; 77) " " 70 WHITESPACE@76..77 " "
71 NAME@[77; 78) 71 NAME@77..78
72 IDENT@[77; 78) "d" 72 IDENT@77..78 "d"
73 PARAM_LIST@[78; 100) 73 PARAM_LIST@78..100
74 L_PAREN@[78; 79) "(" 74 L_PAREN@78..79 "("
75 SELF_PARAM@[79; 91) 75 SELF_PARAM@79..91
76 AMP@[79; 80) "&" 76 AMP@79..80 "&"
77 LIFETIME@[80; 82) "\'a" 77 LIFETIME@80..82 "\'a"
78 WHITESPACE@[82; 83) " " 78 WHITESPACE@82..83 " "
79 MUT_KW@[83; 86) "mut" 79 MUT_KW@83..86 "mut"
80 WHITESPACE@[86; 87) " " 80 WHITESPACE@86..87 " "
81 SELF_KW@[87; 91) "self" 81 SELF_KW@87..91 "self"
82 COMMA@[91; 92) "," 82 COMMA@91..92 ","
83 WHITESPACE@[92; 93) " " 83 WHITESPACE@92..93 " "
84 PARAM@[93; 99) 84 PARAM@93..99
85 BIND_PAT@[93; 94) 85 BIND_PAT@93..94
86 NAME@[93; 94) 86 NAME@93..94
87 IDENT@[93; 94) "x" 87 IDENT@93..94 "x"
88 COLON@[94; 95) ":" 88 COLON@94..95 ":"
89 WHITESPACE@[95; 96) " " 89 WHITESPACE@95..96 " "
90 PATH_TYPE@[96; 99) 90 PATH_TYPE@96..99
91 PATH@[96; 99) 91 PATH@96..99
92 PATH_SEGMENT@[96; 99) 92 PATH_SEGMENT@96..99
93 NAME_REF@[96; 99) 93 NAME_REF@96..99
94 IDENT@[96; 99) "i32" 94 IDENT@96..99 "i32"
95 R_PAREN@[99; 100) ")" 95 R_PAREN@99..100 ")"
96 WHITESPACE@[100; 101) " " 96 WHITESPACE@100..101 " "
97 BLOCK_EXPR@[101; 103) 97 BLOCK_EXPR@101..103
98 BLOCK@[101; 103) 98 BLOCK@101..103
99 L_CURLY@[101; 102) "{" 99 L_CURLY@101..102 "{"
100 R_CURLY@[102; 103) "}" 100 R_CURLY@102..103 "}"
101 WHITESPACE@[103; 108) "\n " 101 WHITESPACE@103..108 "\n "
102 FN_DEF@[108; 125) 102 FN_DEF@108..125
103 FN_KW@[108; 110) "fn" 103 FN_KW@108..110 "fn"
104 WHITESPACE@[110; 111) " " 104 WHITESPACE@110..111 " "
105 NAME@[111; 112) 105 NAME@111..112
106 IDENT@[111; 112) "e" 106 IDENT@111..112 "e"
107 PARAM_LIST@[112; 122) 107 PARAM_LIST@112..122
108 L_PAREN@[112; 113) "(" 108 L_PAREN@112..113 "("
109 SELF_PARAM@[113; 121) 109 SELF_PARAM@113..121
110 MUT_KW@[113; 116) "mut" 110 MUT_KW@113..116 "mut"
111 WHITESPACE@[116; 117) " " 111 WHITESPACE@116..117 " "
112 SELF_KW@[117; 121) "self" 112 SELF_KW@117..121 "self"
113 R_PAREN@[121; 122) ")" 113 R_PAREN@121..122 ")"
114 WHITESPACE@[122; 123) " " 114 WHITESPACE@122..123 " "
115 BLOCK_EXPR@[123; 125) 115 BLOCK_EXPR@123..125
116 BLOCK@[123; 125) 116 BLOCK@123..125
117 L_CURLY@[123; 124) "{" 117 L_CURLY@123..124 "{"
118 R_CURLY@[124; 125) "}" 118 R_CURLY@124..125 "}"
119 WHITESPACE@[125; 126) "\n" 119 WHITESPACE@125..126 "\n"
120 R_CURLY@[126; 127) "}" 120 R_CURLY@126..127 "}"
121 WHITESPACE@[127; 128) "\n" 121 WHITESPACE@127..128 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0007_type_param_bounds.rast b/crates/ra_syntax/test_data/parser/inline/ok/0007_type_param_bounds.rast
index 027abf179..7cb9e1d55 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0007_type_param_bounds.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0007_type_param_bounds.rast
@@ -1,40 +1,40 @@
1SOURCE_FILE@[0; 35) 1SOURCE_FILE@0..35
2 STRUCT_DEF@[0; 34) 2 STRUCT_DEF@0..34
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 TYPE_PARAM_LIST@[8; 33) 7 TYPE_PARAM_LIST@8..33
8 L_ANGLE@[8; 9) "<" 8 L_ANGLE@8..9 "<"
9 TYPE_PARAM@[9; 32) 9 TYPE_PARAM@9..32
10 NAME@[9; 10) 10 NAME@9..10
11 IDENT@[9; 10) "T" 11 IDENT@9..10 "T"
12 COLON@[10; 11) ":" 12 COLON@10..11 ":"
13 WHITESPACE@[11; 12) " " 13 WHITESPACE@11..12 " "
14 TYPE_BOUND_LIST@[12; 32) 14 TYPE_BOUND_LIST@12..32
15 TYPE_BOUND@[12; 14) 15 TYPE_BOUND@12..14
16 LIFETIME@[12; 14) "\'a" 16 LIFETIME@12..14 "\'a"
17 WHITESPACE@[14; 15) " " 17 WHITESPACE@14..15 " "
18 PLUS@[15; 16) "+" 18 PLUS@15..16 "+"
19 WHITESPACE@[16; 17) " " 19 WHITESPACE@16..17 " "
20 TYPE_BOUND@[17; 23) 20 TYPE_BOUND@17..23
21 QUESTION@[17; 18) "?" 21 QUESTION@17..18 "?"
22 PATH_TYPE@[18; 23) 22 PATH_TYPE@18..23
23 PATH@[18; 23) 23 PATH@18..23
24 PATH_SEGMENT@[18; 23) 24 PATH_SEGMENT@18..23
25 NAME_REF@[18; 23) 25 NAME_REF@18..23
26 IDENT@[18; 23) "Sized" 26 IDENT@18..23 "Sized"
27 WHITESPACE@[23; 24) " " 27 WHITESPACE@23..24 " "
28 PLUS@[24; 25) "+" 28 PLUS@24..25 "+"
29 WHITESPACE@[25; 26) " " 29 WHITESPACE@25..26 " "
30 TYPE_BOUND@[26; 32) 30 TYPE_BOUND@26..32
31 L_PAREN@[26; 27) "(" 31 L_PAREN@26..27 "("
32 PATH_TYPE@[27; 31) 32 PATH_TYPE@27..31
33 PATH@[27; 31) 33 PATH@27..31
34 PATH_SEGMENT@[27; 31) 34 PATH_SEGMENT@27..31
35 NAME_REF@[27; 31) 35 NAME_REF@27..31
36 IDENT@[27; 31) "Copy" 36 IDENT@27..31 "Copy"
37 R_PAREN@[31; 32) ")" 37 R_PAREN@31..32 ")"
38 R_ANGLE@[32; 33) ">" 38 R_ANGLE@32..33 ">"
39 SEMICOLON@[33; 34) ";" 39 SEMICOLON@33..34 ";"
40 WHITESPACE@[34; 35) "\n" 40 WHITESPACE@34..35 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast b/crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast
index f4697fed6..a8ddd20c9 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast
@@ -1,97 +1,97 @@
1SOURCE_FILE@[0; 103) 1SOURCE_FILE@0..103
2 FN_DEF@[0; 102) 2 FN_DEF@0..102
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 102) 11 BLOCK_EXPR@9..102
12 BLOCK@[9; 102) 12 BLOCK@9..102
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 33) 15 LET_STMT@15..33
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 PATH_PAT@[19; 27) 18 PATH_PAT@19..27
19 PATH@[19; 27) 19 PATH@19..27
20 PATH@[19; 22) 20 PATH@19..22
21 PATH_SEGMENT@[19; 22) 21 PATH_SEGMENT@19..22
22 NAME_REF@[19; 22) 22 NAME_REF@19..22
23 IDENT@[19; 22) "foo" 23 IDENT@19..22 "foo"
24 COLON2@[22; 24) "::" 24 COLON2@22..24 "::"
25 PATH_SEGMENT@[24; 27) 25 PATH_SEGMENT@24..27
26 NAME_REF@[24; 27) 26 NAME_REF@24..27
27 IDENT@[24; 27) "Bar" 27 IDENT@24..27 "Bar"
28 WHITESPACE@[27; 28) " " 28 WHITESPACE@27..28 " "
29 EQ@[28; 29) "=" 29 EQ@28..29 "="
30 WHITESPACE@[29; 30) " " 30 WHITESPACE@29..30 " "
31 TUPLE_EXPR@[30; 32) 31 TUPLE_EXPR@30..32
32 L_PAREN@[30; 31) "(" 32 L_PAREN@30..31 "("
33 R_PAREN@[31; 32) ")" 33 R_PAREN@31..32 ")"
34 SEMICOLON@[32; 33) ";" 34 SEMICOLON@32..33 ";"
35 WHITESPACE@[33; 38) "\n " 35 WHITESPACE@33..38 "\n "
36 LET_STMT@[38; 53) 36 LET_STMT@38..53
37 LET_KW@[38; 41) "let" 37 LET_KW@38..41 "let"
38 WHITESPACE@[41; 42) " " 38 WHITESPACE@41..42 " "
39 PATH_PAT@[42; 47) 39 PATH_PAT@42..47
40 PATH@[42; 47) 40 PATH@42..47
41 PATH_SEGMENT@[42; 47) 41 PATH_SEGMENT@42..47
42 COLON2@[42; 44) "::" 42 COLON2@42..44 "::"
43 NAME_REF@[44; 47) 43 NAME_REF@44..47
44 IDENT@[44; 47) "Bar" 44 IDENT@44..47 "Bar"
45 WHITESPACE@[47; 48) " " 45 WHITESPACE@47..48 " "
46 EQ@[48; 49) "=" 46 EQ@48..49 "="
47 WHITESPACE@[49; 50) " " 47 WHITESPACE@49..50 " "
48 TUPLE_EXPR@[50; 52) 48 TUPLE_EXPR@50..52
49 L_PAREN@[50; 51) "(" 49 L_PAREN@50..51 "("
50 R_PAREN@[51; 52) ")" 50 R_PAREN@51..52 ")"
51 SEMICOLON@[52; 53) ";" 51 SEMICOLON@52..53 ";"
52 WHITESPACE@[53; 58) "\n " 52 WHITESPACE@53..58 "\n "
53 LET_STMT@[58; 78) 53 LET_STMT@58..78
54 LET_KW@[58; 61) "let" 54 LET_KW@58..61 "let"
55 WHITESPACE@[61; 62) " " 55 WHITESPACE@61..62 " "
56 RECORD_PAT@[62; 72) 56 RECORD_PAT@62..72
57 PATH@[62; 65) 57 PATH@62..65
58 PATH_SEGMENT@[62; 65) 58 PATH_SEGMENT@62..65
59 NAME_REF@[62; 65) 59 NAME_REF@62..65
60 IDENT@[62; 65) "Bar" 60 IDENT@62..65 "Bar"
61 WHITESPACE@[65; 66) " " 61 WHITESPACE@65..66 " "
62 RECORD_FIELD_PAT_LIST@[66; 72) 62 RECORD_FIELD_PAT_LIST@66..72
63 L_CURLY@[66; 67) "{" 63 L_CURLY@66..67 "{"
64 WHITESPACE@[67; 68) " " 64 WHITESPACE@67..68 " "
65 DOT2@[68; 70) ".." 65 DOT2@68..70 ".."
66 WHITESPACE@[70; 71) " " 66 WHITESPACE@70..71 " "
67 R_CURLY@[71; 72) "}" 67 R_CURLY@71..72 "}"
68 WHITESPACE@[72; 73) " " 68 WHITESPACE@72..73 " "
69 EQ@[73; 74) "=" 69 EQ@73..74 "="
70 WHITESPACE@[74; 75) " " 70 WHITESPACE@74..75 " "
71 TUPLE_EXPR@[75; 77) 71 TUPLE_EXPR@75..77
72 L_PAREN@[75; 76) "(" 72 L_PAREN@75..76 "("
73 R_PAREN@[76; 77) ")" 73 R_PAREN@76..77 ")"
74 SEMICOLON@[77; 78) ";" 74 SEMICOLON@77..78 ";"
75 WHITESPACE@[78; 83) "\n " 75 WHITESPACE@78..83 "\n "
76 LET_STMT@[83; 100) 76 LET_STMT@83..100
77 LET_KW@[83; 86) "let" 77 LET_KW@83..86 "let"
78 WHITESPACE@[86; 87) " " 78 WHITESPACE@86..87 " "
79 TUPLE_STRUCT_PAT@[87; 94) 79 TUPLE_STRUCT_PAT@87..94
80 PATH@[87; 90) 80 PATH@87..90
81 PATH_SEGMENT@[87; 90) 81 PATH_SEGMENT@87..90
82 NAME_REF@[87; 90) 82 NAME_REF@87..90
83 IDENT@[87; 90) "Bar" 83 IDENT@87..90 "Bar"
84 L_PAREN@[90; 91) "(" 84 L_PAREN@90..91 "("
85 DOT_DOT_PAT@[91; 93) 85 DOT_DOT_PAT@91..93
86 DOT2@[91; 93) ".." 86 DOT2@91..93 ".."
87 R_PAREN@[93; 94) ")" 87 R_PAREN@93..94 ")"
88 WHITESPACE@[94; 95) " " 88 WHITESPACE@94..95 " "
89 EQ@[95; 96) "=" 89 EQ@95..96 "="
90 WHITESPACE@[96; 97) " " 90 WHITESPACE@96..97 " "
91 TUPLE_EXPR@[97; 99) 91 TUPLE_EXPR@97..99
92 L_PAREN@[97; 98) "(" 92 L_PAREN@97..98 "("
93 R_PAREN@[98; 99) ")" 93 R_PAREN@98..99 ")"
94 SEMICOLON@[99; 100) ";" 94 SEMICOLON@99..100 ";"
95 WHITESPACE@[100; 101) "\n" 95 WHITESPACE@100..101 "\n"
96 R_CURLY@[101; 102) "}" 96 R_CURLY@101..102 "}"
97 WHITESPACE@[102; 103) "\n" 97 WHITESPACE@102..103 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0009_loop_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0009_loop_expr.rast
index cc759310a..df8ada62a 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0009_loop_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0009_loop_expr.rast
@@ -1,26 +1,26 @@
1SOURCE_FILE@[0; 26) 1SOURCE_FILE@0..26
2 FN_DEF@[0; 25) 2 FN_DEF@0..25
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 25) 11 BLOCK_EXPR@9..25
12 BLOCK@[9; 25) 12 BLOCK@9..25
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 23) 15 EXPR_STMT@15..23
16 LOOP_EXPR@[15; 22) 16 LOOP_EXPR@15..22
17 LOOP_KW@[15; 19) "loop" 17 LOOP_KW@15..19 "loop"
18 WHITESPACE@[19; 20) " " 18 WHITESPACE@19..20 " "
19 BLOCK_EXPR@[20; 22) 19 BLOCK_EXPR@20..22
20 BLOCK@[20; 22) 20 BLOCK@20..22
21 L_CURLY@[20; 21) "{" 21 L_CURLY@20..21 "{"
22 R_CURLY@[21; 22) "}" 22 R_CURLY@21..22 "}"
23 SEMICOLON@[22; 23) ";" 23 SEMICOLON@22..23 ";"
24 WHITESPACE@[23; 24) "\n" 24 WHITESPACE@23..24 "\n"
25 R_CURLY@[24; 25) "}" 25 R_CURLY@24..25 "}"
26 WHITESPACE@[25; 26) "\n" 26 WHITESPACE@25..26 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0010_extern_block.rast b/crates/ra_syntax/test_data/parser/inline/ok/0010_extern_block.rast
index 506f56fff..869875875 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0010_extern_block.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0010_extern_block.rast
@@ -1,9 +1,9 @@
1SOURCE_FILE@[0; 10) 1SOURCE_FILE@0..10
2 EXTERN_BLOCK@[0; 9) 2 EXTERN_BLOCK@0..9
3 ABI@[0; 6) 3 ABI@0..6
4 EXTERN_KW@[0; 6) "extern" 4 EXTERN_KW@0..6 "extern"
5 WHITESPACE@[6; 7) " " 5 WHITESPACE@6..7 " "
6 EXTERN_ITEM_LIST@[7; 9) 6 EXTERN_ITEM_LIST@7..9
7 L_CURLY@[7; 8) "{" 7 L_CURLY@7..8 "{"
8 R_CURLY@[8; 9) "}" 8 R_CURLY@8..9 "}"
9 WHITESPACE@[9; 10) "\n" 9 WHITESPACE@9..10 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0011_field_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0011_field_expr.rast
index c2fafe472..de01cc79e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0011_field_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0011_field_expr.rast
@@ -1,60 +1,60 @@
1SOURCE_FILE@[0; 48) 1SOURCE_FILE@0..48
2 FN_DEF@[0; 47) 2 FN_DEF@0..47
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 47) 11 BLOCK_EXPR@9..47
12 BLOCK@[9; 47) 12 BLOCK@9..47
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 21) 15 EXPR_STMT@15..21
16 FIELD_EXPR@[15; 20) 16 FIELD_EXPR@15..20
17 PATH_EXPR@[15; 16) 17 PATH_EXPR@15..16
18 PATH@[15; 16) 18 PATH@15..16
19 PATH_SEGMENT@[15; 16) 19 PATH_SEGMENT@15..16
20 NAME_REF@[15; 16) 20 NAME_REF@15..16
21 IDENT@[15; 16) "x" 21 IDENT@15..16 "x"
22 DOT@[16; 17) "." 22 DOT@16..17 "."
23 NAME_REF@[17; 20) 23 NAME_REF@17..20
24 IDENT@[17; 20) "foo" 24 IDENT@17..20 "foo"
25 SEMICOLON@[20; 21) ";" 25 SEMICOLON@20..21 ";"
26 WHITESPACE@[21; 26) "\n " 26 WHITESPACE@21..26 "\n "
27 EXPR_STMT@[26; 34) 27 EXPR_STMT@26..34
28 FIELD_EXPR@[26; 33) 28 FIELD_EXPR@26..33
29 FIELD_EXPR@[26; 29) 29 FIELD_EXPR@26..29
30 PATH_EXPR@[26; 27) 30 PATH_EXPR@26..27
31 PATH@[26; 27) 31 PATH@26..27
32 PATH_SEGMENT@[26; 27) 32 PATH_SEGMENT@26..27
33 NAME_REF@[26; 27) 33 NAME_REF@26..27
34 IDENT@[26; 27) "x" 34 IDENT@26..27 "x"
35 DOT@[27; 28) "." 35 DOT@27..28 "."
36 NAME_REF@[28; 29) 36 NAME_REF@28..29
37 INT_NUMBER@[28; 29) "0" 37 INT_NUMBER@28..29 "0"
38 DOT@[29; 30) "." 38 DOT@29..30 "."
39 NAME_REF@[30; 33) 39 NAME_REF@30..33
40 IDENT@[30; 33) "bar" 40 IDENT@30..33 "bar"
41 SEMICOLON@[33; 34) ";" 41 SEMICOLON@33..34 ";"
42 WHITESPACE@[34; 39) "\n " 42 WHITESPACE@34..39 "\n "
43 EXPR_STMT@[39; 45) 43 EXPR_STMT@39..45
44 CALL_EXPR@[39; 44) 44 CALL_EXPR@39..44
45 FIELD_EXPR@[39; 42) 45 FIELD_EXPR@39..42
46 PATH_EXPR@[39; 40) 46 PATH_EXPR@39..40
47 PATH@[39; 40) 47 PATH@39..40
48 PATH_SEGMENT@[39; 40) 48 PATH_SEGMENT@39..40
49 NAME_REF@[39; 40) 49 NAME_REF@39..40
50 IDENT@[39; 40) "x" 50 IDENT@39..40 "x"
51 DOT@[40; 41) "." 51 DOT@40..41 "."
52 NAME_REF@[41; 42) 52 NAME_REF@41..42
53 INT_NUMBER@[41; 42) "0" 53 INT_NUMBER@41..42 "0"
54 ARG_LIST@[42; 44) 54 ARG_LIST@42..44
55 L_PAREN@[42; 43) "(" 55 L_PAREN@42..43 "("
56 R_PAREN@[43; 44) ")" 56 R_PAREN@43..44 ")"
57 SEMICOLON@[44; 45) ";" 57 SEMICOLON@44..45 ";"
58 WHITESPACE@[45; 46) "\n" 58 WHITESPACE@45..46 "\n"
59 R_CURLY@[46; 47) "}" 59 R_CURLY@46..47 "}"
60 WHITESPACE@[47; 48) "\n" 60 WHITESPACE@47..48 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0012_type_item_where_clause.rast b/crates/ra_syntax/test_data/parser/inline/ok/0012_type_item_where_clause.rast
index 15d8c736d..283442a8b 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0012_type_item_where_clause.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0012_type_item_where_clause.rast
@@ -1,33 +1,33 @@
1SOURCE_FILE@[0; 31) 1SOURCE_FILE@0..31
2 TYPE_ALIAS_DEF@[0; 30) 2 TYPE_ALIAS_DEF@0..30
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 8) 5 NAME@5..8
6 IDENT@[5; 8) "Foo" 6 IDENT@5..8 "Foo"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 WHERE_CLAUSE@[9; 24) 8 WHERE_CLAUSE@9..24
9 WHERE_KW@[9; 14) "where" 9 WHERE_KW@9..14 "where"
10 WHITESPACE@[14; 15) " " 10 WHITESPACE@14..15 " "
11 WHERE_PRED@[15; 24) 11 WHERE_PRED@15..24
12 PATH_TYPE@[15; 18) 12 PATH_TYPE@15..18
13 PATH@[15; 18) 13 PATH@15..18
14 PATH_SEGMENT@[15; 18) 14 PATH_SEGMENT@15..18
15 NAME_REF@[15; 18) 15 NAME_REF@15..18
16 IDENT@[15; 18) "Foo" 16 IDENT@15..18 "Foo"
17 COLON@[18; 19) ":" 17 COLON@18..19 ":"
18 WHITESPACE@[19; 20) " " 18 WHITESPACE@19..20 " "
19 TYPE_BOUND_LIST@[20; 24) 19 TYPE_BOUND_LIST@20..24
20 TYPE_BOUND@[20; 24) 20 TYPE_BOUND@20..24
21 PATH_TYPE@[20; 24) 21 PATH_TYPE@20..24
22 PATH@[20; 24) 22 PATH@20..24
23 PATH_SEGMENT@[20; 24) 23 PATH_SEGMENT@20..24
24 NAME_REF@[20; 24) 24 NAME_REF@20..24
25 IDENT@[20; 24) "Copy" 25 IDENT@20..24 "Copy"
26 WHITESPACE@[24; 25) " " 26 WHITESPACE@24..25 " "
27 EQ@[25; 26) "=" 27 EQ@25..26 "="
28 WHITESPACE@[26; 27) " " 28 WHITESPACE@26..27 " "
29 TUPLE_TYPE@[27; 29) 29 TUPLE_TYPE@27..29
30 L_PAREN@[27; 28) "(" 30 L_PAREN@27..28 "("
31 R_PAREN@[28; 29) ")" 31 R_PAREN@28..29 ")"
32 SEMICOLON@[29; 30) ";" 32 SEMICOLON@29..30 ";"
33 WHITESPACE@[30; 31) "\n" 33 WHITESPACE@30..31 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0013_pointer_type_mut.rast b/crates/ra_syntax/test_data/parser/inline/ok/0013_pointer_type_mut.rast
index a72d56495..e2e871dda 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0013_pointer_type_mut.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0013_pointer_type_mut.rast
@@ -1,35 +1,35 @@
1SOURCE_FILE@[0; 36) 1SOURCE_FILE@0..36
2 TYPE_ALIAS_DEF@[0; 17) 2 TYPE_ALIAS_DEF@0..17
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "M" 6 IDENT@5..6 "M"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 POINTER_TYPE@[9; 16) 10 POINTER_TYPE@9..16
11 STAR@[9; 10) "*" 11 STAR@9..10 "*"
12 MUT_KW@[10; 13) "mut" 12 MUT_KW@10..13 "mut"
13 WHITESPACE@[13; 14) " " 13 WHITESPACE@13..14 " "
14 TUPLE_TYPE@[14; 16) 14 TUPLE_TYPE@14..16
15 L_PAREN@[14; 15) "(" 15 L_PAREN@14..15 "("
16 R_PAREN@[15; 16) ")" 16 R_PAREN@15..16 ")"
17 SEMICOLON@[16; 17) ";" 17 SEMICOLON@16..17 ";"
18 WHITESPACE@[17; 18) "\n" 18 WHITESPACE@17..18 "\n"
19 TYPE_ALIAS_DEF@[18; 35) 19 TYPE_ALIAS_DEF@18..35
20 TYPE_KW@[18; 22) "type" 20 TYPE_KW@18..22 "type"
21 WHITESPACE@[22; 23) " " 21 WHITESPACE@22..23 " "
22 NAME@[23; 24) 22 NAME@23..24
23 IDENT@[23; 24) "C" 23 IDENT@23..24 "C"
24 WHITESPACE@[24; 25) " " 24 WHITESPACE@24..25 " "
25 EQ@[25; 26) "=" 25 EQ@25..26 "="
26 WHITESPACE@[26; 27) " " 26 WHITESPACE@26..27 " "
27 POINTER_TYPE@[27; 34) 27 POINTER_TYPE@27..34
28 STAR@[27; 28) "*" 28 STAR@27..28 "*"
29 MUT_KW@[28; 31) "mut" 29 MUT_KW@28..31 "mut"
30 WHITESPACE@[31; 32) " " 30 WHITESPACE@31..32 " "
31 TUPLE_TYPE@[32; 34) 31 TUPLE_TYPE@32..34
32 L_PAREN@[32; 33) "(" 32 L_PAREN@32..33 "("
33 R_PAREN@[33; 34) ")" 33 R_PAREN@33..34 ")"
34 SEMICOLON@[34; 35) ";" 34 SEMICOLON@34..35 ";"
35 WHITESPACE@[35; 36) "\n" 35 WHITESPACE@35..36 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0014_never_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0014_never_type.rast
index 3c98467c7..a60940fcf 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0014_never_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0014_never_type.rast
@@ -1,13 +1,13 @@
1SOURCE_FILE@[0; 16) 1SOURCE_FILE@0..16
2 TYPE_ALIAS_DEF@[0; 15) 2 TYPE_ALIAS_DEF@0..15
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 10) 5 NAME@5..10
6 IDENT@[5; 10) "Never" 6 IDENT@5..10 "Never"
7 WHITESPACE@[10; 11) " " 7 WHITESPACE@10..11 " "
8 EQ@[11; 12) "=" 8 EQ@11..12 "="
9 WHITESPACE@[12; 13) " " 9 WHITESPACE@12..13 " "
10 NEVER_TYPE@[13; 14) 10 NEVER_TYPE@13..14
11 BANG@[13; 14) "!" 11 BANG@13..14 "!"
12 SEMICOLON@[14; 15) ";" 12 SEMICOLON@14..15 ";"
13 WHITESPACE@[15; 16) "\n" 13 WHITESPACE@15..16 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0015_continue_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0015_continue_expr.rast
index adaece119..8ac307cb3 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0015_continue_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0015_continue_expr.rast
@@ -1,37 +1,37 @@
1SOURCE_FILE@[0; 69) 1SOURCE_FILE@0..69
2 FN_DEF@[0; 68) 2 FN_DEF@0..68
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 68) 11 BLOCK_EXPR@9..68
12 BLOCK@[9; 68) 12 BLOCK@9..68
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LOOP_EXPR@[15; 66) 15 LOOP_EXPR@15..66
16 LOOP_KW@[15; 19) "loop" 16 LOOP_KW@15..19 "loop"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 BLOCK_EXPR@[20; 66) 18 BLOCK_EXPR@20..66
19 BLOCK@[20; 66) 19 BLOCK@20..66
20 L_CURLY@[20; 21) "{" 20 L_CURLY@20..21 "{"
21 WHITESPACE@[21; 30) "\n " 21 WHITESPACE@21..30 "\n "
22 EXPR_STMT@[30; 39) 22 EXPR_STMT@30..39
23 CONTINUE_EXPR@[30; 38) 23 CONTINUE_EXPR@30..38
24 CONTINUE_KW@[30; 38) "continue" 24 CONTINUE_KW@30..38 "continue"
25 SEMICOLON@[38; 39) ";" 25 SEMICOLON@38..39 ";"
26 WHITESPACE@[39; 48) "\n " 26 WHITESPACE@39..48 "\n "
27 EXPR_STMT@[48; 60) 27 EXPR_STMT@48..60
28 CONTINUE_EXPR@[48; 59) 28 CONTINUE_EXPR@48..59
29 CONTINUE_KW@[48; 56) "continue" 29 CONTINUE_KW@48..56 "continue"
30 WHITESPACE@[56; 57) " " 30 WHITESPACE@56..57 " "
31 LIFETIME@[57; 59) "\'l" 31 LIFETIME@57..59 "\'l"
32 SEMICOLON@[59; 60) ";" 32 SEMICOLON@59..60 ";"
33 WHITESPACE@[60; 65) "\n " 33 WHITESPACE@60..65 "\n "
34 R_CURLY@[65; 66) "}" 34 R_CURLY@65..66 "}"
35 WHITESPACE@[66; 67) "\n" 35 WHITESPACE@66..67 "\n"
36 R_CURLY@[67; 68) "}" 36 R_CURLY@67..68 "}"
37 WHITESPACE@[68; 69) "\n" 37 WHITESPACE@68..69 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0016_unsafe_trait.rast b/crates/ra_syntax/test_data/parser/inline/ok/0016_unsafe_trait.rast
index 7b43f1294..d59c6006d 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0016_unsafe_trait.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0016_unsafe_trait.rast
@@ -1,13 +1,13 @@
1SOURCE_FILE@[0; 18) 1SOURCE_FILE@0..18
2 TRAIT_DEF@[0; 17) 2 TRAIT_DEF@0..17
3 UNSAFE_KW@[0; 6) "unsafe" 3 UNSAFE_KW@0..6 "unsafe"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 TRAIT_KW@[7; 12) "trait" 5 TRAIT_KW@7..12 "trait"
6 WHITESPACE@[12; 13) " " 6 WHITESPACE@12..13 " "
7 NAME@[13; 14) 7 NAME@13..14
8 IDENT@[13; 14) "T" 8 IDENT@13..14 "T"
9 WHITESPACE@[14; 15) " " 9 WHITESPACE@14..15 " "
10 ITEM_LIST@[15; 17) 10 ITEM_LIST@15..17
11 L_CURLY@[15; 16) "{" 11 L_CURLY@15..16 "{"
12 R_CURLY@[16; 17) "}" 12 R_CURLY@16..17 "}"
13 WHITESPACE@[17; 18) "\n" 13 WHITESPACE@17..18 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0017_array_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0017_array_type.rast
index f4c86a05f..61a0b22f4 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0017_array_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0017_array_type.rast
@@ -1,21 +1,21 @@
1SOURCE_FILE@[0; 19) 1SOURCE_FILE@0..19
2 TYPE_ALIAS_DEF@[0; 18) 2 TYPE_ALIAS_DEF@0..18
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "T" 6 IDENT@5..6 "T"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 ARRAY_TYPE@[9; 17) 10 ARRAY_TYPE@9..17
11 L_BRACK@[9; 10) "[" 11 L_BRACK@9..10 "["
12 TUPLE_TYPE@[10; 12) 12 TUPLE_TYPE@10..12
13 L_PAREN@[10; 11) "(" 13 L_PAREN@10..11 "("
14 R_PAREN@[11; 12) ")" 14 R_PAREN@11..12 ")"
15 SEMICOLON@[12; 13) ";" 15 SEMICOLON@12..13 ";"
16 WHITESPACE@[13; 14) " " 16 WHITESPACE@13..14 " "
17 LITERAL@[14; 16) 17 LITERAL@14..16
18 INT_NUMBER@[14; 16) "92" 18 INT_NUMBER@14..16 "92"
19 R_BRACK@[16; 17) "]" 19 R_BRACK@16..17 "]"
20 SEMICOLON@[17; 18) ";" 20 SEMICOLON@17..18 ";"
21 WHITESPACE@[18; 19) "\n" 21 WHITESPACE@18..19 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast b/crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast
index 89caee543..6f6400d00 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast
@@ -1,74 +1,74 @@
1SOURCE_FILE@[0; 69) 1SOURCE_FILE@0..69
2 IMPL_DEF@[0; 68) 2 IMPL_DEF@0..68
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 6) 5 PATH_TYPE@5..6
6 PATH@[5; 6) 6 PATH@5..6
7 PATH_SEGMENT@[5; 6) 7 PATH_SEGMENT@5..6
8 NAME_REF@[5; 6) 8 NAME_REF@5..6
9 IDENT@[5; 6) "S" 9 IDENT@5..6 "S"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 ITEM_LIST@[7; 68) 11 ITEM_LIST@7..68
12 L_CURLY@[7; 8) "{" 12 L_CURLY@7..8 "{"
13 WHITESPACE@[8; 13) "\n " 13 WHITESPACE@8..13 "\n "
14 FN_DEF@[13; 33) 14 FN_DEF@13..33
15 FN_KW@[13; 15) "fn" 15 FN_KW@13..15 "fn"
16 WHITESPACE@[15; 16) " " 16 WHITESPACE@15..16 " "
17 NAME@[16; 17) 17 NAME@16..17
18 IDENT@[16; 17) "a" 18 IDENT@16..17 "a"
19 PARAM_LIST@[17; 30) 19 PARAM_LIST@17..30
20 L_PAREN@[17; 18) "(" 20 L_PAREN@17..18 "("
21 SELF_PARAM@[18; 29) 21 SELF_PARAM@18..29
22 SELF_KW@[18; 22) "self" 22 SELF_KW@18..22 "self"
23 COLON@[22; 23) ":" 23 COLON@22..23 ":"
24 WHITESPACE@[23; 24) " " 24 WHITESPACE@23..24 " "
25 REFERENCE_TYPE@[24; 29) 25 REFERENCE_TYPE@24..29
26 AMP@[24; 25) "&" 26 AMP@24..25 "&"
27 PATH_TYPE@[25; 29) 27 PATH_TYPE@25..29
28 PATH@[25; 29) 28 PATH@25..29
29 PATH_SEGMENT@[25; 29) 29 PATH_SEGMENT@25..29
30 NAME_REF@[25; 29) 30 NAME_REF@25..29
31 IDENT@[25; 29) "Self" 31 IDENT@25..29 "Self"
32 R_PAREN@[29; 30) ")" 32 R_PAREN@29..30 ")"
33 WHITESPACE@[30; 31) " " 33 WHITESPACE@30..31 " "
34 BLOCK_EXPR@[31; 33) 34 BLOCK_EXPR@31..33
35 BLOCK@[31; 33) 35 BLOCK@31..33
36 L_CURLY@[31; 32) "{" 36 L_CURLY@31..32 "{"
37 R_CURLY@[32; 33) "}" 37 R_CURLY@32..33 "}"
38 WHITESPACE@[33; 38) "\n " 38 WHITESPACE@33..38 "\n "
39 FN_DEF@[38; 66) 39 FN_DEF@38..66
40 FN_KW@[38; 40) "fn" 40 FN_KW@38..40 "fn"
41 WHITESPACE@[40; 41) " " 41 WHITESPACE@40..41 " "
42 NAME@[41; 42) 42 NAME@41..42
43 IDENT@[41; 42) "b" 43 IDENT@41..42 "b"
44 PARAM_LIST@[42; 63) 44 PARAM_LIST@42..63
45 L_PAREN@[42; 43) "(" 45 L_PAREN@42..43 "("
46 SELF_PARAM@[43; 62) 46 SELF_PARAM@43..62
47 MUT_KW@[43; 46) "mut" 47 MUT_KW@43..46 "mut"
48 WHITESPACE@[46; 47) " " 48 WHITESPACE@46..47 " "
49 SELF_KW@[47; 51) "self" 49 SELF_KW@47..51 "self"
50 COLON@[51; 52) ":" 50 COLON@51..52 ":"
51 WHITESPACE@[52; 53) " " 51 WHITESPACE@52..53 " "
52 PATH_TYPE@[53; 62) 52 PATH_TYPE@53..62
53 PATH@[53; 62) 53 PATH@53..62
54 PATH_SEGMENT@[53; 62) 54 PATH_SEGMENT@53..62
55 NAME_REF@[53; 56) 55 NAME_REF@53..56
56 IDENT@[53; 56) "Box" 56 IDENT@53..56 "Box"
57 TYPE_ARG_LIST@[56; 62) 57 TYPE_ARG_LIST@56..62
58 L_ANGLE@[56; 57) "<" 58 L_ANGLE@56..57 "<"
59 TYPE_ARG@[57; 61) 59 TYPE_ARG@57..61
60 PATH_TYPE@[57; 61) 60 PATH_TYPE@57..61
61 PATH@[57; 61) 61 PATH@57..61
62 PATH_SEGMENT@[57; 61) 62 PATH_SEGMENT@57..61
63 NAME_REF@[57; 61) 63 NAME_REF@57..61
64 IDENT@[57; 61) "Self" 64 IDENT@57..61 "Self"
65 R_ANGLE@[61; 62) ">" 65 R_ANGLE@61..62 ">"
66 R_PAREN@[62; 63) ")" 66 R_PAREN@62..63 ")"
67 WHITESPACE@[63; 64) " " 67 WHITESPACE@63..64 " "
68 BLOCK_EXPR@[64; 66) 68 BLOCK_EXPR@64..66
69 BLOCK@[64; 66) 69 BLOCK@64..66
70 L_CURLY@[64; 65) "{" 70 L_CURLY@64..65 "{"
71 R_CURLY@[65; 66) "}" 71 R_CURLY@65..66 "}"
72 WHITESPACE@[66; 67) "\n" 72 WHITESPACE@66..67 "\n"
73 R_CURLY@[67; 68) "}" 73 R_CURLY@67..68 "}"
74 WHITESPACE@[68; 69) "\n" 74 WHITESPACE@68..69 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0019_unary_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0019_unary_expr.rast
index 5a42f360c..ba422f1ae 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0019_unary_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0019_unary_expr.rast
@@ -1,45 +1,45 @@
1SOURCE_FILE@[0; 44) 1SOURCE_FILE@0..44
2 FN_DEF@[0; 43) 2 FN_DEF@0..43
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 43) 11 BLOCK_EXPR@9..43
12 BLOCK@[9; 43) 12 BLOCK@9..43
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 20) 15 EXPR_STMT@15..20
16 PREFIX_EXPR@[15; 19) 16 PREFIX_EXPR@15..19
17 STAR@[15; 16) "*" 17 STAR@15..16 "*"
18 PREFIX_EXPR@[16; 19) 18 PREFIX_EXPR@16..19
19 STAR@[16; 17) "*" 19 STAR@16..17 "*"
20 REF_EXPR@[17; 19) 20 REF_EXPR@17..19
21 AMP@[17; 18) "&" 21 AMP@17..18 "&"
22 LITERAL@[18; 19) 22 LITERAL@18..19
23 INT_NUMBER@[18; 19) "1" 23 INT_NUMBER@18..19 "1"
24 SEMICOLON@[19; 20) ";" 24 SEMICOLON@19..20 ";"
25 WHITESPACE@[20; 25) "\n " 25 WHITESPACE@20..25 "\n "
26 EXPR_STMT@[25; 32) 26 EXPR_STMT@25..32
27 PREFIX_EXPR@[25; 31) 27 PREFIX_EXPR@25..31
28 BANG@[25; 26) "!" 28 BANG@25..26 "!"
29 PREFIX_EXPR@[26; 31) 29 PREFIX_EXPR@26..31
30 BANG@[26; 27) "!" 30 BANG@26..27 "!"
31 LITERAL@[27; 31) 31 LITERAL@27..31
32 TRUE_KW@[27; 31) "true" 32 TRUE_KW@27..31 "true"
33 SEMICOLON@[31; 32) ";" 33 SEMICOLON@31..32 ";"
34 WHITESPACE@[32; 37) "\n " 34 WHITESPACE@32..37 "\n "
35 EXPR_STMT@[37; 41) 35 EXPR_STMT@37..41
36 PREFIX_EXPR@[37; 40) 36 PREFIX_EXPR@37..40
37 MINUS@[37; 38) "-" 37 MINUS@37..38 "-"
38 PREFIX_EXPR@[38; 40) 38 PREFIX_EXPR@38..40
39 MINUS@[38; 39) "-" 39 MINUS@38..39 "-"
40 LITERAL@[39; 40) 40 LITERAL@39..40
41 INT_NUMBER@[39; 40) "1" 41 INT_NUMBER@39..40 "1"
42 SEMICOLON@[40; 41) ";" 42 SEMICOLON@40..41 ";"
43 WHITESPACE@[41; 42) "\n" 43 WHITESPACE@41..42 "\n"
44 R_CURLY@[42; 43) "}" 44 R_CURLY@42..43 "}"
45 WHITESPACE@[43; 44) "\n" 45 WHITESPACE@43..44 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0020_use_star.rast b/crates/ra_syntax/test_data/parser/inline/ok/0020_use_star.rast
index c1bedb37c..9e898b7b9 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0020_use_star.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0020_use_star.rast
@@ -1,59 +1,59 @@
1SOURCE_FILE@[0; 60) 1SOURCE_FILE@0..60
2 USE_ITEM@[0; 6) 2 USE_ITEM@0..6
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 5) 5 USE_TREE@4..5
6 STAR@[4; 5) "*" 6 STAR@4..5 "*"
7 SEMICOLON@[5; 6) ";" 7 SEMICOLON@5..6 ";"
8 WHITESPACE@[6; 7) "\n" 8 WHITESPACE@6..7 "\n"
9 USE_ITEM@[7; 15) 9 USE_ITEM@7..15
10 USE_KW@[7; 10) "use" 10 USE_KW@7..10 "use"
11 WHITESPACE@[10; 11) " " 11 WHITESPACE@10..11 " "
12 USE_TREE@[11; 14) 12 USE_TREE@11..14
13 COLON2@[11; 13) "::" 13 COLON2@11..13 "::"
14 STAR@[13; 14) "*" 14 STAR@13..14 "*"
15 SEMICOLON@[14; 15) ";" 15 SEMICOLON@14..15 ";"
16 WHITESPACE@[15; 16) "\n" 16 WHITESPACE@15..16 "\n"
17 USE_ITEM@[16; 36) 17 USE_ITEM@16..36
18 USE_KW@[16; 19) "use" 18 USE_KW@16..19 "use"
19 WHITESPACE@[19; 20) " " 19 WHITESPACE@19..20 " "
20 USE_TREE@[20; 35) 20 USE_TREE@20..35
21 PATH@[20; 30) 21 PATH@20..30
22 PATH@[20; 24) 22 PATH@20..24
23 PATH_SEGMENT@[20; 24) 23 PATH_SEGMENT@20..24
24 NAME_REF@[20; 24) 24 NAME_REF@20..24
25 IDENT@[20; 24) "some" 25 IDENT@20..24 "some"
26 COLON2@[24; 26) "::" 26 COLON2@24..26 "::"
27 PATH_SEGMENT@[26; 30) 27 PATH_SEGMENT@26..30
28 NAME_REF@[26; 30) 28 NAME_REF@26..30
29 IDENT@[26; 30) "path" 29 IDENT@26..30 "path"
30 COLON2@[30; 32) "::" 30 COLON2@30..32 "::"
31 USE_TREE_LIST@[32; 35) 31 USE_TREE_LIST@32..35
32 L_CURLY@[32; 33) "{" 32 L_CURLY@32..33 "{"
33 USE_TREE@[33; 34) 33 USE_TREE@33..34
34 STAR@[33; 34) "*" 34 STAR@33..34 "*"
35 R_CURLY@[34; 35) "}" 35 R_CURLY@34..35 "}"
36 SEMICOLON@[35; 36) ";" 36 SEMICOLON@35..36 ";"
37 WHITESPACE@[36; 37) "\n" 37 WHITESPACE@36..37 "\n"
38 USE_ITEM@[37; 59) 38 USE_ITEM@37..59
39 USE_KW@[37; 40) "use" 39 USE_KW@37..40 "use"
40 WHITESPACE@[40; 41) " " 40 WHITESPACE@40..41 " "
41 USE_TREE@[41; 58) 41 USE_TREE@41..58
42 PATH@[41; 51) 42 PATH@41..51
43 PATH@[41; 45) 43 PATH@41..45
44 PATH_SEGMENT@[41; 45) 44 PATH_SEGMENT@41..45
45 NAME_REF@[41; 45) 45 NAME_REF@41..45
46 IDENT@[41; 45) "some" 46 IDENT@41..45 "some"
47 COLON2@[45; 47) "::" 47 COLON2@45..47 "::"
48 PATH_SEGMENT@[47; 51) 48 PATH_SEGMENT@47..51
49 NAME_REF@[47; 51) 49 NAME_REF@47..51
50 IDENT@[47; 51) "path" 50 IDENT@47..51 "path"
51 COLON2@[51; 53) "::" 51 COLON2@51..53 "::"
52 USE_TREE_LIST@[53; 58) 52 USE_TREE_LIST@53..58
53 L_CURLY@[53; 54) "{" 53 L_CURLY@53..54 "{"
54 USE_TREE@[54; 57) 54 USE_TREE@54..57
55 COLON2@[54; 56) "::" 55 COLON2@54..56 "::"
56 STAR@[56; 57) "*" 56 STAR@56..57 "*"
57 R_CURLY@[57; 58) "}" 57 R_CURLY@57..58 "}"
58 SEMICOLON@[58; 59) ";" 58 SEMICOLON@58..59 ";"
59 WHITESPACE@[59; 60) "\n" 59 WHITESPACE@59..60 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast b/crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast
index 767a49ce6..de22b22dd 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast
@@ -1,80 +1,80 @@
1SOURCE_FILE@[0; 89) 1SOURCE_FILE@0..89
2 IMPL_DEF@[0; 88) 2 IMPL_DEF@0..88
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 6) 5 PATH_TYPE@5..6
6 PATH@[5; 6) 6 PATH@5..6
7 PATH_SEGMENT@[5; 6) 7 PATH_SEGMENT@5..6
8 NAME_REF@[5; 6) 8 NAME_REF@5..6
9 IDENT@[5; 6) "F" 9 IDENT@5..6 "F"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 ITEM_LIST@[7; 88) 11 ITEM_LIST@7..88
12 L_CURLY@[7; 8) "{" 12 L_CURLY@7..8 "{"
13 WHITESPACE@[8; 13) "\n " 13 WHITESPACE@8..13 "\n "
14 TYPE_ALIAS_DEF@[13; 26) 14 TYPE_ALIAS_DEF@13..26
15 TYPE_KW@[13; 17) "type" 15 TYPE_KW@13..17 "type"
16 WHITESPACE@[17; 18) " " 16 WHITESPACE@17..18 " "
17 NAME@[18; 19) 17 NAME@18..19
18 IDENT@[18; 19) "A" 18 IDENT@18..19 "A"
19 WHITESPACE@[19; 20) " " 19 WHITESPACE@19..20 " "
20 EQ@[20; 21) "=" 20 EQ@20..21 "="
21 WHITESPACE@[21; 22) " " 21 WHITESPACE@21..22 " "
22 PATH_TYPE@[22; 25) 22 PATH_TYPE@22..25
23 PATH@[22; 25) 23 PATH@22..25
24 PATH_SEGMENT@[22; 25) 24 PATH_SEGMENT@22..25
25 NAME_REF@[22; 25) 25 NAME_REF@22..25
26 IDENT@[22; 25) "i32" 26 IDENT@22..25 "i32"
27 SEMICOLON@[25; 26) ";" 27 SEMICOLON@25..26 ";"
28 WHITESPACE@[26; 31) "\n " 28 WHITESPACE@26..31 "\n "
29 CONST_DEF@[31; 49) 29 CONST_DEF@31..49
30 CONST_KW@[31; 36) "const" 30 CONST_KW@31..36 "const"
31 WHITESPACE@[36; 37) " " 31 WHITESPACE@36..37 " "
32 NAME@[37; 38) 32 NAME@37..38
33 IDENT@[37; 38) "B" 33 IDENT@37..38 "B"
34 COLON@[38; 39) ":" 34 COLON@38..39 ":"
35 WHITESPACE@[39; 40) " " 35 WHITESPACE@39..40 " "
36 PATH_TYPE@[40; 43) 36 PATH_TYPE@40..43
37 PATH@[40; 43) 37 PATH@40..43
38 PATH_SEGMENT@[40; 43) 38 PATH_SEGMENT@40..43
39 NAME_REF@[40; 43) 39 NAME_REF@40..43
40 IDENT@[40; 43) "i32" 40 IDENT@40..43 "i32"
41 WHITESPACE@[43; 44) " " 41 WHITESPACE@43..44 " "
42 EQ@[44; 45) "=" 42 EQ@44..45 "="
43 WHITESPACE@[45; 46) " " 43 WHITESPACE@45..46 " "
44 LITERAL@[46; 48) 44 LITERAL@46..48
45 INT_NUMBER@[46; 48) "92" 45 INT_NUMBER@46..48 "92"
46 SEMICOLON@[48; 49) ";" 46 SEMICOLON@48..49 ";"
47 WHITESPACE@[49; 54) "\n " 47 WHITESPACE@49..54 "\n "
48 FN_DEF@[54; 65) 48 FN_DEF@54..65
49 FN_KW@[54; 56) "fn" 49 FN_KW@54..56 "fn"
50 WHITESPACE@[56; 57) " " 50 WHITESPACE@56..57 " "
51 NAME@[57; 60) 51 NAME@57..60
52 IDENT@[57; 60) "foo" 52 IDENT@57..60 "foo"
53 PARAM_LIST@[60; 62) 53 PARAM_LIST@60..62
54 L_PAREN@[60; 61) "(" 54 L_PAREN@60..61 "("
55 R_PAREN@[61; 62) ")" 55 R_PAREN@61..62 ")"
56 WHITESPACE@[62; 63) " " 56 WHITESPACE@62..63 " "
57 BLOCK_EXPR@[63; 65) 57 BLOCK_EXPR@63..65
58 BLOCK@[63; 65) 58 BLOCK@63..65
59 L_CURLY@[63; 64) "{" 59 L_CURLY@63..64 "{"
60 R_CURLY@[64; 65) "}" 60 R_CURLY@64..65 "}"
61 WHITESPACE@[65; 70) "\n " 61 WHITESPACE@65..70 "\n "
62 FN_DEF@[70; 86) 62 FN_DEF@70..86
63 FN_KW@[70; 72) "fn" 63 FN_KW@70..72 "fn"
64 WHITESPACE@[72; 73) " " 64 WHITESPACE@72..73 " "
65 NAME@[73; 76) 65 NAME@73..76
66 IDENT@[73; 76) "bar" 66 IDENT@73..76 "bar"
67 PARAM_LIST@[76; 83) 67 PARAM_LIST@76..83
68 L_PAREN@[76; 77) "(" 68 L_PAREN@76..77 "("
69 SELF_PARAM@[77; 82) 69 SELF_PARAM@77..82
70 AMP@[77; 78) "&" 70 AMP@77..78 "&"
71 SELF_KW@[78; 82) "self" 71 SELF_KW@78..82 "self"
72 R_PAREN@[82; 83) ")" 72 R_PAREN@82..83 ")"
73 WHITESPACE@[83; 84) " " 73 WHITESPACE@83..84 " "
74 BLOCK_EXPR@[84; 86) 74 BLOCK_EXPR@84..86
75 BLOCK@[84; 86) 75 BLOCK@84..86
76 L_CURLY@[84; 85) "{" 76 L_CURLY@84..85 "{"
77 R_CURLY@[85; 86) "}" 77 R_CURLY@85..86 "}"
78 WHITESPACE@[86; 87) "\n" 78 WHITESPACE@86..87 "\n"
79 R_CURLY@[87; 88) "}" 79 R_CURLY@87..88 "}"
80 WHITESPACE@[88; 89) "\n" 80 WHITESPACE@88..89 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0022_crate_visibility.rast b/crates/ra_syntax/test_data/parser/inline/ok/0022_crate_visibility.rast
index e0fc96d33..1b810607e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0022_crate_visibility.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0022_crate_visibility.rast
@@ -1,53 +1,53 @@
1SOURCE_FILE@[0; 81) 1SOURCE_FILE@0..81
2 STRUCT_DEF@[0; 20) 2 STRUCT_DEF@0..20
3 VISIBILITY@[0; 10) 3 VISIBILITY@0..10
4 PUB_KW@[0; 3) "pub" 4 PUB_KW@0..3 "pub"
5 L_PAREN@[3; 4) "(" 5 L_PAREN@3..4 "("
6 CRATE_KW@[4; 9) "crate" 6 CRATE_KW@4..9 "crate"
7 R_PAREN@[9; 10) ")" 7 R_PAREN@9..10 ")"
8 WHITESPACE@[10; 11) " " 8 WHITESPACE@10..11 " "
9 STRUCT_KW@[11; 17) "struct" 9 STRUCT_KW@11..17 "struct"
10 WHITESPACE@[17; 18) " " 10 WHITESPACE@17..18 " "
11 NAME@[18; 19) 11 NAME@18..19
12 IDENT@[18; 19) "S" 12 IDENT@18..19 "S"
13 SEMICOLON@[19; 20) ";" 13 SEMICOLON@19..20 ";"
14 WHITESPACE@[20; 21) "\n" 14 WHITESPACE@20..21 "\n"
15 STRUCT_DEF@[21; 40) 15 STRUCT_DEF@21..40
16 VISIBILITY@[21; 30) 16 VISIBILITY@21..30
17 PUB_KW@[21; 24) "pub" 17 PUB_KW@21..24 "pub"
18 L_PAREN@[24; 25) "(" 18 L_PAREN@24..25 "("
19 SELF_KW@[25; 29) "self" 19 SELF_KW@25..29 "self"
20 R_PAREN@[29; 30) ")" 20 R_PAREN@29..30 ")"
21 WHITESPACE@[30; 31) " " 21 WHITESPACE@30..31 " "
22 STRUCT_KW@[31; 37) "struct" 22 STRUCT_KW@31..37 "struct"
23 WHITESPACE@[37; 38) " " 23 WHITESPACE@37..38 " "
24 NAME@[38; 39) 24 NAME@38..39
25 IDENT@[38; 39) "S" 25 IDENT@38..39 "S"
26 SEMICOLON@[39; 40) ";" 26 SEMICOLON@39..40 ";"
27 WHITESPACE@[40; 41) "\n" 27 WHITESPACE@40..41 "\n"
28 STRUCT_DEF@[41; 60) 28 STRUCT_DEF@41..60
29 VISIBILITY@[41; 50) 29 VISIBILITY@41..50
30 PUB_KW@[41; 44) "pub" 30 PUB_KW@41..44 "pub"
31 L_PAREN@[44; 45) "(" 31 L_PAREN@44..45 "("
32 SELF_KW@[45; 49) "self" 32 SELF_KW@45..49 "self"
33 R_PAREN@[49; 50) ")" 33 R_PAREN@49..50 ")"
34 WHITESPACE@[50; 51) " " 34 WHITESPACE@50..51 " "
35 STRUCT_KW@[51; 57) "struct" 35 STRUCT_KW@51..57 "struct"
36 WHITESPACE@[57; 58) " " 36 WHITESPACE@57..58 " "
37 NAME@[58; 59) 37 NAME@58..59
38 IDENT@[58; 59) "S" 38 IDENT@58..59 "S"
39 SEMICOLON@[59; 60) ";" 39 SEMICOLON@59..60 ";"
40 WHITESPACE@[60; 61) "\n" 40 WHITESPACE@60..61 "\n"
41 STRUCT_DEF@[61; 80) 41 STRUCT_DEF@61..80
42 VISIBILITY@[61; 70) 42 VISIBILITY@61..70
43 PUB_KW@[61; 64) "pub" 43 PUB_KW@61..64 "pub"
44 L_PAREN@[64; 65) "(" 44 L_PAREN@64..65 "("
45 SELF_KW@[65; 69) "self" 45 SELF_KW@65..69 "self"
46 R_PAREN@[69; 70) ")" 46 R_PAREN@69..70 ")"
47 WHITESPACE@[70; 71) " " 47 WHITESPACE@70..71 " "
48 STRUCT_KW@[71; 77) "struct" 48 STRUCT_KW@71..77 "struct"
49 WHITESPACE@[77; 78) " " 49 WHITESPACE@77..78 " "
50 NAME@[78; 79) 50 NAME@78..79
51 IDENT@[78; 79) "S" 51 IDENT@78..79 "S"
52 SEMICOLON@[79; 80) ";" 52 SEMICOLON@79..80 ";"
53 WHITESPACE@[80; 81) "\n" 53 WHITESPACE@80..81 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0023_placeholder_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0023_placeholder_type.rast
index b7acc3f07..17687617b 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0023_placeholder_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0023_placeholder_type.rast
@@ -1,13 +1,13 @@
1SOURCE_FILE@[0; 22) 1SOURCE_FILE@0..22
2 TYPE_ALIAS_DEF@[0; 21) 2 TYPE_ALIAS_DEF@0..21
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 16) 5 NAME@5..16
6 IDENT@[5; 16) "Placeholder" 6 IDENT@5..16 "Placeholder"
7 WHITESPACE@[16; 17) " " 7 WHITESPACE@16..17 " "
8 EQ@[17; 18) "=" 8 EQ@17..18 "="
9 WHITESPACE@[18; 19) " " 9 WHITESPACE@18..19 " "
10 PLACEHOLDER_TYPE@[19; 20) 10 PLACEHOLDER_TYPE@19..20
11 UNDERSCORE@[19; 20) "_" 11 UNDERSCORE@19..20 "_"
12 SEMICOLON@[20; 21) ";" 12 SEMICOLON@20..21 ";"
13 WHITESPACE@[21; 22) "\n" 13 WHITESPACE@21..22 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast
index 430e4a999..7da292a2d 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast
@@ -1,42 +1,42 @@
1SOURCE_FILE@[0; 39) 1SOURCE_FILE@0..39
2 FN_DEF@[0; 38) 2 FN_DEF@0..38
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 38) 11 BLOCK_EXPR@10..38
12 BLOCK@[10; 38) 12 BLOCK@10..38
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 LET_STMT@[16; 36) 15 LET_STMT@16..36
16 LET_KW@[16; 19) "let" 16 LET_KW@16..19 "let"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 SLICE_PAT@[20; 30) 18 SLICE_PAT@20..30
19 L_BRACK@[20; 21) "[" 19 L_BRACK@20..21 "["
20 BIND_PAT@[21; 22) 20 BIND_PAT@21..22
21 NAME@[21; 22) 21 NAME@21..22
22 IDENT@[21; 22) "a" 22 IDENT@21..22 "a"
23 COMMA@[22; 23) "," 23 COMMA@22..23 ","
24 WHITESPACE@[23; 24) " " 24 WHITESPACE@23..24 " "
25 BIND_PAT@[24; 25) 25 BIND_PAT@24..25
26 NAME@[24; 25) 26 NAME@24..25
27 IDENT@[24; 25) "b" 27 IDENT@24..25 "b"
28 COMMA@[25; 26) "," 28 COMMA@25..26 ","
29 WHITESPACE@[26; 27) " " 29 WHITESPACE@26..27 " "
30 DOT_DOT_PAT@[27; 29) 30 DOT_DOT_PAT@27..29
31 DOT2@[27; 29) ".." 31 DOT2@27..29 ".."
32 R_BRACK@[29; 30) "]" 32 R_BRACK@29..30 "]"
33 WHITESPACE@[30; 31) " " 33 WHITESPACE@30..31 " "
34 EQ@[31; 32) "=" 34 EQ@31..32 "="
35 WHITESPACE@[32; 33) " " 35 WHITESPACE@32..33 " "
36 ARRAY_EXPR@[33; 35) 36 ARRAY_EXPR@33..35
37 L_BRACK@[33; 34) "[" 37 L_BRACK@33..34 "["
38 R_BRACK@[34; 35) "]" 38 R_BRACK@34..35 "]"
39 SEMICOLON@[35; 36) ";" 39 SEMICOLON@35..36 ";"
40 WHITESPACE@[36; 37) "\n" 40 WHITESPACE@36..37 "\n"
41 R_CURLY@[37; 38) "}" 41 R_CURLY@37..38 "}"
42 WHITESPACE@[38; 39) "\n" 42 WHITESPACE@38..39 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0025_slice_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0025_slice_type.rast
index 4eee1e7f1..0a6d77f45 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0025_slice_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0025_slice_type.rast
@@ -1,17 +1,17 @@
1SOURCE_FILE@[0; 15) 1SOURCE_FILE@0..15
2 TYPE_ALIAS_DEF@[0; 14) 2 TYPE_ALIAS_DEF@0..14
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "T" 6 IDENT@5..6 "T"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 SLICE_TYPE@[9; 13) 10 SLICE_TYPE@9..13
11 L_BRACK@[9; 10) "[" 11 L_BRACK@9..10 "["
12 TUPLE_TYPE@[10; 12) 12 TUPLE_TYPE@10..12
13 L_PAREN@[10; 11) "(" 13 L_PAREN@10..11 "("
14 R_PAREN@[11; 12) ")" 14 R_PAREN@11..12 ")"
15 R_BRACK@[12; 13) "]" 15 R_BRACK@12..13 "]"
16 SEMICOLON@[13; 14) ";" 16 SEMICOLON@13..14 ";"
17 WHITESPACE@[14; 15) "\n" 17 WHITESPACE@14..15 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast b/crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast
index d8d82dacc..574942f06 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast
@@ -1,105 +1,105 @@
1SOURCE_FILE@[0; 97) 1SOURCE_FILE@0..97
2 FN_DEF@[0; 96) 2 FN_DEF@0..96
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 96) 11 BLOCK_EXPR@9..96
12 BLOCK@[9; 96) 12 BLOCK@9..96
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 28) 15 LET_STMT@15..28
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 TUPLE_STRUCT_PAT@[19; 22) 18 TUPLE_STRUCT_PAT@19..22
19 PATH@[19; 20) 19 PATH@19..20
20 PATH_SEGMENT@[19; 20) 20 PATH_SEGMENT@19..20
21 NAME_REF@[19; 20) 21 NAME_REF@19..20
22 IDENT@[19; 20) "S" 22 IDENT@19..20 "S"
23 L_PAREN@[20; 21) "(" 23 L_PAREN@20..21 "("
24 R_PAREN@[21; 22) ")" 24 R_PAREN@21..22 ")"
25 WHITESPACE@[22; 23) " " 25 WHITESPACE@22..23 " "
26 EQ@[23; 24) "=" 26 EQ@23..24 "="
27 WHITESPACE@[24; 25) " " 27 WHITESPACE@24..25 " "
28 TUPLE_EXPR@[25; 27) 28 TUPLE_EXPR@25..27
29 L_PAREN@[25; 26) "(" 29 L_PAREN@25..26 "("
30 R_PAREN@[26; 27) ")" 30 R_PAREN@26..27 ")"
31 SEMICOLON@[27; 28) ";" 31 SEMICOLON@27..28 ";"
32 WHITESPACE@[28; 33) "\n " 32 WHITESPACE@28..33 "\n "
33 LET_STMT@[33; 47) 33 LET_STMT@33..47
34 LET_KW@[33; 36) "let" 34 LET_KW@33..36 "let"
35 WHITESPACE@[36; 37) " " 35 WHITESPACE@36..37 " "
36 TUPLE_STRUCT_PAT@[37; 41) 36 TUPLE_STRUCT_PAT@37..41
37 PATH@[37; 38) 37 PATH@37..38
38 PATH_SEGMENT@[37; 38) 38 PATH_SEGMENT@37..38
39 NAME_REF@[37; 38) 39 NAME_REF@37..38
40 IDENT@[37; 38) "S" 40 IDENT@37..38 "S"
41 L_PAREN@[38; 39) "(" 41 L_PAREN@38..39 "("
42 PLACEHOLDER_PAT@[39; 40) 42 PLACEHOLDER_PAT@39..40
43 UNDERSCORE@[39; 40) "_" 43 UNDERSCORE@39..40 "_"
44 R_PAREN@[40; 41) ")" 44 R_PAREN@40..41 ")"
45 WHITESPACE@[41; 42) " " 45 WHITESPACE@41..42 " "
46 EQ@[42; 43) "=" 46 EQ@42..43 "="
47 WHITESPACE@[43; 44) " " 47 WHITESPACE@43..44 " "
48 TUPLE_EXPR@[44; 46) 48 TUPLE_EXPR@44..46
49 L_PAREN@[44; 45) "(" 49 L_PAREN@44..45 "("
50 R_PAREN@[45; 46) ")" 50 R_PAREN@45..46 ")"
51 SEMICOLON@[46; 47) ";" 51 SEMICOLON@46..47 ";"
52 WHITESPACE@[47; 52) "\n " 52 WHITESPACE@47..52 "\n "
53 LET_STMT@[52; 67) 53 LET_STMT@52..67
54 LET_KW@[52; 55) "let" 54 LET_KW@52..55 "let"
55 WHITESPACE@[55; 56) " " 55 WHITESPACE@55..56 " "
56 TUPLE_STRUCT_PAT@[56; 61) 56 TUPLE_STRUCT_PAT@56..61
57 PATH@[56; 57) 57 PATH@56..57
58 PATH_SEGMENT@[56; 57) 58 PATH_SEGMENT@56..57
59 NAME_REF@[56; 57) 59 NAME_REF@56..57
60 IDENT@[56; 57) "S" 60 IDENT@56..57 "S"
61 L_PAREN@[57; 58) "(" 61 L_PAREN@57..58 "("
62 PLACEHOLDER_PAT@[58; 59) 62 PLACEHOLDER_PAT@58..59
63 UNDERSCORE@[58; 59) "_" 63 UNDERSCORE@58..59 "_"
64 COMMA@[59; 60) "," 64 COMMA@59..60 ","
65 R_PAREN@[60; 61) ")" 65 R_PAREN@60..61 ")"
66 WHITESPACE@[61; 62) " " 66 WHITESPACE@61..62 " "
67 EQ@[62; 63) "=" 67 EQ@62..63 "="
68 WHITESPACE@[63; 64) " " 68 WHITESPACE@63..64 " "
69 TUPLE_EXPR@[64; 66) 69 TUPLE_EXPR@64..66
70 L_PAREN@[64; 65) "(" 70 L_PAREN@64..65 "("
71 R_PAREN@[65; 66) ")" 71 R_PAREN@65..66 ")"
72 SEMICOLON@[66; 67) ";" 72 SEMICOLON@66..67 ";"
73 WHITESPACE@[67; 72) "\n " 73 WHITESPACE@67..72 "\n "
74 LET_STMT@[72; 94) 74 LET_STMT@72..94
75 LET_KW@[72; 75) "let" 75 LET_KW@72..75 "let"
76 WHITESPACE@[75; 76) " " 76 WHITESPACE@75..76 " "
77 TUPLE_STRUCT_PAT@[76; 88) 77 TUPLE_STRUCT_PAT@76..88
78 PATH@[76; 77) 78 PATH@76..77
79 PATH_SEGMENT@[76; 77) 79 PATH_SEGMENT@76..77
80 NAME_REF@[76; 77) 80 NAME_REF@76..77
81 IDENT@[76; 77) "S" 81 IDENT@76..77 "S"
82 L_PAREN@[77; 78) "(" 82 L_PAREN@77..78 "("
83 PLACEHOLDER_PAT@[78; 79) 83 PLACEHOLDER_PAT@78..79
84 UNDERSCORE@[78; 79) "_" 84 UNDERSCORE@78..79 "_"
85 COMMA@[79; 80) "," 85 COMMA@79..80 ","
86 WHITESPACE@[80; 81) " " 86 WHITESPACE@80..81 " "
87 DOT_DOT_PAT@[81; 83) 87 DOT_DOT_PAT@81..83
88 DOT2@[81; 83) ".." 88 DOT2@81..83 ".."
89 WHITESPACE@[83; 84) " " 89 WHITESPACE@83..84 " "
90 COMMA@[84; 85) "," 90 COMMA@84..85 ","
91 WHITESPACE@[85; 86) " " 91 WHITESPACE@85..86 " "
92 BIND_PAT@[86; 87) 92 BIND_PAT@86..87
93 NAME@[86; 87) 93 NAME@86..87
94 IDENT@[86; 87) "x" 94 IDENT@86..87 "x"
95 R_PAREN@[87; 88) ")" 95 R_PAREN@87..88 ")"
96 WHITESPACE@[88; 89) " " 96 WHITESPACE@88..89 " "
97 EQ@[89; 90) "=" 97 EQ@89..90 "="
98 WHITESPACE@[90; 91) " " 98 WHITESPACE@90..91 " "
99 TUPLE_EXPR@[91; 93) 99 TUPLE_EXPR@91..93
100 L_PAREN@[91; 92) "(" 100 L_PAREN@91..92 "("
101 R_PAREN@[92; 93) ")" 101 R_PAREN@92..93 ")"
102 SEMICOLON@[93; 94) ";" 102 SEMICOLON@93..94 ";"
103 WHITESPACE@[94; 95) "\n" 103 WHITESPACE@94..95 "\n"
104 R_CURLY@[95; 96) "}" 104 R_CURLY@95..96 "}"
105 WHITESPACE@[96; 97) "\n" 105 WHITESPACE@96..97 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0027_ref_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0027_ref_pat.rast
index ac6ab31f2..1927438bb 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0027_ref_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0027_ref_pat.rast
@@ -1,50 +1,50 @@
1SOURCE_FILE@[0; 52) 1SOURCE_FILE@0..52
2 FN_DEF@[0; 51) 2 FN_DEF@0..51
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 51) 11 BLOCK_EXPR@10..51
12 BLOCK@[10; 51) 12 BLOCK@10..51
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 LET_STMT@[16; 28) 15 LET_STMT@16..28
16 LET_KW@[16; 19) "let" 16 LET_KW@16..19 "let"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 REF_PAT@[20; 22) 18 REF_PAT@20..22
19 AMP@[20; 21) "&" 19 AMP@20..21 "&"
20 BIND_PAT@[21; 22) 20 BIND_PAT@21..22
21 NAME@[21; 22) 21 NAME@21..22
22 IDENT@[21; 22) "a" 22 IDENT@21..22 "a"
23 WHITESPACE@[22; 23) " " 23 WHITESPACE@22..23 " "
24 EQ@[23; 24) "=" 24 EQ@23..24 "="
25 WHITESPACE@[24; 25) " " 25 WHITESPACE@24..25 " "
26 TUPLE_EXPR@[25; 27) 26 TUPLE_EXPR@25..27
27 L_PAREN@[25; 26) "(" 27 L_PAREN@25..26 "("
28 R_PAREN@[26; 27) ")" 28 R_PAREN@26..27 ")"
29 SEMICOLON@[27; 28) ";" 29 SEMICOLON@27..28 ";"
30 WHITESPACE@[28; 33) "\n " 30 WHITESPACE@28..33 "\n "
31 LET_STMT@[33; 49) 31 LET_STMT@33..49
32 LET_KW@[33; 36) "let" 32 LET_KW@33..36 "let"
33 WHITESPACE@[36; 37) " " 33 WHITESPACE@36..37 " "
34 REF_PAT@[37; 43) 34 REF_PAT@37..43
35 AMP@[37; 38) "&" 35 AMP@37..38 "&"
36 MUT_KW@[38; 41) "mut" 36 MUT_KW@38..41 "mut"
37 WHITESPACE@[41; 42) " " 37 WHITESPACE@41..42 " "
38 BIND_PAT@[42; 43) 38 BIND_PAT@42..43
39 NAME@[42; 43) 39 NAME@42..43
40 IDENT@[42; 43) "b" 40 IDENT@42..43 "b"
41 WHITESPACE@[43; 44) " " 41 WHITESPACE@43..44 " "
42 EQ@[44; 45) "=" 42 EQ@44..45 "="
43 WHITESPACE@[45; 46) " " 43 WHITESPACE@45..46 " "
44 TUPLE_EXPR@[46; 48) 44 TUPLE_EXPR@46..48
45 L_PAREN@[46; 47) "(" 45 L_PAREN@46..47 "("
46 R_PAREN@[47; 48) ")" 46 R_PAREN@47..48 ")"
47 SEMICOLON@[48; 49) ";" 47 SEMICOLON@48..49 ";"
48 WHITESPACE@[49; 50) "\n" 48 WHITESPACE@49..50 "\n"
49 R_CURLY@[50; 51) "}" 49 R_CURLY@50..51 "}"
50 WHITESPACE@[51; 52) "\n" 50 WHITESPACE@51..52 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0028_impl_trait_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0028_impl_trait_type.rast
index 3371cab82..93f5c738c 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0028_impl_trait_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0028_impl_trait_type.rast
@@ -1,43 +1,43 @@
1SOURCE_FILE@[0; 43) 1SOURCE_FILE@0..43
2 TYPE_ALIAS_DEF@[0; 42) 2 TYPE_ALIAS_DEF@0..42
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "A" 6 IDENT@5..6 "A"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 IMPL_TRAIT_TYPE@[9; 41) 10 IMPL_TRAIT_TYPE@9..41
11 IMPL_KW@[9; 13) "impl" 11 IMPL_KW@9..13 "impl"
12 WHITESPACE@[13; 14) " " 12 WHITESPACE@13..14 " "
13 TYPE_BOUND_LIST@[14; 41) 13 TYPE_BOUND_LIST@14..41
14 TYPE_BOUND@[14; 36) 14 TYPE_BOUND@14..36
15 PATH_TYPE@[14; 36) 15 PATH_TYPE@14..36
16 PATH@[14; 36) 16 PATH@14..36
17 PATH_SEGMENT@[14; 36) 17 PATH_SEGMENT@14..36
18 NAME_REF@[14; 22) 18 NAME_REF@14..22
19 IDENT@[14; 22) "Iterator" 19 IDENT@14..22 "Iterator"
20 TYPE_ARG_LIST@[22; 36) 20 TYPE_ARG_LIST@22..36
21 L_ANGLE@[22; 23) "<" 21 L_ANGLE@22..23 "<"
22 ASSOC_TYPE_ARG@[23; 35) 22 ASSOC_TYPE_ARG@23..35
23 NAME_REF@[23; 27) 23 NAME_REF@23..27
24 IDENT@[23; 27) "Item" 24 IDENT@23..27 "Item"
25 EQ@[27; 28) "=" 25 EQ@27..28 "="
26 PATH_TYPE@[28; 35) 26 PATH_TYPE@28..35
27 PATH@[28; 35) 27 PATH@28..35
28 PATH_SEGMENT@[28; 35) 28 PATH_SEGMENT@28..35
29 NAME_REF@[28; 31) 29 NAME_REF@28..31
30 IDENT@[28; 31) "Foo" 30 IDENT@28..31 "Foo"
31 TYPE_ARG_LIST@[31; 35) 31 TYPE_ARG_LIST@31..35
32 L_ANGLE@[31; 32) "<" 32 L_ANGLE@31..32 "<"
33 LIFETIME_ARG@[32; 34) 33 LIFETIME_ARG@32..34
34 LIFETIME@[32; 34) "\'a" 34 LIFETIME@32..34 "\'a"
35 R_ANGLE@[34; 35) ">" 35 R_ANGLE@34..35 ">"
36 R_ANGLE@[35; 36) ">" 36 R_ANGLE@35..36 ">"
37 WHITESPACE@[36; 37) " " 37 WHITESPACE@36..37 " "
38 PLUS@[37; 38) "+" 38 PLUS@37..38 "+"
39 WHITESPACE@[38; 39) " " 39 WHITESPACE@38..39 " "
40 TYPE_BOUND@[39; 41) 40 TYPE_BOUND@39..41
41 LIFETIME@[39; 41) "\'a" 41 LIFETIME@39..41 "\'a"
42 SEMICOLON@[41; 42) ";" 42 SEMICOLON@41..42 ";"
43 WHITESPACE@[42; 43) "\n" 43 WHITESPACE@42..43 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0029_cast_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0029_cast_expr.rast
index e9ca214bb..9effb345f 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0029_cast_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0029_cast_expr.rast
@@ -1,90 +1,90 @@
1SOURCE_FILE@[0; 89) 1SOURCE_FILE@0..89
2 FN_DEF@[0; 88) 2 FN_DEF@0..88
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 88) 11 BLOCK_EXPR@9..88
12 BLOCK@[9; 88) 12 BLOCK@9..88
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 25) 15 EXPR_STMT@15..25
16 CAST_EXPR@[15; 24) 16 CAST_EXPR@15..24
17 LITERAL@[15; 17) 17 LITERAL@15..17
18 INT_NUMBER@[15; 17) "82" 18 INT_NUMBER@15..17 "82"
19 WHITESPACE@[17; 18) " " 19 WHITESPACE@17..18 " "
20 AS_KW@[18; 20) "as" 20 AS_KW@18..20 "as"
21 WHITESPACE@[20; 21) " " 21 WHITESPACE@20..21 " "
22 PATH_TYPE@[21; 24) 22 PATH_TYPE@21..24
23 PATH@[21; 24) 23 PATH@21..24
24 PATH_SEGMENT@[21; 24) 24 PATH_SEGMENT@21..24
25 NAME_REF@[21; 24) 25 NAME_REF@21..24
26 IDENT@[21; 24) "i32" 26 IDENT@21..24 "i32"
27 SEMICOLON@[24; 25) ";" 27 SEMICOLON@24..25 ";"
28 WHITESPACE@[25; 30) "\n " 28 WHITESPACE@25..30 "\n "
29 EXPR_STMT@[30; 43) 29 EXPR_STMT@30..43
30 BIN_EXPR@[30; 42) 30 BIN_EXPR@30..42
31 CAST_EXPR@[30; 38) 31 CAST_EXPR@30..38
32 LITERAL@[30; 32) 32 LITERAL@30..32
33 INT_NUMBER@[30; 32) "81" 33 INT_NUMBER@30..32 "81"
34 WHITESPACE@[32; 33) " " 34 WHITESPACE@32..33 " "
35 AS_KW@[33; 35) "as" 35 AS_KW@33..35 "as"
36 WHITESPACE@[35; 36) " " 36 WHITESPACE@35..36 " "
37 PATH_TYPE@[36; 38) 37 PATH_TYPE@36..38
38 PATH@[36; 38) 38 PATH@36..38
39 PATH_SEGMENT@[36; 38) 39 PATH_SEGMENT@36..38
40 NAME_REF@[36; 38) 40 NAME_REF@36..38
41 IDENT@[36; 38) "i8" 41 IDENT@36..38 "i8"
42 WHITESPACE@[38; 39) " " 42 WHITESPACE@38..39 " "
43 PLUS@[39; 40) "+" 43 PLUS@39..40 "+"
44 WHITESPACE@[40; 41) " " 44 WHITESPACE@40..41 " "
45 LITERAL@[41; 42) 45 LITERAL@41..42
46 INT_NUMBER@[41; 42) "1" 46 INT_NUMBER@41..42 "1"
47 SEMICOLON@[42; 43) ";" 47 SEMICOLON@42..43 ";"
48 WHITESPACE@[43; 48) "\n " 48 WHITESPACE@43..48 "\n "
49 EXPR_STMT@[48; 62) 49 EXPR_STMT@48..62
50 BIN_EXPR@[48; 61) 50 BIN_EXPR@48..61
51 CAST_EXPR@[48; 57) 51 CAST_EXPR@48..57
52 LITERAL@[48; 50) 52 LITERAL@48..50
53 INT_NUMBER@[48; 50) "79" 53 INT_NUMBER@48..50 "79"
54 WHITESPACE@[50; 51) " " 54 WHITESPACE@50..51 " "
55 AS_KW@[51; 53) "as" 55 AS_KW@51..53 "as"
56 WHITESPACE@[53; 54) " " 56 WHITESPACE@53..54 " "
57 PATH_TYPE@[54; 57) 57 PATH_TYPE@54..57
58 PATH@[54; 57) 58 PATH@54..57
59 PATH_SEGMENT@[54; 57) 59 PATH_SEGMENT@54..57
60 NAME_REF@[54; 57) 60 NAME_REF@54..57
61 IDENT@[54; 57) "i16" 61 IDENT@54..57 "i16"
62 WHITESPACE@[57; 58) " " 62 WHITESPACE@57..58 " "
63 MINUS@[58; 59) "-" 63 MINUS@58..59 "-"
64 WHITESPACE@[59; 60) " " 64 WHITESPACE@59..60 " "
65 LITERAL@[60; 61) 65 LITERAL@60..61
66 INT_NUMBER@[60; 61) "1" 66 INT_NUMBER@60..61 "1"
67 SEMICOLON@[61; 62) ";" 67 SEMICOLON@61..62 ";"
68 WHITESPACE@[62; 67) "\n " 68 WHITESPACE@62..67 "\n "
69 EXPR_STMT@[67; 86) 69 EXPR_STMT@67..86
70 BIN_EXPR@[67; 85) 70 BIN_EXPR@67..85
71 CAST_EXPR@[67; 77) 71 CAST_EXPR@67..77
72 LITERAL@[67; 71) 72 LITERAL@67..71
73 INT_NUMBER@[67; 71) "0x36" 73 INT_NUMBER@67..71 "0x36"
74 WHITESPACE@[71; 72) " " 74 WHITESPACE@71..72 " "
75 AS_KW@[72; 74) "as" 75 AS_KW@72..74 "as"
76 WHITESPACE@[74; 75) " " 76 WHITESPACE@74..75 " "
77 PATH_TYPE@[75; 77) 77 PATH_TYPE@75..77
78 PATH@[75; 77) 78 PATH@75..77
79 PATH_SEGMENT@[75; 77) 79 PATH_SEGMENT@75..77
80 NAME_REF@[75; 77) 80 NAME_REF@75..77
81 IDENT@[75; 77) "u8" 81 IDENT@75..77 "u8"
82 WHITESPACE@[77; 78) " " 82 WHITESPACE@77..78 " "
83 LTEQ@[78; 80) "<=" 83 LTEQ@78..80 "<="
84 WHITESPACE@[80; 81) " " 84 WHITESPACE@80..81 " "
85 LITERAL@[81; 85) 85 LITERAL@81..85
86 INT_NUMBER@[81; 85) "0x37" 86 INT_NUMBER@81..85 "0x37"
87 SEMICOLON@[85; 86) ";" 87 SEMICOLON@85..86 ";"
88 WHITESPACE@[86; 87) "\n" 88 WHITESPACE@86..87 "\n"
89 R_CURLY@[87; 88) "}" 89 R_CURLY@87..88 "}"
90 WHITESPACE@[88; 89) "\n" 90 WHITESPACE@88..89 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0030_cond.rast b/crates/ra_syntax/test_data/parser/inline/ok/0030_cond.rast
index 6fd49c7bc..b6759541e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0030_cond.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0030_cond.rast
@@ -1,209 +1,209 @@
1SOURCE_FILE@[0; 197) 1SOURCE_FILE@0..197
2 FN_DEF@[0; 37) 2 FN_DEF@0..37
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 37) 11 BLOCK_EXPR@9..37
12 BLOCK@[9; 37) 12 BLOCK@9..37
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 11) " " 14 WHITESPACE@10..11 " "
15 IF_EXPR@[11; 35) 15 IF_EXPR@11..35
16 IF_KW@[11; 13) "if" 16 IF_KW@11..13 "if"
17 WHITESPACE@[13; 14) " " 17 WHITESPACE@13..14 " "
18 CONDITION@[14; 32) 18 CONDITION@14..32
19 LET_KW@[14; 17) "let" 19 LET_KW@14..17 "let"
20 WHITESPACE@[17; 18) " " 20 WHITESPACE@17..18 " "
21 TUPLE_STRUCT_PAT@[18; 25) 21 TUPLE_STRUCT_PAT@18..25
22 PATH@[18; 22) 22 PATH@18..22
23 PATH_SEGMENT@[18; 22) 23 PATH_SEGMENT@18..22
24 NAME_REF@[18; 22) 24 NAME_REF@18..22
25 IDENT@[18; 22) "Some" 25 IDENT@18..22 "Some"
26 L_PAREN@[22; 23) "(" 26 L_PAREN@22..23 "("
27 PLACEHOLDER_PAT@[23; 24) 27 PLACEHOLDER_PAT@23..24
28 UNDERSCORE@[23; 24) "_" 28 UNDERSCORE@23..24 "_"
29 R_PAREN@[24; 25) ")" 29 R_PAREN@24..25 ")"
30 WHITESPACE@[25; 26) " " 30 WHITESPACE@25..26 " "
31 EQ@[26; 27) "=" 31 EQ@26..27 "="
32 WHITESPACE@[27; 28) " " 32 WHITESPACE@27..28 " "
33 PATH_EXPR@[28; 32) 33 PATH_EXPR@28..32
34 PATH@[28; 32) 34 PATH@28..32
35 PATH_SEGMENT@[28; 32) 35 PATH_SEGMENT@28..32
36 NAME_REF@[28; 32) 36 NAME_REF@28..32
37 IDENT@[28; 32) "None" 37 IDENT@28..32 "None"
38 WHITESPACE@[32; 33) " " 38 WHITESPACE@32..33 " "
39 BLOCK_EXPR@[33; 35) 39 BLOCK_EXPR@33..35
40 BLOCK@[33; 35) 40 BLOCK@33..35
41 L_CURLY@[33; 34) "{" 41 L_CURLY@33..34 "{"
42 R_CURLY@[34; 35) "}" 42 R_CURLY@34..35 "}"
43 WHITESPACE@[35; 36) " " 43 WHITESPACE@35..36 " "
44 R_CURLY@[36; 37) "}" 44 R_CURLY@36..37 "}"
45 WHITESPACE@[37; 38) "\n" 45 WHITESPACE@37..38 "\n"
46 FN_DEF@[38; 196) 46 FN_DEF@38..196
47 FN_KW@[38; 40) "fn" 47 FN_KW@38..40 "fn"
48 WHITESPACE@[40; 41) " " 48 WHITESPACE@40..41 " "
49 NAME@[41; 44) 49 NAME@41..44
50 IDENT@[41; 44) "bar" 50 IDENT@41..44 "bar"
51 PARAM_LIST@[44; 46) 51 PARAM_LIST@44..46
52 L_PAREN@[44; 45) "(" 52 L_PAREN@44..45 "("
53 R_PAREN@[45; 46) ")" 53 R_PAREN@45..46 ")"
54 WHITESPACE@[46; 47) " " 54 WHITESPACE@46..47 " "
55 BLOCK_EXPR@[47; 196) 55 BLOCK_EXPR@47..196
56 BLOCK@[47; 196) 56 BLOCK@47..196
57 L_CURLY@[47; 48) "{" 57 L_CURLY@47..48 "{"
58 WHITESPACE@[48; 53) "\n " 58 WHITESPACE@48..53 "\n "
59 EXPR_STMT@[53; 87) 59 EXPR_STMT@53..87
60 IF_EXPR@[53; 87) 60 IF_EXPR@53..87
61 IF_KW@[53; 55) "if" 61 IF_KW@53..55 "if"
62 WHITESPACE@[55; 56) " " 62 WHITESPACE@55..56 " "
63 CONDITION@[56; 84) 63 CONDITION@56..84
64 LET_KW@[56; 59) "let" 64 LET_KW@56..59 "let"
65 WHITESPACE@[59; 60) " " 65 WHITESPACE@59..60 " "
66 OR_PAT@[60; 77) 66 OR_PAT@60..77
67 TUPLE_STRUCT_PAT@[60; 67) 67 TUPLE_STRUCT_PAT@60..67
68 PATH@[60; 64) 68 PATH@60..64
69 PATH_SEGMENT@[60; 64) 69 PATH_SEGMENT@60..64
70 NAME_REF@[60; 64) 70 NAME_REF@60..64
71 IDENT@[60; 64) "Some" 71 IDENT@60..64 "Some"
72 L_PAREN@[64; 65) "(" 72 L_PAREN@64..65 "("
73 PLACEHOLDER_PAT@[65; 66) 73 PLACEHOLDER_PAT@65..66
74 UNDERSCORE@[65; 66) "_" 74 UNDERSCORE@65..66 "_"
75 R_PAREN@[66; 67) ")" 75 R_PAREN@66..67 ")"
76 WHITESPACE@[67; 68) " " 76 WHITESPACE@67..68 " "
77 PIPE@[68; 69) "|" 77 PIPE@68..69 "|"
78 WHITESPACE@[69; 70) " " 78 WHITESPACE@69..70 " "
79 TUPLE_STRUCT_PAT@[70; 77) 79 TUPLE_STRUCT_PAT@70..77
80 PATH@[70; 74) 80 PATH@70..74
81 PATH_SEGMENT@[70; 74) 81 PATH_SEGMENT@70..74
82 NAME_REF@[70; 74) 82 NAME_REF@70..74
83 IDENT@[70; 74) "Some" 83 IDENT@70..74 "Some"
84 L_PAREN@[74; 75) "(" 84 L_PAREN@74..75 "("
85 PLACEHOLDER_PAT@[75; 76) 85 PLACEHOLDER_PAT@75..76
86 UNDERSCORE@[75; 76) "_" 86 UNDERSCORE@75..76 "_"
87 R_PAREN@[76; 77) ")" 87 R_PAREN@76..77 ")"
88 WHITESPACE@[77; 78) " " 88 WHITESPACE@77..78 " "
89 EQ@[78; 79) "=" 89 EQ@78..79 "="
90 WHITESPACE@[79; 80) " " 90 WHITESPACE@79..80 " "
91 PATH_EXPR@[80; 84) 91 PATH_EXPR@80..84
92 PATH@[80; 84) 92 PATH@80..84
93 PATH_SEGMENT@[80; 84) 93 PATH_SEGMENT@80..84
94 NAME_REF@[80; 84) 94 NAME_REF@80..84
95 IDENT@[80; 84) "None" 95 IDENT@80..84 "None"
96 WHITESPACE@[84; 85) " " 96 WHITESPACE@84..85 " "
97 BLOCK_EXPR@[85; 87) 97 BLOCK_EXPR@85..87
98 BLOCK@[85; 87) 98 BLOCK@85..87
99 L_CURLY@[85; 86) "{" 99 L_CURLY@85..86 "{"
100 R_CURLY@[86; 87) "}" 100 R_CURLY@86..87 "}"
101 WHITESPACE@[87; 92) "\n " 101 WHITESPACE@87..92 "\n "
102 EXPR_STMT@[92; 118) 102 EXPR_STMT@92..118
103 IF_EXPR@[92; 118) 103 IF_EXPR@92..118
104 IF_KW@[92; 94) "if" 104 IF_KW@92..94 "if"
105 WHITESPACE@[94; 95) " " 105 WHITESPACE@94..95 " "
106 CONDITION@[95; 115) 106 CONDITION@95..115
107 LET_KW@[95; 98) "let" 107 LET_KW@95..98 "let"
108 WHITESPACE@[98; 99) " " 108 WHITESPACE@98..99 " "
109 PIPE@[99; 100) "|" 109 PIPE@99..100 "|"
110 WHITESPACE@[100; 101) " " 110 WHITESPACE@100..101 " "
111 TUPLE_STRUCT_PAT@[101; 108) 111 TUPLE_STRUCT_PAT@101..108
112 PATH@[101; 105) 112 PATH@101..105
113 PATH_SEGMENT@[101; 105) 113 PATH_SEGMENT@101..105
114 NAME_REF@[101; 105) 114 NAME_REF@101..105
115 IDENT@[101; 105) "Some" 115 IDENT@101..105 "Some"
116 L_PAREN@[105; 106) "(" 116 L_PAREN@105..106 "("
117 PLACEHOLDER_PAT@[106; 107) 117 PLACEHOLDER_PAT@106..107
118 UNDERSCORE@[106; 107) "_" 118 UNDERSCORE@106..107 "_"
119 R_PAREN@[107; 108) ")" 119 R_PAREN@107..108 ")"
120 WHITESPACE@[108; 109) " " 120 WHITESPACE@108..109 " "
121 EQ@[109; 110) "=" 121 EQ@109..110 "="
122 WHITESPACE@[110; 111) " " 122 WHITESPACE@110..111 " "
123 PATH_EXPR@[111; 115) 123 PATH_EXPR@111..115
124 PATH@[111; 115) 124 PATH@111..115
125 PATH_SEGMENT@[111; 115) 125 PATH_SEGMENT@111..115
126 NAME_REF@[111; 115) 126 NAME_REF@111..115
127 IDENT@[111; 115) "None" 127 IDENT@111..115 "None"
128 WHITESPACE@[115; 116) " " 128 WHITESPACE@115..116 " "
129 BLOCK_EXPR@[116; 118) 129 BLOCK_EXPR@116..118
130 BLOCK@[116; 118) 130 BLOCK@116..118
131 L_CURLY@[116; 117) "{" 131 L_CURLY@116..117 "{"
132 R_CURLY@[117; 118) "}" 132 R_CURLY@117..118 "}"
133 WHITESPACE@[118; 123) "\n " 133 WHITESPACE@118..123 "\n "
134 EXPR_STMT@[123; 160) 134 EXPR_STMT@123..160
135 WHILE_EXPR@[123; 160) 135 WHILE_EXPR@123..160
136 WHILE_KW@[123; 128) "while" 136 WHILE_KW@123..128 "while"
137 WHITESPACE@[128; 129) " " 137 WHITESPACE@128..129 " "
138 CONDITION@[129; 157) 138 CONDITION@129..157
139 LET_KW@[129; 132) "let" 139 LET_KW@129..132 "let"
140 WHITESPACE@[132; 133) " " 140 WHITESPACE@132..133 " "
141 OR_PAT@[133; 150) 141 OR_PAT@133..150
142 TUPLE_STRUCT_PAT@[133; 140) 142 TUPLE_STRUCT_PAT@133..140
143 PATH@[133; 137) 143 PATH@133..137
144 PATH_SEGMENT@[133; 137) 144 PATH_SEGMENT@133..137
145 NAME_REF@[133; 137) 145 NAME_REF@133..137
146 IDENT@[133; 137) "Some" 146 IDENT@133..137 "Some"
147 L_PAREN@[137; 138) "(" 147 L_PAREN@137..138 "("
148 PLACEHOLDER_PAT@[138; 139) 148 PLACEHOLDER_PAT@138..139
149 UNDERSCORE@[138; 139) "_" 149 UNDERSCORE@138..139 "_"
150 R_PAREN@[139; 140) ")" 150 R_PAREN@139..140 ")"
151 WHITESPACE@[140; 141) " " 151 WHITESPACE@140..141 " "
152 PIPE@[141; 142) "|" 152 PIPE@141..142 "|"
153 WHITESPACE@[142; 143) " " 153 WHITESPACE@142..143 " "
154 TUPLE_STRUCT_PAT@[143; 150) 154 TUPLE_STRUCT_PAT@143..150
155 PATH@[143; 147) 155 PATH@143..147
156 PATH_SEGMENT@[143; 147) 156 PATH_SEGMENT@143..147
157 NAME_REF@[143; 147) 157 NAME_REF@143..147
158 IDENT@[143; 147) "Some" 158 IDENT@143..147 "Some"
159 L_PAREN@[147; 148) "(" 159 L_PAREN@147..148 "("
160 PLACEHOLDER_PAT@[148; 149) 160 PLACEHOLDER_PAT@148..149
161 UNDERSCORE@[148; 149) "_" 161 UNDERSCORE@148..149 "_"
162 R_PAREN@[149; 150) ")" 162 R_PAREN@149..150 ")"
163 WHITESPACE@[150; 151) " " 163 WHITESPACE@150..151 " "
164 EQ@[151; 152) "=" 164 EQ@151..152 "="
165 WHITESPACE@[152; 153) " " 165 WHITESPACE@152..153 " "
166 PATH_EXPR@[153; 157) 166 PATH_EXPR@153..157
167 PATH@[153; 157) 167 PATH@153..157
168 PATH_SEGMENT@[153; 157) 168 PATH_SEGMENT@153..157
169 NAME_REF@[153; 157) 169 NAME_REF@153..157
170 IDENT@[153; 157) "None" 170 IDENT@153..157 "None"
171 WHITESPACE@[157; 158) " " 171 WHITESPACE@157..158 " "
172 BLOCK_EXPR@[158; 160) 172 BLOCK_EXPR@158..160
173 BLOCK@[158; 160) 173 BLOCK@158..160
174 L_CURLY@[158; 159) "{" 174 L_CURLY@158..159 "{"
175 R_CURLY@[159; 160) "}" 175 R_CURLY@159..160 "}"
176 WHITESPACE@[160; 165) "\n " 176 WHITESPACE@160..165 "\n "
177 WHILE_EXPR@[165; 194) 177 WHILE_EXPR@165..194
178 WHILE_KW@[165; 170) "while" 178 WHILE_KW@165..170 "while"
179 WHITESPACE@[170; 171) " " 179 WHITESPACE@170..171 " "
180 CONDITION@[171; 191) 180 CONDITION@171..191
181 LET_KW@[171; 174) "let" 181 LET_KW@171..174 "let"
182 WHITESPACE@[174; 175) " " 182 WHITESPACE@174..175 " "
183 PIPE@[175; 176) "|" 183 PIPE@175..176 "|"
184 WHITESPACE@[176; 177) " " 184 WHITESPACE@176..177 " "
185 TUPLE_STRUCT_PAT@[177; 184) 185 TUPLE_STRUCT_PAT@177..184
186 PATH@[177; 181) 186 PATH@177..181
187 PATH_SEGMENT@[177; 181) 187 PATH_SEGMENT@177..181
188 NAME_REF@[177; 181) 188 NAME_REF@177..181
189 IDENT@[177; 181) "Some" 189 IDENT@177..181 "Some"
190 L_PAREN@[181; 182) "(" 190 L_PAREN@181..182 "("
191 PLACEHOLDER_PAT@[182; 183) 191 PLACEHOLDER_PAT@182..183
192 UNDERSCORE@[182; 183) "_" 192 UNDERSCORE@182..183 "_"
193 R_PAREN@[183; 184) ")" 193 R_PAREN@183..184 ")"
194 WHITESPACE@[184; 185) " " 194 WHITESPACE@184..185 " "
195 EQ@[185; 186) "=" 195 EQ@185..186 "="
196 WHITESPACE@[186; 187) " " 196 WHITESPACE@186..187 " "
197 PATH_EXPR@[187; 191) 197 PATH_EXPR@187..191
198 PATH@[187; 191) 198 PATH@187..191
199 PATH_SEGMENT@[187; 191) 199 PATH_SEGMENT@187..191
200 NAME_REF@[187; 191) 200 NAME_REF@187..191
201 IDENT@[187; 191) "None" 201 IDENT@187..191 "None"
202 WHITESPACE@[191; 192) " " 202 WHITESPACE@191..192 " "
203 BLOCK_EXPR@[192; 194) 203 BLOCK_EXPR@192..194
204 BLOCK@[192; 194) 204 BLOCK@192..194
205 L_CURLY@[192; 193) "{" 205 L_CURLY@192..193 "{"
206 R_CURLY@[193; 194) "}" 206 R_CURLY@193..194 "}"
207 WHITESPACE@[194; 195) "\n" 207 WHITESPACE@194..195 "\n"
208 R_CURLY@[195; 196) "}" 208 R_CURLY@195..196 "}"
209 WHITESPACE@[196; 197) "\n" 209 WHITESPACE@196..197 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0031_while_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0031_while_expr.rast
index aaef408cc..e5138a599 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0031_while_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0031_while_expr.rast
@@ -1,89 +1,89 @@
1SOURCE_FILE@[0; 93) 1SOURCE_FILE@0..93
2 FN_DEF@[0; 92) 2 FN_DEF@0..92
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 92) 11 BLOCK_EXPR@9..92
12 BLOCK@[9; 92) 12 BLOCK@9..92
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 29) 15 EXPR_STMT@15..29
16 WHILE_EXPR@[15; 28) 16 WHILE_EXPR@15..28
17 WHILE_KW@[15; 20) "while" 17 WHILE_KW@15..20 "while"
18 WHITESPACE@[20; 21) " " 18 WHITESPACE@20..21 " "
19 CONDITION@[21; 25) 19 CONDITION@21..25
20 LITERAL@[21; 25) 20 LITERAL@21..25
21 TRUE_KW@[21; 25) "true" 21 TRUE_KW@21..25 "true"
22 WHITESPACE@[25; 26) " " 22 WHITESPACE@25..26 " "
23 BLOCK_EXPR@[26; 28) 23 BLOCK_EXPR@26..28
24 BLOCK@[26; 28) 24 BLOCK@26..28
25 L_CURLY@[26; 27) "{" 25 L_CURLY@26..27 "{"
26 R_CURLY@[27; 28) "}" 26 R_CURLY@27..28 "}"
27 SEMICOLON@[28; 29) ";" 27 SEMICOLON@28..29 ";"
28 WHITESPACE@[29; 34) "\n " 28 WHITESPACE@29..34 "\n "
29 EXPR_STMT@[34; 67) 29 EXPR_STMT@34..67
30 WHILE_EXPR@[34; 66) 30 WHILE_EXPR@34..66
31 WHILE_KW@[34; 39) "while" 31 WHILE_KW@34..39 "while"
32 WHITESPACE@[39; 40) " " 32 WHITESPACE@39..40 " "
33 CONDITION@[40; 63) 33 CONDITION@40..63
34 LET_KW@[40; 43) "let" 34 LET_KW@40..43 "let"
35 WHITESPACE@[43; 44) " " 35 WHITESPACE@43..44 " "
36 TUPLE_STRUCT_PAT@[44; 51) 36 TUPLE_STRUCT_PAT@44..51
37 PATH@[44; 48) 37 PATH@44..48
38 PATH_SEGMENT@[44; 48) 38 PATH_SEGMENT@44..48
39 NAME_REF@[44; 48) 39 NAME_REF@44..48
40 IDENT@[44; 48) "Some" 40 IDENT@44..48 "Some"
41 L_PAREN@[48; 49) "(" 41 L_PAREN@48..49 "("
42 BIND_PAT@[49; 50) 42 BIND_PAT@49..50
43 NAME@[49; 50) 43 NAME@49..50
44 IDENT@[49; 50) "x" 44 IDENT@49..50 "x"
45 R_PAREN@[50; 51) ")" 45 R_PAREN@50..51 ")"
46 WHITESPACE@[51; 52) " " 46 WHITESPACE@51..52 " "
47 EQ@[52; 53) "=" 47 EQ@52..53 "="
48 WHITESPACE@[53; 54) " " 48 WHITESPACE@53..54 " "
49 METHOD_CALL_EXPR@[54; 63) 49 METHOD_CALL_EXPR@54..63
50 PATH_EXPR@[54; 56) 50 PATH_EXPR@54..56
51 PATH@[54; 56) 51 PATH@54..56
52 PATH_SEGMENT@[54; 56) 52 PATH_SEGMENT@54..56
53 NAME_REF@[54; 56) 53 NAME_REF@54..56
54 IDENT@[54; 56) "it" 54 IDENT@54..56 "it"
55 DOT@[56; 57) "." 55 DOT@56..57 "."
56 NAME_REF@[57; 61) 56 NAME_REF@57..61
57 IDENT@[57; 61) "next" 57 IDENT@57..61 "next"
58 ARG_LIST@[61; 63) 58 ARG_LIST@61..63
59 L_PAREN@[61; 62) "(" 59 L_PAREN@61..62 "("
60 R_PAREN@[62; 63) ")" 60 R_PAREN@62..63 ")"
61 WHITESPACE@[63; 64) " " 61 WHITESPACE@63..64 " "
62 BLOCK_EXPR@[64; 66) 62 BLOCK_EXPR@64..66
63 BLOCK@[64; 66) 63 BLOCK@64..66
64 L_CURLY@[64; 65) "{" 64 L_CURLY@64..65 "{"
65 R_CURLY@[65; 66) "}" 65 R_CURLY@65..66 "}"
66 SEMICOLON@[66; 67) ";" 66 SEMICOLON@66..67 ";"
67 WHITESPACE@[67; 72) "\n " 67 WHITESPACE@67..72 "\n "
68 EXPR_STMT@[72; 90) 68 EXPR_STMT@72..90
69 WHILE_EXPR@[72; 89) 69 WHILE_EXPR@72..89
70 WHILE_KW@[72; 77) "while" 70 WHILE_KW@72..77 "while"
71 WHITESPACE@[77; 78) " " 71 WHITESPACE@77..78 " "
72 CONDITION@[78; 86) 72 CONDITION@78..86
73 BLOCK_EXPR@[78; 86) 73 BLOCK_EXPR@78..86
74 BLOCK@[78; 86) 74 BLOCK@78..86
75 L_CURLY@[78; 79) "{" 75 L_CURLY@78..79 "{"
76 WHITESPACE@[79; 80) " " 76 WHITESPACE@79..80 " "
77 LITERAL@[80; 84) 77 LITERAL@80..84
78 TRUE_KW@[80; 84) "true" 78 TRUE_KW@80..84 "true"
79 WHITESPACE@[84; 85) " " 79 WHITESPACE@84..85 " "
80 R_CURLY@[85; 86) "}" 80 R_CURLY@85..86 "}"
81 WHITESPACE@[86; 87) " " 81 WHITESPACE@86..87 " "
82 BLOCK_EXPR@[87; 89) 82 BLOCK_EXPR@87..89
83 BLOCK@[87; 89) 83 BLOCK@87..89
84 L_CURLY@[87; 88) "{" 84 L_CURLY@87..88 "{"
85 R_CURLY@[88; 89) "}" 85 R_CURLY@88..89 "}"
86 SEMICOLON@[89; 90) ";" 86 SEMICOLON@89..90 ";"
87 WHITESPACE@[90; 91) "\n" 87 WHITESPACE@90..91 "\n"
88 R_CURLY@[91; 92) "}" 88 R_CURLY@91..92 "}"
89 WHITESPACE@[92; 93) "\n" 89 WHITESPACE@92..93 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0032_fn_pointer_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0032_fn_pointer_type.rast
index bad769850..72705e148 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0032_fn_pointer_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0032_fn_pointer_type.rast
@@ -1,98 +1,98 @@
1SOURCE_FILE@[0; 113) 1SOURCE_FILE@0..113
2 TYPE_ALIAS_DEF@[0; 14) 2 TYPE_ALIAS_DEF@0..14
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "A" 6 IDENT@5..6 "A"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 FN_POINTER_TYPE@[9; 13) 10 FN_POINTER_TYPE@9..13
11 FN_KW@[9; 11) "fn" 11 FN_KW@9..11 "fn"
12 PARAM_LIST@[11; 13) 12 PARAM_LIST@11..13
13 L_PAREN@[11; 12) "(" 13 L_PAREN@11..12 "("
14 R_PAREN@[12; 13) ")" 14 R_PAREN@12..13 ")"
15 SEMICOLON@[13; 14) ";" 15 SEMICOLON@13..14 ";"
16 WHITESPACE@[14; 15) "\n" 16 WHITESPACE@14..15 "\n"
17 TYPE_ALIAS_DEF@[15; 36) 17 TYPE_ALIAS_DEF@15..36
18 TYPE_KW@[15; 19) "type" 18 TYPE_KW@15..19 "type"
19 WHITESPACE@[19; 20) " " 19 WHITESPACE@19..20 " "
20 NAME@[20; 21) 20 NAME@20..21
21 IDENT@[20; 21) "B" 21 IDENT@20..21 "B"
22 WHITESPACE@[21; 22) " " 22 WHITESPACE@21..22 " "
23 EQ@[22; 23) "=" 23 EQ@22..23 "="
24 WHITESPACE@[23; 24) " " 24 WHITESPACE@23..24 " "
25 FN_POINTER_TYPE@[24; 35) 25 FN_POINTER_TYPE@24..35
26 UNSAFE_KW@[24; 30) "unsafe" 26 UNSAFE_KW@24..30 "unsafe"
27 WHITESPACE@[30; 31) " " 27 WHITESPACE@30..31 " "
28 FN_KW@[31; 33) "fn" 28 FN_KW@31..33 "fn"
29 PARAM_LIST@[33; 35) 29 PARAM_LIST@33..35
30 L_PAREN@[33; 34) "(" 30 L_PAREN@33..34 "("
31 R_PAREN@[34; 35) ")" 31 R_PAREN@34..35 ")"
32 SEMICOLON@[35; 36) ";" 32 SEMICOLON@35..36 ";"
33 WHITESPACE@[36; 37) "\n" 33 WHITESPACE@36..37 "\n"
34 TYPE_ALIAS_DEF@[37; 69) 34 TYPE_ALIAS_DEF@37..69
35 TYPE_KW@[37; 41) "type" 35 TYPE_KW@37..41 "type"
36 WHITESPACE@[41; 42) " " 36 WHITESPACE@41..42 " "
37 NAME@[42; 43) 37 NAME@42..43
38 IDENT@[42; 43) "C" 38 IDENT@42..43 "C"
39 WHITESPACE@[43; 44) " " 39 WHITESPACE@43..44 " "
40 EQ@[44; 45) "=" 40 EQ@44..45 "="
41 WHITESPACE@[45; 46) " " 41 WHITESPACE@45..46 " "
42 FN_POINTER_TYPE@[46; 68) 42 FN_POINTER_TYPE@46..68
43 UNSAFE_KW@[46; 52) "unsafe" 43 UNSAFE_KW@46..52 "unsafe"
44 WHITESPACE@[52; 53) " " 44 WHITESPACE@52..53 " "
45 ABI@[53; 63) 45 ABI@53..63
46 EXTERN_KW@[53; 59) "extern" 46 EXTERN_KW@53..59 "extern"
47 WHITESPACE@[59; 60) " " 47 WHITESPACE@59..60 " "
48 STRING@[60; 63) "\"C\"" 48 STRING@60..63 "\"C\""
49 WHITESPACE@[63; 64) " " 49 WHITESPACE@63..64 " "
50 FN_KW@[64; 66) "fn" 50 FN_KW@64..66 "fn"
51 PARAM_LIST@[66; 68) 51 PARAM_LIST@66..68
52 L_PAREN@[66; 67) "(" 52 L_PAREN@66..67 "("
53 R_PAREN@[67; 68) ")" 53 R_PAREN@67..68 ")"
54 SEMICOLON@[68; 69) ";" 54 SEMICOLON@68..69 ";"
55 WHITESPACE@[69; 70) "\n" 55 WHITESPACE@69..70 "\n"
56 TYPE_ALIAS_DEF@[70; 112) 56 TYPE_ALIAS_DEF@70..112
57 TYPE_KW@[70; 74) "type" 57 TYPE_KW@70..74 "type"
58 WHITESPACE@[74; 75) " " 58 WHITESPACE@74..75 " "
59 NAME@[75; 76) 59 NAME@75..76
60 IDENT@[75; 76) "D" 60 IDENT@75..76 "D"
61 WHITESPACE@[76; 77) " " 61 WHITESPACE@76..77 " "
62 EQ@[77; 78) "=" 62 EQ@77..78 "="
63 WHITESPACE@[78; 79) " " 63 WHITESPACE@78..79 " "
64 FN_POINTER_TYPE@[79; 111) 64 FN_POINTER_TYPE@79..111
65 ABI@[79; 89) 65 ABI@79..89
66 EXTERN_KW@[79; 85) "extern" 66 EXTERN_KW@79..85 "extern"
67 WHITESPACE@[85; 86) " " 67 WHITESPACE@85..86 " "
68 STRING@[86; 89) "\"C\"" 68 STRING@86..89 "\"C\""
69 WHITESPACE@[89; 90) " " 69 WHITESPACE@89..90 " "
70 FN_KW@[90; 92) "fn" 70 FN_KW@90..92 "fn"
71 WHITESPACE@[92; 93) " " 71 WHITESPACE@92..93 " "
72 PARAM_LIST@[93; 105) 72 PARAM_LIST@93..105
73 L_PAREN@[93; 94) "(" 73 L_PAREN@93..94 "("
74 WHITESPACE@[94; 95) " " 74 WHITESPACE@94..95 " "
75 PARAM@[95; 97) 75 PARAM@95..97
76 PATH_TYPE@[95; 97) 76 PATH_TYPE@95..97
77 PATH@[95; 97) 77 PATH@95..97
78 PATH_SEGMENT@[95; 97) 78 PATH_SEGMENT@95..97
79 NAME_REF@[95; 97) 79 NAME_REF@95..97
80 IDENT@[95; 97) "u8" 80 IDENT@95..97 "u8"
81 WHITESPACE@[97; 98) " " 81 WHITESPACE@97..98 " "
82 COMMA@[98; 99) "," 82 COMMA@98..99 ","
83 WHITESPACE@[99; 100) " " 83 WHITESPACE@99..100 " "
84 PARAM@[100; 103) 84 PARAM@100..103
85 DOT3@[100; 103) "..." 85 DOT3@100..103 "..."
86 WHITESPACE@[103; 104) " " 86 WHITESPACE@103..104 " "
87 R_PAREN@[104; 105) ")" 87 R_PAREN@104..105 ")"
88 WHITESPACE@[105; 106) " " 88 WHITESPACE@105..106 " "
89 RET_TYPE@[106; 111) 89 RET_TYPE@106..111
90 THIN_ARROW@[106; 108) "->" 90 THIN_ARROW@106..108 "->"
91 WHITESPACE@[108; 109) " " 91 WHITESPACE@108..109 " "
92 PATH_TYPE@[109; 111) 92 PATH_TYPE@109..111
93 PATH@[109; 111) 93 PATH@109..111
94 PATH_SEGMENT@[109; 111) 94 PATH_SEGMENT@109..111
95 NAME_REF@[109; 111) 95 NAME_REF@109..111
96 IDENT@[109; 111) "u8" 96 IDENT@109..111 "u8"
97 SEMICOLON@[111; 112) ";" 97 SEMICOLON@111..112 ";"
98 WHITESPACE@[112; 113) "\n" 98 WHITESPACE@112..113 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0033_reference_type;.rast b/crates/ra_syntax/test_data/parser/inline/ok/0033_reference_type;.rast
index e6ee20b9a..784fbb592 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0033_reference_type;.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0033_reference_type;.rast
@@ -1,50 +1,50 @@
1SOURCE_FILE@[0; 54) 1SOURCE_FILE@0..54
2 TYPE_ALIAS_DEF@[0; 13) 2 TYPE_ALIAS_DEF@0..13
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "A" 6 IDENT@5..6 "A"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 REFERENCE_TYPE@[9; 12) 10 REFERENCE_TYPE@9..12
11 AMP@[9; 10) "&" 11 AMP@9..10 "&"
12 TUPLE_TYPE@[10; 12) 12 TUPLE_TYPE@10..12
13 L_PAREN@[10; 11) "(" 13 L_PAREN@10..11 "("
14 R_PAREN@[11; 12) ")" 14 R_PAREN@11..12 ")"
15 SEMICOLON@[12; 13) ";" 15 SEMICOLON@12..13 ";"
16 WHITESPACE@[13; 14) "\n" 16 WHITESPACE@13..14 "\n"
17 TYPE_ALIAS_DEF@[14; 35) 17 TYPE_ALIAS_DEF@14..35
18 TYPE_KW@[14; 18) "type" 18 TYPE_KW@14..18 "type"
19 WHITESPACE@[18; 19) " " 19 WHITESPACE@18..19 " "
20 NAME@[19; 20) 20 NAME@19..20
21 IDENT@[19; 20) "B" 21 IDENT@19..20 "B"
22 WHITESPACE@[20; 21) " " 22 WHITESPACE@20..21 " "
23 EQ@[21; 22) "=" 23 EQ@21..22 "="
24 WHITESPACE@[22; 23) " " 24 WHITESPACE@22..23 " "
25 REFERENCE_TYPE@[23; 34) 25 REFERENCE_TYPE@23..34
26 AMP@[23; 24) "&" 26 AMP@23..24 "&"
27 LIFETIME@[24; 31) "\'static" 27 LIFETIME@24..31 "\'static"
28 WHITESPACE@[31; 32) " " 28 WHITESPACE@31..32 " "
29 TUPLE_TYPE@[32; 34) 29 TUPLE_TYPE@32..34
30 L_PAREN@[32; 33) "(" 30 L_PAREN@32..33 "("
31 R_PAREN@[33; 34) ")" 31 R_PAREN@33..34 ")"
32 SEMICOLON@[34; 35) ";" 32 SEMICOLON@34..35 ";"
33 WHITESPACE@[35; 36) "\n" 33 WHITESPACE@35..36 "\n"
34 TYPE_ALIAS_DEF@[36; 53) 34 TYPE_ALIAS_DEF@36..53
35 TYPE_KW@[36; 40) "type" 35 TYPE_KW@36..40 "type"
36 WHITESPACE@[40; 41) " " 36 WHITESPACE@40..41 " "
37 NAME@[41; 42) 37 NAME@41..42
38 IDENT@[41; 42) "C" 38 IDENT@41..42 "C"
39 WHITESPACE@[42; 43) " " 39 WHITESPACE@42..43 " "
40 EQ@[43; 44) "=" 40 EQ@43..44 "="
41 WHITESPACE@[44; 45) " " 41 WHITESPACE@44..45 " "
42 REFERENCE_TYPE@[45; 52) 42 REFERENCE_TYPE@45..52
43 AMP@[45; 46) "&" 43 AMP@45..46 "&"
44 MUT_KW@[46; 49) "mut" 44 MUT_KW@46..49 "mut"
45 WHITESPACE@[49; 50) " " 45 WHITESPACE@49..50 " "
46 TUPLE_TYPE@[50; 52) 46 TUPLE_TYPE@50..52
47 L_PAREN@[50; 51) "(" 47 L_PAREN@50..51 "("
48 R_PAREN@[51; 52) ")" 48 R_PAREN@51..52 ")"
49 SEMICOLON@[52; 53) ";" 49 SEMICOLON@52..53 ";"
50 WHITESPACE@[53; 54) "\n" 50 WHITESPACE@53..54 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0034_break_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0034_break_expr.rast
index 4bb95314f..52644da8f 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0034_break_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0034_break_expr.rast
@@ -1,55 +1,55 @@
1SOURCE_FILE@[0; 102) 1SOURCE_FILE@0..102
2 FN_DEF@[0; 101) 2 FN_DEF@0..101
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 101) 11 BLOCK_EXPR@9..101
12 BLOCK@[9; 101) 12 BLOCK@9..101
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LOOP_EXPR@[15; 99) 15 LOOP_EXPR@15..99
16 LOOP_KW@[15; 19) "loop" 16 LOOP_KW@15..19 "loop"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 BLOCK_EXPR@[20; 99) 18 BLOCK_EXPR@20..99
19 BLOCK@[20; 99) 19 BLOCK@20..99
20 L_CURLY@[20; 21) "{" 20 L_CURLY@20..21 "{"
21 WHITESPACE@[21; 30) "\n " 21 WHITESPACE@21..30 "\n "
22 EXPR_STMT@[30; 36) 22 EXPR_STMT@30..36
23 BREAK_EXPR@[30; 35) 23 BREAK_EXPR@30..35
24 BREAK_KW@[30; 35) "break" 24 BREAK_KW@30..35 "break"
25 SEMICOLON@[35; 36) ";" 25 SEMICOLON@35..36 ";"
26 WHITESPACE@[36; 45) "\n " 26 WHITESPACE@36..45 "\n "
27 EXPR_STMT@[45; 54) 27 EXPR_STMT@45..54
28 BREAK_EXPR@[45; 53) 28 BREAK_EXPR@45..53
29 BREAK_KW@[45; 50) "break" 29 BREAK_KW@45..50 "break"
30 WHITESPACE@[50; 51) " " 30 WHITESPACE@50..51 " "
31 LIFETIME@[51; 53) "\'l" 31 LIFETIME@51..53 "\'l"
32 SEMICOLON@[53; 54) ";" 32 SEMICOLON@53..54 ";"
33 WHITESPACE@[54; 63) "\n " 33 WHITESPACE@54..63 "\n "
34 EXPR_STMT@[63; 72) 34 EXPR_STMT@63..72
35 BREAK_EXPR@[63; 71) 35 BREAK_EXPR@63..71
36 BREAK_KW@[63; 68) "break" 36 BREAK_KW@63..68 "break"
37 WHITESPACE@[68; 69) " " 37 WHITESPACE@68..69 " "
38 LITERAL@[69; 71) 38 LITERAL@69..71
39 INT_NUMBER@[69; 71) "92" 39 INT_NUMBER@69..71 "92"
40 SEMICOLON@[71; 72) ";" 40 SEMICOLON@71..72 ";"
41 WHITESPACE@[72; 81) "\n " 41 WHITESPACE@72..81 "\n "
42 EXPR_STMT@[81; 93) 42 EXPR_STMT@81..93
43 BREAK_EXPR@[81; 92) 43 BREAK_EXPR@81..92
44 BREAK_KW@[81; 86) "break" 44 BREAK_KW@81..86 "break"
45 WHITESPACE@[86; 87) " " 45 WHITESPACE@86..87 " "
46 LIFETIME@[87; 89) "\'l" 46 LIFETIME@87..89 "\'l"
47 WHITESPACE@[89; 90) " " 47 WHITESPACE@89..90 " "
48 LITERAL@[90; 92) 48 LITERAL@90..92
49 INT_NUMBER@[90; 92) "92" 49 INT_NUMBER@90..92 "92"
50 SEMICOLON@[92; 93) ";" 50 SEMICOLON@92..93 ";"
51 WHITESPACE@[93; 98) "\n " 51 WHITESPACE@93..98 "\n "
52 R_CURLY@[98; 99) "}" 52 R_CURLY@98..99 "}"
53 WHITESPACE@[99; 100) "\n" 53 WHITESPACE@99..100 "\n"
54 R_CURLY@[100; 101) "}" 54 R_CURLY@100..101 "}"
55 WHITESPACE@[101; 102) "\n" 55 WHITESPACE@101..102 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0036_unsafe_extern_fn.rast b/crates/ra_syntax/test_data/parser/inline/ok/0036_unsafe_extern_fn.rast
index a7dfe167c..f061c0cac 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0036_unsafe_extern_fn.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0036_unsafe_extern_fn.rast
@@ -1,22 +1,22 @@
1SOURCE_FILE@[0; 30) 1SOURCE_FILE@0..30
2 FN_DEF@[0; 29) 2 FN_DEF@0..29
3 UNSAFE_KW@[0; 6) "unsafe" 3 UNSAFE_KW@0..6 "unsafe"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 ABI@[7; 17) 5 ABI@7..17
6 EXTERN_KW@[7; 13) "extern" 6 EXTERN_KW@7..13 "extern"
7 WHITESPACE@[13; 14) " " 7 WHITESPACE@13..14 " "
8 STRING@[14; 17) "\"C\"" 8 STRING@14..17 "\"C\""
9 WHITESPACE@[17; 18) " " 9 WHITESPACE@17..18 " "
10 FN_KW@[18; 20) "fn" 10 FN_KW@18..20 "fn"
11 WHITESPACE@[20; 21) " " 11 WHITESPACE@20..21 " "
12 NAME@[21; 24) 12 NAME@21..24
13 IDENT@[21; 24) "foo" 13 IDENT@21..24 "foo"
14 PARAM_LIST@[24; 26) 14 PARAM_LIST@24..26
15 L_PAREN@[24; 25) "(" 15 L_PAREN@24..25 "("
16 R_PAREN@[25; 26) ")" 16 R_PAREN@25..26 ")"
17 WHITESPACE@[26; 27) " " 17 WHITESPACE@26..27 " "
18 BLOCK_EXPR@[27; 29) 18 BLOCK_EXPR@27..29
19 BLOCK@[27; 29) 19 BLOCK@27..29
20 L_CURLY@[27; 28) "{" 20 L_CURLY@27..28 "{"
21 R_CURLY@[28; 29) "}" 21 R_CURLY@28..29 "}"
22 WHITESPACE@[29; 30) "\n" 22 WHITESPACE@29..30 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0037_qual_paths.rast b/crates/ra_syntax/test_data/parser/inline/ok/0037_qual_paths.rast
index 1cd7a443f..e25fc8c3e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0037_qual_paths.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0037_qual_paths.rast
@@ -1,79 +1,79 @@
1SOURCE_FILE@[0; 71) 1SOURCE_FILE@0..71
2 TYPE_ALIAS_DEF@[0; 26) 2 TYPE_ALIAS_DEF@0..26
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "X" 6 IDENT@5..6 "X"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 PATH_TYPE@[9; 25) 10 PATH_TYPE@9..25
11 PATH@[9; 25) 11 PATH@9..25
12 PATH@[9; 17) 12 PATH@9..17
13 PATH_SEGMENT@[9; 17) 13 PATH_SEGMENT@9..17
14 L_ANGLE@[9; 10) "<" 14 L_ANGLE@9..10 "<"
15 PATH_TYPE@[10; 11) 15 PATH_TYPE@10..11
16 PATH@[10; 11) 16 PATH@10..11
17 PATH_SEGMENT@[10; 11) 17 PATH_SEGMENT@10..11
18 NAME_REF@[10; 11) 18 NAME_REF@10..11
19 IDENT@[10; 11) "A" 19 IDENT@10..11 "A"
20 WHITESPACE@[11; 12) " " 20 WHITESPACE@11..12 " "
21 AS_KW@[12; 14) "as" 21 AS_KW@12..14 "as"
22 WHITESPACE@[14; 15) " " 22 WHITESPACE@14..15 " "
23 PATH_TYPE@[15; 16) 23 PATH_TYPE@15..16
24 PATH@[15; 16) 24 PATH@15..16
25 PATH_SEGMENT@[15; 16) 25 PATH_SEGMENT@15..16
26 NAME_REF@[15; 16) 26 NAME_REF@15..16
27 IDENT@[15; 16) "B" 27 IDENT@15..16 "B"
28 R_ANGLE@[16; 17) ">" 28 R_ANGLE@16..17 ">"
29 COLON2@[17; 19) "::" 29 COLON2@17..19 "::"
30 PATH_SEGMENT@[19; 25) 30 PATH_SEGMENT@19..25
31 NAME_REF@[19; 25) 31 NAME_REF@19..25
32 IDENT@[19; 25) "Output" 32 IDENT@19..25 "Output"
33 SEMICOLON@[25; 26) ";" 33 SEMICOLON@25..26 ";"
34 WHITESPACE@[26; 27) "\n" 34 WHITESPACE@26..27 "\n"
35 FN_DEF@[27; 70) 35 FN_DEF@27..70
36 FN_KW@[27; 29) "fn" 36 FN_KW@27..29 "fn"
37 WHITESPACE@[29; 30) " " 37 WHITESPACE@29..30 " "
38 NAME@[30; 33) 38 NAME@30..33
39 IDENT@[30; 33) "foo" 39 IDENT@30..33 "foo"
40 PARAM_LIST@[33; 35) 40 PARAM_LIST@33..35
41 L_PAREN@[33; 34) "(" 41 L_PAREN@33..34 "("
42 R_PAREN@[34; 35) ")" 42 R_PAREN@34..35 ")"
43 WHITESPACE@[35; 36) " " 43 WHITESPACE@35..36 " "
44 BLOCK_EXPR@[36; 70) 44 BLOCK_EXPR@36..70
45 BLOCK@[36; 70) 45 BLOCK@36..70
46 L_CURLY@[36; 37) "{" 46 L_CURLY@36..37 "{"
47 WHITESPACE@[37; 38) " " 47 WHITESPACE@37..38 " "
48 EXPR_STMT@[38; 68) 48 EXPR_STMT@38..68
49 CALL_EXPR@[38; 67) 49 CALL_EXPR@38..67
50 PATH_EXPR@[38; 65) 50 PATH_EXPR@38..65
51 PATH@[38; 65) 51 PATH@38..65
52 PATH@[38; 56) 52 PATH@38..56
53 PATH_SEGMENT@[38; 56) 53 PATH_SEGMENT@38..56
54 L_ANGLE@[38; 39) "<" 54 L_ANGLE@38..39 "<"
55 PATH_TYPE@[39; 44) 55 PATH_TYPE@39..44
56 PATH@[39; 44) 56 PATH@39..44
57 PATH_SEGMENT@[39; 44) 57 PATH_SEGMENT@39..44
58 NAME_REF@[39; 44) 58 NAME_REF@39..44
59 IDENT@[39; 44) "usize" 59 IDENT@39..44 "usize"
60 WHITESPACE@[44; 45) " " 60 WHITESPACE@44..45 " "
61 AS_KW@[45; 47) "as" 61 AS_KW@45..47 "as"
62 WHITESPACE@[47; 48) " " 62 WHITESPACE@47..48 " "
63 PATH_TYPE@[48; 55) 63 PATH_TYPE@48..55
64 PATH@[48; 55) 64 PATH@48..55
65 PATH_SEGMENT@[48; 55) 65 PATH_SEGMENT@48..55
66 NAME_REF@[48; 55) 66 NAME_REF@48..55
67 IDENT@[48; 55) "Default" 67 IDENT@48..55 "Default"
68 R_ANGLE@[55; 56) ">" 68 R_ANGLE@55..56 ">"
69 COLON2@[56; 58) "::" 69 COLON2@56..58 "::"
70 PATH_SEGMENT@[58; 65) 70 PATH_SEGMENT@58..65
71 NAME_REF@[58; 65) 71 NAME_REF@58..65
72 IDENT@[58; 65) "default" 72 IDENT@58..65 "default"
73 ARG_LIST@[65; 67) 73 ARG_LIST@65..67
74 L_PAREN@[65; 66) "(" 74 L_PAREN@65..66 "("
75 R_PAREN@[66; 67) ")" 75 R_PAREN@66..67 ")"
76 SEMICOLON@[67; 68) ";" 76 SEMICOLON@67..68 ";"
77 WHITESPACE@[68; 69) " " 77 WHITESPACE@68..69 " "
78 R_CURLY@[69; 70) "}" 78 R_CURLY@69..70 "}"
79 WHITESPACE@[70; 71) "\n" 79 WHITESPACE@70..71 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0038_full_range_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0038_full_range_expr.rast
index f5db5a9e6..a1238d610 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0038_full_range_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0038_full_range_expr.rast
@@ -1,29 +1,29 @@
1SOURCE_FILE@[0; 21) 1SOURCE_FILE@0..21
2 FN_DEF@[0; 20) 2 FN_DEF@0..20
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 20) 11 BLOCK_EXPR@9..20
12 BLOCK@[9; 20) 12 BLOCK@9..20
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 11) " " 14 WHITESPACE@10..11 " "
15 EXPR_STMT@[11; 18) 15 EXPR_STMT@11..18
16 INDEX_EXPR@[11; 17) 16 INDEX_EXPR@11..17
17 PATH_EXPR@[11; 13) 17 PATH_EXPR@11..13
18 PATH@[11; 13) 18 PATH@11..13
19 PATH_SEGMENT@[11; 13) 19 PATH_SEGMENT@11..13
20 NAME_REF@[11; 13) 20 NAME_REF@11..13
21 IDENT@[11; 13) "xs" 21 IDENT@11..13 "xs"
22 L_BRACK@[13; 14) "[" 22 L_BRACK@13..14 "["
23 RANGE_EXPR@[14; 16) 23 RANGE_EXPR@14..16
24 DOT2@[14; 16) ".." 24 DOT2@14..16 ".."
25 R_BRACK@[16; 17) "]" 25 R_BRACK@16..17 "]"
26 SEMICOLON@[17; 18) ";" 26 SEMICOLON@17..18 ";"
27 WHITESPACE@[18; 19) " " 27 WHITESPACE@18..19 " "
28 R_CURLY@[19; 20) "}" 28 R_CURLY@19..20 "}"
29 WHITESPACE@[20; 21) "\n" 29 WHITESPACE@20..21 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0039_type_arg.rast b/crates/ra_syntax/test_data/parser/inline/ok/0039_type_arg.rast
index 2d9db61b3..69e5fe4bc 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0039_type_arg.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0039_type_arg.rast
@@ -1,55 +1,55 @@
1SOURCE_FILE@[0; 46) 1SOURCE_FILE@0..46
2 TYPE_ALIAS_DEF@[0; 45) 2 TYPE_ALIAS_DEF@0..45
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "A" 6 IDENT@5..6 "A"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 PATH_TYPE@[9; 44) 10 PATH_TYPE@9..44
11 PATH@[9; 44) 11 PATH@9..44
12 PATH_SEGMENT@[9; 44) 12 PATH_SEGMENT@9..44
13 NAME_REF@[9; 10) 13 NAME_REF@9..10
14 IDENT@[9; 10) "B" 14 IDENT@9..10 "B"
15 TYPE_ARG_LIST@[10; 44) 15 TYPE_ARG_LIST@10..44
16 L_ANGLE@[10; 11) "<" 16 L_ANGLE@10..11 "<"
17 LIFETIME_ARG@[11; 18) 17 LIFETIME_ARG@11..18
18 LIFETIME@[11; 18) "\'static" 18 LIFETIME@11..18 "\'static"
19 COMMA@[18; 19) "," 19 COMMA@18..19 ","
20 WHITESPACE@[19; 20) " " 20 WHITESPACE@19..20 " "
21 TYPE_ARG@[20; 23) 21 TYPE_ARG@20..23
22 PATH_TYPE@[20; 23) 22 PATH_TYPE@20..23
23 PATH@[20; 23) 23 PATH@20..23
24 PATH_SEGMENT@[20; 23) 24 PATH_SEGMENT@20..23
25 NAME_REF@[20; 23) 25 NAME_REF@20..23
26 IDENT@[20; 23) "i32" 26 IDENT@20..23 "i32"
27 COMMA@[23; 24) "," 27 COMMA@23..24 ","
28 WHITESPACE@[24; 25) " " 28 WHITESPACE@24..25 " "
29 CONST_ARG@[25; 26) 29 CONST_ARG@25..26
30 INT_NUMBER@[25; 26) "1" 30 INT_NUMBER@25..26 "1"
31 COMMA@[26; 27) "," 31 COMMA@26..27 ","
32 WHITESPACE@[27; 28) " " 32 WHITESPACE@27..28 " "
33 CONST_ARG@[28; 33) 33 CONST_ARG@28..33
34 BLOCK_EXPR@[28; 33) 34 BLOCK_EXPR@28..33
35 BLOCK@[28; 33) 35 BLOCK@28..33
36 L_CURLY@[28; 29) "{" 36 L_CURLY@28..29 "{"
37 WHITESPACE@[29; 30) " " 37 WHITESPACE@29..30 " "
38 LITERAL@[30; 31) 38 LITERAL@30..31
39 INT_NUMBER@[30; 31) "2" 39 INT_NUMBER@30..31 "2"
40 WHITESPACE@[31; 32) " " 40 WHITESPACE@31..32 " "
41 R_CURLY@[32; 33) "}" 41 R_CURLY@32..33 "}"
42 COMMA@[33; 34) "," 42 COMMA@33..34 ","
43 WHITESPACE@[34; 35) " " 43 WHITESPACE@34..35 " "
44 ASSOC_TYPE_ARG@[35; 43) 44 ASSOC_TYPE_ARG@35..43
45 NAME_REF@[35; 39) 45 NAME_REF@35..39
46 IDENT@[35; 39) "Item" 46 IDENT@35..39 "Item"
47 EQ@[39; 40) "=" 47 EQ@39..40 "="
48 PATH_TYPE@[40; 43) 48 PATH_TYPE@40..43
49 PATH@[40; 43) 49 PATH@40..43
50 PATH_SEGMENT@[40; 43) 50 PATH_SEGMENT@40..43
51 NAME_REF@[40; 43) 51 NAME_REF@40..43
52 IDENT@[40; 43) "u64" 52 IDENT@40..43 "u64"
53 R_ANGLE@[43; 44) ">" 53 R_ANGLE@43..44 ">"
54 SEMICOLON@[44; 45) ";" 54 SEMICOLON@44..45 ";"
55 WHITESPACE@[45; 46) "\n" 55 WHITESPACE@45..46 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0040_crate_keyword_vis.rast b/crates/ra_syntax/test_data/parser/inline/ok/0040_crate_keyword_vis.rast
index 4c175e210..1a98e2610 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0040_crate_keyword_vis.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0040_crate_keyword_vis.rast
@@ -1,63 +1,63 @@
1SOURCE_FILE@[0; 71) 1SOURCE_FILE@0..71
2 FN_DEF@[0; 19) 2 FN_DEF@0..19
3 VISIBILITY@[0; 5) 3 VISIBILITY@0..5
4 CRATE_KW@[0; 5) "crate" 4 CRATE_KW@0..5 "crate"
5 WHITESPACE@[5; 6) " " 5 WHITESPACE@5..6 " "
6 FN_KW@[6; 8) "fn" 6 FN_KW@6..8 "fn"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 NAME@[9; 13) 8 NAME@9..13
9 IDENT@[9; 13) "main" 9 IDENT@9..13 "main"
10 PARAM_LIST@[13; 15) 10 PARAM_LIST@13..15
11 L_PAREN@[13; 14) "(" 11 L_PAREN@13..14 "("
12 R_PAREN@[14; 15) ")" 12 R_PAREN@14..15 ")"
13 WHITESPACE@[15; 16) " " 13 WHITESPACE@15..16 " "
14 BLOCK_EXPR@[16; 19) 14 BLOCK_EXPR@16..19
15 BLOCK@[16; 19) 15 BLOCK@16..19
16 L_CURLY@[16; 17) "{" 16 L_CURLY@16..17 "{"
17 WHITESPACE@[17; 18) " " 17 WHITESPACE@17..18 " "
18 R_CURLY@[18; 19) "}" 18 R_CURLY@18..19 "}"
19 WHITESPACE@[19; 20) "\n" 19 WHITESPACE@19..20 "\n"
20 STRUCT_DEF@[20; 49) 20 STRUCT_DEF@20..49
21 STRUCT_KW@[20; 26) "struct" 21 STRUCT_KW@20..26 "struct"
22 WHITESPACE@[26; 27) " " 22 WHITESPACE@26..27 " "
23 NAME@[27; 28) 23 NAME@27..28
24 IDENT@[27; 28) "S" 24 IDENT@27..28 "S"
25 WHITESPACE@[28; 29) " " 25 WHITESPACE@28..29 " "
26 RECORD_FIELD_DEF_LIST@[29; 49) 26 RECORD_FIELD_DEF_LIST@29..49
27 L_CURLY@[29; 30) "{" 27 L_CURLY@29..30 "{"
28 WHITESPACE@[30; 31) " " 28 WHITESPACE@30..31 " "
29 RECORD_FIELD_DEF@[31; 47) 29 RECORD_FIELD_DEF@31..47
30 VISIBILITY@[31; 36) 30 VISIBILITY@31..36
31 CRATE_KW@[31; 36) "crate" 31 CRATE_KW@31..36 "crate"
32 WHITESPACE@[36; 37) " " 32 WHITESPACE@36..37 " "
33 NAME@[37; 42) 33 NAME@37..42
34 IDENT@[37; 42) "field" 34 IDENT@37..42 "field"
35 COLON@[42; 43) ":" 35 COLON@42..43 ":"
36 WHITESPACE@[43; 44) " " 36 WHITESPACE@43..44 " "
37 PATH_TYPE@[44; 47) 37 PATH_TYPE@44..47
38 PATH@[44; 47) 38 PATH@44..47
39 PATH_SEGMENT@[44; 47) 39 PATH_SEGMENT@44..47
40 NAME_REF@[44; 47) 40 NAME_REF@44..47
41 IDENT@[44; 47) "u32" 41 IDENT@44..47 "u32"
42 WHITESPACE@[47; 48) " " 42 WHITESPACE@47..48 " "
43 R_CURLY@[48; 49) "}" 43 R_CURLY@48..49 "}"
44 WHITESPACE@[49; 50) "\n" 44 WHITESPACE@49..50 "\n"
45 STRUCT_DEF@[50; 70) 45 STRUCT_DEF@50..70
46 STRUCT_KW@[50; 56) "struct" 46 STRUCT_KW@50..56 "struct"
47 WHITESPACE@[56; 57) " " 47 WHITESPACE@56..57 " "
48 NAME@[57; 58) 48 NAME@57..58
49 IDENT@[57; 58) "T" 49 IDENT@57..58 "T"
50 TUPLE_FIELD_DEF_LIST@[58; 69) 50 TUPLE_FIELD_DEF_LIST@58..69
51 L_PAREN@[58; 59) "(" 51 L_PAREN@58..59 "("
52 TUPLE_FIELD_DEF@[59; 68) 52 TUPLE_FIELD_DEF@59..68
53 VISIBILITY@[59; 64) 53 VISIBILITY@59..64
54 CRATE_KW@[59; 64) "crate" 54 CRATE_KW@59..64 "crate"
55 WHITESPACE@[64; 65) " " 55 WHITESPACE@64..65 " "
56 PATH_TYPE@[65; 68) 56 PATH_TYPE@65..68
57 PATH@[65; 68) 57 PATH@65..68
58 PATH_SEGMENT@[65; 68) 58 PATH_SEGMENT@65..68
59 NAME_REF@[65; 68) 59 NAME_REF@65..68
60 IDENT@[65; 68) "u32" 60 IDENT@65..68 "u32"
61 R_PAREN@[68; 69) ")" 61 R_PAREN@68..69 ")"
62 SEMICOLON@[69; 70) ";" 62 SEMICOLON@69..70 ";"
63 WHITESPACE@[70; 71) "\n" 63 WHITESPACE@70..71 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0041_trait_item.rast b/crates/ra_syntax/test_data/parser/inline/ok/0041_trait_item.rast
index 578361715..1ae791361 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0041_trait_item.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0041_trait_item.rast
@@ -1,125 +1,125 @@
1SOURCE_FILE@[0; 101) 1SOURCE_FILE@0..101
2 TRAIT_DEF@[0; 41) 2 TRAIT_DEF@0..41
3 TRAIT_KW@[0; 5) "trait" 3 TRAIT_KW@0..5 "trait"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 7) 5 NAME@6..7
6 IDENT@[6; 7) "T" 6 IDENT@6..7 "T"
7 TYPE_PARAM_LIST@[7; 10) 7 TYPE_PARAM_LIST@7..10
8 L_ANGLE@[7; 8) "<" 8 L_ANGLE@7..8 "<"
9 TYPE_PARAM@[8; 9) 9 TYPE_PARAM@8..9
10 NAME@[8; 9) 10 NAME@8..9
11 IDENT@[8; 9) "U" 11 IDENT@8..9 "U"
12 R_ANGLE@[9; 10) ">" 12 R_ANGLE@9..10 ">"
13 COLON@[10; 11) ":" 13 COLON@10..11 ":"
14 WHITESPACE@[11; 12) " " 14 WHITESPACE@11..12 " "
15 TYPE_BOUND_LIST@[12; 24) 15 TYPE_BOUND_LIST@12..24
16 TYPE_BOUND@[12; 16) 16 TYPE_BOUND@12..16
17 PATH_TYPE@[12; 16) 17 PATH_TYPE@12..16
18 PATH@[12; 16) 18 PATH@12..16
19 PATH_SEGMENT@[12; 16) 19 PATH_SEGMENT@12..16
20 NAME_REF@[12; 16) 20 NAME_REF@12..16
21 IDENT@[12; 16) "Hash" 21 IDENT@12..16 "Hash"
22 WHITESPACE@[16; 17) " " 22 WHITESPACE@16..17 " "
23 PLUS@[17; 18) "+" 23 PLUS@17..18 "+"
24 WHITESPACE@[18; 19) " " 24 WHITESPACE@18..19 " "
25 TYPE_BOUND@[19; 24) 25 TYPE_BOUND@19..24
26 PATH_TYPE@[19; 24) 26 PATH_TYPE@19..24
27 PATH@[19; 24) 27 PATH@19..24
28 PATH_SEGMENT@[19; 24) 28 PATH_SEGMENT@19..24
29 NAME_REF@[19; 24) 29 NAME_REF@19..24
30 IDENT@[19; 24) "Clone" 30 IDENT@19..24 "Clone"
31 WHITESPACE@[24; 25) " " 31 WHITESPACE@24..25 " "
32 WHERE_CLAUSE@[25; 38) 32 WHERE_CLAUSE@25..38
33 WHERE_KW@[25; 30) "where" 33 WHERE_KW@25..30 "where"
34 WHITESPACE@[30; 31) " " 34 WHITESPACE@30..31 " "
35 WHERE_PRED@[31; 38) 35 WHERE_PRED@31..38
36 PATH_TYPE@[31; 32) 36 PATH_TYPE@31..32
37 PATH@[31; 32) 37 PATH@31..32
38 PATH_SEGMENT@[31; 32) 38 PATH_SEGMENT@31..32
39 NAME_REF@[31; 32) 39 NAME_REF@31..32
40 IDENT@[31; 32) "U" 40 IDENT@31..32 "U"
41 COLON@[32; 33) ":" 41 COLON@32..33 ":"
42 WHITESPACE@[33; 34) " " 42 WHITESPACE@33..34 " "
43 TYPE_BOUND_LIST@[34; 38) 43 TYPE_BOUND_LIST@34..38
44 TYPE_BOUND@[34; 38) 44 TYPE_BOUND@34..38
45 PATH_TYPE@[34; 38) 45 PATH_TYPE@34..38
46 PATH@[34; 38) 46 PATH@34..38
47 PATH_SEGMENT@[34; 38) 47 PATH_SEGMENT@34..38
48 NAME_REF@[34; 38) 48 NAME_REF@34..38
49 IDENT@[34; 38) "Copy" 49 IDENT@34..38 "Copy"
50 WHITESPACE@[38; 39) " " 50 WHITESPACE@38..39 " "
51 ITEM_LIST@[39; 41) 51 ITEM_LIST@39..41
52 L_CURLY@[39; 40) "{" 52 L_CURLY@39..40 "{"
53 R_CURLY@[40; 41) "}" 53 R_CURLY@40..41 "}"
54 WHITESPACE@[41; 42) "\n" 54 WHITESPACE@41..42 "\n"
55 TRAIT_DEF@[42; 100) 55 TRAIT_DEF@42..100
56 TRAIT_KW@[42; 47) "trait" 56 TRAIT_KW@42..47 "trait"
57 WHITESPACE@[47; 48) " " 57 WHITESPACE@47..48 " "
58 NAME@[48; 49) 58 NAME@48..49
59 IDENT@[48; 49) "X" 59 IDENT@48..49 "X"
60 TYPE_PARAM_LIST@[49; 69) 60 TYPE_PARAM_LIST@49..69
61 L_ANGLE@[49; 50) "<" 61 L_ANGLE@49..50 "<"
62 TYPE_PARAM@[50; 68) 62 TYPE_PARAM@50..68
63 NAME@[50; 51) 63 NAME@50..51
64 IDENT@[50; 51) "U" 64 IDENT@50..51 "U"
65 COLON@[51; 52) ":" 65 COLON@51..52 ":"
66 WHITESPACE@[52; 53) " " 66 WHITESPACE@52..53 " "
67 TYPE_BOUND_LIST@[53; 68) 67 TYPE_BOUND_LIST@53..68
68 TYPE_BOUND@[53; 58) 68 TYPE_BOUND@53..58
69 PATH_TYPE@[53; 58) 69 PATH_TYPE@53..58
70 PATH@[53; 58) 70 PATH@53..58
71 PATH_SEGMENT@[53; 58) 71 PATH_SEGMENT@53..58
72 NAME_REF@[53; 58) 72 NAME_REF@53..58
73 IDENT@[53; 58) "Debug" 73 IDENT@53..58 "Debug"
74 WHITESPACE@[58; 59) " " 74 WHITESPACE@58..59 " "
75 PLUS@[59; 60) "+" 75 PLUS@59..60 "+"
76 WHITESPACE@[60; 61) " " 76 WHITESPACE@60..61 " "
77 TYPE_BOUND@[61; 68) 77 TYPE_BOUND@61..68
78 PATH_TYPE@[61; 68) 78 PATH_TYPE@61..68
79 PATH@[61; 68) 79 PATH@61..68
80 PATH_SEGMENT@[61; 68) 80 PATH_SEGMENT@61..68
81 NAME_REF@[61; 68) 81 NAME_REF@61..68
82 IDENT@[61; 68) "Display" 82 IDENT@61..68 "Display"
83 R_ANGLE@[68; 69) ">" 83 R_ANGLE@68..69 ">"
84 COLON@[69; 70) ":" 84 COLON@69..70 ":"
85 WHITESPACE@[70; 71) " " 85 WHITESPACE@70..71 " "
86 TYPE_BOUND_LIST@[71; 83) 86 TYPE_BOUND_LIST@71..83
87 TYPE_BOUND@[71; 75) 87 TYPE_BOUND@71..75
88 PATH_TYPE@[71; 75) 88 PATH_TYPE@71..75
89 PATH@[71; 75) 89 PATH@71..75
90 PATH_SEGMENT@[71; 75) 90 PATH_SEGMENT@71..75
91 NAME_REF@[71; 75) 91 NAME_REF@71..75
92 IDENT@[71; 75) "Hash" 92 IDENT@71..75 "Hash"
93 WHITESPACE@[75; 76) " " 93 WHITESPACE@75..76 " "
94 PLUS@[76; 77) "+" 94 PLUS@76..77 "+"
95 WHITESPACE@[77; 78) " " 95 WHITESPACE@77..78 " "
96 TYPE_BOUND@[78; 83) 96 TYPE_BOUND@78..83
97 PATH_TYPE@[78; 83) 97 PATH_TYPE@78..83
98 PATH@[78; 83) 98 PATH@78..83
99 PATH_SEGMENT@[78; 83) 99 PATH_SEGMENT@78..83
100 NAME_REF@[78; 83) 100 NAME_REF@78..83
101 IDENT@[78; 83) "Clone" 101 IDENT@78..83 "Clone"
102 WHITESPACE@[83; 84) " " 102 WHITESPACE@83..84 " "
103 WHERE_CLAUSE@[84; 97) 103 WHERE_CLAUSE@84..97
104 WHERE_KW@[84; 89) "where" 104 WHERE_KW@84..89 "where"
105 WHITESPACE@[89; 90) " " 105 WHITESPACE@89..90 " "
106 WHERE_PRED@[90; 97) 106 WHERE_PRED@90..97
107 PATH_TYPE@[90; 91) 107 PATH_TYPE@90..91
108 PATH@[90; 91) 108 PATH@90..91
109 PATH_SEGMENT@[90; 91) 109 PATH_SEGMENT@90..91
110 NAME_REF@[90; 91) 110 NAME_REF@90..91
111 IDENT@[90; 91) "U" 111 IDENT@90..91 "U"
112 COLON@[91; 92) ":" 112 COLON@91..92 ":"
113 WHITESPACE@[92; 93) " " 113 WHITESPACE@92..93 " "
114 TYPE_BOUND_LIST@[93; 97) 114 TYPE_BOUND_LIST@93..97
115 TYPE_BOUND@[93; 97) 115 TYPE_BOUND@93..97
116 PATH_TYPE@[93; 97) 116 PATH_TYPE@93..97
117 PATH@[93; 97) 117 PATH@93..97
118 PATH_SEGMENT@[93; 97) 118 PATH_SEGMENT@93..97
119 NAME_REF@[93; 97) 119 NAME_REF@93..97
120 IDENT@[93; 97) "Copy" 120 IDENT@93..97 "Copy"
121 WHITESPACE@[97; 98) " " 121 WHITESPACE@97..98 " "
122 ITEM_LIST@[98; 100) 122 ITEM_LIST@98..100
123 L_CURLY@[98; 99) "{" 123 L_CURLY@98..99 "{"
124 R_CURLY@[99; 100) "}" 124 R_CURLY@99..100 "}"
125 WHITESPACE@[100; 101) "\n" 125 WHITESPACE@100..101 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0042_call_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0042_call_expr.rast
index f9e677a03..bbf6dc494 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0042_call_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0042_call_expr.rast
@@ -1,148 +1,148 @@
1SOURCE_FILE@[0; 118) 1SOURCE_FILE@0..118
2 FN_DEF@[0; 117) 2 FN_DEF@0..117
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 117) 11 BLOCK_EXPR@9..117
12 BLOCK@[9; 117) 12 BLOCK@9..117
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 27) 15 LET_STMT@15..27
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 PLACEHOLDER_PAT@[19; 20) 18 PLACEHOLDER_PAT@19..20
19 UNDERSCORE@[19; 20) "_" 19 UNDERSCORE@19..20 "_"
20 WHITESPACE@[20; 21) " " 20 WHITESPACE@20..21 " "
21 EQ@[21; 22) "=" 21 EQ@21..22 "="
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 CALL_EXPR@[23; 26) 23 CALL_EXPR@23..26
24 PATH_EXPR@[23; 24) 24 PATH_EXPR@23..24
25 PATH@[23; 24) 25 PATH@23..24
26 PATH_SEGMENT@[23; 24) 26 PATH_SEGMENT@23..24
27 NAME_REF@[23; 24) 27 NAME_REF@23..24
28 IDENT@[23; 24) "f" 28 IDENT@23..24 "f"
29 ARG_LIST@[24; 26) 29 ARG_LIST@24..26
30 L_PAREN@[24; 25) "(" 30 L_PAREN@24..25 "("
31 R_PAREN@[25; 26) ")" 31 R_PAREN@25..26 ")"
32 SEMICOLON@[26; 27) ";" 32 SEMICOLON@26..27 ";"
33 WHITESPACE@[27; 32) "\n " 33 WHITESPACE@27..32 "\n "
34 LET_STMT@[32; 54) 34 LET_STMT@32..54
35 LET_KW@[32; 35) "let" 35 LET_KW@32..35 "let"
36 WHITESPACE@[35; 36) " " 36 WHITESPACE@35..36 " "
37 PLACEHOLDER_PAT@[36; 37) 37 PLACEHOLDER_PAT@36..37
38 UNDERSCORE@[36; 37) "_" 38 UNDERSCORE@36..37 "_"
39 WHITESPACE@[37; 38) " " 39 WHITESPACE@37..38 " "
40 EQ@[38; 39) "=" 40 EQ@38..39 "="
41 WHITESPACE@[39; 40) " " 41 WHITESPACE@39..40 " "
42 CALL_EXPR@[40; 53) 42 CALL_EXPR@40..53
43 CALL_EXPR@[40; 46) 43 CALL_EXPR@40..46
44 CALL_EXPR@[40; 43) 44 CALL_EXPR@40..43
45 PATH_EXPR@[40; 41) 45 PATH_EXPR@40..41
46 PATH@[40; 41) 46 PATH@40..41
47 PATH_SEGMENT@[40; 41) 47 PATH_SEGMENT@40..41
48 NAME_REF@[40; 41) 48 NAME_REF@40..41
49 IDENT@[40; 41) "f" 49 IDENT@40..41 "f"
50 ARG_LIST@[41; 43) 50 ARG_LIST@41..43
51 L_PAREN@[41; 42) "(" 51 L_PAREN@41..42 "("
52 R_PAREN@[42; 43) ")" 52 R_PAREN@42..43 ")"
53 ARG_LIST@[43; 46) 53 ARG_LIST@43..46
54 L_PAREN@[43; 44) "(" 54 L_PAREN@43..44 "("
55 LITERAL@[44; 45) 55 LITERAL@44..45
56 INT_NUMBER@[44; 45) "1" 56 INT_NUMBER@44..45 "1"
57 R_PAREN@[45; 46) ")" 57 R_PAREN@45..46 ")"
58 ARG_LIST@[46; 53) 58 ARG_LIST@46..53
59 L_PAREN@[46; 47) "(" 59 L_PAREN@46..47 "("
60 LITERAL@[47; 48) 60 LITERAL@47..48
61 INT_NUMBER@[47; 48) "1" 61 INT_NUMBER@47..48 "1"
62 COMMA@[48; 49) "," 62 COMMA@48..49 ","
63 WHITESPACE@[49; 50) " " 63 WHITESPACE@49..50 " "
64 LITERAL@[50; 51) 64 LITERAL@50..51
65 INT_NUMBER@[50; 51) "2" 65 INT_NUMBER@50..51 "2"
66 COMMA@[51; 52) "," 66 COMMA@51..52 ","
67 R_PAREN@[52; 53) ")" 67 R_PAREN@52..53 ")"
68 SEMICOLON@[53; 54) ";" 68 SEMICOLON@53..54 ";"
69 WHITESPACE@[54; 59) "\n " 69 WHITESPACE@54..59 "\n "
70 LET_STMT@[59; 84) 70 LET_STMT@59..84
71 LET_KW@[59; 62) "let" 71 LET_KW@59..62 "let"
72 WHITESPACE@[62; 63) " " 72 WHITESPACE@62..63 " "
73 PLACEHOLDER_PAT@[63; 64) 73 PLACEHOLDER_PAT@63..64
74 UNDERSCORE@[63; 64) "_" 74 UNDERSCORE@63..64 "_"
75 WHITESPACE@[64; 65) " " 75 WHITESPACE@64..65 " "
76 EQ@[65; 66) "=" 76 EQ@65..66 "="
77 WHITESPACE@[66; 67) " " 77 WHITESPACE@66..67 " "
78 CALL_EXPR@[67; 83) 78 CALL_EXPR@67..83
79 PATH_EXPR@[67; 68) 79 PATH_EXPR@67..68
80 PATH@[67; 68) 80 PATH@67..68
81 PATH_SEGMENT@[67; 68) 81 PATH_SEGMENT@67..68
82 NAME_REF@[67; 68) 82 NAME_REF@67..68
83 IDENT@[67; 68) "f" 83 IDENT@67..68 "f"
84 ARG_LIST@[68; 83) 84 ARG_LIST@68..83
85 L_PAREN@[68; 69) "(" 85 L_PAREN@68..69 "("
86 CALL_EXPR@[69; 82) 86 CALL_EXPR@69..82
87 PATH_EXPR@[69; 80) 87 PATH_EXPR@69..80
88 PATH@[69; 80) 88 PATH@69..80
89 PATH@[69; 74) 89 PATH@69..74
90 PATH_SEGMENT@[69; 74) 90 PATH_SEGMENT@69..74
91 L_ANGLE@[69; 70) "<" 91 L_ANGLE@69..70 "<"
92 PATH_TYPE@[70; 73) 92 PATH_TYPE@70..73
93 PATH@[70; 73) 93 PATH@70..73
94 PATH_SEGMENT@[70; 73) 94 PATH_SEGMENT@70..73
95 NAME_REF@[70; 73) 95 NAME_REF@70..73
96 IDENT@[70; 73) "Foo" 96 IDENT@70..73 "Foo"
97 R_ANGLE@[73; 74) ">" 97 R_ANGLE@73..74 ">"
98 COLON2@[74; 76) "::" 98 COLON2@74..76 "::"
99 PATH_SEGMENT@[76; 80) 99 PATH_SEGMENT@76..80
100 NAME_REF@[76; 80) 100 NAME_REF@76..80
101 IDENT@[76; 80) "func" 101 IDENT@76..80 "func"
102 ARG_LIST@[80; 82) 102 ARG_LIST@80..82
103 L_PAREN@[80; 81) "(" 103 L_PAREN@80..81 "("
104 R_PAREN@[81; 82) ")" 104 R_PAREN@81..82 ")"
105 R_PAREN@[82; 83) ")" 105 R_PAREN@82..83 ")"
106 SEMICOLON@[83; 84) ";" 106 SEMICOLON@83..84 ";"
107 WHITESPACE@[84; 89) "\n " 107 WHITESPACE@84..89 "\n "
108 EXPR_STMT@[89; 115) 108 EXPR_STMT@89..115
109 CALL_EXPR@[89; 114) 109 CALL_EXPR@89..114
110 PATH_EXPR@[89; 90) 110 PATH_EXPR@89..90
111 PATH@[89; 90) 111 PATH@89..90
112 PATH_SEGMENT@[89; 90) 112 PATH_SEGMENT@89..90
113 NAME_REF@[89; 90) 113 NAME_REF@89..90
114 IDENT@[89; 90) "f" 114 IDENT@89..90 "f"
115 ARG_LIST@[90; 114) 115 ARG_LIST@90..114
116 L_PAREN@[90; 91) "(" 116 L_PAREN@90..91 "("
117 CALL_EXPR@[91; 113) 117 CALL_EXPR@91..113
118 PATH_EXPR@[91; 111) 118 PATH_EXPR@91..111
119 PATH@[91; 111) 119 PATH@91..111
120 PATH@[91; 105) 120 PATH@91..105
121 PATH_SEGMENT@[91; 105) 121 PATH_SEGMENT@91..105
122 L_ANGLE@[91; 92) "<" 122 L_ANGLE@91..92 "<"
123 PATH_TYPE@[92; 95) 123 PATH_TYPE@92..95
124 PATH@[92; 95) 124 PATH@92..95
125 PATH_SEGMENT@[92; 95) 125 PATH_SEGMENT@92..95
126 NAME_REF@[92; 95) 126 NAME_REF@92..95
127 IDENT@[92; 95) "Foo" 127 IDENT@92..95 "Foo"
128 WHITESPACE@[95; 96) " " 128 WHITESPACE@95..96 " "
129 AS_KW@[96; 98) "as" 129 AS_KW@96..98 "as"
130 WHITESPACE@[98; 99) " " 130 WHITESPACE@98..99 " "
131 PATH_TYPE@[99; 104) 131 PATH_TYPE@99..104
132 PATH@[99; 104) 132 PATH@99..104
133 PATH_SEGMENT@[99; 104) 133 PATH_SEGMENT@99..104
134 NAME_REF@[99; 104) 134 NAME_REF@99..104
135 IDENT@[99; 104) "Trait" 135 IDENT@99..104 "Trait"
136 R_ANGLE@[104; 105) ">" 136 R_ANGLE@104..105 ">"
137 COLON2@[105; 107) "::" 137 COLON2@105..107 "::"
138 PATH_SEGMENT@[107; 111) 138 PATH_SEGMENT@107..111
139 NAME_REF@[107; 111) 139 NAME_REF@107..111
140 IDENT@[107; 111) "func" 140 IDENT@107..111 "func"
141 ARG_LIST@[111; 113) 141 ARG_LIST@111..113
142 L_PAREN@[111; 112) "(" 142 L_PAREN@111..112 "("
143 R_PAREN@[112; 113) ")" 143 R_PAREN@112..113 ")"
144 R_PAREN@[113; 114) ")" 144 R_PAREN@113..114 ")"
145 SEMICOLON@[114; 115) ";" 145 SEMICOLON@114..115 ";"
146 WHITESPACE@[115; 116) "\n" 146 WHITESPACE@115..116 "\n"
147 R_CURLY@[116; 117) "}" 147 R_CURLY@116..117 "}"
148 WHITESPACE@[117; 118) "\n" 148 WHITESPACE@117..118 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0043_use_alias.rast b/crates/ra_syntax/test_data/parser/inline/ok/0043_use_alias.rast
index 580f29cfb..f0e09d40d 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0043_use_alias.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0043_use_alias.rast
@@ -1,138 +1,138 @@
1SOURCE_FILE@[0; 198) 1SOURCE_FILE@0..198
2 USE_ITEM@[0; 28) 2 USE_ITEM@0..28
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 27) 5 USE_TREE@4..27
6 PATH@[4; 14) 6 PATH@4..14
7 PATH@[4; 8) 7 PATH@4..8
8 PATH_SEGMENT@[4; 8) 8 PATH_SEGMENT@4..8
9 NAME_REF@[4; 8) 9 NAME_REF@4..8
10 IDENT@[4; 8) "some" 10 IDENT@4..8 "some"
11 COLON2@[8; 10) "::" 11 COLON2@8..10 "::"
12 PATH_SEGMENT@[10; 14) 12 PATH_SEGMENT@10..14
13 NAME_REF@[10; 14) 13 NAME_REF@10..14
14 IDENT@[10; 14) "path" 14 IDENT@10..14 "path"
15 WHITESPACE@[14; 15) " " 15 WHITESPACE@14..15 " "
16 ALIAS@[15; 27) 16 ALIAS@15..27
17 AS_KW@[15; 17) "as" 17 AS_KW@15..17 "as"
18 WHITESPACE@[17; 18) " " 18 WHITESPACE@17..18 " "
19 NAME@[18; 27) 19 NAME@18..27
20 IDENT@[18; 27) "some_name" 20 IDENT@18..27 "some_name"
21 SEMICOLON@[27; 28) ";" 21 SEMICOLON@27..28 ";"
22 WHITESPACE@[28; 29) "\n" 22 WHITESPACE@28..29 "\n"
23 USE_ITEM@[29; 181) 23 USE_ITEM@29..181
24 USE_KW@[29; 32) "use" 24 USE_KW@29..32 "use"
25 WHITESPACE@[32; 33) " " 25 WHITESPACE@32..33 " "
26 USE_TREE@[33; 180) 26 USE_TREE@33..180
27 PATH@[33; 37) 27 PATH@33..37
28 PATH_SEGMENT@[33; 37) 28 PATH_SEGMENT@33..37
29 NAME_REF@[33; 37) 29 NAME_REF@33..37
30 IDENT@[33; 37) "some" 30 IDENT@33..37 "some"
31 COLON2@[37; 39) "::" 31 COLON2@37..39 "::"
32 USE_TREE_LIST@[39; 180) 32 USE_TREE_LIST@39..180
33 L_CURLY@[39; 40) "{" 33 L_CURLY@39..40 "{"
34 WHITESPACE@[40; 42) "\n " 34 WHITESPACE@40..42 "\n "
35 USE_TREE@[42; 72) 35 USE_TREE@42..72
36 PATH@[42; 53) 36 PATH@42..53
37 PATH@[42; 47) 37 PATH@42..47
38 PATH_SEGMENT@[42; 47) 38 PATH_SEGMENT@42..47
39 NAME_REF@[42; 47) 39 NAME_REF@42..47
40 IDENT@[42; 47) "other" 40 IDENT@42..47 "other"
41 COLON2@[47; 49) "::" 41 COLON2@47..49 "::"
42 PATH_SEGMENT@[49; 53) 42 PATH_SEGMENT@49..53
43 NAME_REF@[49; 53) 43 NAME_REF@49..53
44 IDENT@[49; 53) "path" 44 IDENT@49..53 "path"
45 WHITESPACE@[53; 54) " " 45 WHITESPACE@53..54 " "
46 ALIAS@[54; 72) 46 ALIAS@54..72
47 AS_KW@[54; 56) "as" 47 AS_KW@54..56 "as"
48 WHITESPACE@[56; 57) " " 48 WHITESPACE@56..57 " "
49 NAME@[57; 72) 49 NAME@57..72
50 IDENT@[57; 72) "some_other_name" 50 IDENT@57..72 "some_other_name"
51 COMMA@[72; 73) "," 51 COMMA@72..73 ","
52 WHITESPACE@[73; 75) "\n " 52 WHITESPACE@73..75 "\n "
53 USE_TREE@[75; 108) 53 USE_TREE@75..108
54 PATH@[75; 90) 54 PATH@75..90
55 PATH@[75; 84) 55 PATH@75..84
56 PATH_SEGMENT@[75; 84) 56 PATH_SEGMENT@75..84
57 NAME_REF@[75; 84) 57 NAME_REF@75..84
58 IDENT@[75; 84) "different" 58 IDENT@75..84 "different"
59 COLON2@[84; 86) "::" 59 COLON2@84..86 "::"
60 PATH_SEGMENT@[86; 90) 60 PATH_SEGMENT@86..90
61 NAME_REF@[86; 90) 61 NAME_REF@86..90
62 IDENT@[86; 90) "path" 62 IDENT@86..90 "path"
63 WHITESPACE@[90; 91) " " 63 WHITESPACE@90..91 " "
64 ALIAS@[91; 108) 64 ALIAS@91..108
65 AS_KW@[91; 93) "as" 65 AS_KW@91..93 "as"
66 WHITESPACE@[93; 94) " " 66 WHITESPACE@93..94 " "
67 NAME@[94; 108) 67 NAME@94..108
68 IDENT@[94; 108) "different_name" 68 IDENT@94..108 "different_name"
69 COMMA@[108; 109) "," 69 COMMA@108..109 ","
70 WHITESPACE@[109; 111) "\n " 70 WHITESPACE@109..111 "\n "
71 USE_TREE@[111; 129) 71 USE_TREE@111..129
72 PATH@[111; 129) 72 PATH@111..129
73 PATH@[111; 123) 73 PATH@111..123
74 PATH@[111; 114) 74 PATH@111..114
75 PATH_SEGMENT@[111; 114) 75 PATH_SEGMENT@111..114
76 NAME_REF@[111; 114) 76 NAME_REF@111..114
77 IDENT@[111; 114) "yet" 77 IDENT@111..114 "yet"
78 COLON2@[114; 116) "::" 78 COLON2@114..116 "::"
79 PATH_SEGMENT@[116; 123) 79 PATH_SEGMENT@116..123
80 NAME_REF@[116; 123) 80 NAME_REF@116..123
81 IDENT@[116; 123) "another" 81 IDENT@116..123 "another"
82 COLON2@[123; 125) "::" 82 COLON2@123..125 "::"
83 PATH_SEGMENT@[125; 129) 83 PATH_SEGMENT@125..129
84 NAME_REF@[125; 129) 84 NAME_REF@125..129
85 IDENT@[125; 129) "path" 85 IDENT@125..129 "path"
86 COMMA@[129; 130) "," 86 COMMA@129..130 ","
87 WHITESPACE@[130; 132) "\n " 87 WHITESPACE@130..132 "\n "
88 USE_TREE@[132; 178) 88 USE_TREE@132..178
89 PATH@[132; 175) 89 PATH@132..175
90 PATH@[132; 164) 90 PATH@132..164
91 PATH@[132; 158) 91 PATH@132..158
92 PATH@[132; 148) 92 PATH@132..148
93 PATH@[132; 144) 93 PATH@132..144
94 PATH@[132; 139) 94 PATH@132..139
95 PATH_SEGMENT@[132; 139) 95 PATH_SEGMENT@132..139
96 NAME_REF@[132; 139) 96 NAME_REF@132..139
97 IDENT@[132; 139) "running" 97 IDENT@132..139 "running"
98 COLON2@[139; 141) "::" 98 COLON2@139..141 "::"
99 PATH_SEGMENT@[141; 144) 99 PATH_SEGMENT@141..144
100 NAME_REF@[141; 144) 100 NAME_REF@141..144
101 IDENT@[141; 144) "out" 101 IDENT@141..144 "out"
102 COLON2@[144; 146) "::" 102 COLON2@144..146 "::"
103 PATH_SEGMENT@[146; 148) 103 PATH_SEGMENT@146..148
104 NAME_REF@[146; 148) 104 NAME_REF@146..148
105 IDENT@[146; 148) "of" 105 IDENT@146..148 "of"
106 COLON2@[148; 150) "::" 106 COLON2@148..150 "::"
107 PATH_SEGMENT@[150; 158) 107 PATH_SEGMENT@150..158
108 NAME_REF@[150; 158) 108 NAME_REF@150..158
109 IDENT@[150; 158) "synonyms" 109 IDENT@150..158 "synonyms"
110 COLON2@[158; 160) "::" 110 COLON2@158..160 "::"
111 PATH_SEGMENT@[160; 164) 111 PATH_SEGMENT@160..164
112 NAME_REF@[160; 164) 112 NAME_REF@160..164
113 IDENT@[160; 164) "for_" 113 IDENT@160..164 "for_"
114 COLON2@[164; 166) "::" 114 COLON2@164..166 "::"
115 PATH_SEGMENT@[166; 175) 115 PATH_SEGMENT@166..175
116 NAME_REF@[166; 175) 116 NAME_REF@166..175
117 IDENT@[166; 175) "different" 117 IDENT@166..175 "different"
118 COLON2@[175; 177) "::" 118 COLON2@175..177 "::"
119 STAR@[177; 178) "*" 119 STAR@177..178 "*"
120 WHITESPACE@[178; 179) "\n" 120 WHITESPACE@178..179 "\n"
121 R_CURLY@[179; 180) "}" 121 R_CURLY@179..180 "}"
122 SEMICOLON@[180; 181) ";" 122 SEMICOLON@180..181 ";"
123 WHITESPACE@[181; 182) "\n" 123 WHITESPACE@181..182 "\n"
124 USE_ITEM@[182; 197) 124 USE_ITEM@182..197
125 USE_KW@[182; 185) "use" 125 USE_KW@182..185 "use"
126 WHITESPACE@[185; 186) " " 126 WHITESPACE@185..186 " "
127 USE_TREE@[186; 196) 127 USE_TREE@186..196
128 PATH@[186; 191) 128 PATH@186..191
129 PATH_SEGMENT@[186; 191) 129 PATH_SEGMENT@186..191
130 NAME_REF@[186; 191) 130 NAME_REF@186..191
131 IDENT@[186; 191) "Trait" 131 IDENT@186..191 "Trait"
132 WHITESPACE@[191; 192) " " 132 WHITESPACE@191..192 " "
133 ALIAS@[192; 196) 133 ALIAS@192..196
134 AS_KW@[192; 194) "as" 134 AS_KW@192..194 "as"
135 WHITESPACE@[194; 195) " " 135 WHITESPACE@194..195 " "
136 UNDERSCORE@[195; 196) "_" 136 UNDERSCORE@195..196 "_"
137 SEMICOLON@[196; 197) ";" 137 SEMICOLON@196..197 ";"
138 WHITESPACE@[197; 198) "\n" 138 WHITESPACE@197..198 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0044_block_items.rast b/crates/ra_syntax/test_data/parser/inline/ok/0044_block_items.rast
index e75d569f0..a454dfc3a 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0044_block_items.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0044_block_items.rast
@@ -1,30 +1,30 @@
1SOURCE_FILE@[0; 21) 1SOURCE_FILE@0..21
2 FN_DEF@[0; 20) 2 FN_DEF@0..20
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "a" 6 IDENT@3..4 "a"
7 PARAM_LIST@[4; 6) 7 PARAM_LIST@4..6
8 L_PAREN@[4; 5) "(" 8 L_PAREN@4..5 "("
9 R_PAREN@[5; 6) ")" 9 R_PAREN@5..6 ")"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 BLOCK_EXPR@[7; 20) 11 BLOCK_EXPR@7..20
12 BLOCK@[7; 20) 12 BLOCK@7..20
13 L_CURLY@[7; 8) "{" 13 L_CURLY@7..8 "{"
14 WHITESPACE@[8; 9) " " 14 WHITESPACE@8..9 " "
15 FN_DEF@[9; 18) 15 FN_DEF@9..18
16 FN_KW@[9; 11) "fn" 16 FN_KW@9..11 "fn"
17 WHITESPACE@[11; 12) " " 17 WHITESPACE@11..12 " "
18 NAME@[12; 13) 18 NAME@12..13
19 IDENT@[12; 13) "b" 19 IDENT@12..13 "b"
20 PARAM_LIST@[13; 15) 20 PARAM_LIST@13..15
21 L_PAREN@[13; 14) "(" 21 L_PAREN@13..14 "("
22 R_PAREN@[14; 15) ")" 22 R_PAREN@14..15 ")"
23 WHITESPACE@[15; 16) " " 23 WHITESPACE@15..16 " "
24 BLOCK_EXPR@[16; 18) 24 BLOCK_EXPR@16..18
25 BLOCK@[16; 18) 25 BLOCK@16..18
26 L_CURLY@[16; 17) "{" 26 L_CURLY@16..17 "{"
27 R_CURLY@[17; 18) "}" 27 R_CURLY@17..18 "}"
28 WHITESPACE@[18; 19) " " 28 WHITESPACE@18..19 " "
29 R_CURLY@[19; 20) "}" 29 R_CURLY@19..20 "}"
30 WHITESPACE@[20; 21) "\n" 30 WHITESPACE@20..21 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0045_param_list_opt_patterns.rast b/crates/ra_syntax/test_data/parser/inline/ok/0045_param_list_opt_patterns.rast
index 33886154d..2a50f796c 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0045_param_list_opt_patterns.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0045_param_list_opt_patterns.rast
@@ -1,47 +1,47 @@
1SOURCE_FILE@[0; 35) 1SOURCE_FILE@0..35
2 FN_DEF@[0; 34) 2 FN_DEF@0..34
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 TYPE_PARAM_LIST@[6; 30) 7 TYPE_PARAM_LIST@6..30
8 L_ANGLE@[6; 7) "<" 8 L_ANGLE@6..7 "<"
9 TYPE_PARAM@[7; 29) 9 TYPE_PARAM@7..29
10 NAME@[7; 8) 10 NAME@7..8
11 IDENT@[7; 8) "F" 11 IDENT@7..8 "F"
12 COLON@[8; 9) ":" 12 COLON@8..9 ":"
13 WHITESPACE@[9; 10) " " 13 WHITESPACE@9..10 " "
14 TYPE_BOUND_LIST@[10; 29) 14 TYPE_BOUND_LIST@10..29
15 TYPE_BOUND@[10; 29) 15 TYPE_BOUND@10..29
16 PATH_TYPE@[10; 29) 16 PATH_TYPE@10..29
17 PATH@[10; 29) 17 PATH@10..29
18 PATH_SEGMENT@[10; 29) 18 PATH_SEGMENT@10..29
19 NAME_REF@[10; 15) 19 NAME_REF@10..15
20 IDENT@[10; 15) "FnMut" 20 IDENT@10..15 "FnMut"
21 PARAM_LIST@[15; 29) 21 PARAM_LIST@15..29
22 L_PAREN@[15; 16) "(" 22 L_PAREN@15..16 "("
23 PARAM@[16; 28) 23 PARAM@16..28
24 REFERENCE_TYPE@[16; 28) 24 REFERENCE_TYPE@16..28
25 AMP@[16; 17) "&" 25 AMP@16..17 "&"
26 MUT_KW@[17; 20) "mut" 26 MUT_KW@17..20 "mut"
27 WHITESPACE@[20; 21) " " 27 WHITESPACE@20..21 " "
28 PATH_TYPE@[21; 28) 28 PATH_TYPE@21..28
29 PATH@[21; 28) 29 PATH@21..28
30 PATH_SEGMENT@[21; 28) 30 PATH_SEGMENT@21..28
31 NAME_REF@[21; 24) 31 NAME_REF@21..24
32 IDENT@[21; 24) "Foo" 32 IDENT@21..24 "Foo"
33 TYPE_ARG_LIST@[24; 28) 33 TYPE_ARG_LIST@24..28
34 L_ANGLE@[24; 25) "<" 34 L_ANGLE@24..25 "<"
35 LIFETIME_ARG@[25; 27) 35 LIFETIME_ARG@25..27
36 LIFETIME@[25; 27) "\'a" 36 LIFETIME@25..27 "\'a"
37 R_ANGLE@[27; 28) ">" 37 R_ANGLE@27..28 ">"
38 R_PAREN@[28; 29) ")" 38 R_PAREN@28..29 ")"
39 R_ANGLE@[29; 30) ">" 39 R_ANGLE@29..30 ">"
40 PARAM_LIST@[30; 32) 40 PARAM_LIST@30..32
41 L_PAREN@[30; 31) "(" 41 L_PAREN@30..31 "("
42 R_PAREN@[31; 32) ")" 42 R_PAREN@31..32 ")"
43 BLOCK_EXPR@[32; 34) 43 BLOCK_EXPR@32..34
44 BLOCK@[32; 34) 44 BLOCK@32..34
45 L_CURLY@[32; 33) "{" 45 L_CURLY@32..33 "{"
46 R_CURLY@[33; 34) "}" 46 R_CURLY@33..34 "}"
47 WHITESPACE@[34; 35) "\n" 47 WHITESPACE@34..35 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0046_singleton_tuple_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0046_singleton_tuple_type.rast
index 988b58d82..c28dc9d61 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0046_singleton_tuple_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0046_singleton_tuple_type.rast
@@ -1,20 +1,20 @@
1SOURCE_FILE@[0; 17) 1SOURCE_FILE@0..17
2 TYPE_ALIAS_DEF@[0; 16) 2 TYPE_ALIAS_DEF@0..16
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "T" 6 IDENT@5..6 "T"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 TUPLE_TYPE@[9; 15) 10 TUPLE_TYPE@9..15
11 L_PAREN@[9; 10) "(" 11 L_PAREN@9..10 "("
12 PATH_TYPE@[10; 13) 12 PATH_TYPE@10..13
13 PATH@[10; 13) 13 PATH@10..13
14 PATH_SEGMENT@[10; 13) 14 PATH_SEGMENT@10..13
15 NAME_REF@[10; 13) 15 NAME_REF@10..13
16 IDENT@[10; 13) "i32" 16 IDENT@10..13 "i32"
17 COMMA@[13; 14) "," 17 COMMA@13..14 ","
18 R_PAREN@[14; 15) ")" 18 R_PAREN@14..15 ")"
19 SEMICOLON@[15; 16) ";" 19 SEMICOLON@15..16 ";"
20 WHITESPACE@[16; 17) "\n" 20 WHITESPACE@16..17 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0047_unsafe_default_impl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0047_unsafe_default_impl.rast
index 0a768a8e3..52de6023b 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0047_unsafe_default_impl.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0047_unsafe_default_impl.rast
@@ -1,18 +1,18 @@
1SOURCE_FILE@[0; 27) 1SOURCE_FILE@0..27
2 IMPL_DEF@[0; 26) 2 IMPL_DEF@0..26
3 UNSAFE_KW@[0; 6) "unsafe" 3 UNSAFE_KW@0..6 "unsafe"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 DEFAULT_KW@[7; 14) "default" 5 DEFAULT_KW@7..14 "default"
6 WHITESPACE@[14; 15) " " 6 WHITESPACE@14..15 " "
7 IMPL_KW@[15; 19) "impl" 7 IMPL_KW@15..19 "impl"
8 WHITESPACE@[19; 20) " " 8 WHITESPACE@19..20 " "
9 PATH_TYPE@[20; 23) 9 PATH_TYPE@20..23
10 PATH@[20; 23) 10 PATH@20..23
11 PATH_SEGMENT@[20; 23) 11 PATH_SEGMENT@20..23
12 NAME_REF@[20; 23) 12 NAME_REF@20..23
13 IDENT@[20; 23) "Foo" 13 IDENT@20..23 "Foo"
14 WHITESPACE@[23; 24) " " 14 WHITESPACE@23..24 " "
15 ITEM_LIST@[24; 26) 15 ITEM_LIST@24..26
16 L_CURLY@[24; 25) "{" 16 L_CURLY@24..25 "{"
17 R_CURLY@[25; 26) "}" 17 R_CURLY@25..26 "}"
18 WHITESPACE@[26; 27) "\n" 18 WHITESPACE@26..27 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0048_path_type_with_bounds.rast b/crates/ra_syntax/test_data/parser/inline/ok/0048_path_type_with_bounds.rast
index 02f2a9db6..7f87e05ec 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0048_path_type_with_bounds.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0048_path_type_with_bounds.rast
@@ -1,83 +1,83 @@
1SOURCE_FILE@[0; 58) 1SOURCE_FILE@0..58
2 FN_DEF@[0; 26) 2 FN_DEF@0..26
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 RET_TYPE@[9; 23) 11 RET_TYPE@9..23
12 THIN_ARROW@[9; 11) "->" 12 THIN_ARROW@9..11 "->"
13 WHITESPACE@[11; 12) " " 13 WHITESPACE@11..12 " "
14 PATH_TYPE@[12; 23) 14 PATH_TYPE@12..23
15 PATH@[12; 23) 15 PATH@12..23
16 PATH_SEGMENT@[12; 23) 16 PATH_SEGMENT@12..23
17 NAME_REF@[12; 15) 17 NAME_REF@12..15
18 IDENT@[12; 15) "Box" 18 IDENT@12..15 "Box"
19 TYPE_ARG_LIST@[15; 23) 19 TYPE_ARG_LIST@15..23
20 L_ANGLE@[15; 16) "<" 20 L_ANGLE@15..16 "<"
21 TYPE_ARG@[16; 22) 21 TYPE_ARG@16..22
22 DYN_TRAIT_TYPE@[16; 22) 22 DYN_TRAIT_TYPE@16..22
23 TYPE_BOUND_LIST@[16; 22) 23 TYPE_BOUND_LIST@16..22
24 TYPE_BOUND@[16; 17) 24 TYPE_BOUND@16..17
25 PATH_TYPE@[16; 17) 25 PATH_TYPE@16..17
26 PATH@[16; 17) 26 PATH@16..17
27 PATH_SEGMENT@[16; 17) 27 PATH_SEGMENT@16..17
28 NAME_REF@[16; 17) 28 NAME_REF@16..17
29 IDENT@[16; 17) "T" 29 IDENT@16..17 "T"
30 WHITESPACE@[17; 18) " " 30 WHITESPACE@17..18 " "
31 PLUS@[18; 19) "+" 31 PLUS@18..19 "+"
32 WHITESPACE@[19; 20) " " 32 WHITESPACE@19..20 " "
33 TYPE_BOUND@[20; 22) 33 TYPE_BOUND@20..22
34 LIFETIME@[20; 22) "\'f" 34 LIFETIME@20..22 "\'f"
35 R_ANGLE@[22; 23) ">" 35 R_ANGLE@22..23 ">"
36 WHITESPACE@[23; 24) " " 36 WHITESPACE@23..24 " "
37 BLOCK_EXPR@[24; 26) 37 BLOCK_EXPR@24..26
38 BLOCK@[24; 26) 38 BLOCK@24..26
39 L_CURLY@[24; 25) "{" 39 L_CURLY@24..25 "{"
40 R_CURLY@[25; 26) "}" 40 R_CURLY@25..26 "}"
41 WHITESPACE@[26; 27) "\n" 41 WHITESPACE@26..27 "\n"
42 FN_DEF@[27; 57) 42 FN_DEF@27..57
43 FN_KW@[27; 29) "fn" 43 FN_KW@27..29 "fn"
44 WHITESPACE@[29; 30) " " 44 WHITESPACE@29..30 " "
45 NAME@[30; 33) 45 NAME@30..33
46 IDENT@[30; 33) "foo" 46 IDENT@30..33 "foo"
47 PARAM_LIST@[33; 35) 47 PARAM_LIST@33..35
48 L_PAREN@[33; 34) "(" 48 L_PAREN@33..34 "("
49 R_PAREN@[34; 35) ")" 49 R_PAREN@34..35 ")"
50 WHITESPACE@[35; 36) " " 50 WHITESPACE@35..36 " "
51 RET_TYPE@[36; 54) 51 RET_TYPE@36..54
52 THIN_ARROW@[36; 38) "->" 52 THIN_ARROW@36..38 "->"
53 WHITESPACE@[38; 39) " " 53 WHITESPACE@38..39 " "
54 PATH_TYPE@[39; 54) 54 PATH_TYPE@39..54
55 PATH@[39; 54) 55 PATH@39..54
56 PATH_SEGMENT@[39; 54) 56 PATH_SEGMENT@39..54
57 NAME_REF@[39; 42) 57 NAME_REF@39..42
58 IDENT@[39; 42) "Box" 58 IDENT@39..42 "Box"
59 TYPE_ARG_LIST@[42; 54) 59 TYPE_ARG_LIST@42..54
60 L_ANGLE@[42; 43) "<" 60 L_ANGLE@42..43 "<"
61 TYPE_ARG@[43; 53) 61 TYPE_ARG@43..53
62 DYN_TRAIT_TYPE@[43; 53) 62 DYN_TRAIT_TYPE@43..53
63 DYN_KW@[43; 46) "dyn" 63 DYN_KW@43..46 "dyn"
64 WHITESPACE@[46; 47) " " 64 WHITESPACE@46..47 " "
65 TYPE_BOUND_LIST@[47; 53) 65 TYPE_BOUND_LIST@47..53
66 TYPE_BOUND@[47; 48) 66 TYPE_BOUND@47..48
67 PATH_TYPE@[47; 48) 67 PATH_TYPE@47..48
68 PATH@[47; 48) 68 PATH@47..48
69 PATH_SEGMENT@[47; 48) 69 PATH_SEGMENT@47..48
70 NAME_REF@[47; 48) 70 NAME_REF@47..48
71 IDENT@[47; 48) "T" 71 IDENT@47..48 "T"
72 WHITESPACE@[48; 49) " " 72 WHITESPACE@48..49 " "
73 PLUS@[49; 50) "+" 73 PLUS@49..50 "+"
74 WHITESPACE@[50; 51) " " 74 WHITESPACE@50..51 " "
75 TYPE_BOUND@[51; 53) 75 TYPE_BOUND@51..53
76 LIFETIME@[51; 53) "\'f" 76 LIFETIME@51..53 "\'f"
77 R_ANGLE@[53; 54) ">" 77 R_ANGLE@53..54 ">"
78 WHITESPACE@[54; 55) " " 78 WHITESPACE@54..55 " "
79 BLOCK_EXPR@[55; 57) 79 BLOCK_EXPR@55..57
80 BLOCK@[55; 57) 80 BLOCK@55..57
81 L_CURLY@[55; 56) "{" 81 L_CURLY@55..56 "{"
82 R_CURLY@[56; 57) "}" 82 R_CURLY@56..57 "}"
83 WHITESPACE@[57; 58) "\n" 83 WHITESPACE@57..58 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0050_fn_decl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0050_fn_decl.rast
index 036035f6c..8bf62cda9 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0050_fn_decl.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0050_fn_decl.rast
@@ -1,22 +1,22 @@
1SOURCE_FILE@[0; 22) 1SOURCE_FILE@0..22
2 TRAIT_DEF@[0; 21) 2 TRAIT_DEF@0..21
3 TRAIT_KW@[0; 5) "trait" 3 TRAIT_KW@0..5 "trait"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 7) 5 NAME@6..7
6 IDENT@[6; 7) "T" 6 IDENT@6..7 "T"
7 WHITESPACE@[7; 8) " " 7 WHITESPACE@7..8 " "
8 ITEM_LIST@[8; 21) 8 ITEM_LIST@8..21
9 L_CURLY@[8; 9) "{" 9 L_CURLY@8..9 "{"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 FN_DEF@[10; 19) 11 FN_DEF@10..19
12 FN_KW@[10; 12) "fn" 12 FN_KW@10..12 "fn"
13 WHITESPACE@[12; 13) " " 13 WHITESPACE@12..13 " "
14 NAME@[13; 16) 14 NAME@13..16
15 IDENT@[13; 16) "foo" 15 IDENT@13..16 "foo"
16 PARAM_LIST@[16; 18) 16 PARAM_LIST@16..18
17 L_PAREN@[16; 17) "(" 17 L_PAREN@16..17 "("
18 R_PAREN@[17; 18) ")" 18 R_PAREN@17..18 ")"
19 SEMICOLON@[18; 19) ";" 19 SEMICOLON@18..19 ";"
20 WHITESPACE@[19; 20) " " 20 WHITESPACE@19..20 " "
21 R_CURLY@[20; 21) "}" 21 R_CURLY@20..21 "}"
22 WHITESPACE@[21; 22) "\n" 22 WHITESPACE@21..22 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0051_unit_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0051_unit_type.rast
index d9fc5eb8a..798ef2a48 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0051_unit_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0051_unit_type.rast
@@ -1,14 +1,14 @@
1SOURCE_FILE@[0; 13) 1SOURCE_FILE@0..13
2 TYPE_ALIAS_DEF@[0; 12) 2 TYPE_ALIAS_DEF@0..12
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "T" 6 IDENT@5..6 "T"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 TUPLE_TYPE@[9; 11) 10 TUPLE_TYPE@9..11
11 L_PAREN@[9; 10) "(" 11 L_PAREN@9..10 "("
12 R_PAREN@[10; 11) ")" 12 R_PAREN@10..11 ")"
13 SEMICOLON@[11; 12) ";" 13 SEMICOLON@11..12 ";"
14 WHITESPACE@[12; 13) "\n" 14 WHITESPACE@12..13 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0052_path_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0052_path_type.rast
index 8647c23bf..0d2f5ff56 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0052_path_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0052_path_type.rast
@@ -1,70 +1,70 @@
1SOURCE_FILE@[0; 71) 1SOURCE_FILE@0..71
2 TYPE_ALIAS_DEF@[0; 13) 2 TYPE_ALIAS_DEF@0..13
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "A" 6 IDENT@5..6 "A"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 PATH_TYPE@[9; 12) 10 PATH_TYPE@9..12
11 PATH@[9; 12) 11 PATH@9..12
12 PATH_SEGMENT@[9; 12) 12 PATH_SEGMENT@9..12
13 NAME_REF@[9; 12) 13 NAME_REF@9..12
14 IDENT@[9; 12) "Foo" 14 IDENT@9..12 "Foo"
15 SEMICOLON@[12; 13) ";" 15 SEMICOLON@12..13 ";"
16 WHITESPACE@[13; 14) "\n" 16 WHITESPACE@13..14 "\n"
17 TYPE_ALIAS_DEF@[14; 29) 17 TYPE_ALIAS_DEF@14..29
18 TYPE_KW@[14; 18) "type" 18 TYPE_KW@14..18 "type"
19 WHITESPACE@[18; 19) " " 19 WHITESPACE@18..19 " "
20 NAME@[19; 20) 20 NAME@19..20
21 IDENT@[19; 20) "B" 21 IDENT@19..20 "B"
22 WHITESPACE@[20; 21) " " 22 WHITESPACE@20..21 " "
23 EQ@[21; 22) "=" 23 EQ@21..22 "="
24 WHITESPACE@[22; 23) " " 24 WHITESPACE@22..23 " "
25 PATH_TYPE@[23; 28) 25 PATH_TYPE@23..28
26 PATH@[23; 28) 26 PATH@23..28
27 PATH_SEGMENT@[23; 28) 27 PATH_SEGMENT@23..28
28 COLON2@[23; 25) "::" 28 COLON2@23..25 "::"
29 NAME_REF@[25; 28) 29 NAME_REF@25..28
30 IDENT@[25; 28) "Foo" 30 IDENT@25..28 "Foo"
31 SEMICOLON@[28; 29) ";" 31 SEMICOLON@28..29 ";"
32 WHITESPACE@[29; 30) "\n" 32 WHITESPACE@29..30 "\n"
33 TYPE_ALIAS_DEF@[30; 49) 33 TYPE_ALIAS_DEF@30..49
34 TYPE_KW@[30; 34) "type" 34 TYPE_KW@30..34 "type"
35 WHITESPACE@[34; 35) " " 35 WHITESPACE@34..35 " "
36 NAME@[35; 36) 36 NAME@35..36
37 IDENT@[35; 36) "C" 37 IDENT@35..36 "C"
38 WHITESPACE@[36; 37) " " 38 WHITESPACE@36..37 " "
39 EQ@[37; 38) "=" 39 EQ@37..38 "="
40 WHITESPACE@[38; 39) " " 40 WHITESPACE@38..39 " "
41 PATH_TYPE@[39; 48) 41 PATH_TYPE@39..48
42 PATH@[39; 48) 42 PATH@39..48
43 PATH@[39; 43) 43 PATH@39..43
44 PATH_SEGMENT@[39; 43) 44 PATH_SEGMENT@39..43
45 SELF_KW@[39; 43) "self" 45 SELF_KW@39..43 "self"
46 COLON2@[43; 45) "::" 46 COLON2@43..45 "::"
47 PATH_SEGMENT@[45; 48) 47 PATH_SEGMENT@45..48
48 NAME_REF@[45; 48) 48 NAME_REF@45..48
49 IDENT@[45; 48) "Foo" 49 IDENT@45..48 "Foo"
50 SEMICOLON@[48; 49) ";" 50 SEMICOLON@48..49 ";"
51 WHITESPACE@[49; 50) "\n" 51 WHITESPACE@49..50 "\n"
52 TYPE_ALIAS_DEF@[50; 70) 52 TYPE_ALIAS_DEF@50..70
53 TYPE_KW@[50; 54) "type" 53 TYPE_KW@50..54 "type"
54 WHITESPACE@[54; 55) " " 54 WHITESPACE@54..55 " "
55 NAME@[55; 56) 55 NAME@55..56
56 IDENT@[55; 56) "D" 56 IDENT@55..56 "D"
57 WHITESPACE@[56; 57) " " 57 WHITESPACE@56..57 " "
58 EQ@[57; 58) "=" 58 EQ@57..58 "="
59 WHITESPACE@[58; 59) " " 59 WHITESPACE@58..59 " "
60 PATH_TYPE@[59; 69) 60 PATH_TYPE@59..69
61 PATH@[59; 69) 61 PATH@59..69
62 PATH@[59; 64) 62 PATH@59..64
63 PATH_SEGMENT@[59; 64) 63 PATH_SEGMENT@59..64
64 SUPER_KW@[59; 64) "super" 64 SUPER_KW@59..64 "super"
65 COLON2@[64; 66) "::" 65 COLON2@64..66 "::"
66 PATH_SEGMENT@[66; 69) 66 PATH_SEGMENT@66..69
67 NAME_REF@[66; 69) 67 NAME_REF@66..69
68 IDENT@[66; 69) "Foo" 68 IDENT@66..69 "Foo"
69 SEMICOLON@[69; 70) ";" 69 SEMICOLON@69..70 ";"
70 WHITESPACE@[70; 71) "\n" 70 WHITESPACE@70..71 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0053_path_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0053_path_expr.rast
index 690d8504e..5f846177e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0053_path_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0053_path_expr.rast
@@ -1,96 +1,96 @@
1SOURCE_FILE@[0; 91) 1SOURCE_FILE@0..91
2 FN_DEF@[0; 90) 2 FN_DEF@0..90
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 90) 11 BLOCK_EXPR@9..90
12 BLOCK@[9; 90) 12 BLOCK@9..90
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 25) 15 LET_STMT@15..25
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 PLACEHOLDER_PAT@[19; 20) 18 PLACEHOLDER_PAT@19..20
19 UNDERSCORE@[19; 20) "_" 19 UNDERSCORE@19..20 "_"
20 WHITESPACE@[20; 21) " " 20 WHITESPACE@20..21 " "
21 EQ@[21; 22) "=" 21 EQ@21..22 "="
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 PATH_EXPR@[23; 24) 23 PATH_EXPR@23..24
24 PATH@[23; 24) 24 PATH@23..24
25 PATH_SEGMENT@[23; 24) 25 PATH_SEGMENT@23..24
26 NAME_REF@[23; 24) 26 NAME_REF@23..24
27 IDENT@[23; 24) "a" 27 IDENT@23..24 "a"
28 SEMICOLON@[24; 25) ";" 28 SEMICOLON@24..25 ";"
29 WHITESPACE@[25; 30) "\n " 29 WHITESPACE@25..30 "\n "
30 LET_STMT@[30; 43) 30 LET_STMT@30..43
31 LET_KW@[30; 33) "let" 31 LET_KW@30..33 "let"
32 WHITESPACE@[33; 34) " " 32 WHITESPACE@33..34 " "
33 PLACEHOLDER_PAT@[34; 35) 33 PLACEHOLDER_PAT@34..35
34 UNDERSCORE@[34; 35) "_" 34 UNDERSCORE@34..35 "_"
35 WHITESPACE@[35; 36) " " 35 WHITESPACE@35..36 " "
36 EQ@[36; 37) "=" 36 EQ@36..37 "="
37 WHITESPACE@[37; 38) " " 37 WHITESPACE@37..38 " "
38 PATH_EXPR@[38; 42) 38 PATH_EXPR@38..42
39 PATH@[38; 42) 39 PATH@38..42
40 PATH@[38; 39) 40 PATH@38..39
41 PATH_SEGMENT@[38; 39) 41 PATH_SEGMENT@38..39
42 NAME_REF@[38; 39) 42 NAME_REF@38..39
43 IDENT@[38; 39) "a" 43 IDENT@38..39 "a"
44 COLON2@[39; 41) "::" 44 COLON2@39..41 "::"
45 PATH_SEGMENT@[41; 42) 45 PATH_SEGMENT@41..42
46 NAME_REF@[41; 42) 46 NAME_REF@41..42
47 IDENT@[41; 42) "b" 47 IDENT@41..42 "b"
48 SEMICOLON@[42; 43) ";" 48 SEMICOLON@42..43 ";"
49 WHITESPACE@[43; 48) "\n " 49 WHITESPACE@43..48 "\n "
50 LET_STMT@[48; 65) 50 LET_STMT@48..65
51 LET_KW@[48; 51) "let" 51 LET_KW@48..51 "let"
52 WHITESPACE@[51; 52) " " 52 WHITESPACE@51..52 " "
53 PLACEHOLDER_PAT@[52; 53) 53 PLACEHOLDER_PAT@52..53
54 UNDERSCORE@[52; 53) "_" 54 UNDERSCORE@52..53 "_"
55 WHITESPACE@[53; 54) " " 55 WHITESPACE@53..54 " "
56 EQ@[54; 55) "=" 56 EQ@54..55 "="
57 WHITESPACE@[55; 56) " " 57 WHITESPACE@55..56 " "
58 PATH_EXPR@[56; 64) 58 PATH_EXPR@56..64
59 PATH@[56; 64) 59 PATH@56..64
60 PATH_SEGMENT@[56; 64) 60 PATH_SEGMENT@56..64
61 COLON2@[56; 58) "::" 61 COLON2@56..58 "::"
62 NAME_REF@[58; 59) 62 NAME_REF@58..59
63 IDENT@[58; 59) "a" 63 IDENT@58..59 "a"
64 TYPE_ARG_LIST@[59; 64) 64 TYPE_ARG_LIST@59..64
65 COLON2@[59; 61) "::" 65 COLON2@59..61 "::"
66 L_ANGLE@[61; 62) "<" 66 L_ANGLE@61..62 "<"
67 TYPE_ARG@[62; 63) 67 TYPE_ARG@62..63
68 PATH_TYPE@[62; 63) 68 PATH_TYPE@62..63
69 PATH@[62; 63) 69 PATH@62..63
70 PATH_SEGMENT@[62; 63) 70 PATH_SEGMENT@62..63
71 NAME_REF@[62; 63) 71 NAME_REF@62..63
72 IDENT@[62; 63) "b" 72 IDENT@62..63 "b"
73 R_ANGLE@[63; 64) ">" 73 R_ANGLE@63..64 ">"
74 SEMICOLON@[64; 65) ";" 74 SEMICOLON@64..65 ";"
75 WHITESPACE@[65; 70) "\n " 75 WHITESPACE@65..70 "\n "
76 LET_STMT@[70; 88) 76 LET_STMT@70..88
77 LET_KW@[70; 73) "let" 77 LET_KW@70..73 "let"
78 WHITESPACE@[73; 74) " " 78 WHITESPACE@73..74 " "
79 PLACEHOLDER_PAT@[74; 75) 79 PLACEHOLDER_PAT@74..75
80 UNDERSCORE@[74; 75) "_" 80 UNDERSCORE@74..75 "_"
81 WHITESPACE@[75; 76) " " 81 WHITESPACE@75..76 " "
82 EQ@[76; 77) "=" 82 EQ@76..77 "="
83 WHITESPACE@[77; 78) " " 83 WHITESPACE@77..78 " "
84 MACRO_CALL@[78; 87) 84 MACRO_CALL@78..87
85 PATH@[78; 84) 85 PATH@78..84
86 PATH_SEGMENT@[78; 84) 86 PATH_SEGMENT@78..84
87 NAME_REF@[78; 84) 87 NAME_REF@78..84
88 IDENT@[78; 84) "format" 88 IDENT@78..84 "format"
89 BANG@[84; 85) "!" 89 BANG@84..85 "!"
90 TOKEN_TREE@[85; 87) 90 TOKEN_TREE@85..87
91 L_PAREN@[85; 86) "(" 91 L_PAREN@85..86 "("
92 R_PAREN@[86; 87) ")" 92 R_PAREN@86..87 ")"
93 SEMICOLON@[87; 88) ";" 93 SEMICOLON@87..88 ";"
94 WHITESPACE@[88; 89) "\n" 94 WHITESPACE@88..89 "\n"
95 R_CURLY@[89; 90) "}" 95 R_CURLY@89..90 "}"
96 WHITESPACE@[90; 91) "\n" 96 WHITESPACE@90..91 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0054_record_field_attrs.rast b/crates/ra_syntax/test_data/parser/inline/ok/0054_record_field_attrs.rast
index 731c31f76..6362aa02d 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0054_record_field_attrs.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0054_record_field_attrs.rast
@@ -1,44 +1,44 @@
1SOURCE_FILE@[0; 64) 1SOURCE_FILE@0..64
2 STRUCT_DEF@[0; 63) 2 STRUCT_DEF@0..63
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 RECORD_FIELD_DEF_LIST@[9; 63) 8 RECORD_FIELD_DEF_LIST@9..63
9 L_CURLY@[9; 10) "{" 9 L_CURLY@9..10 "{"
10 WHITESPACE@[10; 15) "\n " 10 WHITESPACE@10..15 "\n "
11 RECORD_FIELD_DEF@[15; 60) 11 RECORD_FIELD_DEF@15..60
12 ATTR@[15; 43) 12 ATTR@15..43
13 POUND@[15; 16) "#" 13 POUND@15..16 "#"
14 L_BRACK@[16; 17) "[" 14 L_BRACK@16..17 "["
15 PATH@[17; 22) 15 PATH@17..22
16 PATH_SEGMENT@[17; 22) 16 PATH_SEGMENT@17..22
17 NAME_REF@[17; 22) 17 NAME_REF@17..22
18 IDENT@[17; 22) "serde" 18 IDENT@17..22 "serde"
19 TOKEN_TREE@[22; 42) 19 TOKEN_TREE@22..42
20 L_PAREN@[22; 23) "(" 20 L_PAREN@22..23 "("
21 IDENT@[23; 27) "with" 21 IDENT@23..27 "with"
22 WHITESPACE@[27; 28) " " 22 WHITESPACE@27..28 " "
23 EQ@[28; 29) "=" 23 EQ@28..29 "="
24 WHITESPACE@[29; 30) " " 24 WHITESPACE@29..30 " "
25 STRING@[30; 41) "\"url_serde\"" 25 STRING@30..41 "\"url_serde\""
26 R_PAREN@[41; 42) ")" 26 R_PAREN@41..42 ")"
27 R_BRACK@[42; 43) "]" 27 R_BRACK@42..43 "]"
28 WHITESPACE@[43; 48) "\n " 28 WHITESPACE@43..48 "\n "
29 VISIBILITY@[48; 51) 29 VISIBILITY@48..51
30 PUB_KW@[48; 51) "pub" 30 PUB_KW@48..51 "pub"
31 WHITESPACE@[51; 52) " " 31 WHITESPACE@51..52 " "
32 NAME@[52; 55) 32 NAME@52..55
33 IDENT@[52; 55) "uri" 33 IDENT@52..55 "uri"
34 COLON@[55; 56) ":" 34 COLON@55..56 ":"
35 WHITESPACE@[56; 57) " " 35 WHITESPACE@56..57 " "
36 PATH_TYPE@[57; 60) 36 PATH_TYPE@57..60
37 PATH@[57; 60) 37 PATH@57..60
38 PATH_SEGMENT@[57; 60) 38 PATH_SEGMENT@57..60
39 NAME_REF@[57; 60) 39 NAME_REF@57..60
40 IDENT@[57; 60) "Uri" 40 IDENT@57..60 "Uri"
41 COMMA@[60; 61) "," 41 COMMA@60..61 ","
42 WHITESPACE@[61; 62) "\n" 42 WHITESPACE@61..62 "\n"
43 R_CURLY@[62; 63) "}" 43 R_CURLY@62..63 "}"
44 WHITESPACE@[63; 64) "\n" 44 WHITESPACE@63..64 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0055_literal_pattern.rast b/crates/ra_syntax/test_data/parser/inline/ok/0055_literal_pattern.rast
index 2b28cec67..d9310e82e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0055_literal_pattern.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0055_literal_pattern.rast
@@ -1,77 +1,77 @@
1SOURCE_FILE@[0; 113) 1SOURCE_FILE@0..113
2 FN_DEF@[0; 112) 2 FN_DEF@0..112
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 112) 11 BLOCK_EXPR@10..112
12 BLOCK@[10; 112) 12 BLOCK@10..112
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 MATCH_EXPR@[16; 110) 15 MATCH_EXPR@16..110
16 MATCH_KW@[16; 21) "match" 16 MATCH_KW@16..21 "match"
17 WHITESPACE@[21; 22) " " 17 WHITESPACE@21..22 " "
18 TUPLE_EXPR@[22; 24) 18 TUPLE_EXPR@22..24
19 L_PAREN@[22; 23) "(" 19 L_PAREN@22..23 "("
20 R_PAREN@[23; 24) ")" 20 R_PAREN@23..24 ")"
21 WHITESPACE@[24; 25) " " 21 WHITESPACE@24..25 " "
22 MATCH_ARM_LIST@[25; 110) 22 MATCH_ARM_LIST@25..110
23 L_CURLY@[25; 26) "{" 23 L_CURLY@25..26 "{"
24 WHITESPACE@[26; 35) "\n " 24 WHITESPACE@26..35 "\n "
25 MATCH_ARM@[35; 43) 25 MATCH_ARM@35..43
26 LITERAL_PAT@[35; 37) 26 LITERAL_PAT@35..37
27 MINUS@[35; 36) "-" 27 MINUS@35..36 "-"
28 LITERAL@[36; 37) 28 LITERAL@36..37
29 INT_NUMBER@[36; 37) "1" 29 INT_NUMBER@36..37 "1"
30 WHITESPACE@[37; 38) " " 30 WHITESPACE@37..38 " "
31 FAT_ARROW@[38; 40) "=>" 31 FAT_ARROW@38..40 "=>"
32 WHITESPACE@[40; 41) " " 32 WHITESPACE@40..41 " "
33 TUPLE_EXPR@[41; 43) 33 TUPLE_EXPR@41..43
34 L_PAREN@[41; 42) "(" 34 L_PAREN@41..42 "("
35 R_PAREN@[42; 43) ")" 35 R_PAREN@42..43 ")"
36 COMMA@[43; 44) "," 36 COMMA@43..44 ","
37 WHITESPACE@[44; 53) "\n " 37 WHITESPACE@44..53 "\n "
38 MATCH_ARM@[53; 61) 38 MATCH_ARM@53..61
39 LITERAL_PAT@[53; 55) 39 LITERAL_PAT@53..55
40 LITERAL@[53; 55) 40 LITERAL@53..55
41 INT_NUMBER@[53; 55) "92" 41 INT_NUMBER@53..55 "92"
42 WHITESPACE@[55; 56) " " 42 WHITESPACE@55..56 " "
43 FAT_ARROW@[56; 58) "=>" 43 FAT_ARROW@56..58 "=>"
44 WHITESPACE@[58; 59) " " 44 WHITESPACE@58..59 " "
45 TUPLE_EXPR@[59; 61) 45 TUPLE_EXPR@59..61
46 L_PAREN@[59; 60) "(" 46 L_PAREN@59..60 "("
47 R_PAREN@[60; 61) ")" 47 R_PAREN@60..61 ")"
48 COMMA@[61; 62) "," 48 COMMA@61..62 ","
49 WHITESPACE@[62; 71) "\n " 49 WHITESPACE@62..71 "\n "
50 MATCH_ARM@[71; 80) 50 MATCH_ARM@71..80
51 LITERAL_PAT@[71; 74) 51 LITERAL_PAT@71..74
52 LITERAL@[71; 74) 52 LITERAL@71..74
53 CHAR@[71; 74) "\'c\'" 53 CHAR@71..74 "\'c\'"
54 WHITESPACE@[74; 75) " " 54 WHITESPACE@74..75 " "
55 FAT_ARROW@[75; 77) "=>" 55 FAT_ARROW@75..77 "=>"
56 WHITESPACE@[77; 78) " " 56 WHITESPACE@77..78 " "
57 TUPLE_EXPR@[78; 80) 57 TUPLE_EXPR@78..80
58 L_PAREN@[78; 79) "(" 58 L_PAREN@78..79 "("
59 R_PAREN@[79; 80) ")" 59 R_PAREN@79..80 ")"
60 COMMA@[80; 81) "," 60 COMMA@80..81 ","
61 WHITESPACE@[81; 90) "\n " 61 WHITESPACE@81..90 "\n "
62 MATCH_ARM@[90; 103) 62 MATCH_ARM@90..103
63 LITERAL_PAT@[90; 97) 63 LITERAL_PAT@90..97
64 LITERAL@[90; 97) 64 LITERAL@90..97
65 STRING@[90; 97) "\"hello\"" 65 STRING@90..97 "\"hello\""
66 WHITESPACE@[97; 98) " " 66 WHITESPACE@97..98 " "
67 FAT_ARROW@[98; 100) "=>" 67 FAT_ARROW@98..100 "=>"
68 WHITESPACE@[100; 101) " " 68 WHITESPACE@100..101 " "
69 TUPLE_EXPR@[101; 103) 69 TUPLE_EXPR@101..103
70 L_PAREN@[101; 102) "(" 70 L_PAREN@101..102 "("
71 R_PAREN@[102; 103) ")" 71 R_PAREN@102..103 ")"
72 COMMA@[103; 104) "," 72 COMMA@103..104 ","
73 WHITESPACE@[104; 109) "\n " 73 WHITESPACE@104..109 "\n "
74 R_CURLY@[109; 110) "}" 74 R_CURLY@109..110 "}"
75 WHITESPACE@[110; 111) "\n" 75 WHITESPACE@110..111 "\n"
76 R_CURLY@[111; 112) "}" 76 R_CURLY@111..112 "}"
77 WHITESPACE@[112; 113) "\n" 77 WHITESPACE@112..113 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0056_where_clause.rast b/crates/ra_syntax/test_data/parser/inline/ok/0056_where_clause.rast
index c6082791a..2e727c1ef 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0056_where_clause.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0056_where_clause.rast
@@ -1,111 +1,111 @@
1SOURCE_FILE@[0; 116) 1SOURCE_FILE@0..116
2 FN_DEF@[0; 115) 2 FN_DEF@0..115
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) "\n" 10 WHITESPACE@8..9 "\n"
11 WHERE_CLAUSE@[9; 112) 11 WHERE_CLAUSE@9..112
12 WHERE_KW@[9; 14) "where" 12 WHERE_KW@9..14 "where"
13 WHITESPACE@[14; 18) "\n " 13 WHITESPACE@14..18 "\n "
14 WHERE_PRED@[18; 29) 14 WHERE_PRED@18..29
15 LIFETIME@[18; 20) "\'a" 15 LIFETIME@18..20 "\'a"
16 COLON@[20; 21) ":" 16 COLON@20..21 ":"
17 WHITESPACE@[21; 22) " " 17 WHITESPACE@21..22 " "
18 TYPE_BOUND_LIST@[22; 29) 18 TYPE_BOUND_LIST@22..29
19 TYPE_BOUND@[22; 24) 19 TYPE_BOUND@22..24
20 LIFETIME@[22; 24) "\'b" 20 LIFETIME@22..24 "\'b"
21 WHITESPACE@[24; 25) " " 21 WHITESPACE@24..25 " "
22 PLUS@[25; 26) "+" 22 PLUS@25..26 "+"
23 WHITESPACE@[26; 27) " " 23 WHITESPACE@26..27 " "
24 TYPE_BOUND@[27; 29) 24 TYPE_BOUND@27..29
25 LIFETIME@[27; 29) "\'c" 25 LIFETIME@27..29 "\'c"
26 COMMA@[29; 30) "," 26 COMMA@29..30 ","
27 WHITESPACE@[30; 34) "\n " 27 WHITESPACE@30..34 "\n "
28 WHERE_PRED@[34; 59) 28 WHERE_PRED@34..59
29 PATH_TYPE@[34; 35) 29 PATH_TYPE@34..35
30 PATH@[34; 35) 30 PATH@34..35
31 PATH_SEGMENT@[34; 35) 31 PATH_SEGMENT@34..35
32 NAME_REF@[34; 35) 32 NAME_REF@34..35
33 IDENT@[34; 35) "T" 33 IDENT@34..35 "T"
34 COLON@[35; 36) ":" 34 COLON@35..36 ":"
35 WHITESPACE@[36; 37) " " 35 WHITESPACE@36..37 " "
36 TYPE_BOUND_LIST@[37; 59) 36 TYPE_BOUND_LIST@37..59
37 TYPE_BOUND@[37; 42) 37 TYPE_BOUND@37..42
38 PATH_TYPE@[37; 42) 38 PATH_TYPE@37..42
39 PATH@[37; 42) 39 PATH@37..42
40 PATH_SEGMENT@[37; 42) 40 PATH_SEGMENT@37..42
41 NAME_REF@[37; 42) 41 NAME_REF@37..42
42 IDENT@[37; 42) "Clone" 42 IDENT@37..42 "Clone"
43 WHITESPACE@[42; 43) " " 43 WHITESPACE@42..43 " "
44 PLUS@[43; 44) "+" 44 PLUS@43..44 "+"
45 WHITESPACE@[44; 45) " " 45 WHITESPACE@44..45 " "
46 TYPE_BOUND@[45; 49) 46 TYPE_BOUND@45..49
47 PATH_TYPE@[45; 49) 47 PATH_TYPE@45..49
48 PATH@[45; 49) 48 PATH@45..49
49 PATH_SEGMENT@[45; 49) 49 PATH_SEGMENT@45..49
50 NAME_REF@[45; 49) 50 NAME_REF@45..49
51 IDENT@[45; 49) "Copy" 51 IDENT@45..49 "Copy"
52 WHITESPACE@[49; 50) " " 52 WHITESPACE@49..50 " "
53 PLUS@[50; 51) "+" 53 PLUS@50..51 "+"
54 WHITESPACE@[51; 52) " " 54 WHITESPACE@51..52 " "
55 TYPE_BOUND@[52; 59) 55 TYPE_BOUND@52..59
56 LIFETIME@[52; 59) "\'static" 56 LIFETIME@52..59 "\'static"
57 COMMA@[59; 60) "," 57 COMMA@59..60 ","
58 WHITESPACE@[60; 64) "\n " 58 WHITESPACE@60..64 "\n "
59 WHERE_PRED@[64; 82) 59 WHERE_PRED@64..82
60 PATH_TYPE@[64; 78) 60 PATH_TYPE@64..78
61 PATH@[64; 78) 61 PATH@64..78
62 PATH@[64; 72) 62 PATH@64..72
63 PATH_SEGMENT@[64; 72) 63 PATH_SEGMENT@64..72
64 NAME_REF@[64; 72) 64 NAME_REF@64..72
65 IDENT@[64; 72) "Iterator" 65 IDENT@64..72 "Iterator"
66 COLON2@[72; 74) "::" 66 COLON2@72..74 "::"
67 PATH_SEGMENT@[74; 78) 67 PATH_SEGMENT@74..78
68 NAME_REF@[74; 78) 68 NAME_REF@74..78
69 IDENT@[74; 78) "Item" 69 IDENT@74..78 "Item"
70 COLON@[78; 79) ":" 70 COLON@78..79 ":"
71 WHITESPACE@[79; 80) " " 71 WHITESPACE@79..80 " "
72 TYPE_BOUND_LIST@[80; 82) 72 TYPE_BOUND_LIST@80..82
73 TYPE_BOUND@[80; 82) 73 TYPE_BOUND@80..82
74 LIFETIME@[80; 82) "\'a" 74 LIFETIME@80..82 "\'a"
75 COMMA@[82; 83) "," 75 COMMA@82..83 ","
76 WHITESPACE@[83; 87) "\n " 76 WHITESPACE@83..87 "\n "
77 WHERE_PRED@[87; 112) 77 WHERE_PRED@87..112
78 PATH_TYPE@[87; 108) 78 PATH_TYPE@87..108
79 PATH@[87; 108) 79 PATH@87..108
80 PATH@[87; 102) 80 PATH@87..102
81 PATH_SEGMENT@[87; 102) 81 PATH_SEGMENT@87..102
82 L_ANGLE@[87; 88) "<" 82 L_ANGLE@87..88 "<"
83 PATH_TYPE@[88; 89) 83 PATH_TYPE@88..89
84 PATH@[88; 89) 84 PATH@88..89
85 PATH_SEGMENT@[88; 89) 85 PATH_SEGMENT@88..89
86 NAME_REF@[88; 89) 86 NAME_REF@88..89
87 IDENT@[88; 89) "T" 87 IDENT@88..89 "T"
88 WHITESPACE@[89; 90) " " 88 WHITESPACE@89..90 " "
89 AS_KW@[90; 92) "as" 89 AS_KW@90..92 "as"
90 WHITESPACE@[92; 93) " " 90 WHITESPACE@92..93 " "
91 PATH_TYPE@[93; 101) 91 PATH_TYPE@93..101
92 PATH@[93; 101) 92 PATH@93..101
93 PATH_SEGMENT@[93; 101) 93 PATH_SEGMENT@93..101
94 NAME_REF@[93; 101) 94 NAME_REF@93..101
95 IDENT@[93; 101) "Iterator" 95 IDENT@93..101 "Iterator"
96 R_ANGLE@[101; 102) ">" 96 R_ANGLE@101..102 ">"
97 COLON2@[102; 104) "::" 97 COLON2@102..104 "::"
98 PATH_SEGMENT@[104; 108) 98 PATH_SEGMENT@104..108
99 NAME_REF@[104; 108) 99 NAME_REF@104..108
100 IDENT@[104; 108) "Item" 100 IDENT@104..108 "Item"
101 COLON@[108; 109) ":" 101 COLON@108..109 ":"
102 WHITESPACE@[109; 110) " " 102 WHITESPACE@109..110 " "
103 TYPE_BOUND_LIST@[110; 112) 103 TYPE_BOUND_LIST@110..112
104 TYPE_BOUND@[110; 112) 104 TYPE_BOUND@110..112
105 LIFETIME@[110; 112) "\'a" 105 LIFETIME@110..112 "\'a"
106 WHITESPACE@[112; 113) "\n" 106 WHITESPACE@112..113 "\n"
107 BLOCK_EXPR@[113; 115) 107 BLOCK_EXPR@113..115
108 BLOCK@[113; 115) 108 BLOCK@113..115
109 L_CURLY@[113; 114) "{" 109 L_CURLY@113..114 "{"
110 R_CURLY@[114; 115) "}" 110 R_CURLY@114..115 "}"
111 WHITESPACE@[115; 116) "\n" 111 WHITESPACE@115..116 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0057_const_fn.rast b/crates/ra_syntax/test_data/parser/inline/ok/0057_const_fn.rast
index 9788197be..c1e58f9bf 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0057_const_fn.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0057_const_fn.rast
@@ -1,17 +1,17 @@
1SOURCE_FILE@[0; 18) 1SOURCE_FILE@0..18
2 FN_DEF@[0; 17) 2 FN_DEF@0..17
3 CONST_KW@[0; 5) "const" 3 CONST_KW@0..5 "const"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 FN_KW@[6; 8) "fn" 5 FN_KW@6..8 "fn"
6 WHITESPACE@[8; 9) " " 6 WHITESPACE@8..9 " "
7 NAME@[9; 12) 7 NAME@9..12
8 IDENT@[9; 12) "foo" 8 IDENT@9..12 "foo"
9 PARAM_LIST@[12; 14) 9 PARAM_LIST@12..14
10 L_PAREN@[12; 13) "(" 10 L_PAREN@12..13 "("
11 R_PAREN@[13; 14) ")" 11 R_PAREN@13..14 ")"
12 WHITESPACE@[14; 15) " " 12 WHITESPACE@14..15 " "
13 BLOCK_EXPR@[15; 17) 13 BLOCK_EXPR@15..17
14 BLOCK@[15; 17) 14 BLOCK@15..17
15 L_CURLY@[15; 16) "{" 15 L_CURLY@15..16 "{"
16 R_CURLY@[16; 17) "}" 16 R_CURLY@16..17 "}"
17 WHITESPACE@[17; 18) "\n" 17 WHITESPACE@17..18 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0058_range_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0058_range_pat.rast
index 8d7083e97..9bdf2379f 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0058_range_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0058_range_pat.rast
@@ -1,83 +1,83 @@
1SOURCE_FILE@[0; 112) 1SOURCE_FILE@0..112
2 FN_DEF@[0; 111) 2 FN_DEF@0..111
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 111) 11 BLOCK_EXPR@10..111
12 BLOCK@[10; 111) 12 BLOCK@10..111
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 MATCH_EXPR@[16; 109) 15 MATCH_EXPR@16..109
16 MATCH_KW@[16; 21) "match" 16 MATCH_KW@16..21 "match"
17 WHITESPACE@[21; 22) " " 17 WHITESPACE@21..22 " "
18 LITERAL@[22; 24) 18 LITERAL@22..24
19 INT_NUMBER@[22; 24) "92" 19 INT_NUMBER@22..24 "92"
20 WHITESPACE@[24; 25) " " 20 WHITESPACE@24..25 " "
21 MATCH_ARM_LIST@[25; 109) 21 MATCH_ARM_LIST@25..109
22 L_CURLY@[25; 26) "{" 22 L_CURLY@25..26 "{"
23 WHITESPACE@[26; 35) "\n " 23 WHITESPACE@26..35 "\n "
24 MATCH_ARM@[35; 50) 24 MATCH_ARM@35..50
25 RANGE_PAT@[35; 44) 25 RANGE_PAT@35..44
26 LITERAL_PAT@[35; 36) 26 LITERAL_PAT@35..36
27 LITERAL@[35; 36) 27 LITERAL@35..36
28 INT_NUMBER@[35; 36) "0" 28 INT_NUMBER@35..36 "0"
29 WHITESPACE@[36; 37) " " 29 WHITESPACE@36..37 " "
30 DOT3@[37; 40) "..." 30 DOT3@37..40 "..."
31 WHITESPACE@[40; 41) " " 31 WHITESPACE@40..41 " "
32 LITERAL_PAT@[41; 44) 32 LITERAL_PAT@41..44
33 LITERAL@[41; 44) 33 LITERAL@41..44
34 INT_NUMBER@[41; 44) "100" 34 INT_NUMBER@41..44 "100"
35 WHITESPACE@[44; 45) " " 35 WHITESPACE@44..45 " "
36 FAT_ARROW@[45; 47) "=>" 36 FAT_ARROW@45..47 "=>"
37 WHITESPACE@[47; 48) " " 37 WHITESPACE@47..48 " "
38 TUPLE_EXPR@[48; 50) 38 TUPLE_EXPR@48..50
39 L_PAREN@[48; 49) "(" 39 L_PAREN@48..49 "("
40 R_PAREN@[49; 50) ")" 40 R_PAREN@49..50 ")"
41 COMMA@[50; 51) "," 41 COMMA@50..51 ","
42 WHITESPACE@[51; 60) "\n " 42 WHITESPACE@51..60 "\n "
43 MATCH_ARM@[60; 77) 43 MATCH_ARM@60..77
44 RANGE_PAT@[60; 71) 44 RANGE_PAT@60..71
45 LITERAL_PAT@[60; 63) 45 LITERAL_PAT@60..63
46 LITERAL@[60; 63) 46 LITERAL@60..63
47 INT_NUMBER@[60; 63) "101" 47 INT_NUMBER@60..63 "101"
48 WHITESPACE@[63; 64) " " 48 WHITESPACE@63..64 " "
49 DOT2EQ@[64; 67) "..=" 49 DOT2EQ@64..67 "..="
50 WHITESPACE@[67; 68) " " 50 WHITESPACE@67..68 " "
51 LITERAL_PAT@[68; 71) 51 LITERAL_PAT@68..71
52 LITERAL@[68; 71) 52 LITERAL@68..71
53 INT_NUMBER@[68; 71) "200" 53 INT_NUMBER@68..71 "200"
54 WHITESPACE@[71; 72) " " 54 WHITESPACE@71..72 " "
55 FAT_ARROW@[72; 74) "=>" 55 FAT_ARROW@72..74 "=>"
56 WHITESPACE@[74; 75) " " 56 WHITESPACE@74..75 " "
57 TUPLE_EXPR@[75; 77) 57 TUPLE_EXPR@75..77
58 L_PAREN@[75; 76) "(" 58 L_PAREN@75..76 "("
59 R_PAREN@[76; 77) ")" 59 R_PAREN@76..77 ")"
60 COMMA@[77; 78) "," 60 COMMA@77..78 ","
61 WHITESPACE@[78; 87) "\n " 61 WHITESPACE@78..87 "\n "
62 MATCH_ARM@[87; 102) 62 MATCH_ARM@87..102
63 RANGE_PAT@[87; 97) 63 RANGE_PAT@87..97
64 LITERAL_PAT@[87; 90) 64 LITERAL_PAT@87..90
65 LITERAL@[87; 90) 65 LITERAL@87..90
66 INT_NUMBER@[87; 90) "200" 66 INT_NUMBER@87..90 "200"
67 WHITESPACE@[90; 91) " " 67 WHITESPACE@90..91 " "
68 DOT2@[91; 93) ".." 68 DOT2@91..93 ".."
69 WHITESPACE@[93; 94) " " 69 WHITESPACE@93..94 " "
70 LITERAL_PAT@[94; 97) 70 LITERAL_PAT@94..97
71 LITERAL@[94; 97) 71 LITERAL@94..97
72 INT_NUMBER@[94; 97) "301" 72 INT_NUMBER@94..97 "301"
73 FAT_ARROW@[97; 99) "=>" 73 FAT_ARROW@97..99 "=>"
74 WHITESPACE@[99; 100) " " 74 WHITESPACE@99..100 " "
75 TUPLE_EXPR@[100; 102) 75 TUPLE_EXPR@100..102
76 L_PAREN@[100; 101) "(" 76 L_PAREN@100..101 "("
77 R_PAREN@[101; 102) ")" 77 R_PAREN@101..102 ")"
78 COMMA@[102; 103) "," 78 COMMA@102..103 ","
79 WHITESPACE@[103; 108) "\n " 79 WHITESPACE@103..108 "\n "
80 R_CURLY@[108; 109) "}" 80 R_CURLY@108..109 "}"
81 WHITESPACE@[109; 110) "\n" 81 WHITESPACE@109..110 "\n"
82 R_CURLY@[110; 111) "}" 82 R_CURLY@110..111 "}"
83 WHITESPACE@[111; 112) "\n" 83 WHITESPACE@111..112 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0059_match_arms_commas.rast b/crates/ra_syntax/test_data/parser/inline/ok/0059_match_arms_commas.rast
index efcd89c4c..e9ca92364 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0059_match_arms_commas.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0059_match_arms_commas.rast
@@ -1,60 +1,60 @@
1SOURCE_FILE@[0; 83) 1SOURCE_FILE@0..83
2 FN_DEF@[0; 82) 2 FN_DEF@0..82
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 82) 11 BLOCK_EXPR@9..82
12 BLOCK@[9; 82) 12 BLOCK@9..82
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 MATCH_EXPR@[15; 80) 15 MATCH_EXPR@15..80
16 MATCH_KW@[15; 20) "match" 16 MATCH_KW@15..20 "match"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 TUPLE_EXPR@[21; 23) 18 TUPLE_EXPR@21..23
19 L_PAREN@[21; 22) "(" 19 L_PAREN@21..22 "("
20 R_PAREN@[22; 23) ")" 20 R_PAREN@22..23 ")"
21 WHITESPACE@[23; 24) " " 21 WHITESPACE@23..24 " "
22 MATCH_ARM_LIST@[24; 80) 22 MATCH_ARM_LIST@24..80
23 L_CURLY@[24; 25) "{" 23 L_CURLY@24..25 "{"
24 WHITESPACE@[25; 34) "\n " 24 WHITESPACE@25..34 "\n "
25 MATCH_ARM@[34; 41) 25 MATCH_ARM@34..41
26 PLACEHOLDER_PAT@[34; 35) 26 PLACEHOLDER_PAT@34..35
27 UNDERSCORE@[34; 35) "_" 27 UNDERSCORE@34..35 "_"
28 WHITESPACE@[35; 36) " " 28 WHITESPACE@35..36 " "
29 FAT_ARROW@[36; 38) "=>" 29 FAT_ARROW@36..38 "=>"
30 WHITESPACE@[38; 39) " " 30 WHITESPACE@38..39 " "
31 TUPLE_EXPR@[39; 41) 31 TUPLE_EXPR@39..41
32 L_PAREN@[39; 40) "(" 32 L_PAREN@39..40 "("
33 R_PAREN@[40; 41) ")" 33 R_PAREN@40..41 ")"
34 COMMA@[41; 42) "," 34 COMMA@41..42 ","
35 WHITESPACE@[42; 51) "\n " 35 WHITESPACE@42..51 "\n "
36 MATCH_ARM@[51; 58) 36 MATCH_ARM@51..58
37 PLACEHOLDER_PAT@[51; 52) 37 PLACEHOLDER_PAT@51..52
38 UNDERSCORE@[51; 52) "_" 38 UNDERSCORE@51..52 "_"
39 WHITESPACE@[52; 53) " " 39 WHITESPACE@52..53 " "
40 FAT_ARROW@[53; 55) "=>" 40 FAT_ARROW@53..55 "=>"
41 WHITESPACE@[55; 56) " " 41 WHITESPACE@55..56 " "
42 BLOCK_EXPR@[56; 58) 42 BLOCK_EXPR@56..58
43 BLOCK@[56; 58) 43 BLOCK@56..58
44 L_CURLY@[56; 57) "{" 44 L_CURLY@56..57 "{"
45 R_CURLY@[57; 58) "}" 45 R_CURLY@57..58 "}"
46 WHITESPACE@[58; 67) "\n " 46 WHITESPACE@58..67 "\n "
47 MATCH_ARM@[67; 74) 47 MATCH_ARM@67..74
48 PLACEHOLDER_PAT@[67; 68) 48 PLACEHOLDER_PAT@67..68
49 UNDERSCORE@[67; 68) "_" 49 UNDERSCORE@67..68 "_"
50 WHITESPACE@[68; 69) " " 50 WHITESPACE@68..69 " "
51 FAT_ARROW@[69; 71) "=>" 51 FAT_ARROW@69..71 "=>"
52 WHITESPACE@[71; 72) " " 52 WHITESPACE@71..72 " "
53 TUPLE_EXPR@[72; 74) 53 TUPLE_EXPR@72..74
54 L_PAREN@[72; 73) "(" 54 L_PAREN@72..73 "("
55 R_PAREN@[73; 74) ")" 55 R_PAREN@73..74 ")"
56 WHITESPACE@[74; 79) "\n " 56 WHITESPACE@74..79 "\n "
57 R_CURLY@[79; 80) "}" 57 R_CURLY@79..80 "}"
58 WHITESPACE@[80; 81) "\n" 58 WHITESPACE@80..81 "\n"
59 R_CURLY@[81; 82) "}" 59 R_CURLY@81..82 "}"
60 WHITESPACE@[82; 83) "\n" 60 WHITESPACE@82..83 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0060_extern_crate.rast b/crates/ra_syntax/test_data/parser/inline/ok/0060_extern_crate.rast
index c6e4ee532..d06fc0be5 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0060_extern_crate.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0060_extern_crate.rast
@@ -1,10 +1,10 @@
1SOURCE_FILE@[0; 18) 1SOURCE_FILE@0..18
2 EXTERN_CRATE_ITEM@[0; 17) 2 EXTERN_CRATE_ITEM@0..17
3 EXTERN_KW@[0; 6) "extern" 3 EXTERN_KW@0..6 "extern"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 CRATE_KW@[7; 12) "crate" 5 CRATE_KW@7..12 "crate"
6 WHITESPACE@[12; 13) " " 6 WHITESPACE@12..13 " "
7 NAME_REF@[13; 16) 7 NAME_REF@13..16
8 IDENT@[13; 16) "foo" 8 IDENT@13..16 "foo"
9 SEMICOLON@[16; 17) ";" 9 SEMICOLON@16..17 ";"
10 WHITESPACE@[17; 18) "\n" 10 WHITESPACE@17..18 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0061_record_lit.rast b/crates/ra_syntax/test_data/parser/inline/ok/0061_record_lit.rast
index 89a611799..15d332938 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0061_record_lit.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0061_record_lit.rast
@@ -1,125 +1,125 @@
1SOURCE_FILE@[0; 112) 1SOURCE_FILE@0..112
2 FN_DEF@[0; 111) 2 FN_DEF@0..111
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 111) 11 BLOCK_EXPR@9..111
12 BLOCK@[9; 111) 12 BLOCK@9..111
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 20) 15 EXPR_STMT@15..20
16 RECORD_LIT@[15; 19) 16 RECORD_LIT@15..19
17 PATH@[15; 16) 17 PATH@15..16
18 PATH_SEGMENT@[15; 16) 18 PATH_SEGMENT@15..16
19 NAME_REF@[15; 16) 19 NAME_REF@15..16
20 IDENT@[15; 16) "S" 20 IDENT@15..16 "S"
21 WHITESPACE@[16; 17) " " 21 WHITESPACE@16..17 " "
22 RECORD_FIELD_LIST@[17; 19) 22 RECORD_FIELD_LIST@17..19
23 L_CURLY@[17; 18) "{" 23 L_CURLY@17..18 "{"
24 R_CURLY@[18; 19) "}" 24 R_CURLY@18..19 "}"
25 SEMICOLON@[19; 20) ";" 25 SEMICOLON@19..20 ";"
26 WHITESPACE@[20; 25) "\n " 26 WHITESPACE@20..25 "\n "
27 EXPR_STMT@[25; 41) 27 EXPR_STMT@25..41
28 RECORD_LIT@[25; 40) 28 RECORD_LIT@25..40
29 PATH@[25; 26) 29 PATH@25..26
30 PATH_SEGMENT@[25; 26) 30 PATH_SEGMENT@25..26
31 NAME_REF@[25; 26) 31 NAME_REF@25..26
32 IDENT@[25; 26) "S" 32 IDENT@25..26 "S"
33 WHITESPACE@[26; 27) " " 33 WHITESPACE@26..27 " "
34 RECORD_FIELD_LIST@[27; 40) 34 RECORD_FIELD_LIST@27..40
35 L_CURLY@[27; 28) "{" 35 L_CURLY@27..28 "{"
36 WHITESPACE@[28; 29) " " 36 WHITESPACE@28..29 " "
37 RECORD_FIELD@[29; 30) 37 RECORD_FIELD@29..30
38 PATH_EXPR@[29; 30) 38 PATH_EXPR@29..30
39 PATH@[29; 30) 39 PATH@29..30
40 PATH_SEGMENT@[29; 30) 40 PATH_SEGMENT@29..30
41 NAME_REF@[29; 30) 41 NAME_REF@29..30
42 IDENT@[29; 30) "x" 42 IDENT@29..30 "x"
43 COMMA@[30; 31) "," 43 COMMA@30..31 ","
44 WHITESPACE@[31; 32) " " 44 WHITESPACE@31..32 " "
45 RECORD_FIELD@[32; 37) 45 RECORD_FIELD@32..37
46 NAME_REF@[32; 33) 46 NAME_REF@32..33
47 IDENT@[32; 33) "y" 47 IDENT@32..33 "y"
48 COLON@[33; 34) ":" 48 COLON@33..34 ":"
49 WHITESPACE@[34; 35) " " 49 WHITESPACE@34..35 " "
50 LITERAL@[35; 37) 50 LITERAL@35..37
51 INT_NUMBER@[35; 37) "32" 51 INT_NUMBER@35..37 "32"
52 COMMA@[37; 38) "," 52 COMMA@37..38 ","
53 WHITESPACE@[38; 39) " " 53 WHITESPACE@38..39 " "
54 R_CURLY@[39; 40) "}" 54 R_CURLY@39..40 "}"
55 SEMICOLON@[40; 41) ";" 55 SEMICOLON@40..41 ";"
56 WHITESPACE@[41; 46) "\n " 56 WHITESPACE@41..46 "\n "
57 EXPR_STMT@[46; 83) 57 EXPR_STMT@46..83
58 RECORD_LIT@[46; 82) 58 RECORD_LIT@46..82
59 PATH@[46; 47) 59 PATH@46..47
60 PATH_SEGMENT@[46; 47) 60 PATH_SEGMENT@46..47
61 NAME_REF@[46; 47) 61 NAME_REF@46..47
62 IDENT@[46; 47) "S" 62 IDENT@46..47 "S"
63 WHITESPACE@[47; 48) " " 63 WHITESPACE@47..48 " "
64 RECORD_FIELD_LIST@[48; 82) 64 RECORD_FIELD_LIST@48..82
65 L_CURLY@[48; 49) "{" 65 L_CURLY@48..49 "{"
66 WHITESPACE@[49; 50) " " 66 WHITESPACE@49..50 " "
67 RECORD_FIELD@[50; 51) 67 RECORD_FIELD@50..51
68 PATH_EXPR@[50; 51) 68 PATH_EXPR@50..51
69 PATH@[50; 51) 69 PATH@50..51
70 PATH_SEGMENT@[50; 51) 70 PATH_SEGMENT@50..51
71 NAME_REF@[50; 51) 71 NAME_REF@50..51
72 IDENT@[50; 51) "x" 72 IDENT@50..51 "x"
73 COMMA@[51; 52) "," 73 COMMA@51..52 ","
74 WHITESPACE@[52; 53) " " 74 WHITESPACE@52..53 " "
75 RECORD_FIELD@[53; 58) 75 RECORD_FIELD@53..58
76 NAME_REF@[53; 54) 76 NAME_REF@53..54
77 IDENT@[53; 54) "y" 77 IDENT@53..54 "y"
78 COLON@[54; 55) ":" 78 COLON@54..55 ":"
79 WHITESPACE@[55; 56) " " 79 WHITESPACE@55..56 " "
80 LITERAL@[56; 58) 80 LITERAL@56..58
81 INT_NUMBER@[56; 58) "32" 81 INT_NUMBER@56..58 "32"
82 COMMA@[58; 59) "," 82 COMMA@58..59 ","
83 WHITESPACE@[59; 60) " " 83 WHITESPACE@59..60 " "
84 DOT2@[60; 62) ".." 84 DOT2@60..62 ".."
85 CALL_EXPR@[62; 80) 85 CALL_EXPR@62..80
86 PATH_EXPR@[62; 78) 86 PATH_EXPR@62..78
87 PATH@[62; 78) 87 PATH@62..78
88 PATH@[62; 69) 88 PATH@62..69
89 PATH_SEGMENT@[62; 69) 89 PATH_SEGMENT@62..69
90 NAME_REF@[62; 69) 90 NAME_REF@62..69
91 IDENT@[62; 69) "Default" 91 IDENT@62..69 "Default"
92 COLON2@[69; 71) "::" 92 COLON2@69..71 "::"
93 PATH_SEGMENT@[71; 78) 93 PATH_SEGMENT@71..78
94 NAME_REF@[71; 78) 94 NAME_REF@71..78
95 IDENT@[71; 78) "default" 95 IDENT@71..78 "default"
96 ARG_LIST@[78; 80) 96 ARG_LIST@78..80
97 L_PAREN@[78; 79) "(" 97 L_PAREN@78..79 "("
98 R_PAREN@[79; 80) ")" 98 R_PAREN@79..80 ")"
99 WHITESPACE@[80; 81) " " 99 WHITESPACE@80..81 " "
100 R_CURLY@[81; 82) "}" 100 R_CURLY@81..82 "}"
101 SEMICOLON@[82; 83) ";" 101 SEMICOLON@82..83 ";"
102 WHITESPACE@[83; 88) "\n " 102 WHITESPACE@83..88 "\n "
103 EXPR_STMT@[88; 109) 103 EXPR_STMT@88..109
104 RECORD_LIT@[88; 108) 104 RECORD_LIT@88..108
105 PATH@[88; 99) 105 PATH@88..99
106 PATH_SEGMENT@[88; 99) 106 PATH_SEGMENT@88..99
107 NAME_REF@[88; 99) 107 NAME_REF@88..99
108 IDENT@[88; 99) "TupleStruct" 108 IDENT@88..99 "TupleStruct"
109 WHITESPACE@[99; 100) " " 109 WHITESPACE@99..100 " "
110 RECORD_FIELD_LIST@[100; 108) 110 RECORD_FIELD_LIST@100..108
111 L_CURLY@[100; 101) "{" 111 L_CURLY@100..101 "{"
112 WHITESPACE@[101; 102) " " 112 WHITESPACE@101..102 " "
113 RECORD_FIELD@[102; 106) 113 RECORD_FIELD@102..106
114 NAME_REF@[102; 103) 114 NAME_REF@102..103
115 INT_NUMBER@[102; 103) "0" 115 INT_NUMBER@102..103 "0"
116 COLON@[103; 104) ":" 116 COLON@103..104 ":"
117 WHITESPACE@[104; 105) " " 117 WHITESPACE@104..105 " "
118 LITERAL@[105; 106) 118 LITERAL@105..106
119 INT_NUMBER@[105; 106) "1" 119 INT_NUMBER@105..106 "1"
120 WHITESPACE@[106; 107) " " 120 WHITESPACE@106..107 " "
121 R_CURLY@[107; 108) "}" 121 R_CURLY@107..108 "}"
122 SEMICOLON@[108; 109) ";" 122 SEMICOLON@108..109 ";"
123 WHITESPACE@[109; 110) "\n" 123 WHITESPACE@109..110 "\n"
124 R_CURLY@[110; 111) "}" 124 R_CURLY@110..111 "}"
125 WHITESPACE@[111; 112) "\n" 125 WHITESPACE@111..112 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0062_mod_contents.rast b/crates/ra_syntax/test_data/parser/inline/ok/0062_mod_contents.rast
index 99e0a0bec..3cce106e4 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0062_mod_contents.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0062_mod_contents.rast
@@ -1,67 +1,67 @@
1SOURCE_FILE@[0; 70) 1SOURCE_FILE@0..70
2 FN_DEF@[0; 11) 2 FN_DEF@0..11
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 11) 11 BLOCK_EXPR@9..11
12 BLOCK@[9; 11) 12 BLOCK@9..11
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 R_CURLY@[10; 11) "}" 14 R_CURLY@10..11 "}"
15 WHITESPACE@[11; 12) "\n" 15 WHITESPACE@11..12 "\n"
16 MACRO_CALL@[12; 31) 16 MACRO_CALL@12..31
17 PATH@[12; 23) 17 PATH@12..23
18 PATH_SEGMENT@[12; 23) 18 PATH_SEGMENT@12..23
19 NAME_REF@[12; 23) 19 NAME_REF@12..23
20 IDENT@[12; 23) "macro_rules" 20 IDENT@12..23 "macro_rules"
21 BANG@[23; 24) "!" 21 BANG@23..24 "!"
22 WHITESPACE@[24; 25) " " 22 WHITESPACE@24..25 " "
23 NAME@[25; 28) 23 NAME@25..28
24 IDENT@[25; 28) "foo" 24 IDENT@25..28 "foo"
25 WHITESPACE@[28; 29) " " 25 WHITESPACE@28..29 " "
26 TOKEN_TREE@[29; 31) 26 TOKEN_TREE@29..31
27 L_CURLY@[29; 30) "{" 27 L_CURLY@29..30 "{"
28 R_CURLY@[30; 31) "}" 28 R_CURLY@30..31 "}"
29 WHITESPACE@[31; 32) "\n" 29 WHITESPACE@31..32 "\n"
30 MACRO_CALL@[32; 44) 30 MACRO_CALL@32..44
31 PATH@[32; 40) 31 PATH@32..40
32 PATH@[32; 35) 32 PATH@32..35
33 PATH_SEGMENT@[32; 35) 33 PATH_SEGMENT@32..35
34 NAME_REF@[32; 35) 34 NAME_REF@32..35
35 IDENT@[32; 35) "foo" 35 IDENT@32..35 "foo"
36 COLON2@[35; 37) "::" 36 COLON2@35..37 "::"
37 PATH_SEGMENT@[37; 40) 37 PATH_SEGMENT@37..40
38 NAME_REF@[37; 40) 38 NAME_REF@37..40
39 IDENT@[37; 40) "bar" 39 IDENT@37..40 "bar"
40 BANG@[40; 41) "!" 40 BANG@40..41 "!"
41 TOKEN_TREE@[41; 43) 41 TOKEN_TREE@41..43
42 L_PAREN@[41; 42) "(" 42 L_PAREN@41..42 "("
43 R_PAREN@[42; 43) ")" 43 R_PAREN@42..43 ")"
44 SEMICOLON@[43; 44) ";" 44 SEMICOLON@43..44 ";"
45 WHITESPACE@[44; 45) "\n" 45 WHITESPACE@44..45 "\n"
46 MACRO_CALL@[45; 59) 46 MACRO_CALL@45..59
47 PATH@[45; 55) 47 PATH@45..55
48 PATH@[45; 50) 48 PATH@45..50
49 PATH_SEGMENT@[45; 50) 49 PATH_SEGMENT@45..50
50 SUPER_KW@[45; 50) "super" 50 SUPER_KW@45..50 "super"
51 COLON2@[50; 52) "::" 51 COLON2@50..52 "::"
52 PATH_SEGMENT@[52; 55) 52 PATH_SEGMENT@52..55
53 NAME_REF@[52; 55) 53 NAME_REF@52..55
54 IDENT@[52; 55) "baz" 54 IDENT@52..55 "baz"
55 BANG@[55; 56) "!" 55 BANG@55..56 "!"
56 WHITESPACE@[56; 57) " " 56 WHITESPACE@56..57 " "
57 TOKEN_TREE@[57; 59) 57 TOKEN_TREE@57..59
58 L_CURLY@[57; 58) "{" 58 L_CURLY@57..58 "{"
59 R_CURLY@[58; 59) "}" 59 R_CURLY@58..59 "}"
60 WHITESPACE@[59; 60) "\n" 60 WHITESPACE@59..60 "\n"
61 STRUCT_DEF@[60; 69) 61 STRUCT_DEF@60..69
62 STRUCT_KW@[60; 66) "struct" 62 STRUCT_KW@60..66 "struct"
63 WHITESPACE@[66; 67) " " 63 WHITESPACE@66..67 " "
64 NAME@[67; 68) 64 NAME@67..68
65 IDENT@[67; 68) "S" 65 IDENT@67..68 "S"
66 SEMICOLON@[68; 69) ";" 66 SEMICOLON@68..69 ";"
67 WHITESPACE@[69; 70) "\n" 67 WHITESPACE@69..70 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0063_impl_def_neg.rast b/crates/ra_syntax/test_data/parser/inline/ok/0063_impl_def_neg.rast
index 278549a46..24b9a1f46 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0063_impl_def_neg.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0063_impl_def_neg.rast
@@ -1,23 +1,23 @@
1SOURCE_FILE@[0; 20) 1SOURCE_FILE@0..20
2 IMPL_DEF@[0; 19) 2 IMPL_DEF@0..19
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 BANG@[5; 6) "!" 5 BANG@5..6 "!"
6 PATH_TYPE@[6; 10) 6 PATH_TYPE@6..10
7 PATH@[6; 10) 7 PATH@6..10
8 PATH_SEGMENT@[6; 10) 8 PATH_SEGMENT@6..10
9 NAME_REF@[6; 10) 9 NAME_REF@6..10
10 IDENT@[6; 10) "Send" 10 IDENT@6..10 "Send"
11 WHITESPACE@[10; 11) " " 11 WHITESPACE@10..11 " "
12 FOR_KW@[11; 14) "for" 12 FOR_KW@11..14 "for"
13 WHITESPACE@[14; 15) " " 13 WHITESPACE@14..15 " "
14 PATH_TYPE@[15; 16) 14 PATH_TYPE@15..16
15 PATH@[15; 16) 15 PATH@15..16
16 PATH_SEGMENT@[15; 16) 16 PATH_SEGMENT@15..16
17 NAME_REF@[15; 16) 17 NAME_REF@15..16
18 IDENT@[15; 16) "X" 18 IDENT@15..16 "X"
19 WHITESPACE@[16; 17) " " 19 WHITESPACE@16..17 " "
20 ITEM_LIST@[17; 19) 20 ITEM_LIST@17..19
21 L_CURLY@[17; 18) "{" 21 L_CURLY@17..18 "{"
22 R_CURLY@[18; 19) "}" 22 R_CURLY@18..19 "}"
23 WHITESPACE@[19; 20) "\n" 23 WHITESPACE@19..20 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0064_if_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0064_if_expr.rast
index df24ae189..5e1b4cc68 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0064_if_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0064_if_expr.rast
@@ -1,132 +1,132 @@
1SOURCE_FILE@[0; 137) 1SOURCE_FILE@0..137
2 FN_DEF@[0; 136) 2 FN_DEF@0..136
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 136) 11 BLOCK_EXPR@9..136
12 BLOCK@[9; 136) 12 BLOCK@9..136
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 26) 15 EXPR_STMT@15..26
16 IF_EXPR@[15; 25) 16 IF_EXPR@15..25
17 IF_KW@[15; 17) "if" 17 IF_KW@15..17 "if"
18 WHITESPACE@[17; 18) " " 18 WHITESPACE@17..18 " "
19 CONDITION@[18; 22) 19 CONDITION@18..22
20 LITERAL@[18; 22) 20 LITERAL@18..22
21 TRUE_KW@[18; 22) "true" 21 TRUE_KW@18..22 "true"
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 BLOCK_EXPR@[23; 25) 23 BLOCK_EXPR@23..25
24 BLOCK@[23; 25) 24 BLOCK@23..25
25 L_CURLY@[23; 24) "{" 25 L_CURLY@23..24 "{"
26 R_CURLY@[24; 25) "}" 26 R_CURLY@24..25 "}"
27 SEMICOLON@[25; 26) ";" 27 SEMICOLON@25..26 ";"
28 WHITESPACE@[26; 31) "\n " 28 WHITESPACE@26..31 "\n "
29 EXPR_STMT@[31; 50) 29 EXPR_STMT@31..50
30 IF_EXPR@[31; 49) 30 IF_EXPR@31..49
31 IF_KW@[31; 33) "if" 31 IF_KW@31..33 "if"
32 WHITESPACE@[33; 34) " " 32 WHITESPACE@33..34 " "
33 CONDITION@[34; 38) 33 CONDITION@34..38
34 LITERAL@[34; 38) 34 LITERAL@34..38
35 TRUE_KW@[34; 38) "true" 35 TRUE_KW@34..38 "true"
36 WHITESPACE@[38; 39) " " 36 WHITESPACE@38..39 " "
37 BLOCK_EXPR@[39; 41) 37 BLOCK_EXPR@39..41
38 BLOCK@[39; 41) 38 BLOCK@39..41
39 L_CURLY@[39; 40) "{" 39 L_CURLY@39..40 "{"
40 R_CURLY@[40; 41) "}" 40 R_CURLY@40..41 "}"
41 WHITESPACE@[41; 42) " " 41 WHITESPACE@41..42 " "
42 ELSE_KW@[42; 46) "else" 42 ELSE_KW@42..46 "else"
43 WHITESPACE@[46; 47) " " 43 WHITESPACE@46..47 " "
44 BLOCK_EXPR@[47; 49) 44 BLOCK_EXPR@47..49
45 BLOCK@[47; 49) 45 BLOCK@47..49
46 L_CURLY@[47; 48) "{" 46 L_CURLY@47..48 "{"
47 R_CURLY@[48; 49) "}" 47 R_CURLY@48..49 "}"
48 SEMICOLON@[49; 50) ";" 48 SEMICOLON@49..50 ";"
49 WHITESPACE@[50; 55) "\n " 49 WHITESPACE@50..55 "\n "
50 EXPR_STMT@[55; 91) 50 EXPR_STMT@55..91
51 IF_EXPR@[55; 90) 51 IF_EXPR@55..90
52 IF_KW@[55; 57) "if" 52 IF_KW@55..57 "if"
53 WHITESPACE@[57; 58) " " 53 WHITESPACE@57..58 " "
54 CONDITION@[58; 62) 54 CONDITION@58..62
55 LITERAL@[58; 62) 55 LITERAL@58..62
56 TRUE_KW@[58; 62) "true" 56 TRUE_KW@58..62 "true"
57 WHITESPACE@[62; 63) " " 57 WHITESPACE@62..63 " "
58 BLOCK_EXPR@[63; 65) 58 BLOCK_EXPR@63..65
59 BLOCK@[63; 65) 59 BLOCK@63..65
60 L_CURLY@[63; 64) "{" 60 L_CURLY@63..64 "{"
61 R_CURLY@[64; 65) "}" 61 R_CURLY@64..65 "}"
62 WHITESPACE@[65; 66) " " 62 WHITESPACE@65..66 " "
63 ELSE_KW@[66; 70) "else" 63 ELSE_KW@66..70 "else"
64 WHITESPACE@[70; 71) " " 64 WHITESPACE@70..71 " "
65 IF_EXPR@[71; 90) 65 IF_EXPR@71..90
66 IF_KW@[71; 73) "if" 66 IF_KW@71..73 "if"
67 WHITESPACE@[73; 74) " " 67 WHITESPACE@73..74 " "
68 CONDITION@[74; 79) 68 CONDITION@74..79
69 LITERAL@[74; 79) 69 LITERAL@74..79
70 FALSE_KW@[74; 79) "false" 70 FALSE_KW@74..79 "false"
71 WHITESPACE@[79; 80) " " 71 WHITESPACE@79..80 " "
72 BLOCK_EXPR@[80; 82) 72 BLOCK_EXPR@80..82
73 BLOCK@[80; 82) 73 BLOCK@80..82
74 L_CURLY@[80; 81) "{" 74 L_CURLY@80..81 "{"
75 R_CURLY@[81; 82) "}" 75 R_CURLY@81..82 "}"
76 WHITESPACE@[82; 83) " " 76 WHITESPACE@82..83 " "
77 ELSE_KW@[83; 87) "else" 77 ELSE_KW@83..87 "else"
78 WHITESPACE@[87; 88) " " 78 WHITESPACE@87..88 " "
79 BLOCK_EXPR@[88; 90) 79 BLOCK_EXPR@88..90
80 BLOCK@[88; 90) 80 BLOCK@88..90
81 L_CURLY@[88; 89) "{" 81 L_CURLY@88..89 "{"
82 R_CURLY@[89; 90) "}" 82 R_CURLY@89..90 "}"
83 SEMICOLON@[90; 91) ";" 83 SEMICOLON@90..91 ";"
84 WHITESPACE@[91; 96) "\n " 84 WHITESPACE@91..96 "\n "
85 EXPR_STMT@[96; 104) 85 EXPR_STMT@96..104
86 IF_EXPR@[96; 103) 86 IF_EXPR@96..103
87 IF_KW@[96; 98) "if" 87 IF_KW@96..98 "if"
88 WHITESPACE@[98; 99) " " 88 WHITESPACE@98..99 " "
89 CONDITION@[99; 100) 89 CONDITION@99..100
90 PATH_EXPR@[99; 100) 90 PATH_EXPR@99..100
91 PATH@[99; 100) 91 PATH@99..100
92 PATH_SEGMENT@[99; 100) 92 PATH_SEGMENT@99..100
93 NAME_REF@[99; 100) 93 NAME_REF@99..100
94 IDENT@[99; 100) "S" 94 IDENT@99..100 "S"
95 WHITESPACE@[100; 101) " " 95 WHITESPACE@100..101 " "
96 BLOCK_EXPR@[101; 103) 96 BLOCK_EXPR@101..103
97 BLOCK@[101; 103) 97 BLOCK@101..103
98 L_CURLY@[101; 102) "{" 98 L_CURLY@101..102 "{"
99 R_CURLY@[102; 103) "}" 99 R_CURLY@102..103 "}"
100 SEMICOLON@[103; 104) ";" 100 SEMICOLON@103..104 ";"
101 WHITESPACE@[104; 109) "\n " 101 WHITESPACE@104..109 "\n "
102 EXPR_STMT@[109; 134) 102 EXPR_STMT@109..134
103 IF_EXPR@[109; 133) 103 IF_EXPR@109..133
104 IF_KW@[109; 111) "if" 104 IF_KW@109..111 "if"
105 WHITESPACE@[111; 112) " " 105 WHITESPACE@111..112 " "
106 CONDITION@[112; 120) 106 CONDITION@112..120
107 BLOCK_EXPR@[112; 120) 107 BLOCK_EXPR@112..120
108 BLOCK@[112; 120) 108 BLOCK@112..120
109 L_CURLY@[112; 113) "{" 109 L_CURLY@112..113 "{"
110 WHITESPACE@[113; 114) " " 110 WHITESPACE@113..114 " "
111 LITERAL@[114; 118) 111 LITERAL@114..118
112 TRUE_KW@[114; 118) "true" 112 TRUE_KW@114..118 "true"
113 WHITESPACE@[118; 119) " " 113 WHITESPACE@118..119 " "
114 R_CURLY@[119; 120) "}" 114 R_CURLY@119..120 "}"
115 WHITESPACE@[120; 121) " " 115 WHITESPACE@120..121 " "
116 BLOCK_EXPR@[121; 124) 116 BLOCK_EXPR@121..124
117 BLOCK@[121; 124) 117 BLOCK@121..124
118 L_CURLY@[121; 122) "{" 118 L_CURLY@121..122 "{"
119 WHITESPACE@[122; 123) " " 119 WHITESPACE@122..123 " "
120 R_CURLY@[123; 124) "}" 120 R_CURLY@123..124 "}"
121 WHITESPACE@[124; 125) " " 121 WHITESPACE@124..125 " "
122 ELSE_KW@[125; 129) "else" 122 ELSE_KW@125..129 "else"
123 WHITESPACE@[129; 130) " " 123 WHITESPACE@129..130 " "
124 BLOCK_EXPR@[130; 133) 124 BLOCK_EXPR@130..133
125 BLOCK@[130; 133) 125 BLOCK@130..133
126 L_CURLY@[130; 131) "{" 126 L_CURLY@130..131 "{"
127 WHITESPACE@[131; 132) " " 127 WHITESPACE@131..132 " "
128 R_CURLY@[132; 133) "}" 128 R_CURLY@132..133 "}"
129 SEMICOLON@[133; 134) ";" 129 SEMICOLON@133..134 ";"
130 WHITESPACE@[134; 135) "\n" 130 WHITESPACE@134..135 "\n"
131 R_CURLY@[135; 136) "}" 131 R_CURLY@135..136 "}"
132 WHITESPACE@[136; 137) "\n" 132 WHITESPACE@136..137 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0065_dyn_trait_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0065_dyn_trait_type.rast
index bbf347580..8e10f3673 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0065_dyn_trait_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0065_dyn_trait_type.rast
@@ -1,43 +1,43 @@
1SOURCE_FILE@[0; 42) 1SOURCE_FILE@0..42
2 TYPE_ALIAS_DEF@[0; 41) 2 TYPE_ALIAS_DEF@0..41
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "A" 6 IDENT@5..6 "A"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 DYN_TRAIT_TYPE@[9; 40) 10 DYN_TRAIT_TYPE@9..40
11 DYN_KW@[9; 12) "dyn" 11 DYN_KW@9..12 "dyn"
12 WHITESPACE@[12; 13) " " 12 WHITESPACE@12..13 " "
13 TYPE_BOUND_LIST@[13; 40) 13 TYPE_BOUND_LIST@13..40
14 TYPE_BOUND@[13; 35) 14 TYPE_BOUND@13..35
15 PATH_TYPE@[13; 35) 15 PATH_TYPE@13..35
16 PATH@[13; 35) 16 PATH@13..35
17 PATH_SEGMENT@[13; 35) 17 PATH_SEGMENT@13..35
18 NAME_REF@[13; 21) 18 NAME_REF@13..21
19 IDENT@[13; 21) "Iterator" 19 IDENT@13..21 "Iterator"
20 TYPE_ARG_LIST@[21; 35) 20 TYPE_ARG_LIST@21..35
21 L_ANGLE@[21; 22) "<" 21 L_ANGLE@21..22 "<"
22 ASSOC_TYPE_ARG@[22; 34) 22 ASSOC_TYPE_ARG@22..34
23 NAME_REF@[22; 26) 23 NAME_REF@22..26
24 IDENT@[22; 26) "Item" 24 IDENT@22..26 "Item"
25 EQ@[26; 27) "=" 25 EQ@26..27 "="
26 PATH_TYPE@[27; 34) 26 PATH_TYPE@27..34
27 PATH@[27; 34) 27 PATH@27..34
28 PATH_SEGMENT@[27; 34) 28 PATH_SEGMENT@27..34
29 NAME_REF@[27; 30) 29 NAME_REF@27..30
30 IDENT@[27; 30) "Foo" 30 IDENT@27..30 "Foo"
31 TYPE_ARG_LIST@[30; 34) 31 TYPE_ARG_LIST@30..34
32 L_ANGLE@[30; 31) "<" 32 L_ANGLE@30..31 "<"
33 LIFETIME_ARG@[31; 33) 33 LIFETIME_ARG@31..33
34 LIFETIME@[31; 33) "\'a" 34 LIFETIME@31..33 "\'a"
35 R_ANGLE@[33; 34) ">" 35 R_ANGLE@33..34 ">"
36 R_ANGLE@[34; 35) ">" 36 R_ANGLE@34..35 ">"
37 WHITESPACE@[35; 36) " " 37 WHITESPACE@35..36 " "
38 PLUS@[36; 37) "+" 38 PLUS@36..37 "+"
39 WHITESPACE@[37; 38) " " 39 WHITESPACE@37..38 " "
40 TYPE_BOUND@[38; 40) 40 TYPE_BOUND@38..40
41 LIFETIME@[38; 40) "\'a" 41 LIFETIME@38..40 "\'a"
42 SEMICOLON@[40; 41) ";" 42 SEMICOLON@40..41 ";"
43 WHITESPACE@[41; 42) "\n" 43 WHITESPACE@41..42 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0066_match_arm.rast b/crates/ra_syntax/test_data/parser/inline/ok/0066_match_arm.rast
index 85edd0845..108e5c5cc 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0066_match_arm.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0066_match_arm.rast
@@ -1,152 +1,152 @@
1SOURCE_FILE@[0; 167) 1SOURCE_FILE@0..167
2 FN_DEF@[0; 166) 2 FN_DEF@0..166
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 166) 11 BLOCK_EXPR@9..166
12 BLOCK@[9; 166) 12 BLOCK@9..166
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 164) 15 EXPR_STMT@15..164
16 MATCH_EXPR@[15; 163) 16 MATCH_EXPR@15..163
17 MATCH_KW@[15; 20) "match" 17 MATCH_KW@15..20 "match"
18 WHITESPACE@[20; 21) " " 18 WHITESPACE@20..21 " "
19 TUPLE_EXPR@[21; 23) 19 TUPLE_EXPR@21..23
20 L_PAREN@[21; 22) "(" 20 L_PAREN@21..22 "("
21 R_PAREN@[22; 23) ")" 21 R_PAREN@22..23 ")"
22 WHITESPACE@[23; 24) " " 22 WHITESPACE@23..24 " "
23 MATCH_ARM_LIST@[24; 163) 23 MATCH_ARM_LIST@24..163
24 L_CURLY@[24; 25) "{" 24 L_CURLY@24..25 "{"
25 WHITESPACE@[25; 34) "\n " 25 WHITESPACE@25..34 "\n "
26 MATCH_ARM@[34; 41) 26 MATCH_ARM@34..41
27 PLACEHOLDER_PAT@[34; 35) 27 PLACEHOLDER_PAT@34..35
28 UNDERSCORE@[34; 35) "_" 28 UNDERSCORE@34..35 "_"
29 WHITESPACE@[35; 36) " " 29 WHITESPACE@35..36 " "
30 FAT_ARROW@[36; 38) "=>" 30 FAT_ARROW@36..38 "=>"
31 WHITESPACE@[38; 39) " " 31 WHITESPACE@38..39 " "
32 TUPLE_EXPR@[39; 41) 32 TUPLE_EXPR@39..41
33 L_PAREN@[39; 40) "(" 33 L_PAREN@39..40 "("
34 R_PAREN@[40; 41) ")" 34 R_PAREN@40..41 ")"
35 COMMA@[41; 42) "," 35 COMMA@41..42 ","
36 WHITESPACE@[42; 51) "\n " 36 WHITESPACE@42..51 "\n "
37 MATCH_ARM@[51; 83) 37 MATCH_ARM@51..83
38 PLACEHOLDER_PAT@[51; 52) 38 PLACEHOLDER_PAT@51..52
39 UNDERSCORE@[51; 52) "_" 39 UNDERSCORE@51..52 "_"
40 WHITESPACE@[52; 53) " " 40 WHITESPACE@52..53 " "
41 MATCH_GUARD@[53; 77) 41 MATCH_GUARD@53..77
42 IF_KW@[53; 55) "if" 42 IF_KW@53..55 "if"
43 WHITESPACE@[55; 56) " " 43 WHITESPACE@55..56 " "
44 BIN_EXPR@[56; 77) 44 BIN_EXPR@56..77
45 PATH_EXPR@[56; 60) 45 PATH_EXPR@56..60
46 PATH@[56; 60) 46 PATH@56..60
47 PATH_SEGMENT@[56; 60) 47 PATH_SEGMENT@56..60
48 NAME_REF@[56; 60) 48 NAME_REF@56..60
49 IDENT@[56; 60) "Test" 49 IDENT@56..60 "Test"
50 WHITESPACE@[60; 61) " " 50 WHITESPACE@60..61 " "
51 R_ANGLE@[61; 62) ">" 51 R_ANGLE@61..62 ">"
52 WHITESPACE@[62; 63) " " 52 WHITESPACE@62..63 " "
53 RECORD_LIT@[63; 77) 53 RECORD_LIT@63..77
54 PATH@[63; 67) 54 PATH@63..67
55 PATH_SEGMENT@[63; 67) 55 PATH_SEGMENT@63..67
56 NAME_REF@[63; 67) 56 NAME_REF@63..67
57 IDENT@[63; 67) "Test" 57 IDENT@63..67 "Test"
58 RECORD_FIELD_LIST@[67; 77) 58 RECORD_FIELD_LIST@67..77
59 L_CURLY@[67; 68) "{" 59 L_CURLY@67..68 "{"
60 RECORD_FIELD@[68; 76) 60 RECORD_FIELD@68..76
61 NAME_REF@[68; 73) 61 NAME_REF@68..73
62 IDENT@[68; 73) "field" 62 IDENT@68..73 "field"
63 COLON@[73; 74) ":" 63 COLON@73..74 ":"
64 WHITESPACE@[74; 75) " " 64 WHITESPACE@74..75 " "
65 LITERAL@[75; 76) 65 LITERAL@75..76
66 INT_NUMBER@[75; 76) "0" 66 INT_NUMBER@75..76 "0"
67 R_CURLY@[76; 77) "}" 67 R_CURLY@76..77 "}"
68 WHITESPACE@[77; 78) " " 68 WHITESPACE@77..78 " "
69 FAT_ARROW@[78; 80) "=>" 69 FAT_ARROW@78..80 "=>"
70 WHITESPACE@[80; 81) " " 70 WHITESPACE@80..81 " "
71 TUPLE_EXPR@[81; 83) 71 TUPLE_EXPR@81..83
72 L_PAREN@[81; 82) "(" 72 L_PAREN@81..82 "("
73 R_PAREN@[82; 83) ")" 73 R_PAREN@82..83 ")"
74 COMMA@[83; 84) "," 74 COMMA@83..84 ","
75 WHITESPACE@[84; 93) "\n " 75 WHITESPACE@84..93 "\n "
76 MATCH_ARM@[93; 109) 76 MATCH_ARM@93..109
77 OR_PAT@[93; 98) 77 OR_PAT@93..98
78 BIND_PAT@[93; 94) 78 BIND_PAT@93..94
79 NAME@[93; 94) 79 NAME@93..94
80 IDENT@[93; 94) "X" 80 IDENT@93..94 "X"
81 WHITESPACE@[94; 95) " " 81 WHITESPACE@94..95 " "
82 PIPE@[95; 96) "|" 82 PIPE@95..96 "|"
83 WHITESPACE@[96; 97) " " 83 WHITESPACE@96..97 " "
84 BIND_PAT@[97; 98) 84 BIND_PAT@97..98
85 NAME@[97; 98) 85 NAME@97..98
86 IDENT@[97; 98) "Y" 86 IDENT@97..98 "Y"
87 WHITESPACE@[98; 99) " " 87 WHITESPACE@98..99 " "
88 MATCH_GUARD@[99; 103) 88 MATCH_GUARD@99..103
89 IF_KW@[99; 101) "if" 89 IF_KW@99..101 "if"
90 WHITESPACE@[101; 102) " " 90 WHITESPACE@101..102 " "
91 PATH_EXPR@[102; 103) 91 PATH_EXPR@102..103
92 PATH@[102; 103) 92 PATH@102..103
93 PATH_SEGMENT@[102; 103) 93 PATH_SEGMENT@102..103
94 NAME_REF@[102; 103) 94 NAME_REF@102..103
95 IDENT@[102; 103) "Z" 95 IDENT@102..103 "Z"
96 WHITESPACE@[103; 104) " " 96 WHITESPACE@103..104 " "
97 FAT_ARROW@[104; 106) "=>" 97 FAT_ARROW@104..106 "=>"
98 WHITESPACE@[106; 107) " " 98 WHITESPACE@106..107 " "
99 TUPLE_EXPR@[107; 109) 99 TUPLE_EXPR@107..109
100 L_PAREN@[107; 108) "(" 100 L_PAREN@107..108 "("
101 R_PAREN@[108; 109) ")" 101 R_PAREN@108..109 ")"
102 COMMA@[109; 110) "," 102 COMMA@109..110 ","
103 WHITESPACE@[110; 119) "\n " 103 WHITESPACE@110..119 "\n "
104 MATCH_ARM@[119; 137) 104 MATCH_ARM@119..137
105 PIPE@[119; 120) "|" 105 PIPE@119..120 "|"
106 WHITESPACE@[120; 121) " " 106 WHITESPACE@120..121 " "
107 OR_PAT@[121; 126) 107 OR_PAT@121..126
108 BIND_PAT@[121; 122) 108 BIND_PAT@121..122
109 NAME@[121; 122) 109 NAME@121..122
110 IDENT@[121; 122) "X" 110 IDENT@121..122 "X"
111 WHITESPACE@[122; 123) " " 111 WHITESPACE@122..123 " "
112 PIPE@[123; 124) "|" 112 PIPE@123..124 "|"
113 WHITESPACE@[124; 125) " " 113 WHITESPACE@124..125 " "
114 BIND_PAT@[125; 126) 114 BIND_PAT@125..126
115 NAME@[125; 126) 115 NAME@125..126
116 IDENT@[125; 126) "Y" 116 IDENT@125..126 "Y"
117 WHITESPACE@[126; 127) " " 117 WHITESPACE@126..127 " "
118 MATCH_GUARD@[127; 131) 118 MATCH_GUARD@127..131
119 IF_KW@[127; 129) "if" 119 IF_KW@127..129 "if"
120 WHITESPACE@[129; 130) " " 120 WHITESPACE@129..130 " "
121 PATH_EXPR@[130; 131) 121 PATH_EXPR@130..131
122 PATH@[130; 131) 122 PATH@130..131
123 PATH_SEGMENT@[130; 131) 123 PATH_SEGMENT@130..131
124 NAME_REF@[130; 131) 124 NAME_REF@130..131
125 IDENT@[130; 131) "Z" 125 IDENT@130..131 "Z"
126 WHITESPACE@[131; 132) " " 126 WHITESPACE@131..132 " "
127 FAT_ARROW@[132; 134) "=>" 127 FAT_ARROW@132..134 "=>"
128 WHITESPACE@[134; 135) " " 128 WHITESPACE@134..135 " "
129 TUPLE_EXPR@[135; 137) 129 TUPLE_EXPR@135..137
130 L_PAREN@[135; 136) "(" 130 L_PAREN@135..136 "("
131 R_PAREN@[136; 137) ")" 131 R_PAREN@136..137 ")"
132 COMMA@[137; 138) "," 132 COMMA@137..138 ","
133 WHITESPACE@[138; 147) "\n " 133 WHITESPACE@138..147 "\n "
134 MATCH_ARM@[147; 156) 134 MATCH_ARM@147..156
135 PIPE@[147; 148) "|" 135 PIPE@147..148 "|"
136 WHITESPACE@[148; 149) " " 136 WHITESPACE@148..149 " "
137 BIND_PAT@[149; 150) 137 BIND_PAT@149..150
138 NAME@[149; 150) 138 NAME@149..150
139 IDENT@[149; 150) "X" 139 IDENT@149..150 "X"
140 WHITESPACE@[150; 151) " " 140 WHITESPACE@150..151 " "
141 FAT_ARROW@[151; 153) "=>" 141 FAT_ARROW@151..153 "=>"
142 WHITESPACE@[153; 154) " " 142 WHITESPACE@153..154 " "
143 TUPLE_EXPR@[154; 156) 143 TUPLE_EXPR@154..156
144 L_PAREN@[154; 155) "(" 144 L_PAREN@154..155 "("
145 R_PAREN@[155; 156) ")" 145 R_PAREN@155..156 ")"
146 COMMA@[156; 157) "," 146 COMMA@156..157 ","
147 WHITESPACE@[157; 162) "\n " 147 WHITESPACE@157..162 "\n "
148 R_CURLY@[162; 163) "}" 148 R_CURLY@162..163 "}"
149 SEMICOLON@[163; 164) ";" 149 SEMICOLON@163..164 ";"
150 WHITESPACE@[164; 165) "\n" 150 WHITESPACE@164..165 "\n"
151 R_CURLY@[165; 166) "}" 151 R_CURLY@165..166 "}"
152 WHITESPACE@[166; 167) "\n" 152 WHITESPACE@166..167 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0067_crate_path.rast b/crates/ra_syntax/test_data/parser/inline/ok/0067_crate_path.rast
index 35994e3fd..caa76fe8a 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0067_crate_path.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0067_crate_path.rast
@@ -1,15 +1,15 @@
1SOURCE_FILE@[0; 16) 1SOURCE_FILE@0..16
2 USE_ITEM@[0; 15) 2 USE_ITEM@0..15
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 14) 5 USE_TREE@4..14
6 PATH@[4; 14) 6 PATH@4..14
7 PATH@[4; 9) 7 PATH@4..9
8 PATH_SEGMENT@[4; 9) 8 PATH_SEGMENT@4..9
9 CRATE_KW@[4; 9) "crate" 9 CRATE_KW@4..9 "crate"
10 COLON2@[9; 11) "::" 10 COLON2@9..11 "::"
11 PATH_SEGMENT@[11; 14) 11 PATH_SEGMENT@11..14
12 NAME_REF@[11; 14) 12 NAME_REF@11..14
13 IDENT@[11; 14) "foo" 13 IDENT@11..14 "foo"
14 SEMICOLON@[14; 15) ";" 14 SEMICOLON@14..15 ";"
15 WHITESPACE@[15; 16) "\n" 15 WHITESPACE@15..16 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0068_union_items.rast b/crates/ra_syntax/test_data/parser/inline/ok/0068_union_items.rast
index 9d7982684..ec2496072 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0068_union_items.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0068_union_items.rast
@@ -1,46 +1,46 @@
1SOURCE_FILE@[0; 51) 1SOURCE_FILE@0..51
2 UNION_DEF@[0; 12) 2 UNION_DEF@0..12
3 UNION_KW@[0; 5) "union" 3 UNION_KW@0..5 "union"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 9) 5 NAME@6..9
6 IDENT@[6; 9) "Foo" 6 IDENT@6..9 "Foo"
7 WHITESPACE@[9; 10) " " 7 WHITESPACE@9..10 " "
8 RECORD_FIELD_DEF_LIST@[10; 12) 8 RECORD_FIELD_DEF_LIST@10..12
9 L_CURLY@[10; 11) "{" 9 L_CURLY@10..11 "{"
10 R_CURLY@[11; 12) "}" 10 R_CURLY@11..12 "}"
11 WHITESPACE@[12; 13) "\n" 11 WHITESPACE@12..13 "\n"
12 UNION_DEF@[13; 50) 12 UNION_DEF@13..50
13 UNION_KW@[13; 18) "union" 13 UNION_KW@13..18 "union"
14 WHITESPACE@[18; 19) " " 14 WHITESPACE@18..19 " "
15 NAME@[19; 22) 15 NAME@19..22
16 IDENT@[19; 22) "Foo" 16 IDENT@19..22 "Foo"
17 WHITESPACE@[22; 23) " " 17 WHITESPACE@22..23 " "
18 RECORD_FIELD_DEF_LIST@[23; 50) 18 RECORD_FIELD_DEF_LIST@23..50
19 L_CURLY@[23; 24) "{" 19 L_CURLY@23..24 "{"
20 WHITESPACE@[24; 29) "\n " 20 WHITESPACE@24..29 "\n "
21 RECORD_FIELD_DEF@[29; 35) 21 RECORD_FIELD_DEF@29..35
22 NAME@[29; 30) 22 NAME@29..30
23 IDENT@[29; 30) "a" 23 IDENT@29..30 "a"
24 COLON@[30; 31) ":" 24 COLON@30..31 ":"
25 WHITESPACE@[31; 32) " " 25 WHITESPACE@31..32 " "
26 PATH_TYPE@[32; 35) 26 PATH_TYPE@32..35
27 PATH@[32; 35) 27 PATH@32..35
28 PATH_SEGMENT@[32; 35) 28 PATH_SEGMENT@32..35
29 NAME_REF@[32; 35) 29 NAME_REF@32..35
30 IDENT@[32; 35) "i32" 30 IDENT@32..35 "i32"
31 COMMA@[35; 36) "," 31 COMMA@35..36 ","
32 WHITESPACE@[36; 41) "\n " 32 WHITESPACE@36..41 "\n "
33 RECORD_FIELD_DEF@[41; 47) 33 RECORD_FIELD_DEF@41..47
34 NAME@[41; 42) 34 NAME@41..42
35 IDENT@[41; 42) "b" 35 IDENT@41..42 "b"
36 COLON@[42; 43) ":" 36 COLON@42..43 ":"
37 WHITESPACE@[43; 44) " " 37 WHITESPACE@43..44 " "
38 PATH_TYPE@[44; 47) 38 PATH_TYPE@44..47
39 PATH@[44; 47) 39 PATH@44..47
40 PATH_SEGMENT@[44; 47) 40 PATH_SEGMENT@44..47
41 NAME_REF@[44; 47) 41 NAME_REF@44..47
42 IDENT@[44; 47) "f32" 42 IDENT@44..47 "f32"
43 COMMA@[47; 48) "," 43 COMMA@47..48 ","
44 WHITESPACE@[48; 49) "\n" 44 WHITESPACE@48..49 "\n"
45 R_CURLY@[49; 50) "}" 45 R_CURLY@49..50 "}"
46 WHITESPACE@[50; 51) "\n" 46 WHITESPACE@50..51 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0069_use_tree_list_after_path.rast b/crates/ra_syntax/test_data/parser/inline/ok/0069_use_tree_list_after_path.rast
index e24247890..18cd5271f 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0069_use_tree_list_after_path.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0069_use_tree_list_after_path.rast
@@ -1,37 +1,37 @@
1SOURCE_FILE@[0; 37) 1SOURCE_FILE@0..37
2 USE_ITEM@[0; 18) 2 USE_ITEM@0..18
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 17) 5 USE_TREE@4..17
6 PATH@[4; 9) 6 PATH@4..9
7 PATH_SEGMENT@[4; 9) 7 PATH_SEGMENT@4..9
8 CRATE_KW@[4; 9) "crate" 8 CRATE_KW@4..9 "crate"
9 COLON2@[9; 11) "::" 9 COLON2@9..11 "::"
10 USE_TREE_LIST@[11; 17) 10 USE_TREE_LIST@11..17
11 L_CURLY@[11; 12) "{" 11 L_CURLY@11..12 "{"
12 USE_TREE@[12; 16) 12 USE_TREE@12..16
13 PATH@[12; 16) 13 PATH@12..16
14 PATH_SEGMENT@[12; 16) 14 PATH_SEGMENT@12..16
15 NAME_REF@[12; 16) 15 NAME_REF@12..16
16 IDENT@[12; 16) "Item" 16 IDENT@12..16 "Item"
17 R_CURLY@[16; 17) "}" 17 R_CURLY@16..17 "}"
18 SEMICOLON@[17; 18) ";" 18 SEMICOLON@17..18 ";"
19 WHITESPACE@[18; 19) "\n" 19 WHITESPACE@18..19 "\n"
20 USE_ITEM@[19; 36) 20 USE_ITEM@19..36
21 USE_KW@[19; 22) "use" 21 USE_KW@19..22 "use"
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 USE_TREE@[23; 35) 23 USE_TREE@23..35
24 PATH@[23; 27) 24 PATH@23..27
25 PATH_SEGMENT@[23; 27) 25 PATH_SEGMENT@23..27
26 SELF_KW@[23; 27) "self" 26 SELF_KW@23..27 "self"
27 COLON2@[27; 29) "::" 27 COLON2@27..29 "::"
28 USE_TREE_LIST@[29; 35) 28 USE_TREE_LIST@29..35
29 L_CURLY@[29; 30) "{" 29 L_CURLY@29..30 "{"
30 USE_TREE@[30; 34) 30 USE_TREE@30..34
31 PATH@[30; 34) 31 PATH@30..34
32 PATH_SEGMENT@[30; 34) 32 PATH_SEGMENT@30..34
33 NAME_REF@[30; 34) 33 NAME_REF@30..34
34 IDENT@[30; 34) "Item" 34 IDENT@30..34 "Item"
35 R_CURLY@[34; 35) "}" 35 R_CURLY@34..35 "}"
36 SEMICOLON@[35; 36) ";" 36 SEMICOLON@35..36 ";"
37 WHITESPACE@[36; 37) "\n" 37 WHITESPACE@36..37 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0070_stmt_bin_expr_ambiguity.rast b/crates/ra_syntax/test_data/parser/inline/ok/0070_stmt_bin_expr_ambiguity.rast
index 4b075569a..1e888063e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0070_stmt_bin_expr_ambiguity.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0070_stmt_bin_expr_ambiguity.rast
@@ -1,53 +1,53 @@
1SOURCE_FILE@[0; 46) 1SOURCE_FILE@0..46
2 FN_DEF@[0; 45) 2 FN_DEF@0..45
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 45) 11 BLOCK_EXPR@9..45
12 BLOCK@[9; 45) 12 BLOCK@9..45
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 31) 15 LET_STMT@15..31
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 PLACEHOLDER_PAT@[19; 20) 18 PLACEHOLDER_PAT@19..20
19 UNDERSCORE@[19; 20) "_" 19 UNDERSCORE@19..20 "_"
20 WHITESPACE@[20; 21) " " 20 WHITESPACE@20..21 " "
21 EQ@[21; 22) "=" 21 EQ@21..22 "="
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 BIN_EXPR@[23; 30) 23 BIN_EXPR@23..30
24 BLOCK_EXPR@[23; 26) 24 BLOCK_EXPR@23..26
25 BLOCK@[23; 26) 25 BLOCK@23..26
26 L_CURLY@[23; 24) "{" 26 L_CURLY@23..24 "{"
27 LITERAL@[24; 25) 27 LITERAL@24..25
28 INT_NUMBER@[24; 25) "1" 28 INT_NUMBER@24..25 "1"
29 R_CURLY@[25; 26) "}" 29 R_CURLY@25..26 "}"
30 WHITESPACE@[26; 27) " " 30 WHITESPACE@26..27 " "
31 AMP@[27; 28) "&" 31 AMP@27..28 "&"
32 WHITESPACE@[28; 29) " " 32 WHITESPACE@28..29 " "
33 LITERAL@[29; 30) 33 LITERAL@29..30
34 INT_NUMBER@[29; 30) "2" 34 INT_NUMBER@29..30 "2"
35 SEMICOLON@[30; 31) ";" 35 SEMICOLON@30..31 ";"
36 WHITESPACE@[31; 36) "\n " 36 WHITESPACE@31..36 "\n "
37 EXPR_STMT@[36; 39) 37 EXPR_STMT@36..39
38 BLOCK_EXPR@[36; 39) 38 BLOCK_EXPR@36..39
39 BLOCK@[36; 39) 39 BLOCK@36..39
40 L_CURLY@[36; 37) "{" 40 L_CURLY@36..37 "{"
41 LITERAL@[37; 38) 41 LITERAL@37..38
42 INT_NUMBER@[37; 38) "1" 42 INT_NUMBER@37..38 "1"
43 R_CURLY@[38; 39) "}" 43 R_CURLY@38..39 "}"
44 WHITESPACE@[39; 40) " " 44 WHITESPACE@39..40 " "
45 EXPR_STMT@[40; 43) 45 EXPR_STMT@40..43
46 REF_EXPR@[40; 42) 46 REF_EXPR@40..42
47 AMP@[40; 41) "&" 47 AMP@40..41 "&"
48 LITERAL@[41; 42) 48 LITERAL@41..42
49 INT_NUMBER@[41; 42) "2" 49 INT_NUMBER@41..42 "2"
50 SEMICOLON@[42; 43) ";" 50 SEMICOLON@42..43 ";"
51 WHITESPACE@[43; 44) "\n" 51 WHITESPACE@43..44 "\n"
52 R_CURLY@[44; 45) "}" 52 R_CURLY@44..45 "}"
53 WHITESPACE@[45; 46) "\n" 53 WHITESPACE@45..46 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0071_match_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0071_match_expr.rast
index 559ffb578..218b3ec9e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0071_match_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0071_match_expr.rast
@@ -1,96 +1,96 @@
1SOURCE_FILE@[0; 97) 1SOURCE_FILE@0..97
2 FN_DEF@[0; 96) 2 FN_DEF@0..96
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 96) 11 BLOCK_EXPR@9..96
12 BLOCK@[9; 96) 12 BLOCK@9..96
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 28) 15 EXPR_STMT@15..28
16 MATCH_EXPR@[15; 27) 16 MATCH_EXPR@15..27
17 MATCH_KW@[15; 20) "match" 17 MATCH_KW@15..20 "match"
18 WHITESPACE@[20; 21) " " 18 WHITESPACE@20..21 " "
19 TUPLE_EXPR@[21; 23) 19 TUPLE_EXPR@21..23
20 L_PAREN@[21; 22) "(" 20 L_PAREN@21..22 "("
21 R_PAREN@[22; 23) ")" 21 R_PAREN@22..23 ")"
22 WHITESPACE@[23; 24) " " 22 WHITESPACE@23..24 " "
23 MATCH_ARM_LIST@[24; 27) 23 MATCH_ARM_LIST@24..27
24 L_CURLY@[24; 25) "{" 24 L_CURLY@24..25 "{"
25 WHITESPACE@[25; 26) " " 25 WHITESPACE@25..26 " "
26 R_CURLY@[26; 27) "}" 26 R_CURLY@26..27 "}"
27 SEMICOLON@[27; 28) ";" 27 SEMICOLON@27..28 ";"
28 WHITESPACE@[28; 33) "\n " 28 WHITESPACE@28..33 "\n "
29 EXPR_STMT@[33; 44) 29 EXPR_STMT@33..44
30 MATCH_EXPR@[33; 43) 30 MATCH_EXPR@33..43
31 MATCH_KW@[33; 38) "match" 31 MATCH_KW@33..38 "match"
32 WHITESPACE@[38; 39) " " 32 WHITESPACE@38..39 " "
33 PATH_EXPR@[39; 40) 33 PATH_EXPR@39..40
34 PATH@[39; 40) 34 PATH@39..40
35 PATH_SEGMENT@[39; 40) 35 PATH_SEGMENT@39..40
36 NAME_REF@[39; 40) 36 NAME_REF@39..40
37 IDENT@[39; 40) "S" 37 IDENT@39..40 "S"
38 WHITESPACE@[40; 41) " " 38 WHITESPACE@40..41 " "
39 MATCH_ARM_LIST@[41; 43) 39 MATCH_ARM_LIST@41..43
40 L_CURLY@[41; 42) "{" 40 L_CURLY@41..42 "{"
41 R_CURLY@[42; 43) "}" 41 R_CURLY@42..43 "}"
42 SEMICOLON@[43; 44) ";" 42 SEMICOLON@43..44 ";"
43 WHITESPACE@[44; 49) "\n " 43 WHITESPACE@44..49 "\n "
44 EXPR_STMT@[49; 71) 44 EXPR_STMT@49..71
45 MATCH_EXPR@[49; 70) 45 MATCH_EXPR@49..70
46 MATCH_KW@[49; 54) "match" 46 MATCH_KW@49..54 "match"
47 WHITESPACE@[54; 55) " " 47 WHITESPACE@54..55 " "
48 BLOCK_EXPR@[55; 58) 48 BLOCK_EXPR@55..58
49 BLOCK@[55; 58) 49 BLOCK@55..58
50 L_CURLY@[55; 56) "{" 50 L_CURLY@55..56 "{"
51 WHITESPACE@[56; 57) " " 51 WHITESPACE@56..57 " "
52 R_CURLY@[57; 58) "}" 52 R_CURLY@57..58 "}"
53 WHITESPACE@[58; 59) " " 53 WHITESPACE@58..59 " "
54 MATCH_ARM_LIST@[59; 70) 54 MATCH_ARM_LIST@59..70
55 L_CURLY@[59; 60) "{" 55 L_CURLY@59..60 "{"
56 WHITESPACE@[60; 61) " " 56 WHITESPACE@60..61 " "
57 MATCH_ARM@[61; 68) 57 MATCH_ARM@61..68
58 PLACEHOLDER_PAT@[61; 62) 58 PLACEHOLDER_PAT@61..62
59 UNDERSCORE@[61; 62) "_" 59 UNDERSCORE@61..62 "_"
60 WHITESPACE@[62; 63) " " 60 WHITESPACE@62..63 " "
61 FAT_ARROW@[63; 65) "=>" 61 FAT_ARROW@63..65 "=>"
62 WHITESPACE@[65; 66) " " 62 WHITESPACE@65..66 " "
63 TUPLE_EXPR@[66; 68) 63 TUPLE_EXPR@66..68
64 L_PAREN@[66; 67) "(" 64 L_PAREN@66..67 "("
65 R_PAREN@[67; 68) ")" 65 R_PAREN@67..68 ")"
66 WHITESPACE@[68; 69) " " 66 WHITESPACE@68..69 " "
67 R_CURLY@[69; 70) "}" 67 R_CURLY@69..70 "}"
68 SEMICOLON@[70; 71) ";" 68 SEMICOLON@70..71 ";"
69 WHITESPACE@[71; 76) "\n " 69 WHITESPACE@71..76 "\n "
70 EXPR_STMT@[76; 94) 70 EXPR_STMT@76..94
71 MATCH_EXPR@[76; 93) 71 MATCH_EXPR@76..93
72 MATCH_KW@[76; 81) "match" 72 MATCH_KW@76..81 "match"
73 WHITESPACE@[81; 82) " " 73 WHITESPACE@81..82 " "
74 BLOCK_EXPR@[82; 90) 74 BLOCK_EXPR@82..90
75 BLOCK@[82; 90) 75 BLOCK@82..90
76 L_CURLY@[82; 83) "{" 76 L_CURLY@82..83 "{"
77 WHITESPACE@[83; 84) " " 77 WHITESPACE@83..84 " "
78 RECORD_LIT@[84; 88) 78 RECORD_LIT@84..88
79 PATH@[84; 85) 79 PATH@84..85
80 PATH_SEGMENT@[84; 85) 80 PATH_SEGMENT@84..85
81 NAME_REF@[84; 85) 81 NAME_REF@84..85
82 IDENT@[84; 85) "S" 82 IDENT@84..85 "S"
83 WHITESPACE@[85; 86) " " 83 WHITESPACE@85..86 " "
84 RECORD_FIELD_LIST@[86; 88) 84 RECORD_FIELD_LIST@86..88
85 L_CURLY@[86; 87) "{" 85 L_CURLY@86..87 "{"
86 R_CURLY@[87; 88) "}" 86 R_CURLY@87..88 "}"
87 WHITESPACE@[88; 89) " " 87 WHITESPACE@88..89 " "
88 R_CURLY@[89; 90) "}" 88 R_CURLY@89..90 "}"
89 WHITESPACE@[90; 91) " " 89 WHITESPACE@90..91 " "
90 MATCH_ARM_LIST@[91; 93) 90 MATCH_ARM_LIST@91..93
91 L_CURLY@[91; 92) "{" 91 L_CURLY@91..92 "{"
92 R_CURLY@[92; 93) "}" 92 R_CURLY@92..93 "}"
93 SEMICOLON@[93; 94) ";" 93 SEMICOLON@93..94 ";"
94 WHITESPACE@[94; 95) "\n" 94 WHITESPACE@94..95 "\n"
95 R_CURLY@[95; 96) "}" 95 R_CURLY@95..96 "}"
96 WHITESPACE@[96; 97) "\n" 96 WHITESPACE@96..97 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0072_return_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0072_return_expr.rast
index 084efaee2..b8171dc9c 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0072_return_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0072_return_expr.rast
@@ -1,29 +1,29 @@
1SOURCE_FILE@[0; 40) 1SOURCE_FILE@0..40
2 FN_DEF@[0; 39) 2 FN_DEF@0..39
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 39) 11 BLOCK_EXPR@9..39
12 BLOCK@[9; 39) 12 BLOCK@9..39
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 22) 15 EXPR_STMT@15..22
16 RETURN_EXPR@[15; 21) 16 RETURN_EXPR@15..21
17 RETURN_KW@[15; 21) "return" 17 RETURN_KW@15..21 "return"
18 SEMICOLON@[21; 22) ";" 18 SEMICOLON@21..22 ";"
19 WHITESPACE@[22; 27) "\n " 19 WHITESPACE@22..27 "\n "
20 EXPR_STMT@[27; 37) 20 EXPR_STMT@27..37
21 RETURN_EXPR@[27; 36) 21 RETURN_EXPR@27..36
22 RETURN_KW@[27; 33) "return" 22 RETURN_KW@27..33 "return"
23 WHITESPACE@[33; 34) " " 23 WHITESPACE@33..34 " "
24 LITERAL@[34; 36) 24 LITERAL@34..36
25 INT_NUMBER@[34; 36) "92" 25 INT_NUMBER@34..36 "92"
26 SEMICOLON@[36; 37) ";" 26 SEMICOLON@36..37 ";"
27 WHITESPACE@[37; 38) "\n" 27 WHITESPACE@37..38 "\n"
28 R_CURLY@[38; 39) "}" 28 R_CURLY@38..39 "}"
29 WHITESPACE@[39; 40) "\n" 29 WHITESPACE@39..40 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0073_type_item_type_params.rast b/crates/ra_syntax/test_data/parser/inline/ok/0073_type_item_type_params.rast
index 64150b774..cc871ac0c 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0073_type_item_type_params.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0073_type_item_type_params.rast
@@ -1,20 +1,20 @@
1SOURCE_FILE@[0; 21) 1SOURCE_FILE@0..21
2 TYPE_ALIAS_DEF@[0; 20) 2 TYPE_ALIAS_DEF@0..20
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 11) 5 NAME@5..11
6 IDENT@[5; 11) "Result" 6 IDENT@5..11 "Result"
7 TYPE_PARAM_LIST@[11; 14) 7 TYPE_PARAM_LIST@11..14
8 L_ANGLE@[11; 12) "<" 8 L_ANGLE@11..12 "<"
9 TYPE_PARAM@[12; 13) 9 TYPE_PARAM@12..13
10 NAME@[12; 13) 10 NAME@12..13
11 IDENT@[12; 13) "T" 11 IDENT@12..13 "T"
12 R_ANGLE@[13; 14) ">" 12 R_ANGLE@13..14 ">"
13 WHITESPACE@[14; 15) " " 13 WHITESPACE@14..15 " "
14 EQ@[15; 16) "=" 14 EQ@15..16 "="
15 WHITESPACE@[16; 17) " " 15 WHITESPACE@16..17 " "
16 TUPLE_TYPE@[17; 19) 16 TUPLE_TYPE@17..19
17 L_PAREN@[17; 18) "(" 17 L_PAREN@17..18 "("
18 R_PAREN@[18; 19) ")" 18 R_PAREN@18..19 ")"
19 SEMICOLON@[19; 20) ";" 19 SEMICOLON@19..20 ";"
20 WHITESPACE@[20; 21) "\n" 20 WHITESPACE@20..21 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0074_stmt_postfix_expr_ambiguity.rast b/crates/ra_syntax/test_data/parser/inline/ok/0074_stmt_postfix_expr_ambiguity.rast
index cbd2d5fbf..c2a73ef25 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0074_stmt_postfix_expr_ambiguity.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0074_stmt_postfix_expr_ambiguity.rast
@@ -1,63 +1,63 @@
1SOURCE_FILE@[0; 84) 1SOURCE_FILE@0..84
2 FN_DEF@[0; 83) 2 FN_DEF@0..83
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 83) 11 BLOCK_EXPR@9..83
12 BLOCK@[9; 83) 12 BLOCK@9..83
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 MATCH_EXPR@[15; 81) 15 MATCH_EXPR@15..81
16 MATCH_KW@[15; 20) "match" 16 MATCH_KW@15..20 "match"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 TUPLE_EXPR@[21; 23) 18 TUPLE_EXPR@21..23
19 L_PAREN@[21; 22) "(" 19 L_PAREN@21..22 "("
20 R_PAREN@[22; 23) ")" 20 R_PAREN@22..23 ")"
21 WHITESPACE@[23; 24) " " 21 WHITESPACE@23..24 " "
22 MATCH_ARM_LIST@[24; 81) 22 MATCH_ARM_LIST@24..81
23 L_CURLY@[24; 25) "{" 23 L_CURLY@24..25 "{"
24 WHITESPACE@[25; 34) "\n " 24 WHITESPACE@25..34 "\n "
25 MATCH_ARM@[34; 41) 25 MATCH_ARM@34..41
26 PLACEHOLDER_PAT@[34; 35) 26 PLACEHOLDER_PAT@34..35
27 UNDERSCORE@[34; 35) "_" 27 UNDERSCORE@34..35 "_"
28 WHITESPACE@[35; 36) " " 28 WHITESPACE@35..36 " "
29 FAT_ARROW@[36; 38) "=>" 29 FAT_ARROW@36..38 "=>"
30 WHITESPACE@[38; 39) " " 30 WHITESPACE@38..39 " "
31 BLOCK_EXPR@[39; 41) 31 BLOCK_EXPR@39..41
32 BLOCK@[39; 41) 32 BLOCK@39..41
33 L_CURLY@[39; 40) "{" 33 L_CURLY@39..40 "{"
34 R_CURLY@[40; 41) "}" 34 R_CURLY@40..41 "}"
35 WHITESPACE@[41; 50) "\n " 35 WHITESPACE@41..50 "\n "
36 MATCH_ARM@[50; 58) 36 MATCH_ARM@50..58
37 TUPLE_PAT@[50; 52) 37 TUPLE_PAT@50..52
38 L_PAREN@[50; 51) "(" 38 L_PAREN@50..51 "("
39 R_PAREN@[51; 52) ")" 39 R_PAREN@51..52 ")"
40 WHITESPACE@[52; 53) " " 40 WHITESPACE@52..53 " "
41 FAT_ARROW@[53; 55) "=>" 41 FAT_ARROW@53..55 "=>"
42 WHITESPACE@[55; 56) " " 42 WHITESPACE@55..56 " "
43 BLOCK_EXPR@[56; 58) 43 BLOCK_EXPR@56..58
44 BLOCK@[56; 58) 44 BLOCK@56..58
45 L_CURLY@[56; 57) "{" 45 L_CURLY@56..57 "{"
46 R_CURLY@[57; 58) "}" 46 R_CURLY@57..58 "}"
47 WHITESPACE@[58; 67) "\n " 47 WHITESPACE@58..67 "\n "
48 MATCH_ARM@[67; 75) 48 MATCH_ARM@67..75
49 SLICE_PAT@[67; 69) 49 SLICE_PAT@67..69
50 L_BRACK@[67; 68) "[" 50 L_BRACK@67..68 "["
51 R_BRACK@[68; 69) "]" 51 R_BRACK@68..69 "]"
52 WHITESPACE@[69; 70) " " 52 WHITESPACE@69..70 " "
53 FAT_ARROW@[70; 72) "=>" 53 FAT_ARROW@70..72 "=>"
54 WHITESPACE@[72; 73) " " 54 WHITESPACE@72..73 " "
55 BLOCK_EXPR@[73; 75) 55 BLOCK_EXPR@73..75
56 BLOCK@[73; 75) 56 BLOCK@73..75
57 L_CURLY@[73; 74) "{" 57 L_CURLY@73..74 "{"
58 R_CURLY@[74; 75) "}" 58 R_CURLY@74..75 "}"
59 WHITESPACE@[75; 80) "\n " 59 WHITESPACE@75..80 "\n "
60 R_CURLY@[80; 81) "}" 60 R_CURLY@80..81 "}"
61 WHITESPACE@[81; 82) "\n" 61 WHITESPACE@81..82 "\n"
62 R_CURLY@[82; 83) "}" 62 R_CURLY@82..83 "}"
63 WHITESPACE@[83; 84) "\n" 63 WHITESPACE@83..84 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0075_block.rast b/crates/ra_syntax/test_data/parser/inline/ok/0075_block.rast
index 5c7cb4a88..39a86d002 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0075_block.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0075_block.rast
@@ -1,90 +1,90 @@
1SOURCE_FILE@[0; 65) 1SOURCE_FILE@0..65
2 FN_DEF@[0; 9) 2 FN_DEF@0..9
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "a" 6 IDENT@3..4 "a"
7 PARAM_LIST@[4; 6) 7 PARAM_LIST@4..6
8 L_PAREN@[4; 5) "(" 8 L_PAREN@4..5 "("
9 R_PAREN@[5; 6) ")" 9 R_PAREN@5..6 ")"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 BLOCK_EXPR@[7; 9) 11 BLOCK_EXPR@7..9
12 BLOCK@[7; 9) 12 BLOCK@7..9
13 L_CURLY@[7; 8) "{" 13 L_CURLY@7..8 "{"
14 R_CURLY@[8; 9) "}" 14 R_CURLY@8..9 "}"
15 WHITESPACE@[9; 10) "\n" 15 WHITESPACE@9..10 "\n"
16 FN_DEF@[10; 31) 16 FN_DEF@10..31
17 FN_KW@[10; 12) "fn" 17 FN_KW@10..12 "fn"
18 WHITESPACE@[12; 13) " " 18 WHITESPACE@12..13 " "
19 NAME@[13; 14) 19 NAME@13..14
20 IDENT@[13; 14) "b" 20 IDENT@13..14 "b"
21 PARAM_LIST@[14; 16) 21 PARAM_LIST@14..16
22 L_PAREN@[14; 15) "(" 22 L_PAREN@14..15 "("
23 R_PAREN@[15; 16) ")" 23 R_PAREN@15..16 ")"
24 WHITESPACE@[16; 17) " " 24 WHITESPACE@16..17 " "
25 BLOCK_EXPR@[17; 31) 25 BLOCK_EXPR@17..31
26 BLOCK@[17; 31) 26 BLOCK@17..31
27 L_CURLY@[17; 18) "{" 27 L_CURLY@17..18 "{"
28 WHITESPACE@[18; 19) " " 28 WHITESPACE@18..19 " "
29 LET_STMT@[19; 29) 29 LET_STMT@19..29
30 LET_KW@[19; 22) "let" 30 LET_KW@19..22 "let"
31 WHITESPACE@[22; 23) " " 31 WHITESPACE@22..23 " "
32 PLACEHOLDER_PAT@[23; 24) 32 PLACEHOLDER_PAT@23..24
33 UNDERSCORE@[23; 24) "_" 33 UNDERSCORE@23..24 "_"
34 WHITESPACE@[24; 25) " " 34 WHITESPACE@24..25 " "
35 EQ@[25; 26) "=" 35 EQ@25..26 "="
36 WHITESPACE@[26; 27) " " 36 WHITESPACE@26..27 " "
37 LITERAL@[27; 28) 37 LITERAL@27..28
38 INT_NUMBER@[27; 28) "1" 38 INT_NUMBER@27..28 "1"
39 SEMICOLON@[28; 29) ";" 39 SEMICOLON@28..29 ";"
40 WHITESPACE@[29; 30) " " 40 WHITESPACE@29..30 " "
41 R_CURLY@[30; 31) "}" 41 R_CURLY@30..31 "}"
42 WHITESPACE@[31; 32) "\n" 42 WHITESPACE@31..32 "\n"
43 FN_DEF@[32; 48) 43 FN_DEF@32..48
44 FN_KW@[32; 34) "fn" 44 FN_KW@32..34 "fn"
45 WHITESPACE@[34; 35) " " 45 WHITESPACE@34..35 " "
46 NAME@[35; 36) 46 NAME@35..36
47 IDENT@[35; 36) "c" 47 IDENT@35..36 "c"
48 PARAM_LIST@[36; 38) 48 PARAM_LIST@36..38
49 L_PAREN@[36; 37) "(" 49 L_PAREN@36..37 "("
50 R_PAREN@[37; 38) ")" 50 R_PAREN@37..38 ")"
51 WHITESPACE@[38; 39) " " 51 WHITESPACE@38..39 " "
52 BLOCK_EXPR@[39; 48) 52 BLOCK_EXPR@39..48
53 BLOCK@[39; 48) 53 BLOCK@39..48
54 L_CURLY@[39; 40) "{" 54 L_CURLY@39..40 "{"
55 WHITESPACE@[40; 41) " " 55 WHITESPACE@40..41 " "
56 EXPR_STMT@[41; 43) 56 EXPR_STMT@41..43
57 LITERAL@[41; 42) 57 LITERAL@41..42
58 INT_NUMBER@[41; 42) "1" 58 INT_NUMBER@41..42 "1"
59 SEMICOLON@[42; 43) ";" 59 SEMICOLON@42..43 ";"
60 WHITESPACE@[43; 44) " " 60 WHITESPACE@43..44 " "
61 EXPR_STMT@[44; 46) 61 EXPR_STMT@44..46
62 LITERAL@[44; 45) 62 LITERAL@44..45
63 INT_NUMBER@[44; 45) "2" 63 INT_NUMBER@44..45 "2"
64 SEMICOLON@[45; 46) ";" 64 SEMICOLON@45..46 ";"
65 WHITESPACE@[46; 47) " " 65 WHITESPACE@46..47 " "
66 R_CURLY@[47; 48) "}" 66 R_CURLY@47..48 "}"
67 WHITESPACE@[48; 49) "\n" 67 WHITESPACE@48..49 "\n"
68 FN_DEF@[49; 64) 68 FN_DEF@49..64
69 FN_KW@[49; 51) "fn" 69 FN_KW@49..51 "fn"
70 WHITESPACE@[51; 52) " " 70 WHITESPACE@51..52 " "
71 NAME@[52; 53) 71 NAME@52..53
72 IDENT@[52; 53) "d" 72 IDENT@52..53 "d"
73 PARAM_LIST@[53; 55) 73 PARAM_LIST@53..55
74 L_PAREN@[53; 54) "(" 74 L_PAREN@53..54 "("
75 R_PAREN@[54; 55) ")" 75 R_PAREN@54..55 ")"
76 WHITESPACE@[55; 56) " " 76 WHITESPACE@55..56 " "
77 BLOCK_EXPR@[56; 64) 77 BLOCK_EXPR@56..64
78 BLOCK@[56; 64) 78 BLOCK@56..64
79 L_CURLY@[56; 57) "{" 79 L_CURLY@56..57 "{"
80 WHITESPACE@[57; 58) " " 80 WHITESPACE@57..58 " "
81 EXPR_STMT@[58; 60) 81 EXPR_STMT@58..60
82 LITERAL@[58; 59) 82 LITERAL@58..59
83 INT_NUMBER@[58; 59) "1" 83 INT_NUMBER@58..59 "1"
84 SEMICOLON@[59; 60) ";" 84 SEMICOLON@59..60 ";"
85 WHITESPACE@[60; 61) " " 85 WHITESPACE@60..61 " "
86 LITERAL@[61; 62) 86 LITERAL@61..62
87 INT_NUMBER@[61; 62) "2" 87 INT_NUMBER@61..62 "2"
88 WHITESPACE@[62; 63) " " 88 WHITESPACE@62..63 " "
89 R_CURLY@[63; 64) "}" 89 R_CURLY@63..64 "}"
90 WHITESPACE@[64; 65) "\n" 90 WHITESPACE@64..65 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0076_function_where_clause.rast b/crates/ra_syntax/test_data/parser/inline/ok/0076_function_where_clause.rast
index 8e4b63f02..9621ba59e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0076_function_where_clause.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0076_function_where_clause.rast
@@ -1,40 +1,40 @@
1SOURCE_FILE@[0; 29) 1SOURCE_FILE@0..29
2 FN_DEF@[0; 28) 2 FN_DEF@0..28
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 TYPE_PARAM_LIST@[6; 9) 7 TYPE_PARAM_LIST@6..9
8 L_ANGLE@[6; 7) "<" 8 L_ANGLE@6..7 "<"
9 TYPE_PARAM@[7; 8) 9 TYPE_PARAM@7..8
10 NAME@[7; 8) 10 NAME@7..8
11 IDENT@[7; 8) "T" 11 IDENT@7..8 "T"
12 R_ANGLE@[8; 9) ">" 12 R_ANGLE@8..9 ">"
13 PARAM_LIST@[9; 11) 13 PARAM_LIST@9..11
14 L_PAREN@[9; 10) "(" 14 L_PAREN@9..10 "("
15 R_PAREN@[10; 11) ")" 15 R_PAREN@10..11 ")"
16 WHITESPACE@[11; 12) " " 16 WHITESPACE@11..12 " "
17 WHERE_CLAUSE@[12; 25) 17 WHERE_CLAUSE@12..25
18 WHERE_KW@[12; 17) "where" 18 WHERE_KW@12..17 "where"
19 WHITESPACE@[17; 18) " " 19 WHITESPACE@17..18 " "
20 WHERE_PRED@[18; 25) 20 WHERE_PRED@18..25
21 PATH_TYPE@[18; 19) 21 PATH_TYPE@18..19
22 PATH@[18; 19) 22 PATH@18..19
23 PATH_SEGMENT@[18; 19) 23 PATH_SEGMENT@18..19
24 NAME_REF@[18; 19) 24 NAME_REF@18..19
25 IDENT@[18; 19) "T" 25 IDENT@18..19 "T"
26 COLON@[19; 20) ":" 26 COLON@19..20 ":"
27 WHITESPACE@[20; 21) " " 27 WHITESPACE@20..21 " "
28 TYPE_BOUND_LIST@[21; 25) 28 TYPE_BOUND_LIST@21..25
29 TYPE_BOUND@[21; 25) 29 TYPE_BOUND@21..25
30 PATH_TYPE@[21; 25) 30 PATH_TYPE@21..25
31 PATH@[21; 25) 31 PATH@21..25
32 PATH_SEGMENT@[21; 25) 32 PATH_SEGMENT@21..25
33 NAME_REF@[21; 25) 33 NAME_REF@21..25
34 IDENT@[21; 25) "Copy" 34 IDENT@21..25 "Copy"
35 WHITESPACE@[25; 26) " " 35 WHITESPACE@25..26 " "
36 BLOCK_EXPR@[26; 28) 36 BLOCK_EXPR@26..28
37 BLOCK@[26; 28) 37 BLOCK@26..28
38 L_CURLY@[26; 27) "{" 38 L_CURLY@26..27 "{"
39 R_CURLY@[27; 28) "}" 39 R_CURLY@27..28 "}"
40 WHITESPACE@[28; 29) "\n" 40 WHITESPACE@28..29 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0077_try_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0077_try_expr.rast
index bb9f674e1..ed9d62c5f 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0077_try_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0077_try_expr.rast
@@ -1,26 +1,26 @@
1SOURCE_FILE@[0; 21) 1SOURCE_FILE@0..21
2 FN_DEF@[0; 20) 2 FN_DEF@0..20
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 20) 11 BLOCK_EXPR@9..20
12 BLOCK@[9; 20) 12 BLOCK@9..20
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 18) 15 EXPR_STMT@15..18
16 TRY_EXPR@[15; 17) 16 TRY_EXPR@15..17
17 PATH_EXPR@[15; 16) 17 PATH_EXPR@15..16
18 PATH@[15; 16) 18 PATH@15..16
19 PATH_SEGMENT@[15; 16) 19 PATH_SEGMENT@15..16
20 NAME_REF@[15; 16) 20 NAME_REF@15..16
21 IDENT@[15; 16) "x" 21 IDENT@15..16 "x"
22 QUESTION@[16; 17) "?" 22 QUESTION@16..17 "?"
23 SEMICOLON@[17; 18) ";" 23 SEMICOLON@17..18 ";"
24 WHITESPACE@[18; 19) "\n" 24 WHITESPACE@18..19 "\n"
25 R_CURLY@[19; 20) "}" 25 R_CURLY@19..20 "}"
26 WHITESPACE@[20; 21) "\n" 26 WHITESPACE@20..21 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0078_type_item.rast b/crates/ra_syntax/test_data/parser/inline/ok/0078_type_item.rast
index 9a38192d9..a08e16fab 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0078_type_item.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0078_type_item.rast
@@ -1,16 +1,16 @@
1SOURCE_FILE@[0; 16) 1SOURCE_FILE@0..16
2 TYPE_ALIAS_DEF@[0; 15) 2 TYPE_ALIAS_DEF@0..15
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 8) 5 NAME@5..8
6 IDENT@[5; 8) "Foo" 6 IDENT@5..8 "Foo"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 EQ@[9; 10) "=" 8 EQ@9..10 "="
9 WHITESPACE@[10; 11) " " 9 WHITESPACE@10..11 " "
10 PATH_TYPE@[11; 14) 10 PATH_TYPE@11..14
11 PATH@[11; 14) 11 PATH@11..14
12 PATH_SEGMENT@[11; 14) 12 PATH_SEGMENT@11..14
13 NAME_REF@[11; 14) 13 NAME_REF@11..14
14 IDENT@[11; 14) "Bar" 14 IDENT@11..14 "Bar"
15 SEMICOLON@[14; 15) ";" 15 SEMICOLON@14..15 ";"
16 WHITESPACE@[15; 16) "\n" 16 WHITESPACE@15..16 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0079_impl_def.rast b/crates/ra_syntax/test_data/parser/inline/ok/0079_impl_def.rast
index 4c2863ba7..a00ab40f9 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0079_impl_def.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0079_impl_def.rast
@@ -1,14 +1,14 @@
1SOURCE_FILE@[0; 12) 1SOURCE_FILE@0..12
2 IMPL_DEF@[0; 11) 2 IMPL_DEF@0..11
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 8) 5 PATH_TYPE@5..8
6 PATH@[5; 8) 6 PATH@5..8
7 PATH_SEGMENT@[5; 8) 7 PATH_SEGMENT@5..8
8 NAME_REF@[5; 8) 8 NAME_REF@5..8
9 IDENT@[5; 8) "Foo" 9 IDENT@5..8 "Foo"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 ITEM_LIST@[9; 11) 11 ITEM_LIST@9..11
12 L_CURLY@[9; 10) "{" 12 L_CURLY@9..10 "{"
13 R_CURLY@[10; 11) "}" 13 R_CURLY@10..11 "}"
14 WHITESPACE@[11; 12) "\n" 14 WHITESPACE@11..12 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0080_postfix_range.rast b/crates/ra_syntax/test_data/parser/inline/ok/0080_postfix_range.rast
index b8bafc220..5141ce70d 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0080_postfix_range.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0080_postfix_range.rast
@@ -1,96 +1,96 @@
1SOURCE_FILE@[0; 89) 1SOURCE_FILE@0..89
2 FN_DEF@[0; 88) 2 FN_DEF@0..88
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 88) 11 BLOCK_EXPR@9..88
12 BLOCK@[9; 88) 12 BLOCK@9..88
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 27) 15 LET_STMT@15..27
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 BIND_PAT@[19; 20) 18 BIND_PAT@19..20
19 NAME@[19; 20) 19 NAME@19..20
20 IDENT@[19; 20) "x" 20 IDENT@19..20 "x"
21 WHITESPACE@[20; 21) " " 21 WHITESPACE@20..21 " "
22 EQ@[21; 22) "=" 22 EQ@21..22 "="
23 WHITESPACE@[22; 23) " " 23 WHITESPACE@22..23 " "
24 RANGE_EXPR@[23; 26) 24 RANGE_EXPR@23..26
25 LITERAL@[23; 24) 25 LITERAL@23..24
26 INT_NUMBER@[23; 24) "1" 26 INT_NUMBER@23..24 "1"
27 DOT2@[24; 26) ".." 27 DOT2@24..26 ".."
28 SEMICOLON@[26; 27) ";" 28 SEMICOLON@26..27 ";"
29 WHITESPACE@[27; 32) "\n " 29 WHITESPACE@27..32 "\n "
30 EXPR_STMT@[32; 54) 30 EXPR_STMT@32..54
31 MATCH_EXPR@[32; 53) 31 MATCH_EXPR@32..53
32 MATCH_KW@[32; 37) "match" 32 MATCH_KW@32..37 "match"
33 WHITESPACE@[37; 38) " " 33 WHITESPACE@37..38 " "
34 RANGE_EXPR@[38; 41) 34 RANGE_EXPR@38..41
35 LITERAL@[38; 39) 35 LITERAL@38..39
36 INT_NUMBER@[38; 39) "1" 36 INT_NUMBER@38..39 "1"
37 DOT2@[39; 41) ".." 37 DOT2@39..41 ".."
38 WHITESPACE@[41; 42) " " 38 WHITESPACE@41..42 " "
39 MATCH_ARM_LIST@[42; 53) 39 MATCH_ARM_LIST@42..53
40 L_CURLY@[42; 43) "{" 40 L_CURLY@42..43 "{"
41 WHITESPACE@[43; 44) " " 41 WHITESPACE@43..44 " "
42 MATCH_ARM@[44; 51) 42 MATCH_ARM@44..51
43 PLACEHOLDER_PAT@[44; 45) 43 PLACEHOLDER_PAT@44..45
44 UNDERSCORE@[44; 45) "_" 44 UNDERSCORE@44..45 "_"
45 WHITESPACE@[45; 46) " " 45 WHITESPACE@45..46 " "
46 FAT_ARROW@[46; 48) "=>" 46 FAT_ARROW@46..48 "=>"
47 WHITESPACE@[48; 49) " " 47 WHITESPACE@48..49 " "
48 TUPLE_EXPR@[49; 51) 48 TUPLE_EXPR@49..51
49 L_PAREN@[49; 50) "(" 49 L_PAREN@49..50 "("
50 R_PAREN@[50; 51) ")" 50 R_PAREN@50..51 ")"
51 WHITESPACE@[51; 52) " " 51 WHITESPACE@51..52 " "
52 R_CURLY@[52; 53) "}" 52 R_CURLY@52..53 "}"
53 SEMICOLON@[53; 54) ";" 53 SEMICOLON@53..54 ";"
54 WHITESPACE@[54; 59) "\n " 54 WHITESPACE@54..59 "\n "
55 EXPR_STMT@[59; 86) 55 EXPR_STMT@59..86
56 MATCH_EXPR@[59; 85) 56 MATCH_EXPR@59..85
57 MATCH_KW@[59; 64) "match" 57 MATCH_KW@59..64 "match"
58 WHITESPACE@[64; 65) " " 58 WHITESPACE@64..65 " "
59 RANGE_EXPR@[65; 73) 59 RANGE_EXPR@65..73
60 METHOD_CALL_EXPR@[65; 70) 60 METHOD_CALL_EXPR@65..70
61 PATH_EXPR@[65; 66) 61 PATH_EXPR@65..66
62 PATH@[65; 66) 62 PATH@65..66
63 PATH_SEGMENT@[65; 66) 63 PATH_SEGMENT@65..66
64 NAME_REF@[65; 66) 64 NAME_REF@65..66
65 IDENT@[65; 66) "a" 65 IDENT@65..66 "a"
66 DOT@[66; 67) "." 66 DOT@66..67 "."
67 NAME_REF@[67; 68) 67 NAME_REF@67..68
68 IDENT@[67; 68) "b" 68 IDENT@67..68 "b"
69 ARG_LIST@[68; 70) 69 ARG_LIST@68..70
70 L_PAREN@[68; 69) "(" 70 L_PAREN@68..69 "("
71 R_PAREN@[69; 70) ")" 71 R_PAREN@69..70 ")"
72 DOT2@[70; 72) ".." 72 DOT2@70..72 ".."
73 PATH_EXPR@[72; 73) 73 PATH_EXPR@72..73
74 PATH@[72; 73) 74 PATH@72..73
75 PATH_SEGMENT@[72; 73) 75 PATH_SEGMENT@72..73
76 NAME_REF@[72; 73) 76 NAME_REF@72..73
77 IDENT@[72; 73) "S" 77 IDENT@72..73 "S"
78 WHITESPACE@[73; 74) " " 78 WHITESPACE@73..74 " "
79 MATCH_ARM_LIST@[74; 85) 79 MATCH_ARM_LIST@74..85
80 L_CURLY@[74; 75) "{" 80 L_CURLY@74..75 "{"
81 WHITESPACE@[75; 76) " " 81 WHITESPACE@75..76 " "
82 MATCH_ARM@[76; 83) 82 MATCH_ARM@76..83
83 PLACEHOLDER_PAT@[76; 77) 83 PLACEHOLDER_PAT@76..77
84 UNDERSCORE@[76; 77) "_" 84 UNDERSCORE@76..77 "_"
85 WHITESPACE@[77; 78) " " 85 WHITESPACE@77..78 " "
86 FAT_ARROW@[78; 80) "=>" 86 FAT_ARROW@78..80 "=>"
87 WHITESPACE@[80; 81) " " 87 WHITESPACE@80..81 " "
88 TUPLE_EXPR@[81; 83) 88 TUPLE_EXPR@81..83
89 L_PAREN@[81; 82) "(" 89 L_PAREN@81..82 "("
90 R_PAREN@[82; 83) ")" 90 R_PAREN@82..83 ")"
91 WHITESPACE@[83; 84) " " 91 WHITESPACE@83..84 " "
92 R_CURLY@[84; 85) "}" 92 R_CURLY@84..85 "}"
93 SEMICOLON@[85; 86) ";" 93 SEMICOLON@85..86 ";"
94 WHITESPACE@[86; 87) "\n" 94 WHITESPACE@86..87 "\n"
95 R_CURLY@[87; 88) "}" 95 R_CURLY@87..88 "}"
96 WHITESPACE@[88; 89) "\n" 96 WHITESPACE@88..89 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast
index 00c4e4220..cdbe64180 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast
@@ -1,243 +1,243 @@
1SOURCE_FILE@[0; 200) 1SOURCE_FILE@0..200
2 TYPE_ALIAS_DEF@[0; 28) 2 TYPE_ALIAS_DEF@0..28
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "A" 6 IDENT@5..6 "A"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 FOR_TYPE@[9; 27) 10 FOR_TYPE@9..27
11 FOR_KW@[9; 12) "for" 11 FOR_KW@9..12 "for"
12 TYPE_PARAM_LIST@[12; 16) 12 TYPE_PARAM_LIST@12..16
13 L_ANGLE@[12; 13) "<" 13 L_ANGLE@12..13 "<"
14 LIFETIME_PARAM@[13; 15) 14 LIFETIME_PARAM@13..15
15 LIFETIME@[13; 15) "\'a" 15 LIFETIME@13..15 "\'a"
16 R_ANGLE@[15; 16) ">" 16 R_ANGLE@15..16 ">"
17 WHITESPACE@[16; 17) " " 17 WHITESPACE@16..17 " "
18 FN_POINTER_TYPE@[17; 27) 18 FN_POINTER_TYPE@17..27
19 FN_KW@[17; 19) "fn" 19 FN_KW@17..19 "fn"
20 PARAM_LIST@[19; 21) 20 PARAM_LIST@19..21
21 L_PAREN@[19; 20) "(" 21 L_PAREN@19..20 "("
22 R_PAREN@[20; 21) ")" 22 R_PAREN@20..21 ")"
23 WHITESPACE@[21; 22) " " 23 WHITESPACE@21..22 " "
24 RET_TYPE@[22; 27) 24 RET_TYPE@22..27
25 THIN_ARROW@[22; 24) "->" 25 THIN_ARROW@22..24 "->"
26 WHITESPACE@[24; 25) " " 26 WHITESPACE@24..25 " "
27 TUPLE_TYPE@[25; 27) 27 TUPLE_TYPE@25..27
28 L_PAREN@[25; 26) "(" 28 L_PAREN@25..26 "("
29 R_PAREN@[26; 27) ")" 29 R_PAREN@26..27 ")"
30 SEMICOLON@[27; 28) ";" 30 SEMICOLON@27..28 ";"
31 WHITESPACE@[28; 29) "\n" 31 WHITESPACE@28..29 "\n"
32 FN_DEF@[29; 79) 32 FN_DEF@29..79
33 FN_KW@[29; 31) "fn" 33 FN_KW@29..31 "fn"
34 WHITESPACE@[31; 32) " " 34 WHITESPACE@31..32 " "
35 NAME@[32; 35) 35 NAME@32..35
36 IDENT@[32; 35) "foo" 36 IDENT@32..35 "foo"
37 TYPE_PARAM_LIST@[35; 38) 37 TYPE_PARAM_LIST@35..38
38 L_ANGLE@[35; 36) "<" 38 L_ANGLE@35..36 "<"
39 TYPE_PARAM@[36; 37) 39 TYPE_PARAM@36..37
40 NAME@[36; 37) 40 NAME@36..37
41 IDENT@[36; 37) "T" 41 IDENT@36..37 "T"
42 R_ANGLE@[37; 38) ">" 42 R_ANGLE@37..38 ">"
43 PARAM_LIST@[38; 46) 43 PARAM_LIST@38..46
44 L_PAREN@[38; 39) "(" 44 L_PAREN@38..39 "("
45 PARAM@[39; 45) 45 PARAM@39..45
46 BIND_PAT@[39; 41) 46 BIND_PAT@39..41
47 NAME@[39; 41) 47 NAME@39..41
48 IDENT@[39; 41) "_t" 48 IDENT@39..41 "_t"
49 COLON@[41; 42) ":" 49 COLON@41..42 ":"
50 WHITESPACE@[42; 43) " " 50 WHITESPACE@42..43 " "
51 REFERENCE_TYPE@[43; 45) 51 REFERENCE_TYPE@43..45
52 AMP@[43; 44) "&" 52 AMP@43..44 "&"
53 PATH_TYPE@[44; 45) 53 PATH_TYPE@44..45
54 PATH@[44; 45) 54 PATH@44..45
55 PATH_SEGMENT@[44; 45) 55 PATH_SEGMENT@44..45
56 NAME_REF@[44; 45) 56 NAME_REF@44..45
57 IDENT@[44; 45) "T" 57 IDENT@44..45 "T"
58 R_PAREN@[45; 46) ")" 58 R_PAREN@45..46 ")"
59 WHITESPACE@[46; 47) " " 59 WHITESPACE@46..47 " "
60 WHERE_CLAUSE@[47; 76) 60 WHERE_CLAUSE@47..76
61 WHERE_KW@[47; 52) "where" 61 WHERE_KW@47..52 "where"
62 WHITESPACE@[52; 53) " " 62 WHITESPACE@52..53 " "
63 WHERE_PRED@[53; 76) 63 WHERE_PRED@53..76
64 FOR_TYPE@[53; 66) 64 FOR_TYPE@53..66
65 FOR_KW@[53; 56) "for" 65 FOR_KW@53..56 "for"
66 TYPE_PARAM_LIST@[56; 60) 66 TYPE_PARAM_LIST@56..60
67 L_ANGLE@[56; 57) "<" 67 L_ANGLE@56..57 "<"
68 LIFETIME_PARAM@[57; 59) 68 LIFETIME_PARAM@57..59
69 LIFETIME@[57; 59) "\'a" 69 LIFETIME@57..59 "\'a"
70 R_ANGLE@[59; 60) ">" 70 R_ANGLE@59..60 ">"
71 WHITESPACE@[60; 61) " " 71 WHITESPACE@60..61 " "
72 REFERENCE_TYPE@[61; 66) 72 REFERENCE_TYPE@61..66
73 AMP@[61; 62) "&" 73 AMP@61..62 "&"
74 LIFETIME@[62; 64) "\'a" 74 LIFETIME@62..64 "\'a"
75 WHITESPACE@[64; 65) " " 75 WHITESPACE@64..65 " "
76 PATH_TYPE@[65; 66) 76 PATH_TYPE@65..66
77 PATH@[65; 66) 77 PATH@65..66
78 PATH_SEGMENT@[65; 66) 78 PATH_SEGMENT@65..66
79 NAME_REF@[65; 66) 79 NAME_REF@65..66
80 IDENT@[65; 66) "T" 80 IDENT@65..66 "T"
81 COLON@[66; 67) ":" 81 COLON@66..67 ":"
82 WHITESPACE@[67; 68) " " 82 WHITESPACE@67..68 " "
83 TYPE_BOUND_LIST@[68; 76) 83 TYPE_BOUND_LIST@68..76
84 TYPE_BOUND@[68; 76) 84 TYPE_BOUND@68..76
85 PATH_TYPE@[68; 76) 85 PATH_TYPE@68..76
86 PATH@[68; 76) 86 PATH@68..76
87 PATH_SEGMENT@[68; 76) 87 PATH_SEGMENT@68..76
88 NAME_REF@[68; 76) 88 NAME_REF@68..76
89 IDENT@[68; 76) "Iterator" 89 IDENT@68..76 "Iterator"
90 WHITESPACE@[76; 77) " " 90 WHITESPACE@76..77 " "
91 BLOCK_EXPR@[77; 79) 91 BLOCK_EXPR@77..79
92 BLOCK@[77; 79) 92 BLOCK@77..79
93 L_CURLY@[77; 78) "{" 93 L_CURLY@77..78 "{"
94 R_CURLY@[78; 79) "}" 94 R_CURLY@78..79 "}"
95 WHITESPACE@[79; 80) "\n" 95 WHITESPACE@79..80 "\n"
96 FN_DEF@[80; 134) 96 FN_DEF@80..134
97 FN_KW@[80; 82) "fn" 97 FN_KW@80..82 "fn"
98 WHITESPACE@[82; 83) " " 98 WHITESPACE@82..83 " "
99 NAME@[83; 86) 99 NAME@83..86
100 IDENT@[83; 86) "bar" 100 IDENT@83..86 "bar"
101 TYPE_PARAM_LIST@[86; 89) 101 TYPE_PARAM_LIST@86..89
102 L_ANGLE@[86; 87) "<" 102 L_ANGLE@86..87 "<"
103 TYPE_PARAM@[87; 88) 103 TYPE_PARAM@87..88
104 NAME@[87; 88) 104 NAME@87..88
105 IDENT@[87; 88) "T" 105 IDENT@87..88 "T"
106 R_ANGLE@[88; 89) ">" 106 R_ANGLE@88..89 ">"
107 PARAM_LIST@[89; 97) 107 PARAM_LIST@89..97
108 L_PAREN@[89; 90) "(" 108 L_PAREN@89..90 "("
109 PARAM@[90; 96) 109 PARAM@90..96
110 BIND_PAT@[90; 92) 110 BIND_PAT@90..92
111 NAME@[90; 92) 111 NAME@90..92
112 IDENT@[90; 92) "_t" 112 IDENT@90..92 "_t"
113 COLON@[92; 93) ":" 113 COLON@92..93 ":"
114 WHITESPACE@[93; 94) " " 114 WHITESPACE@93..94 " "
115 REFERENCE_TYPE@[94; 96) 115 REFERENCE_TYPE@94..96
116 AMP@[94; 95) "&" 116 AMP@94..95 "&"
117 PATH_TYPE@[95; 96) 117 PATH_TYPE@95..96
118 PATH@[95; 96) 118 PATH@95..96
119 PATH_SEGMENT@[95; 96) 119 PATH_SEGMENT@95..96
120 NAME_REF@[95; 96) 120 NAME_REF@95..96
121 IDENT@[95; 96) "T" 121 IDENT@95..96 "T"
122 R_PAREN@[96; 97) ")" 122 R_PAREN@96..97 ")"
123 WHITESPACE@[97; 98) " " 123 WHITESPACE@97..98 " "
124 WHERE_CLAUSE@[98; 131) 124 WHERE_CLAUSE@98..131
125 WHERE_KW@[98; 103) "where" 125 WHERE_KW@98..103 "where"
126 WHITESPACE@[103; 104) " " 126 WHITESPACE@103..104 " "
127 WHERE_PRED@[104; 131) 127 WHERE_PRED@104..131
128 FOR_TYPE@[104; 121) 128 FOR_TYPE@104..121
129 FOR_KW@[104; 107) "for" 129 FOR_KW@104..107 "for"
130 TYPE_PARAM_LIST@[107; 111) 130 TYPE_PARAM_LIST@107..111
131 L_ANGLE@[107; 108) "<" 131 L_ANGLE@107..108 "<"
132 LIFETIME_PARAM@[108; 110) 132 LIFETIME_PARAM@108..110
133 LIFETIME@[108; 110) "\'a" 133 LIFETIME@108..110 "\'a"
134 R_ANGLE@[110; 111) ">" 134 R_ANGLE@110..111 ">"
135 WHITESPACE@[111; 112) " " 135 WHITESPACE@111..112 " "
136 REFERENCE_TYPE@[112; 121) 136 REFERENCE_TYPE@112..121
137 AMP@[112; 113) "&" 137 AMP@112..113 "&"
138 LIFETIME@[113; 115) "\'a" 138 LIFETIME@113..115 "\'a"
139 WHITESPACE@[115; 116) " " 139 WHITESPACE@115..116 " "
140 MUT_KW@[116; 119) "mut" 140 MUT_KW@116..119 "mut"
141 WHITESPACE@[119; 120) " " 141 WHITESPACE@119..120 " "
142 PATH_TYPE@[120; 121) 142 PATH_TYPE@120..121
143 PATH@[120; 121) 143 PATH@120..121
144 PATH_SEGMENT@[120; 121) 144 PATH_SEGMENT@120..121
145 NAME_REF@[120; 121) 145 NAME_REF@120..121
146 IDENT@[120; 121) "T" 146 IDENT@120..121 "T"
147 COLON@[121; 122) ":" 147 COLON@121..122 ":"
148 WHITESPACE@[122; 123) " " 148 WHITESPACE@122..123 " "
149 TYPE_BOUND_LIST@[123; 131) 149 TYPE_BOUND_LIST@123..131
150 TYPE_BOUND@[123; 131) 150 TYPE_BOUND@123..131
151 PATH_TYPE@[123; 131) 151 PATH_TYPE@123..131
152 PATH@[123; 131) 152 PATH@123..131
153 PATH_SEGMENT@[123; 131) 153 PATH_SEGMENT@123..131
154 NAME_REF@[123; 131) 154 NAME_REF@123..131
155 IDENT@[123; 131) "Iterator" 155 IDENT@123..131 "Iterator"
156 WHITESPACE@[131; 132) " " 156 WHITESPACE@131..132 " "
157 BLOCK_EXPR@[132; 134) 157 BLOCK_EXPR@132..134
158 BLOCK@[132; 134) 158 BLOCK@132..134
159 L_CURLY@[132; 133) "{" 159 L_CURLY@132..133 "{"
160 R_CURLY@[133; 134) "}" 160 R_CURLY@133..134 "}"
161 WHITESPACE@[134; 135) "\n" 161 WHITESPACE@134..135 "\n"
162 FN_DEF@[135; 199) 162 FN_DEF@135..199
163 FN_KW@[135; 137) "fn" 163 FN_KW@135..137 "fn"
164 WHITESPACE@[137; 138) " " 164 WHITESPACE@137..138 " "
165 NAME@[138; 141) 165 NAME@138..141
166 IDENT@[138; 141) "baz" 166 IDENT@138..141 "baz"
167 TYPE_PARAM_LIST@[141; 144) 167 TYPE_PARAM_LIST@141..144
168 L_ANGLE@[141; 142) "<" 168 L_ANGLE@141..142 "<"
169 TYPE_PARAM@[142; 143) 169 TYPE_PARAM@142..143
170 NAME@[142; 143) 170 NAME@142..143
171 IDENT@[142; 143) "T" 171 IDENT@142..143 "T"
172 R_ANGLE@[143; 144) ">" 172 R_ANGLE@143..144 ">"
173 PARAM_LIST@[144; 152) 173 PARAM_LIST@144..152
174 L_PAREN@[144; 145) "(" 174 L_PAREN@144..145 "("
175 PARAM@[145; 151) 175 PARAM@145..151
176 BIND_PAT@[145; 147) 176 BIND_PAT@145..147
177 NAME@[145; 147) 177 NAME@145..147
178 IDENT@[145; 147) "_t" 178 IDENT@145..147 "_t"
179 COLON@[147; 148) ":" 179 COLON@147..148 ":"
180 WHITESPACE@[148; 149) " " 180 WHITESPACE@148..149 " "
181 REFERENCE_TYPE@[149; 151) 181 REFERENCE_TYPE@149..151
182 AMP@[149; 150) "&" 182 AMP@149..150 "&"
183 PATH_TYPE@[150; 151) 183 PATH_TYPE@150..151
184 PATH@[150; 151) 184 PATH@150..151
185 PATH_SEGMENT@[150; 151) 185 PATH_SEGMENT@150..151
186 NAME_REF@[150; 151) 186 NAME_REF@150..151
187 IDENT@[150; 151) "T" 187 IDENT@150..151 "T"
188 R_PAREN@[151; 152) ")" 188 R_PAREN@151..152 ")"
189 WHITESPACE@[152; 153) " " 189 WHITESPACE@152..153 " "
190 WHERE_CLAUSE@[153; 196) 190 WHERE_CLAUSE@153..196
191 WHERE_KW@[153; 158) "where" 191 WHERE_KW@153..158 "where"
192 WHITESPACE@[158; 159) " " 192 WHITESPACE@158..159 " "
193 WHERE_PRED@[159; 196) 193 WHERE_PRED@159..196
194 FOR_TYPE@[159; 186) 194 FOR_TYPE@159..186
195 FOR_KW@[159; 162) "for" 195 FOR_KW@159..162 "for"
196 TYPE_PARAM_LIST@[162; 166) 196 TYPE_PARAM_LIST@162..166
197 L_ANGLE@[162; 163) "<" 197 L_ANGLE@162..163 "<"
198 LIFETIME_PARAM@[163; 165) 198 LIFETIME_PARAM@163..165
199 LIFETIME@[163; 165) "\'a" 199 LIFETIME@163..165 "\'a"
200 R_ANGLE@[165; 166) ">" 200 R_ANGLE@165..166 ">"
201 WHITESPACE@[166; 167) " " 201 WHITESPACE@166..167 " "
202 PATH_TYPE@[167; 186) 202 PATH_TYPE@167..186
203 PATH@[167; 186) 203 PATH@167..186
204 PATH@[167; 181) 204 PATH@167..181
205 PATH_SEGMENT@[167; 181) 205 PATH_SEGMENT@167..181
206 L_ANGLE@[167; 168) "<" 206 L_ANGLE@167..168 "<"
207 REFERENCE_TYPE@[168; 173) 207 REFERENCE_TYPE@168..173
208 AMP@[168; 169) "&" 208 AMP@168..169 "&"
209 LIFETIME@[169; 171) "\'a" 209 LIFETIME@169..171 "\'a"
210 WHITESPACE@[171; 172) " " 210 WHITESPACE@171..172 " "
211 PATH_TYPE@[172; 173) 211 PATH_TYPE@172..173
212 PATH@[172; 173) 212 PATH@172..173
213 PATH_SEGMENT@[172; 173) 213 PATH_SEGMENT@172..173
214 NAME_REF@[172; 173) 214 NAME_REF@172..173
215 IDENT@[172; 173) "T" 215 IDENT@172..173 "T"
216 WHITESPACE@[173; 174) " " 216 WHITESPACE@173..174 " "
217 AS_KW@[174; 176) "as" 217 AS_KW@174..176 "as"
218 WHITESPACE@[176; 177) " " 218 WHITESPACE@176..177 " "
219 PATH_TYPE@[177; 180) 219 PATH_TYPE@177..180
220 PATH@[177; 180) 220 PATH@177..180
221 PATH_SEGMENT@[177; 180) 221 PATH_SEGMENT@177..180
222 NAME_REF@[177; 180) 222 NAME_REF@177..180
223 IDENT@[177; 180) "Baz" 223 IDENT@177..180 "Baz"
224 R_ANGLE@[180; 181) ">" 224 R_ANGLE@180..181 ">"
225 COLON2@[181; 183) "::" 225 COLON2@181..183 "::"
226 PATH_SEGMENT@[183; 186) 226 PATH_SEGMENT@183..186
227 NAME_REF@[183; 186) 227 NAME_REF@183..186
228 IDENT@[183; 186) "Foo" 228 IDENT@183..186 "Foo"
229 COLON@[186; 187) ":" 229 COLON@186..187 ":"
230 WHITESPACE@[187; 188) " " 230 WHITESPACE@187..188 " "
231 TYPE_BOUND_LIST@[188; 196) 231 TYPE_BOUND_LIST@188..196
232 TYPE_BOUND@[188; 196) 232 TYPE_BOUND@188..196
233 PATH_TYPE@[188; 196) 233 PATH_TYPE@188..196
234 PATH@[188; 196) 234 PATH@188..196
235 PATH_SEGMENT@[188; 196) 235 PATH_SEGMENT@188..196
236 NAME_REF@[188; 196) 236 NAME_REF@188..196
237 IDENT@[188; 196) "Iterator" 237 IDENT@188..196 "Iterator"
238 WHITESPACE@[196; 197) " " 238 WHITESPACE@196..197 " "
239 BLOCK_EXPR@[197; 199) 239 BLOCK_EXPR@197..199
240 BLOCK@[197; 199) 240 BLOCK@197..199
241 L_CURLY@[197; 198) "{" 241 L_CURLY@197..198 "{"
242 R_CURLY@[198; 199) "}" 242 R_CURLY@198..199 "}"
243 WHITESPACE@[199; 200) "\n" 243 WHITESPACE@199..200 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0082_ref_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0082_ref_expr.rast
index 2999977fc..fbad33389 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0082_ref_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0082_ref_expr.rast
@@ -1,55 +1,55 @@
1SOURCE_FILE@[0; 52) 1SOURCE_FILE@0..52
2 FN_DEF@[0; 51) 2 FN_DEF@0..51
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 51) 11 BLOCK_EXPR@9..51
12 BLOCK@[9; 51) 12 BLOCK@9..51
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 26) 15 LET_STMT@15..26
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 PLACEHOLDER_PAT@[19; 20) 18 PLACEHOLDER_PAT@19..20
19 UNDERSCORE@[19; 20) "_" 19 UNDERSCORE@19..20 "_"
20 WHITESPACE@[20; 21) " " 20 WHITESPACE@20..21 " "
21 EQ@[21; 22) "=" 21 EQ@21..22 "="
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 REF_EXPR@[23; 25) 23 REF_EXPR@23..25
24 AMP@[23; 24) "&" 24 AMP@23..24 "&"
25 LITERAL@[24; 25) 25 LITERAL@24..25
26 INT_NUMBER@[24; 25) "1" 26 INT_NUMBER@24..25 "1"
27 SEMICOLON@[25; 26) ";" 27 SEMICOLON@25..26 ";"
28 WHITESPACE@[26; 31) "\n " 28 WHITESPACE@26..31 "\n "
29 LET_STMT@[31; 49) 29 LET_STMT@31..49
30 LET_KW@[31; 34) "let" 30 LET_KW@31..34 "let"
31 WHITESPACE@[34; 35) " " 31 WHITESPACE@34..35 " "
32 PLACEHOLDER_PAT@[35; 36) 32 PLACEHOLDER_PAT@35..36
33 UNDERSCORE@[35; 36) "_" 33 UNDERSCORE@35..36 "_"
34 WHITESPACE@[36; 37) " " 34 WHITESPACE@36..37 " "
35 EQ@[37; 38) "=" 35 EQ@37..38 "="
36 WHITESPACE@[38; 39) " " 36 WHITESPACE@38..39 " "
37 REF_EXPR@[39; 48) 37 REF_EXPR@39..48
38 AMP@[39; 40) "&" 38 AMP@39..40 "&"
39 MUT_KW@[40; 43) "mut" 39 MUT_KW@40..43 "mut"
40 WHITESPACE@[43; 44) " " 40 WHITESPACE@43..44 " "
41 REF_EXPR@[44; 48) 41 REF_EXPR@44..48
42 AMP@[44; 45) "&" 42 AMP@44..45 "&"
43 CALL_EXPR@[45; 48) 43 CALL_EXPR@45..48
44 PATH_EXPR@[45; 46) 44 PATH_EXPR@45..46
45 PATH@[45; 46) 45 PATH@45..46
46 PATH_SEGMENT@[45; 46) 46 PATH_SEGMENT@45..46
47 NAME_REF@[45; 46) 47 NAME_REF@45..46
48 IDENT@[45; 46) "f" 48 IDENT@45..46 "f"
49 ARG_LIST@[46; 48) 49 ARG_LIST@46..48
50 L_PAREN@[46; 47) "(" 50 L_PAREN@46..47 "("
51 R_PAREN@[47; 48) ")" 51 R_PAREN@47..48 ")"
52 SEMICOLON@[48; 49) ";" 52 SEMICOLON@48..49 ";"
53 WHITESPACE@[49; 50) "\n" 53 WHITESPACE@49..50 "\n"
54 R_CURLY@[50; 51) "}" 54 R_CURLY@50..51 "}"
55 WHITESPACE@[51; 52) "\n" 55 WHITESPACE@51..52 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0083_struct_items.rast b/crates/ra_syntax/test_data/parser/inline/ok/0083_struct_items.rast
index 13393e4b8..217b07e59 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0083_struct_items.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0083_struct_items.rast
@@ -1,87 +1,87 @@
1SOURCE_FILE@[0; 106) 1SOURCE_FILE@0..106
2 STRUCT_DEF@[0; 11) 2 STRUCT_DEF@0..11
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 10) 5 NAME@7..10
6 IDENT@[7; 10) "Foo" 6 IDENT@7..10 "Foo"
7 SEMICOLON@[10; 11) ";" 7 SEMICOLON@10..11 ";"
8 WHITESPACE@[11; 12) "\n" 8 WHITESPACE@11..12 "\n"
9 STRUCT_DEF@[12; 25) 9 STRUCT_DEF@12..25
10 STRUCT_KW@[12; 18) "struct" 10 STRUCT_KW@12..18 "struct"
11 WHITESPACE@[18; 19) " " 11 WHITESPACE@18..19 " "
12 NAME@[19; 22) 12 NAME@19..22
13 IDENT@[19; 22) "Foo" 13 IDENT@19..22 "Foo"
14 WHITESPACE@[22; 23) " " 14 WHITESPACE@22..23 " "
15 RECORD_FIELD_DEF_LIST@[23; 25) 15 RECORD_FIELD_DEF_LIST@23..25
16 L_CURLY@[23; 24) "{" 16 L_CURLY@23..24 "{"
17 R_CURLY@[24; 25) "}" 17 R_CURLY@24..25 "}"
18 WHITESPACE@[25; 26) "\n" 18 WHITESPACE@25..26 "\n"
19 STRUCT_DEF@[26; 39) 19 STRUCT_DEF@26..39
20 STRUCT_KW@[26; 32) "struct" 20 STRUCT_KW@26..32 "struct"
21 WHITESPACE@[32; 33) " " 21 WHITESPACE@32..33 " "
22 NAME@[33; 36) 22 NAME@33..36
23 IDENT@[33; 36) "Foo" 23 IDENT@33..36 "Foo"
24 TUPLE_FIELD_DEF_LIST@[36; 38) 24 TUPLE_FIELD_DEF_LIST@36..38
25 L_PAREN@[36; 37) "(" 25 L_PAREN@36..37 "("
26 R_PAREN@[37; 38) ")" 26 R_PAREN@37..38 ")"
27 SEMICOLON@[38; 39) ";" 27 SEMICOLON@38..39 ";"
28 WHITESPACE@[39; 40) "\n" 28 WHITESPACE@39..40 "\n"
29 STRUCT_DEF@[40; 66) 29 STRUCT_DEF@40..66
30 STRUCT_KW@[40; 46) "struct" 30 STRUCT_KW@40..46 "struct"
31 WHITESPACE@[46; 47) " " 31 WHITESPACE@46..47 " "
32 NAME@[47; 50) 32 NAME@47..50
33 IDENT@[47; 50) "Foo" 33 IDENT@47..50 "Foo"
34 TUPLE_FIELD_DEF_LIST@[50; 65) 34 TUPLE_FIELD_DEF_LIST@50..65
35 L_PAREN@[50; 51) "(" 35 L_PAREN@50..51 "("
36 TUPLE_FIELD_DEF@[51; 57) 36 TUPLE_FIELD_DEF@51..57
37 PATH_TYPE@[51; 57) 37 PATH_TYPE@51..57
38 PATH@[51; 57) 38 PATH@51..57
39 PATH_SEGMENT@[51; 57) 39 PATH_SEGMENT@51..57
40 NAME_REF@[51; 57) 40 NAME_REF@51..57
41 IDENT@[51; 57) "String" 41 IDENT@51..57 "String"
42 COMMA@[57; 58) "," 42 COMMA@57..58 ","
43 WHITESPACE@[58; 59) " " 43 WHITESPACE@58..59 " "
44 TUPLE_FIELD_DEF@[59; 64) 44 TUPLE_FIELD_DEF@59..64
45 PATH_TYPE@[59; 64) 45 PATH_TYPE@59..64
46 PATH@[59; 64) 46 PATH@59..64
47 PATH_SEGMENT@[59; 64) 47 PATH_SEGMENT@59..64
48 NAME_REF@[59; 64) 48 NAME_REF@59..64
49 IDENT@[59; 64) "usize" 49 IDENT@59..64 "usize"
50 R_PAREN@[64; 65) ")" 50 R_PAREN@64..65 ")"
51 SEMICOLON@[65; 66) ";" 51 SEMICOLON@65..66 ";"
52 WHITESPACE@[66; 67) "\n" 52 WHITESPACE@66..67 "\n"
53 STRUCT_DEF@[67; 105) 53 STRUCT_DEF@67..105
54 STRUCT_KW@[67; 73) "struct" 54 STRUCT_KW@67..73 "struct"
55 WHITESPACE@[73; 74) " " 55 WHITESPACE@73..74 " "
56 NAME@[74; 77) 56 NAME@74..77
57 IDENT@[74; 77) "Foo" 57 IDENT@74..77 "Foo"
58 WHITESPACE@[77; 78) " " 58 WHITESPACE@77..78 " "
59 RECORD_FIELD_DEF_LIST@[78; 105) 59 RECORD_FIELD_DEF_LIST@78..105
60 L_CURLY@[78; 79) "{" 60 L_CURLY@78..79 "{"
61 WHITESPACE@[79; 84) "\n " 61 WHITESPACE@79..84 "\n "
62 RECORD_FIELD_DEF@[84; 90) 62 RECORD_FIELD_DEF@84..90
63 NAME@[84; 85) 63 NAME@84..85
64 IDENT@[84; 85) "a" 64 IDENT@84..85 "a"
65 COLON@[85; 86) ":" 65 COLON@85..86 ":"
66 WHITESPACE@[86; 87) " " 66 WHITESPACE@86..87 " "
67 PATH_TYPE@[87; 90) 67 PATH_TYPE@87..90
68 PATH@[87; 90) 68 PATH@87..90
69 PATH_SEGMENT@[87; 90) 69 PATH_SEGMENT@87..90
70 NAME_REF@[87; 90) 70 NAME_REF@87..90
71 IDENT@[87; 90) "i32" 71 IDENT@87..90 "i32"
72 COMMA@[90; 91) "," 72 COMMA@90..91 ","
73 WHITESPACE@[91; 96) "\n " 73 WHITESPACE@91..96 "\n "
74 RECORD_FIELD_DEF@[96; 102) 74 RECORD_FIELD_DEF@96..102
75 NAME@[96; 97) 75 NAME@96..97
76 IDENT@[96; 97) "b" 76 IDENT@96..97 "b"
77 COLON@[97; 98) ":" 77 COLON@97..98 ":"
78 WHITESPACE@[98; 99) " " 78 WHITESPACE@98..99 " "
79 PATH_TYPE@[99; 102) 79 PATH_TYPE@99..102
80 PATH@[99; 102) 80 PATH@99..102
81 PATH_SEGMENT@[99; 102) 81 PATH_SEGMENT@99..102
82 NAME_REF@[99; 102) 82 NAME_REF@99..102
83 IDENT@[99; 102) "f32" 83 IDENT@99..102 "f32"
84 COMMA@[102; 103) "," 84 COMMA@102..103 ","
85 WHITESPACE@[103; 104) "\n" 85 WHITESPACE@103..104 "\n"
86 R_CURLY@[104; 105) "}" 86 R_CURLY@104..105 "}"
87 WHITESPACE@[105; 106) "\n" 87 WHITESPACE@105..106 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0084_paren_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0084_paren_type.rast
index 79d193616..9cd8910d4 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0084_paren_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0084_paren_type.rast
@@ -1,19 +1,19 @@
1SOURCE_FILE@[0; 16) 1SOURCE_FILE@0..16
2 TYPE_ALIAS_DEF@[0; 15) 2 TYPE_ALIAS_DEF@0..15
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "T" 6 IDENT@5..6 "T"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 PAREN_TYPE@[9; 14) 10 PAREN_TYPE@9..14
11 L_PAREN@[9; 10) "(" 11 L_PAREN@9..10 "("
12 PATH_TYPE@[10; 13) 12 PATH_TYPE@10..13
13 PATH@[10; 13) 13 PATH@10..13
14 PATH_SEGMENT@[10; 13) 14 PATH_SEGMENT@10..13
15 NAME_REF@[10; 13) 15 NAME_REF@10..13
16 IDENT@[10; 13) "i32" 16 IDENT@10..13 "i32"
17 R_PAREN@[13; 14) ")" 17 R_PAREN@13..14 ")"
18 SEMICOLON@[14; 15) ";" 18 SEMICOLON@14..15 ";"
19 WHITESPACE@[15; 16) "\n" 19 WHITESPACE@15..16 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0085_expr_literals.rast b/crates/ra_syntax/test_data/parser/inline/ok/0085_expr_literals.rast
index c2cec89b4..b165789fd 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0085_expr_literals.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0085_expr_literals.rast
@@ -1,136 +1,136 @@
1SOURCE_FILE@[0; 189) 1SOURCE_FILE@0..189
2 FN_DEF@[0; 188) 2 FN_DEF@0..188
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 188) 11 BLOCK_EXPR@9..188
12 BLOCK@[9; 188) 12 BLOCK@9..188
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 28) 15 LET_STMT@15..28
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 PLACEHOLDER_PAT@[19; 20) 18 PLACEHOLDER_PAT@19..20
19 UNDERSCORE@[19; 20) "_" 19 UNDERSCORE@19..20 "_"
20 WHITESPACE@[20; 21) " " 20 WHITESPACE@20..21 " "
21 EQ@[21; 22) "=" 21 EQ@21..22 "="
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 LITERAL@[23; 27) 23 LITERAL@23..27
24 TRUE_KW@[23; 27) "true" 24 TRUE_KW@23..27 "true"
25 SEMICOLON@[27; 28) ";" 25 SEMICOLON@27..28 ";"
26 WHITESPACE@[28; 33) "\n " 26 WHITESPACE@28..33 "\n "
27 LET_STMT@[33; 47) 27 LET_STMT@33..47
28 LET_KW@[33; 36) "let" 28 LET_KW@33..36 "let"
29 WHITESPACE@[36; 37) " " 29 WHITESPACE@36..37 " "
30 PLACEHOLDER_PAT@[37; 38) 30 PLACEHOLDER_PAT@37..38
31 UNDERSCORE@[37; 38) "_" 31 UNDERSCORE@37..38 "_"
32 WHITESPACE@[38; 39) " " 32 WHITESPACE@38..39 " "
33 EQ@[39; 40) "=" 33 EQ@39..40 "="
34 WHITESPACE@[40; 41) " " 34 WHITESPACE@40..41 " "
35 LITERAL@[41; 46) 35 LITERAL@41..46
36 FALSE_KW@[41; 46) "false" 36 FALSE_KW@41..46 "false"
37 SEMICOLON@[46; 47) ";" 37 SEMICOLON@46..47 ";"
38 WHITESPACE@[47; 52) "\n " 38 WHITESPACE@47..52 "\n "
39 LET_STMT@[52; 62) 39 LET_STMT@52..62
40 LET_KW@[52; 55) "let" 40 LET_KW@52..55 "let"
41 WHITESPACE@[55; 56) " " 41 WHITESPACE@55..56 " "
42 PLACEHOLDER_PAT@[56; 57) 42 PLACEHOLDER_PAT@56..57
43 UNDERSCORE@[56; 57) "_" 43 UNDERSCORE@56..57 "_"
44 WHITESPACE@[57; 58) " " 44 WHITESPACE@57..58 " "
45 EQ@[58; 59) "=" 45 EQ@58..59 "="
46 WHITESPACE@[59; 60) " " 46 WHITESPACE@59..60 " "
47 LITERAL@[60; 61) 47 LITERAL@60..61
48 INT_NUMBER@[60; 61) "1" 48 INT_NUMBER@60..61 "1"
49 SEMICOLON@[61; 62) ";" 49 SEMICOLON@61..62 ";"
50 WHITESPACE@[62; 67) "\n " 50 WHITESPACE@62..67 "\n "
51 LET_STMT@[67; 79) 51 LET_STMT@67..79
52 LET_KW@[67; 70) "let" 52 LET_KW@67..70 "let"
53 WHITESPACE@[70; 71) " " 53 WHITESPACE@70..71 " "
54 PLACEHOLDER_PAT@[71; 72) 54 PLACEHOLDER_PAT@71..72
55 UNDERSCORE@[71; 72) "_" 55 UNDERSCORE@71..72 "_"
56 WHITESPACE@[72; 73) " " 56 WHITESPACE@72..73 " "
57 EQ@[73; 74) "=" 57 EQ@73..74 "="
58 WHITESPACE@[74; 75) " " 58 WHITESPACE@74..75 " "
59 LITERAL@[75; 78) 59 LITERAL@75..78
60 FLOAT_NUMBER@[75; 78) "2.0" 60 FLOAT_NUMBER@75..78 "2.0"
61 SEMICOLON@[78; 79) ";" 61 SEMICOLON@78..79 ";"
62 WHITESPACE@[79; 84) "\n " 62 WHITESPACE@79..84 "\n "
63 LET_STMT@[84; 97) 63 LET_STMT@84..97
64 LET_KW@[84; 87) "let" 64 LET_KW@84..87 "let"
65 WHITESPACE@[87; 88) " " 65 WHITESPACE@87..88 " "
66 PLACEHOLDER_PAT@[88; 89) 66 PLACEHOLDER_PAT@88..89
67 UNDERSCORE@[88; 89) "_" 67 UNDERSCORE@88..89 "_"
68 WHITESPACE@[89; 90) " " 68 WHITESPACE@89..90 " "
69 EQ@[90; 91) "=" 69 EQ@90..91 "="
70 WHITESPACE@[91; 92) " " 70 WHITESPACE@91..92 " "
71 LITERAL@[92; 96) 71 LITERAL@92..96
72 BYTE@[92; 96) "b\'a\'" 72 BYTE@92..96 "b\'a\'"
73 SEMICOLON@[96; 97) ";" 73 SEMICOLON@96..97 ";"
74 WHITESPACE@[97; 102) "\n " 74 WHITESPACE@97..102 "\n "
75 LET_STMT@[102; 114) 75 LET_STMT@102..114
76 LET_KW@[102; 105) "let" 76 LET_KW@102..105 "let"
77 WHITESPACE@[105; 106) " " 77 WHITESPACE@105..106 " "
78 PLACEHOLDER_PAT@[106; 107) 78 PLACEHOLDER_PAT@106..107
79 UNDERSCORE@[106; 107) "_" 79 UNDERSCORE@106..107 "_"
80 WHITESPACE@[107; 108) " " 80 WHITESPACE@107..108 " "
81 EQ@[108; 109) "=" 81 EQ@108..109 "="
82 WHITESPACE@[109; 110) " " 82 WHITESPACE@109..110 " "
83 LITERAL@[110; 113) 83 LITERAL@110..113
84 CHAR@[110; 113) "\'b\'" 84 CHAR@110..113 "\'b\'"
85 SEMICOLON@[113; 114) ";" 85 SEMICOLON@113..114 ";"
86 WHITESPACE@[114; 119) "\n " 86 WHITESPACE@114..119 "\n "
87 LET_STMT@[119; 131) 87 LET_STMT@119..131
88 LET_KW@[119; 122) "let" 88 LET_KW@119..122 "let"
89 WHITESPACE@[122; 123) " " 89 WHITESPACE@122..123 " "
90 PLACEHOLDER_PAT@[123; 124) 90 PLACEHOLDER_PAT@123..124
91 UNDERSCORE@[123; 124) "_" 91 UNDERSCORE@123..124 "_"
92 WHITESPACE@[124; 125) " " 92 WHITESPACE@124..125 " "
93 EQ@[125; 126) "=" 93 EQ@125..126 "="
94 WHITESPACE@[126; 127) " " 94 WHITESPACE@126..127 " "
95 LITERAL@[127; 130) 95 LITERAL@127..130
96 STRING@[127; 130) "\"c\"" 96 STRING@127..130 "\"c\""
97 SEMICOLON@[130; 131) ";" 97 SEMICOLON@130..131 ";"
98 WHITESPACE@[131; 136) "\n " 98 WHITESPACE@131..136 "\n "
99 LET_STMT@[136; 149) 99 LET_STMT@136..149
100 LET_KW@[136; 139) "let" 100 LET_KW@136..139 "let"
101 WHITESPACE@[139; 140) " " 101 WHITESPACE@139..140 " "
102 PLACEHOLDER_PAT@[140; 141) 102 PLACEHOLDER_PAT@140..141
103 UNDERSCORE@[140; 141) "_" 103 UNDERSCORE@140..141 "_"
104 WHITESPACE@[141; 142) " " 104 WHITESPACE@141..142 " "
105 EQ@[142; 143) "=" 105 EQ@142..143 "="
106 WHITESPACE@[143; 144) " " 106 WHITESPACE@143..144 " "
107 LITERAL@[144; 148) 107 LITERAL@144..148
108 RAW_STRING@[144; 148) "r\"d\"" 108 RAW_STRING@144..148 "r\"d\""
109 SEMICOLON@[148; 149) ";" 109 SEMICOLON@148..149 ";"
110 WHITESPACE@[149; 154) "\n " 110 WHITESPACE@149..154 "\n "
111 LET_STMT@[154; 167) 111 LET_STMT@154..167
112 LET_KW@[154; 157) "let" 112 LET_KW@154..157 "let"
113 WHITESPACE@[157; 158) " " 113 WHITESPACE@157..158 " "
114 PLACEHOLDER_PAT@[158; 159) 114 PLACEHOLDER_PAT@158..159
115 UNDERSCORE@[158; 159) "_" 115 UNDERSCORE@158..159 "_"
116 WHITESPACE@[159; 160) " " 116 WHITESPACE@159..160 " "
117 EQ@[160; 161) "=" 117 EQ@160..161 "="
118 WHITESPACE@[161; 162) " " 118 WHITESPACE@161..162 " "
119 LITERAL@[162; 166) 119 LITERAL@162..166
120 BYTE_STRING@[162; 166) "b\"e\"" 120 BYTE_STRING@162..166 "b\"e\""
121 SEMICOLON@[166; 167) ";" 121 SEMICOLON@166..167 ";"
122 WHITESPACE@[167; 172) "\n " 122 WHITESPACE@167..172 "\n "
123 LET_STMT@[172; 186) 123 LET_STMT@172..186
124 LET_KW@[172; 175) "let" 124 LET_KW@172..175 "let"
125 WHITESPACE@[175; 176) " " 125 WHITESPACE@175..176 " "
126 PLACEHOLDER_PAT@[176; 177) 126 PLACEHOLDER_PAT@176..177
127 UNDERSCORE@[176; 177) "_" 127 UNDERSCORE@176..177 "_"
128 WHITESPACE@[177; 178) " " 128 WHITESPACE@177..178 " "
129 EQ@[178; 179) "=" 129 EQ@178..179 "="
130 WHITESPACE@[179; 180) " " 130 WHITESPACE@179..180 " "
131 LITERAL@[180; 185) 131 LITERAL@180..185
132 RAW_BYTE_STRING@[180; 185) "br\"f\"" 132 RAW_BYTE_STRING@180..185 "br\"f\""
133 SEMICOLON@[185; 186) ";" 133 SEMICOLON@185..186 ";"
134 WHITESPACE@[186; 187) "\n" 134 WHITESPACE@186..187 "\n"
135 R_CURLY@[187; 188) "}" 135 R_CURLY@187..188 "}"
136 WHITESPACE@[188; 189) "\n" 136 WHITESPACE@188..189 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0086_function_ret_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0086_function_ret_type.rast
index ca1a97161..36f17133d 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0086_function_ret_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0086_function_ret_type.rast
@@ -1,36 +1,36 @@
1SOURCE_FILE@[0; 30) 1SOURCE_FILE@0..30
2 FN_DEF@[0; 11) 2 FN_DEF@0..11
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 11) 11 BLOCK_EXPR@9..11
12 BLOCK@[9; 11) 12 BLOCK@9..11
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 R_CURLY@[10; 11) "}" 14 R_CURLY@10..11 "}"
15 WHITESPACE@[11; 12) "\n" 15 WHITESPACE@11..12 "\n"
16 FN_DEF@[12; 29) 16 FN_DEF@12..29
17 FN_KW@[12; 14) "fn" 17 FN_KW@12..14 "fn"
18 WHITESPACE@[14; 15) " " 18 WHITESPACE@14..15 " "
19 NAME@[15; 18) 19 NAME@15..18
20 IDENT@[15; 18) "bar" 20 IDENT@15..18 "bar"
21 PARAM_LIST@[18; 20) 21 PARAM_LIST@18..20
22 L_PAREN@[18; 19) "(" 22 L_PAREN@18..19 "("
23 R_PAREN@[19; 20) ")" 23 R_PAREN@19..20 ")"
24 WHITESPACE@[20; 21) " " 24 WHITESPACE@20..21 " "
25 RET_TYPE@[21; 26) 25 RET_TYPE@21..26
26 THIN_ARROW@[21; 23) "->" 26 THIN_ARROW@21..23 "->"
27 WHITESPACE@[23; 24) " " 27 WHITESPACE@23..24 " "
28 TUPLE_TYPE@[24; 26) 28 TUPLE_TYPE@24..26
29 L_PAREN@[24; 25) "(" 29 L_PAREN@24..25 "("
30 R_PAREN@[25; 26) ")" 30 R_PAREN@25..26 ")"
31 WHITESPACE@[26; 27) " " 31 WHITESPACE@26..27 " "
32 BLOCK_EXPR@[27; 29) 32 BLOCK_EXPR@27..29
33 BLOCK@[27; 29) 33 BLOCK@27..29
34 L_CURLY@[27; 28) "{" 34 L_CURLY@27..28 "{"
35 R_CURLY@[28; 29) "}" 35 R_CURLY@28..29 "}"
36 WHITESPACE@[29; 30) "\n" 36 WHITESPACE@29..30 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0087_unsafe_impl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0087_unsafe_impl.rast
index e614acc6f..01ed3afca 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0087_unsafe_impl.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0087_unsafe_impl.rast
@@ -1,16 +1,16 @@
1SOURCE_FILE@[0; 19) 1SOURCE_FILE@0..19
2 IMPL_DEF@[0; 18) 2 IMPL_DEF@0..18
3 UNSAFE_KW@[0; 6) "unsafe" 3 UNSAFE_KW@0..6 "unsafe"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 IMPL_KW@[7; 11) "impl" 5 IMPL_KW@7..11 "impl"
6 WHITESPACE@[11; 12) " " 6 WHITESPACE@11..12 " "
7 PATH_TYPE@[12; 15) 7 PATH_TYPE@12..15
8 PATH@[12; 15) 8 PATH@12..15
9 PATH_SEGMENT@[12; 15) 9 PATH_SEGMENT@12..15
10 NAME_REF@[12; 15) 10 NAME_REF@12..15
11 IDENT@[12; 15) "Foo" 11 IDENT@12..15 "Foo"
12 WHITESPACE@[15; 16) " " 12 WHITESPACE@15..16 " "
13 ITEM_LIST@[16; 18) 13 ITEM_LIST@16..18
14 L_CURLY@[16; 17) "{" 14 L_CURLY@16..17 "{"
15 R_CURLY@[17; 18) "}" 15 R_CURLY@17..18 "}"
16 WHITESPACE@[18; 19) "\n" 16 WHITESPACE@18..19 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0088_break_ambiguity.rast b/crates/ra_syntax/test_data/parser/inline/ok/0088_break_ambiguity.rast
index b23f43b46..ca5aa007e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0088_break_ambiguity.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0088_break_ambiguity.rast
@@ -1,69 +1,69 @@
1SOURCE_FILE@[0; 88) 1SOURCE_FILE@0..88
2 FN_DEF@[0; 87) 2 FN_DEF@0..87
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 BLOCK_EXPR@[8; 87) 10 BLOCK_EXPR@8..87
11 BLOCK@[8; 87) 11 BLOCK@8..87
12 L_CURLY@[8; 9) "{" 12 L_CURLY@8..9 "{"
13 WHITESPACE@[9; 14) "\n " 13 WHITESPACE@9..14 "\n "
14 EXPR_STMT@[14; 25) 14 EXPR_STMT@14..25
15 IF_EXPR@[14; 25) 15 IF_EXPR@14..25
16 IF_KW@[14; 16) "if" 16 IF_KW@14..16 "if"
17 WHITESPACE@[16; 17) " " 17 WHITESPACE@16..17 " "
18 CONDITION@[17; 22) 18 CONDITION@17..22
19 BREAK_EXPR@[17; 22) 19 BREAK_EXPR@17..22
20 BREAK_KW@[17; 22) "break" 20 BREAK_KW@17..22 "break"
21 WHITESPACE@[22; 23) " " 21 WHITESPACE@22..23 " "
22 BLOCK_EXPR@[23; 25) 22 BLOCK_EXPR@23..25
23 BLOCK@[23; 25) 23 BLOCK@23..25
24 L_CURLY@[23; 24) "{" 24 L_CURLY@23..24 "{"
25 R_CURLY@[24; 25) "}" 25 R_CURLY@24..25 "}"
26 WHITESPACE@[25; 30) "\n " 26 WHITESPACE@25..30 "\n "
27 EXPR_STMT@[30; 44) 27 EXPR_STMT@30..44
28 WHILE_EXPR@[30; 44) 28 WHILE_EXPR@30..44
29 WHILE_KW@[30; 35) "while" 29 WHILE_KW@30..35 "while"
30 WHITESPACE@[35; 36) " " 30 WHITESPACE@35..36 " "
31 CONDITION@[36; 41) 31 CONDITION@36..41
32 BREAK_EXPR@[36; 41) 32 BREAK_EXPR@36..41
33 BREAK_KW@[36; 41) "break" 33 BREAK_KW@36..41 "break"
34 WHITESPACE@[41; 42) " " 34 WHITESPACE@41..42 " "
35 BLOCK_EXPR@[42; 44) 35 BLOCK_EXPR@42..44
36 BLOCK@[42; 44) 36 BLOCK@42..44
37 L_CURLY@[42; 43) "{" 37 L_CURLY@42..43 "{"
38 R_CURLY@[43; 44) "}" 38 R_CURLY@43..44 "}"
39 WHITESPACE@[44; 49) "\n " 39 WHITESPACE@44..49 "\n "
40 EXPR_STMT@[49; 66) 40 EXPR_STMT@49..66
41 FOR_EXPR@[49; 66) 41 FOR_EXPR@49..66
42 FOR_KW@[49; 52) "for" 42 FOR_KW@49..52 "for"
43 WHITESPACE@[52; 53) " " 43 WHITESPACE@52..53 " "
44 BIND_PAT@[53; 54) 44 BIND_PAT@53..54
45 NAME@[53; 54) 45 NAME@53..54
46 IDENT@[53; 54) "i" 46 IDENT@53..54 "i"
47 WHITESPACE@[54; 55) " " 47 WHITESPACE@54..55 " "
48 IN_KW@[55; 57) "in" 48 IN_KW@55..57 "in"
49 WHITESPACE@[57; 58) " " 49 WHITESPACE@57..58 " "
50 BREAK_EXPR@[58; 63) 50 BREAK_EXPR@58..63
51 BREAK_KW@[58; 63) "break" 51 BREAK_KW@58..63 "break"
52 WHITESPACE@[63; 64) " " 52 WHITESPACE@63..64 " "
53 BLOCK_EXPR@[64; 66) 53 BLOCK_EXPR@64..66
54 BLOCK@[64; 66) 54 BLOCK@64..66
55 L_CURLY@[64; 65) "{" 55 L_CURLY@64..65 "{"
56 R_CURLY@[65; 66) "}" 56 R_CURLY@65..66 "}"
57 WHITESPACE@[66; 71) "\n " 57 WHITESPACE@66..71 "\n "
58 MATCH_EXPR@[71; 85) 58 MATCH_EXPR@71..85
59 MATCH_KW@[71; 76) "match" 59 MATCH_KW@71..76 "match"
60 WHITESPACE@[76; 77) " " 60 WHITESPACE@76..77 " "
61 BREAK_EXPR@[77; 82) 61 BREAK_EXPR@77..82
62 BREAK_KW@[77; 82) "break" 62 BREAK_KW@77..82 "break"
63 WHITESPACE@[82; 83) " " 63 WHITESPACE@82..83 " "
64 MATCH_ARM_LIST@[83; 85) 64 MATCH_ARM_LIST@83..85
65 L_CURLY@[83; 84) "{" 65 L_CURLY@83..84 "{"
66 R_CURLY@[84; 85) "}" 66 R_CURLY@84..85 "}"
67 WHITESPACE@[85; 86) "\n" 67 WHITESPACE@85..86 "\n"
68 R_CURLY@[86; 87) "}" 68 R_CURLY@86..87 "}"
69 WHITESPACE@[87; 88) "\n" 69 WHITESPACE@87..88 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0089_extern_fn.rast b/crates/ra_syntax/test_data/parser/inline/ok/0089_extern_fn.rast
index b494f6c59..1c1e349e1 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0089_extern_fn.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0089_extern_fn.rast
@@ -1,18 +1,18 @@
1SOURCE_FILE@[0; 19) 1SOURCE_FILE@0..19
2 FN_DEF@[0; 18) 2 FN_DEF@0..18
3 ABI@[0; 6) 3 ABI@0..6
4 EXTERN_KW@[0; 6) "extern" 4 EXTERN_KW@0..6 "extern"
5 WHITESPACE@[6; 7) " " 5 WHITESPACE@6..7 " "
6 FN_KW@[7; 9) "fn" 6 FN_KW@7..9 "fn"
7 WHITESPACE@[9; 10) " " 7 WHITESPACE@9..10 " "
8 NAME@[10; 13) 8 NAME@10..13
9 IDENT@[10; 13) "foo" 9 IDENT@10..13 "foo"
10 PARAM_LIST@[13; 15) 10 PARAM_LIST@13..15
11 L_PAREN@[13; 14) "(" 11 L_PAREN@13..14 "("
12 R_PAREN@[14; 15) ")" 12 R_PAREN@14..15 ")"
13 WHITESPACE@[15; 16) " " 13 WHITESPACE@15..16 " "
14 BLOCK_EXPR@[16; 18) 14 BLOCK_EXPR@16..18
15 BLOCK@[16; 18) 15 BLOCK@16..18
16 L_CURLY@[16; 17) "{" 16 L_CURLY@16..17 "{"
17 R_CURLY@[17; 18) "}" 17 R_CURLY@17..18 "}"
18 WHITESPACE@[18; 19) "\n" 18 WHITESPACE@18..19 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0090_type_param_default.rast b/crates/ra_syntax/test_data/parser/inline/ok/0090_type_param_default.rast
index 1d7796449..cee2bc906 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0090_type_param_default.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0090_type_param_default.rast
@@ -1,22 +1,22 @@
1SOURCE_FILE@[0; 19) 1SOURCE_FILE@0..19
2 STRUCT_DEF@[0; 18) 2 STRUCT_DEF@0..18
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 TYPE_PARAM_LIST@[8; 17) 7 TYPE_PARAM_LIST@8..17
8 L_ANGLE@[8; 9) "<" 8 L_ANGLE@8..9 "<"
9 TYPE_PARAM@[9; 16) 9 TYPE_PARAM@9..16
10 NAME@[9; 10) 10 NAME@9..10
11 IDENT@[9; 10) "T" 11 IDENT@9..10 "T"
12 WHITESPACE@[10; 11) " " 12 WHITESPACE@10..11 " "
13 EQ@[11; 12) "=" 13 EQ@11..12 "="
14 WHITESPACE@[12; 13) " " 14 WHITESPACE@12..13 " "
15 PATH_TYPE@[13; 16) 15 PATH_TYPE@13..16
16 PATH@[13; 16) 16 PATH@13..16
17 PATH_SEGMENT@[13; 16) 17 PATH_SEGMENT@13..16
18 NAME_REF@[13; 16) 18 NAME_REF@13..16
19 IDENT@[13; 16) "i32" 19 IDENT@13..16 "i32"
20 R_ANGLE@[16; 17) ">" 20 R_ANGLE@16..17 ">"
21 SEMICOLON@[17; 18) ";" 21 SEMICOLON@17..18 ";"
22 WHITESPACE@[18; 19) "\n" 22 WHITESPACE@18..19 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0091_auto_trait.rast b/crates/ra_syntax/test_data/parser/inline/ok/0091_auto_trait.rast
index 7093c2b1f..800412cef 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0091_auto_trait.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0091_auto_trait.rast
@@ -1,13 +1,13 @@
1SOURCE_FILE@[0; 16) 1SOURCE_FILE@0..16
2 TRAIT_DEF@[0; 15) 2 TRAIT_DEF@0..15
3 AUTO_KW@[0; 4) "auto" 3 AUTO_KW@0..4 "auto"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 TRAIT_KW@[5; 10) "trait" 5 TRAIT_KW@5..10 "trait"
6 WHITESPACE@[10; 11) " " 6 WHITESPACE@10..11 " "
7 NAME@[11; 12) 7 NAME@11..12
8 IDENT@[11; 12) "T" 8 IDENT@11..12 "T"
9 WHITESPACE@[12; 13) " " 9 WHITESPACE@12..13 " "
10 ITEM_LIST@[13; 15) 10 ITEM_LIST@13..15
11 L_CURLY@[13; 14) "{" 11 L_CURLY@13..14 "{"
12 R_CURLY@[14; 15) "}" 12 R_CURLY@14..15 "}"
13 WHITESPACE@[15; 16) "\n" 13 WHITESPACE@15..16 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0092_fn_pointer_type_with_ret.rast b/crates/ra_syntax/test_data/parser/inline/ok/0092_fn_pointer_type_with_ret.rast
index db6013c6f..1e2d7db7c 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0092_fn_pointer_type_with_ret.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0092_fn_pointer_type_with_ret.rast
@@ -1,23 +1,23 @@
1SOURCE_FILE@[0; 21) 1SOURCE_FILE@0..21
2 TYPE_ALIAS_DEF@[0; 20) 2 TYPE_ALIAS_DEF@0..20
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "F" 6 IDENT@5..6 "F"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 FN_POINTER_TYPE@[9; 19) 10 FN_POINTER_TYPE@9..19
11 FN_KW@[9; 11) "fn" 11 FN_KW@9..11 "fn"
12 PARAM_LIST@[11; 13) 12 PARAM_LIST@11..13
13 L_PAREN@[11; 12) "(" 13 L_PAREN@11..12 "("
14 R_PAREN@[12; 13) ")" 14 R_PAREN@12..13 ")"
15 WHITESPACE@[13; 14) " " 15 WHITESPACE@13..14 " "
16 RET_TYPE@[14; 19) 16 RET_TYPE@14..19
17 THIN_ARROW@[14; 16) "->" 17 THIN_ARROW@14..16 "->"
18 WHITESPACE@[16; 17) " " 18 WHITESPACE@16..17 " "
19 TUPLE_TYPE@[17; 19) 19 TUPLE_TYPE@17..19
20 L_PAREN@[17; 18) "(" 20 L_PAREN@17..18 "("
21 R_PAREN@[18; 19) ")" 21 R_PAREN@18..19 ")"
22 SEMICOLON@[19; 20) ";" 22 SEMICOLON@19..20 ";"
23 WHITESPACE@[20; 21) "\n" 23 WHITESPACE@20..21 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0093_index_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0093_index_expr.rast
index 118cfc096..c264dae5e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0093_index_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0093_index_expr.rast
@@ -1,34 +1,34 @@
1SOURCE_FILE@[0; 26) 1SOURCE_FILE@0..26
2 FN_DEF@[0; 25) 2 FN_DEF@0..25
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 25) 11 BLOCK_EXPR@9..25
12 BLOCK@[9; 25) 12 BLOCK@9..25
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 23) 15 EXPR_STMT@15..23
16 INDEX_EXPR@[15; 22) 16 INDEX_EXPR@15..22
17 INDEX_EXPR@[15; 19) 17 INDEX_EXPR@15..19
18 PATH_EXPR@[15; 16) 18 PATH_EXPR@15..16
19 PATH@[15; 16) 19 PATH@15..16
20 PATH_SEGMENT@[15; 16) 20 PATH_SEGMENT@15..16
21 NAME_REF@[15; 16) 21 NAME_REF@15..16
22 IDENT@[15; 16) "x" 22 IDENT@15..16 "x"
23 L_BRACK@[16; 17) "[" 23 L_BRACK@16..17 "["
24 LITERAL@[17; 18) 24 LITERAL@17..18
25 INT_NUMBER@[17; 18) "1" 25 INT_NUMBER@17..18 "1"
26 R_BRACK@[18; 19) "]" 26 R_BRACK@18..19 "]"
27 L_BRACK@[19; 20) "[" 27 L_BRACK@19..20 "["
28 LITERAL@[20; 21) 28 LITERAL@20..21
29 INT_NUMBER@[20; 21) "2" 29 INT_NUMBER@20..21 "2"
30 R_BRACK@[21; 22) "]" 30 R_BRACK@21..22 "]"
31 SEMICOLON@[22; 23) ";" 31 SEMICOLON@22..23 ";"
32 WHITESPACE@[23; 24) "\n" 32 WHITESPACE@23..24 "\n"
33 R_CURLY@[24; 25) "}" 33 R_CURLY@24..25 "}"
34 WHITESPACE@[25; 26) "\n" 34 WHITESPACE@25..26 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0094_unsafe_auto_trait.rast b/crates/ra_syntax/test_data/parser/inline/ok/0094_unsafe_auto_trait.rast
index 3da3beaf4..9370f6ae7 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0094_unsafe_auto_trait.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0094_unsafe_auto_trait.rast
@@ -1,15 +1,15 @@
1SOURCE_FILE@[0; 23) 1SOURCE_FILE@0..23
2 TRAIT_DEF@[0; 22) 2 TRAIT_DEF@0..22
3 UNSAFE_KW@[0; 6) "unsafe" 3 UNSAFE_KW@0..6 "unsafe"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 AUTO_KW@[7; 11) "auto" 5 AUTO_KW@7..11 "auto"
6 WHITESPACE@[11; 12) " " 6 WHITESPACE@11..12 " "
7 TRAIT_KW@[12; 17) "trait" 7 TRAIT_KW@12..17 "trait"
8 WHITESPACE@[17; 18) " " 8 WHITESPACE@17..18 " "
9 NAME@[18; 19) 9 NAME@18..19
10 IDENT@[18; 19) "T" 10 IDENT@18..19 "T"
11 WHITESPACE@[19; 20) " " 11 WHITESPACE@19..20 " "
12 ITEM_LIST@[20; 22) 12 ITEM_LIST@20..22
13 L_CURLY@[20; 21) "{" 13 L_CURLY@20..21 "{"
14 R_CURLY@[21; 22) "}" 14 R_CURLY@21..22 "}"
15 WHITESPACE@[22; 23) "\n" 15 WHITESPACE@22..23 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0095_placeholder_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0095_placeholder_pat.rast
index ebe7816a4..24e1ba8a0 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0095_placeholder_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0095_placeholder_pat.rast
@@ -1,29 +1,29 @@
1SOURCE_FILE@[0; 26) 1SOURCE_FILE@0..26
2 FN_DEF@[0; 25) 2 FN_DEF@0..25
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 25) 11 BLOCK_EXPR@10..25
12 BLOCK@[10; 25) 12 BLOCK@10..25
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 12) " " 14 WHITESPACE@11..12 " "
15 LET_STMT@[12; 23) 15 LET_STMT@12..23
16 LET_KW@[12; 15) "let" 16 LET_KW@12..15 "let"
17 WHITESPACE@[15; 16) " " 17 WHITESPACE@15..16 " "
18 PLACEHOLDER_PAT@[16; 17) 18 PLACEHOLDER_PAT@16..17
19 UNDERSCORE@[16; 17) "_" 19 UNDERSCORE@16..17 "_"
20 WHITESPACE@[17; 18) " " 20 WHITESPACE@17..18 " "
21 EQ@[18; 19) "=" 21 EQ@18..19 "="
22 WHITESPACE@[19; 20) " " 22 WHITESPACE@19..20 " "
23 TUPLE_EXPR@[20; 22) 23 TUPLE_EXPR@20..22
24 L_PAREN@[20; 21) "(" 24 L_PAREN@20..21 "("
25 R_PAREN@[21; 22) ")" 25 R_PAREN@21..22 ")"
26 SEMICOLON@[22; 23) ";" 26 SEMICOLON@22..23 ";"
27 WHITESPACE@[23; 24) " " 27 WHITESPACE@23..24 " "
28 R_CURLY@[24; 25) "}" 28 R_CURLY@24..25 "}"
29 WHITESPACE@[25; 26) "\n" 29 WHITESPACE@25..26 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0096_no_semi_after_block.rast b/crates/ra_syntax/test_data/parser/inline/ok/0096_no_semi_after_block.rast
index 6bd6f5a6b..47462d44e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0096_no_semi_after_block.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0096_no_semi_after_block.rast
@@ -1,130 +1,130 @@
1SOURCE_FILE@[0; 167) 1SOURCE_FILE@0..167
2 FN_DEF@[0; 166) 2 FN_DEF@0..166
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 166) 11 BLOCK_EXPR@9..166
12 BLOCK@[9; 166) 12 BLOCK@9..166
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 25) 15 EXPR_STMT@15..25
16 IF_EXPR@[15; 25) 16 IF_EXPR@15..25
17 IF_KW@[15; 17) "if" 17 IF_KW@15..17 "if"
18 WHITESPACE@[17; 18) " " 18 WHITESPACE@17..18 " "
19 CONDITION@[18; 22) 19 CONDITION@18..22
20 LITERAL@[18; 22) 20 LITERAL@18..22
21 TRUE_KW@[18; 22) "true" 21 TRUE_KW@18..22 "true"
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 BLOCK_EXPR@[23; 25) 23 BLOCK_EXPR@23..25
24 BLOCK@[23; 25) 24 BLOCK@23..25
25 L_CURLY@[23; 24) "{" 25 L_CURLY@23..24 "{"
26 R_CURLY@[24; 25) "}" 26 R_CURLY@24..25 "}"
27 WHITESPACE@[25; 30) "\n " 27 WHITESPACE@25..30 "\n "
28 EXPR_STMT@[30; 37) 28 EXPR_STMT@30..37
29 LOOP_EXPR@[30; 37) 29 LOOP_EXPR@30..37
30 LOOP_KW@[30; 34) "loop" 30 LOOP_KW@30..34 "loop"
31 WHITESPACE@[34; 35) " " 31 WHITESPACE@34..35 " "
32 BLOCK_EXPR@[35; 37) 32 BLOCK_EXPR@35..37
33 BLOCK@[35; 37) 33 BLOCK@35..37
34 L_CURLY@[35; 36) "{" 34 L_CURLY@35..36 "{"
35 R_CURLY@[36; 37) "}" 35 R_CURLY@36..37 "}"
36 WHITESPACE@[37; 42) "\n " 36 WHITESPACE@37..42 "\n "
37 EXPR_STMT@[42; 53) 37 EXPR_STMT@42..53
38 MATCH_EXPR@[42; 53) 38 MATCH_EXPR@42..53
39 MATCH_KW@[42; 47) "match" 39 MATCH_KW@42..47 "match"
40 WHITESPACE@[47; 48) " " 40 WHITESPACE@47..48 " "
41 TUPLE_EXPR@[48; 50) 41 TUPLE_EXPR@48..50
42 L_PAREN@[48; 49) "(" 42 L_PAREN@48..49 "("
43 R_PAREN@[49; 50) ")" 43 R_PAREN@49..50 ")"
44 WHITESPACE@[50; 51) " " 44 WHITESPACE@50..51 " "
45 MATCH_ARM_LIST@[51; 53) 45 MATCH_ARM_LIST@51..53
46 L_CURLY@[51; 52) "{" 46 L_CURLY@51..52 "{"
47 R_CURLY@[52; 53) "}" 47 R_CURLY@52..53 "}"
48 WHITESPACE@[53; 58) "\n " 48 WHITESPACE@53..58 "\n "
49 EXPR_STMT@[58; 71) 49 EXPR_STMT@58..71
50 WHILE_EXPR@[58; 71) 50 WHILE_EXPR@58..71
51 WHILE_KW@[58; 63) "while" 51 WHILE_KW@58..63 "while"
52 WHITESPACE@[63; 64) " " 52 WHITESPACE@63..64 " "
53 CONDITION@[64; 68) 53 CONDITION@64..68
54 LITERAL@[64; 68) 54 LITERAL@64..68
55 TRUE_KW@[64; 68) "true" 55 TRUE_KW@64..68 "true"
56 WHITESPACE@[68; 69) " " 56 WHITESPACE@68..69 " "
57 BLOCK_EXPR@[69; 71) 57 BLOCK_EXPR@69..71
58 BLOCK@[69; 71) 58 BLOCK@69..71
59 L_CURLY@[69; 70) "{" 59 L_CURLY@69..70 "{"
60 R_CURLY@[70; 71) "}" 60 R_CURLY@70..71 "}"
61 WHITESPACE@[71; 76) "\n " 61 WHITESPACE@71..76 "\n "
62 EXPR_STMT@[76; 90) 62 EXPR_STMT@76..90
63 FOR_EXPR@[76; 90) 63 FOR_EXPR@76..90
64 FOR_KW@[76; 79) "for" 64 FOR_KW@76..79 "for"
65 WHITESPACE@[79; 80) " " 65 WHITESPACE@79..80 " "
66 PLACEHOLDER_PAT@[80; 81) 66 PLACEHOLDER_PAT@80..81
67 UNDERSCORE@[80; 81) "_" 67 UNDERSCORE@80..81 "_"
68 WHITESPACE@[81; 82) " " 68 WHITESPACE@81..82 " "
69 IN_KW@[82; 84) "in" 69 IN_KW@82..84 "in"
70 WHITESPACE@[84; 85) " " 70 WHITESPACE@84..85 " "
71 TUPLE_EXPR@[85; 87) 71 TUPLE_EXPR@85..87
72 L_PAREN@[85; 86) "(" 72 L_PAREN@85..86 "("
73 R_PAREN@[86; 87) ")" 73 R_PAREN@86..87 ")"
74 WHITESPACE@[87; 88) " " 74 WHITESPACE@87..88 " "
75 BLOCK_EXPR@[88; 90) 75 BLOCK_EXPR@88..90
76 BLOCK@[88; 90) 76 BLOCK@88..90
77 L_CURLY@[88; 89) "{" 77 L_CURLY@88..89 "{"
78 R_CURLY@[89; 90) "}" 78 R_CURLY@89..90 "}"
79 WHITESPACE@[90; 95) "\n " 79 WHITESPACE@90..95 "\n "
80 EXPR_STMT@[95; 97) 80 EXPR_STMT@95..97
81 BLOCK_EXPR@[95; 97) 81 BLOCK_EXPR@95..97
82 BLOCK@[95; 97) 82 BLOCK@95..97
83 L_CURLY@[95; 96) "{" 83 L_CURLY@95..96 "{"
84 R_CURLY@[96; 97) "}" 84 R_CURLY@96..97 "}"
85 WHITESPACE@[97; 102) "\n " 85 WHITESPACE@97..102 "\n "
86 EXPR_STMT@[102; 104) 86 EXPR_STMT@102..104
87 BLOCK_EXPR@[102; 104) 87 BLOCK_EXPR@102..104
88 BLOCK@[102; 104) 88 BLOCK@102..104
89 L_CURLY@[102; 103) "{" 89 L_CURLY@102..103 "{"
90 R_CURLY@[103; 104) "}" 90 R_CURLY@103..104 "}"
91 WHITESPACE@[104; 109) "\n " 91 WHITESPACE@104..109 "\n "
92 EXPR_STMT@[109; 152) 92 EXPR_STMT@109..152
93 MACRO_CALL@[109; 152) 93 MACRO_CALL@109..152
94 PATH@[109; 120) 94 PATH@109..120
95 PATH_SEGMENT@[109; 120) 95 PATH_SEGMENT@109..120
96 NAME_REF@[109; 120) 96 NAME_REF@109..120
97 IDENT@[109; 120) "macro_rules" 97 IDENT@109..120 "macro_rules"
98 BANG@[120; 121) "!" 98 BANG@120..121 "!"
99 WHITESPACE@[121; 122) " " 99 WHITESPACE@121..122 " "
100 NAME@[122; 126) 100 NAME@122..126
101 IDENT@[122; 126) "test" 101 IDENT@122..126 "test"
102 WHITESPACE@[126; 127) " " 102 WHITESPACE@126..127 " "
103 TOKEN_TREE@[127; 152) 103 TOKEN_TREE@127..152
104 L_CURLY@[127; 128) "{" 104 L_CURLY@127..128 "{"
105 WHITESPACE@[128; 138) "\n " 105 WHITESPACE@128..138 "\n "
106 TOKEN_TREE@[138; 140) 106 TOKEN_TREE@138..140
107 L_PAREN@[138; 139) "(" 107 L_PAREN@138..139 "("
108 R_PAREN@[139; 140) ")" 108 R_PAREN@139..140 ")"
109 WHITESPACE@[140; 141) " " 109 WHITESPACE@140..141 " "
110 EQ@[141; 142) "=" 110 EQ@141..142 "="
111 R_ANGLE@[142; 143) ">" 111 R_ANGLE@142..143 ">"
112 WHITESPACE@[143; 144) " " 112 WHITESPACE@143..144 " "
113 TOKEN_TREE@[144; 146) 113 TOKEN_TREE@144..146
114 L_CURLY@[144; 145) "{" 114 L_CURLY@144..145 "{"
115 R_CURLY@[145; 146) "}" 115 R_CURLY@145..146 "}"
116 WHITESPACE@[146; 151) "\n " 116 WHITESPACE@146..151 "\n "
117 R_CURLY@[151; 152) "}" 117 R_CURLY@151..152 "}"
118 WHITESPACE@[152; 157) "\n " 118 WHITESPACE@152..157 "\n "
119 MACRO_CALL@[157; 164) 119 MACRO_CALL@157..164
120 PATH@[157; 161) 120 PATH@157..161
121 PATH_SEGMENT@[157; 161) 121 PATH_SEGMENT@157..161
122 NAME_REF@[157; 161) 122 NAME_REF@157..161
123 IDENT@[157; 161) "test" 123 IDENT@157..161 "test"
124 BANG@[161; 162) "!" 124 BANG@161..162 "!"
125 TOKEN_TREE@[162; 164) 125 TOKEN_TREE@162..164
126 L_CURLY@[162; 163) "{" 126 L_CURLY@162..163 "{"
127 R_CURLY@[163; 164) "}" 127 R_CURLY@163..164 "}"
128 WHITESPACE@[164; 165) "\n" 128 WHITESPACE@164..165 "\n"
129 R_CURLY@[165; 166) "}" 129 R_CURLY@165..166 "}"
130 WHITESPACE@[166; 167) "\n" 130 WHITESPACE@166..167 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0097_default_impl.rast b/crates/ra_syntax/test_data/parser/inline/ok/0097_default_impl.rast
index af9077270..80bda4ba7 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0097_default_impl.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0097_default_impl.rast
@@ -1,16 +1,16 @@
1SOURCE_FILE@[0; 20) 1SOURCE_FILE@0..20
2 IMPL_DEF@[0; 19) 2 IMPL_DEF@0..19
3 DEFAULT_KW@[0; 7) "default" 3 DEFAULT_KW@0..7 "default"
4 WHITESPACE@[7; 8) " " 4 WHITESPACE@7..8 " "
5 IMPL_KW@[8; 12) "impl" 5 IMPL_KW@8..12 "impl"
6 WHITESPACE@[12; 13) " " 6 WHITESPACE@12..13 " "
7 PATH_TYPE@[13; 16) 7 PATH_TYPE@13..16
8 PATH@[13; 16) 8 PATH@13..16
9 PATH_SEGMENT@[13; 16) 9 PATH_SEGMENT@13..16
10 NAME_REF@[13; 16) 10 NAME_REF@13..16
11 IDENT@[13; 16) "Foo" 11 IDENT@13..16 "Foo"
12 WHITESPACE@[16; 17) " " 12 WHITESPACE@16..17 " "
13 ITEM_LIST@[17; 19) 13 ITEM_LIST@17..19
14 L_CURLY@[17; 18) "{" 14 L_CURLY@17..18 "{"
15 R_CURLY@[18; 19) "}" 15 R_CURLY@18..19 "}"
16 WHITESPACE@[19; 20) "\n" 16 WHITESPACE@19..20 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0098_const_unsafe_fn.rast b/crates/ra_syntax/test_data/parser/inline/ok/0098_const_unsafe_fn.rast
index 072dc9d16..a51fb5511 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0098_const_unsafe_fn.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0098_const_unsafe_fn.rast
@@ -1,19 +1,19 @@
1SOURCE_FILE@[0; 25) 1SOURCE_FILE@0..25
2 FN_DEF@[0; 24) 2 FN_DEF@0..24
3 CONST_KW@[0; 5) "const" 3 CONST_KW@0..5 "const"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 UNSAFE_KW@[6; 12) "unsafe" 5 UNSAFE_KW@6..12 "unsafe"
6 WHITESPACE@[12; 13) " " 6 WHITESPACE@12..13 " "
7 FN_KW@[13; 15) "fn" 7 FN_KW@13..15 "fn"
8 WHITESPACE@[15; 16) " " 8 WHITESPACE@15..16 " "
9 NAME@[16; 19) 9 NAME@16..19
10 IDENT@[16; 19) "foo" 10 IDENT@16..19 "foo"
11 PARAM_LIST@[19; 21) 11 PARAM_LIST@19..21
12 L_PAREN@[19; 20) "(" 12 L_PAREN@19..20 "("
13 R_PAREN@[20; 21) ")" 13 R_PAREN@20..21 ")"
14 WHITESPACE@[21; 22) " " 14 WHITESPACE@21..22 " "
15 BLOCK_EXPR@[22; 24) 15 BLOCK_EXPR@22..24
16 BLOCK@[22; 24) 16 BLOCK@22..24
17 L_CURLY@[22; 23) "{" 17 L_CURLY@22..23 "{"
18 R_CURLY@[23; 24) "}" 18 R_CURLY@23..24 "}"
19 WHITESPACE@[24; 25) "\n" 19 WHITESPACE@24..25 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0099_param_list.rast b/crates/ra_syntax/test_data/parser/inline/ok/0099_param_list.rast
index ed57a9eea..61b47bf35 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0099_param_list.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0099_param_list.rast
@@ -1,103 +1,103 @@
1SOURCE_FILE@[0; 67) 1SOURCE_FILE@0..67
2 FN_DEF@[0; 9) 2 FN_DEF@0..9
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "a" 6 IDENT@3..4 "a"
7 PARAM_LIST@[4; 6) 7 PARAM_LIST@4..6
8 L_PAREN@[4; 5) "(" 8 L_PAREN@4..5 "("
9 R_PAREN@[5; 6) ")" 9 R_PAREN@5..6 ")"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 BLOCK_EXPR@[7; 9) 11 BLOCK_EXPR@7..9
12 BLOCK@[7; 9) 12 BLOCK@7..9
13 L_CURLY@[7; 8) "{" 13 L_CURLY@7..8 "{"
14 R_CURLY@[8; 9) "}" 14 R_CURLY@8..9 "}"
15 WHITESPACE@[9; 10) "\n" 15 WHITESPACE@9..10 "\n"
16 FN_DEF@[10; 25) 16 FN_DEF@10..25
17 FN_KW@[10; 12) "fn" 17 FN_KW@10..12 "fn"
18 WHITESPACE@[12; 13) " " 18 WHITESPACE@12..13 " "
19 NAME@[13; 14) 19 NAME@13..14
20 IDENT@[13; 14) "b" 20 IDENT@13..14 "b"
21 PARAM_LIST@[14; 22) 21 PARAM_LIST@14..22
22 L_PAREN@[14; 15) "(" 22 L_PAREN@14..15 "("
23 PARAM@[15; 21) 23 PARAM@15..21
24 BIND_PAT@[15; 16) 24 BIND_PAT@15..16
25 NAME@[15; 16) 25 NAME@15..16
26 IDENT@[15; 16) "x" 26 IDENT@15..16 "x"
27 COLON@[16; 17) ":" 27 COLON@16..17 ":"
28 WHITESPACE@[17; 18) " " 28 WHITESPACE@17..18 " "
29 PATH_TYPE@[18; 21) 29 PATH_TYPE@18..21
30 PATH@[18; 21) 30 PATH@18..21
31 PATH_SEGMENT@[18; 21) 31 PATH_SEGMENT@18..21
32 NAME_REF@[18; 21) 32 NAME_REF@18..21
33 IDENT@[18; 21) "i32" 33 IDENT@18..21 "i32"
34 R_PAREN@[21; 22) ")" 34 R_PAREN@21..22 ")"
35 WHITESPACE@[22; 23) " " 35 WHITESPACE@22..23 " "
36 BLOCK_EXPR@[23; 25) 36 BLOCK_EXPR@23..25
37 BLOCK@[23; 25) 37 BLOCK@23..25
38 L_CURLY@[23; 24) "{" 38 L_CURLY@23..24 "{"
39 R_CURLY@[24; 25) "}" 39 R_CURLY@24..25 "}"
40 WHITESPACE@[25; 26) "\n" 40 WHITESPACE@25..26 "\n"
41 FN_DEF@[26; 43) 41 FN_DEF@26..43
42 FN_KW@[26; 28) "fn" 42 FN_KW@26..28 "fn"
43 WHITESPACE@[28; 29) " " 43 WHITESPACE@28..29 " "
44 NAME@[29; 30) 44 NAME@29..30
45 IDENT@[29; 30) "c" 45 IDENT@29..30 "c"
46 PARAM_LIST@[30; 40) 46 PARAM_LIST@30..40
47 L_PAREN@[30; 31) "(" 47 L_PAREN@30..31 "("
48 PARAM@[31; 37) 48 PARAM@31..37
49 BIND_PAT@[31; 32) 49 BIND_PAT@31..32
50 NAME@[31; 32) 50 NAME@31..32
51 IDENT@[31; 32) "x" 51 IDENT@31..32 "x"
52 COLON@[32; 33) ":" 52 COLON@32..33 ":"
53 WHITESPACE@[33; 34) " " 53 WHITESPACE@33..34 " "
54 PATH_TYPE@[34; 37) 54 PATH_TYPE@34..37
55 PATH@[34; 37) 55 PATH@34..37
56 PATH_SEGMENT@[34; 37) 56 PATH_SEGMENT@34..37
57 NAME_REF@[34; 37) 57 NAME_REF@34..37
58 IDENT@[34; 37) "i32" 58 IDENT@34..37 "i32"
59 COMMA@[37; 38) "," 59 COMMA@37..38 ","
60 WHITESPACE@[38; 39) " " 60 WHITESPACE@38..39 " "
61 R_PAREN@[39; 40) ")" 61 R_PAREN@39..40 ")"
62 WHITESPACE@[40; 41) " " 62 WHITESPACE@40..41 " "
63 BLOCK_EXPR@[41; 43) 63 BLOCK_EXPR@41..43
64 BLOCK@[41; 43) 64 BLOCK@41..43
65 L_CURLY@[41; 42) "{" 65 L_CURLY@41..42 "{"
66 R_CURLY@[42; 43) "}" 66 R_CURLY@42..43 "}"
67 WHITESPACE@[43; 44) "\n" 67 WHITESPACE@43..44 "\n"
68 FN_DEF@[44; 66) 68 FN_DEF@44..66
69 FN_KW@[44; 46) "fn" 69 FN_KW@44..46 "fn"
70 WHITESPACE@[46; 47) " " 70 WHITESPACE@46..47 " "
71 NAME@[47; 48) 71 NAME@47..48
72 IDENT@[47; 48) "d" 72 IDENT@47..48 "d"
73 PARAM_LIST@[48; 63) 73 PARAM_LIST@48..63
74 L_PAREN@[48; 49) "(" 74 L_PAREN@48..49 "("
75 PARAM@[49; 55) 75 PARAM@49..55
76 BIND_PAT@[49; 50) 76 BIND_PAT@49..50
77 NAME@[49; 50) 77 NAME@49..50
78 IDENT@[49; 50) "x" 78 IDENT@49..50 "x"
79 COLON@[50; 51) ":" 79 COLON@50..51 ":"
80 WHITESPACE@[51; 52) " " 80 WHITESPACE@51..52 " "
81 PATH_TYPE@[52; 55) 81 PATH_TYPE@52..55
82 PATH@[52; 55) 82 PATH@52..55
83 PATH_SEGMENT@[52; 55) 83 PATH_SEGMENT@52..55
84 NAME_REF@[52; 55) 84 NAME_REF@52..55
85 IDENT@[52; 55) "i32" 85 IDENT@52..55 "i32"
86 COMMA@[55; 56) "," 86 COMMA@55..56 ","
87 WHITESPACE@[56; 57) " " 87 WHITESPACE@56..57 " "
88 PARAM@[57; 62) 88 PARAM@57..62
89 BIND_PAT@[57; 58) 89 BIND_PAT@57..58
90 NAME@[57; 58) 90 NAME@57..58
91 IDENT@[57; 58) "y" 91 IDENT@57..58 "y"
92 COLON@[58; 59) ":" 92 COLON@58..59 ":"
93 WHITESPACE@[59; 60) " " 93 WHITESPACE@59..60 " "
94 TUPLE_TYPE@[60; 62) 94 TUPLE_TYPE@60..62
95 L_PAREN@[60; 61) "(" 95 L_PAREN@60..61 "("
96 R_PAREN@[61; 62) ")" 96 R_PAREN@61..62 ")"
97 R_PAREN@[62; 63) ")" 97 R_PAREN@62..63 ")"
98 WHITESPACE@[63; 64) " " 98 WHITESPACE@63..64 " "
99 BLOCK_EXPR@[64; 66) 99 BLOCK_EXPR@64..66
100 BLOCK@[64; 66) 100 BLOCK@64..66
101 L_CURLY@[64; 65) "{" 101 L_CURLY@64..65 "{"
102 R_CURLY@[65; 66) "}" 102 R_CURLY@65..66 "}"
103 WHITESPACE@[66; 67) "\n" 103 WHITESPACE@66..67 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0100_for_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0100_for_expr.rast
index d25f087a5..89d435d1f 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0100_for_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0100_for_expr.rast
@@ -1,36 +1,36 @@
1SOURCE_FILE@[0; 33) 1SOURCE_FILE@0..33
2 FN_DEF@[0; 32) 2 FN_DEF@0..32
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 32) 11 BLOCK_EXPR@9..32
12 BLOCK@[9; 32) 12 BLOCK@9..32
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 30) 15 EXPR_STMT@15..30
16 FOR_EXPR@[15; 29) 16 FOR_EXPR@15..29
17 FOR_KW@[15; 18) "for" 17 FOR_KW@15..18 "for"
18 WHITESPACE@[18; 19) " " 18 WHITESPACE@18..19 " "
19 BIND_PAT@[19; 20) 19 BIND_PAT@19..20
20 NAME@[19; 20) 20 NAME@19..20
21 IDENT@[19; 20) "x" 21 IDENT@19..20 "x"
22 WHITESPACE@[20; 21) " " 22 WHITESPACE@20..21 " "
23 IN_KW@[21; 23) "in" 23 IN_KW@21..23 "in"
24 WHITESPACE@[23; 24) " " 24 WHITESPACE@23..24 " "
25 ARRAY_EXPR@[24; 26) 25 ARRAY_EXPR@24..26
26 L_BRACK@[24; 25) "[" 26 L_BRACK@24..25 "["
27 R_BRACK@[25; 26) "]" 27 R_BRACK@25..26 "]"
28 WHITESPACE@[26; 27) " " 28 WHITESPACE@26..27 " "
29 BLOCK_EXPR@[27; 29) 29 BLOCK_EXPR@27..29
30 BLOCK@[27; 29) 30 BLOCK@27..29
31 L_CURLY@[27; 28) "{" 31 L_CURLY@27..28 "{"
32 R_CURLY@[28; 29) "}" 32 R_CURLY@28..29 "}"
33 SEMICOLON@[29; 30) ";" 33 SEMICOLON@29..30 ";"
34 WHITESPACE@[30; 31) "\n" 34 WHITESPACE@30..31 "\n"
35 R_CURLY@[31; 32) "}" 35 R_CURLY@31..32 "}"
36 WHITESPACE@[32; 33) "\n" 36 WHITESPACE@32..33 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0101_unsafe_fn.rast b/crates/ra_syntax/test_data/parser/inline/ok/0101_unsafe_fn.rast
index b7979fbf5..57b4d0c4f 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0101_unsafe_fn.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0101_unsafe_fn.rast
@@ -1,17 +1,17 @@
1SOURCE_FILE@[0; 19) 1SOURCE_FILE@0..19
2 FN_DEF@[0; 18) 2 FN_DEF@0..18
3 UNSAFE_KW@[0; 6) "unsafe" 3 UNSAFE_KW@0..6 "unsafe"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 FN_KW@[7; 9) "fn" 5 FN_KW@7..9 "fn"
6 WHITESPACE@[9; 10) " " 6 WHITESPACE@9..10 " "
7 NAME@[10; 13) 7 NAME@10..13
8 IDENT@[10; 13) "foo" 8 IDENT@10..13 "foo"
9 PARAM_LIST@[13; 15) 9 PARAM_LIST@13..15
10 L_PAREN@[13; 14) "(" 10 L_PAREN@13..14 "("
11 R_PAREN@[14; 15) ")" 11 R_PAREN@14..15 ")"
12 WHITESPACE@[15; 16) " " 12 WHITESPACE@15..16 " "
13 BLOCK_EXPR@[16; 18) 13 BLOCK_EXPR@16..18
14 BLOCK@[16; 18) 14 BLOCK@16..18
15 L_CURLY@[16; 17) "{" 15 L_CURLY@16..17 "{"
16 R_CURLY@[17; 18) "}" 16 R_CURLY@17..18 "}"
17 WHITESPACE@[18; 19) "\n" 17 WHITESPACE@18..19 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0102_record_field_pat_list.rast b/crates/ra_syntax/test_data/parser/inline/ok/0102_record_field_pat_list.rast
index fcd099de9..ed6f6f326 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0102_record_field_pat_list.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0102_record_field_pat_list.rast
@@ -1,133 +1,133 @@
1SOURCE_FILE@[0; 119) 1SOURCE_FILE@0..119
2 FN_DEF@[0; 118) 2 FN_DEF@0..118
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 118) 11 BLOCK_EXPR@9..118
12 BLOCK@[9; 118) 12 BLOCK@9..118
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 29) 15 LET_STMT@15..29
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 RECORD_PAT@[19; 23) 18 RECORD_PAT@19..23
19 PATH@[19; 20) 19 PATH@19..20
20 PATH_SEGMENT@[19; 20) 20 PATH_SEGMENT@19..20
21 NAME_REF@[19; 20) 21 NAME_REF@19..20
22 IDENT@[19; 20) "S" 22 IDENT@19..20 "S"
23 WHITESPACE@[20; 21) " " 23 WHITESPACE@20..21 " "
24 RECORD_FIELD_PAT_LIST@[21; 23) 24 RECORD_FIELD_PAT_LIST@21..23
25 L_CURLY@[21; 22) "{" 25 L_CURLY@21..22 "{"
26 R_CURLY@[22; 23) "}" 26 R_CURLY@22..23 "}"
27 WHITESPACE@[23; 24) " " 27 WHITESPACE@23..24 " "
28 EQ@[24; 25) "=" 28 EQ@24..25 "="
29 WHITESPACE@[25; 26) " " 29 WHITESPACE@25..26 " "
30 TUPLE_EXPR@[26; 28) 30 TUPLE_EXPR@26..28
31 L_PAREN@[26; 27) "(" 31 L_PAREN@26..27 "("
32 R_PAREN@[27; 28) ")" 32 R_PAREN@27..28 ")"
33 SEMICOLON@[28; 29) ";" 33 SEMICOLON@28..29 ";"
34 WHITESPACE@[29; 34) "\n " 34 WHITESPACE@29..34 "\n "
35 LET_STMT@[34; 62) 35 LET_STMT@34..62
36 LET_KW@[34; 37) "let" 36 LET_KW@34..37 "let"
37 WHITESPACE@[37; 38) " " 37 WHITESPACE@37..38 " "
38 RECORD_PAT@[38; 56) 38 RECORD_PAT@38..56
39 PATH@[38; 39) 39 PATH@38..39
40 PATH_SEGMENT@[38; 39) 40 PATH_SEGMENT@38..39
41 NAME_REF@[38; 39) 41 NAME_REF@38..39
42 IDENT@[38; 39) "S" 42 IDENT@38..39 "S"
43 WHITESPACE@[39; 40) " " 43 WHITESPACE@39..40 " "
44 RECORD_FIELD_PAT_LIST@[40; 56) 44 RECORD_FIELD_PAT_LIST@40..56
45 L_CURLY@[40; 41) "{" 45 L_CURLY@40..41 "{"
46 WHITESPACE@[41; 42) " " 46 WHITESPACE@41..42 " "
47 RECORD_FIELD_PAT@[42; 43) 47 RECORD_FIELD_PAT@42..43
48 BIND_PAT@[42; 43) 48 BIND_PAT@42..43
49 NAME@[42; 43) 49 NAME@42..43
50 IDENT@[42; 43) "f" 50 IDENT@42..43 "f"
51 COMMA@[43; 44) "," 51 COMMA@43..44 ","
52 WHITESPACE@[44; 45) " " 52 WHITESPACE@44..45 " "
53 RECORD_FIELD_PAT@[45; 54) 53 RECORD_FIELD_PAT@45..54
54 BIND_PAT@[45; 54) 54 BIND_PAT@45..54
55 REF_KW@[45; 48) "ref" 55 REF_KW@45..48 "ref"
56 WHITESPACE@[48; 49) " " 56 WHITESPACE@48..49 " "
57 MUT_KW@[49; 52) "mut" 57 MUT_KW@49..52 "mut"
58 WHITESPACE@[52; 53) " " 58 WHITESPACE@52..53 " "
59 NAME@[53; 54) 59 NAME@53..54
60 IDENT@[53; 54) "g" 60 IDENT@53..54 "g"
61 WHITESPACE@[54; 55) " " 61 WHITESPACE@54..55 " "
62 R_CURLY@[55; 56) "}" 62 R_CURLY@55..56 "}"
63 WHITESPACE@[56; 57) " " 63 WHITESPACE@56..57 " "
64 EQ@[57; 58) "=" 64 EQ@57..58 "="
65 WHITESPACE@[58; 59) " " 65 WHITESPACE@58..59 " "
66 TUPLE_EXPR@[59; 61) 66 TUPLE_EXPR@59..61
67 L_PAREN@[59; 60) "(" 67 L_PAREN@59..60 "("
68 R_PAREN@[60; 61) ")" 68 R_PAREN@60..61 ")"
69 SEMICOLON@[61; 62) ";" 69 SEMICOLON@61..62 ";"
70 WHITESPACE@[62; 67) "\n " 70 WHITESPACE@62..67 "\n "
71 LET_STMT@[67; 90) 71 LET_STMT@67..90
72 LET_KW@[67; 70) "let" 72 LET_KW@67..70 "let"
73 WHITESPACE@[70; 71) " " 73 WHITESPACE@70..71 " "
74 RECORD_PAT@[71; 84) 74 RECORD_PAT@71..84
75 PATH@[71; 72) 75 PATH@71..72
76 PATH_SEGMENT@[71; 72) 76 PATH_SEGMENT@71..72
77 NAME_REF@[71; 72) 77 NAME_REF@71..72
78 IDENT@[71; 72) "S" 78 IDENT@71..72 "S"
79 WHITESPACE@[72; 73) " " 79 WHITESPACE@72..73 " "
80 RECORD_FIELD_PAT_LIST@[73; 84) 80 RECORD_FIELD_PAT_LIST@73..84
81 L_CURLY@[73; 74) "{" 81 L_CURLY@73..74 "{"
82 WHITESPACE@[74; 75) " " 82 WHITESPACE@74..75 " "
83 RECORD_FIELD_PAT@[75; 79) 83 RECORD_FIELD_PAT@75..79
84 NAME_REF@[75; 76) 84 NAME_REF@75..76
85 IDENT@[75; 76) "h" 85 IDENT@75..76 "h"
86 COLON@[76; 77) ":" 86 COLON@76..77 ":"
87 WHITESPACE@[77; 78) " " 87 WHITESPACE@77..78 " "
88 PLACEHOLDER_PAT@[78; 79) 88 PLACEHOLDER_PAT@78..79
89 UNDERSCORE@[78; 79) "_" 89 UNDERSCORE@78..79 "_"
90 COMMA@[79; 80) "," 90 COMMA@79..80 ","
91 WHITESPACE@[80; 81) " " 91 WHITESPACE@80..81 " "
92 DOT2@[81; 83) ".." 92 DOT2@81..83 ".."
93 R_CURLY@[83; 84) "}" 93 R_CURLY@83..84 "}"
94 WHITESPACE@[84; 85) " " 94 WHITESPACE@84..85 " "
95 EQ@[85; 86) "=" 95 EQ@85..86 "="
96 WHITESPACE@[86; 87) " " 96 WHITESPACE@86..87 " "
97 TUPLE_EXPR@[87; 89) 97 TUPLE_EXPR@87..89
98 L_PAREN@[87; 88) "(" 98 L_PAREN@87..88 "("
99 R_PAREN@[88; 89) ")" 99 R_PAREN@88..89 ")"
100 SEMICOLON@[89; 90) ";" 100 SEMICOLON@89..90 ";"
101 WHITESPACE@[90; 95) "\n " 101 WHITESPACE@90..95 "\n "
102 LET_STMT@[95; 116) 102 LET_STMT@95..116
103 LET_KW@[95; 98) "let" 103 LET_KW@95..98 "let"
104 WHITESPACE@[98; 99) " " 104 WHITESPACE@98..99 " "
105 RECORD_PAT@[99; 110) 105 RECORD_PAT@99..110
106 PATH@[99; 100) 106 PATH@99..100
107 PATH_SEGMENT@[99; 100) 107 PATH_SEGMENT@99..100
108 NAME_REF@[99; 100) 108 NAME_REF@99..100
109 IDENT@[99; 100) "S" 109 IDENT@99..100 "S"
110 WHITESPACE@[100; 101) " " 110 WHITESPACE@100..101 " "
111 RECORD_FIELD_PAT_LIST@[101; 110) 111 RECORD_FIELD_PAT_LIST@101..110
112 L_CURLY@[101; 102) "{" 112 L_CURLY@101..102 "{"
113 WHITESPACE@[102; 103) " " 113 WHITESPACE@102..103 " "
114 RECORD_FIELD_PAT@[103; 107) 114 RECORD_FIELD_PAT@103..107
115 NAME_REF@[103; 104) 115 NAME_REF@103..104
116 IDENT@[103; 104) "h" 116 IDENT@103..104 "h"
117 COLON@[104; 105) ":" 117 COLON@104..105 ":"
118 WHITESPACE@[105; 106) " " 118 WHITESPACE@105..106 " "
119 PLACEHOLDER_PAT@[106; 107) 119 PLACEHOLDER_PAT@106..107
120 UNDERSCORE@[106; 107) "_" 120 UNDERSCORE@106..107 "_"
121 COMMA@[107; 108) "," 121 COMMA@107..108 ","
122 WHITESPACE@[108; 109) " " 122 WHITESPACE@108..109 " "
123 R_CURLY@[109; 110) "}" 123 R_CURLY@109..110 "}"
124 WHITESPACE@[110; 111) " " 124 WHITESPACE@110..111 " "
125 EQ@[111; 112) "=" 125 EQ@111..112 "="
126 WHITESPACE@[112; 113) " " 126 WHITESPACE@112..113 " "
127 TUPLE_EXPR@[113; 115) 127 TUPLE_EXPR@113..115
128 L_PAREN@[113; 114) "(" 128 L_PAREN@113..114 "("
129 R_PAREN@[114; 115) ")" 129 R_PAREN@114..115 ")"
130 SEMICOLON@[115; 116) ";" 130 SEMICOLON@115..116 ";"
131 WHITESPACE@[116; 117) "\n" 131 WHITESPACE@116..117 "\n"
132 R_CURLY@[117; 118) "}" 132 R_CURLY@117..118 "}"
133 WHITESPACE@[118; 119) "\n" 133 WHITESPACE@118..119 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0103_array_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0103_array_expr.rast
index 60fbf2771..461c61914 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0103_array_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0103_array_expr.rast
@@ -1,55 +1,55 @@
1SOURCE_FILE@[0; 55) 1SOURCE_FILE@0..55
2 FN_DEF@[0; 54) 2 FN_DEF@0..54
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 54) 11 BLOCK_EXPR@9..54
12 BLOCK@[9; 54) 12 BLOCK@9..54
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 18) 15 EXPR_STMT@15..18
16 ARRAY_EXPR@[15; 17) 16 ARRAY_EXPR@15..17
17 L_BRACK@[15; 16) "[" 17 L_BRACK@15..16 "["
18 R_BRACK@[16; 17) "]" 18 R_BRACK@16..17 "]"
19 SEMICOLON@[17; 18) ";" 19 SEMICOLON@17..18 ";"
20 WHITESPACE@[18; 23) "\n " 20 WHITESPACE@18..23 "\n "
21 EXPR_STMT@[23; 27) 21 EXPR_STMT@23..27
22 ARRAY_EXPR@[23; 26) 22 ARRAY_EXPR@23..26
23 L_BRACK@[23; 24) "[" 23 L_BRACK@23..24 "["
24 LITERAL@[24; 25) 24 LITERAL@24..25
25 INT_NUMBER@[24; 25) "1" 25 INT_NUMBER@24..25 "1"
26 R_BRACK@[25; 26) "]" 26 R_BRACK@25..26 "]"
27 SEMICOLON@[26; 27) ";" 27 SEMICOLON@26..27 ";"
28 WHITESPACE@[27; 32) "\n " 28 WHITESPACE@27..32 "\n "
29 EXPR_STMT@[32; 40) 29 EXPR_STMT@32..40
30 ARRAY_EXPR@[32; 39) 30 ARRAY_EXPR@32..39
31 L_BRACK@[32; 33) "[" 31 L_BRACK@32..33 "["
32 LITERAL@[33; 34) 32 LITERAL@33..34
33 INT_NUMBER@[33; 34) "1" 33 INT_NUMBER@33..34 "1"
34 COMMA@[34; 35) "," 34 COMMA@34..35 ","
35 WHITESPACE@[35; 36) " " 35 WHITESPACE@35..36 " "
36 LITERAL@[36; 37) 36 LITERAL@36..37
37 INT_NUMBER@[36; 37) "2" 37 INT_NUMBER@36..37 "2"
38 COMMA@[37; 38) "," 38 COMMA@37..38 ","
39 R_BRACK@[38; 39) "]" 39 R_BRACK@38..39 "]"
40 SEMICOLON@[39; 40) ";" 40 SEMICOLON@39..40 ";"
41 WHITESPACE@[40; 45) "\n " 41 WHITESPACE@40..45 "\n "
42 EXPR_STMT@[45; 52) 42 EXPR_STMT@45..52
43 ARRAY_EXPR@[45; 51) 43 ARRAY_EXPR@45..51
44 L_BRACK@[45; 46) "[" 44 L_BRACK@45..46 "["
45 LITERAL@[46; 47) 45 LITERAL@46..47
46 INT_NUMBER@[46; 47) "1" 46 INT_NUMBER@46..47 "1"
47 SEMICOLON@[47; 48) ";" 47 SEMICOLON@47..48 ";"
48 WHITESPACE@[48; 49) " " 48 WHITESPACE@48..49 " "
49 LITERAL@[49; 50) 49 LITERAL@49..50
50 INT_NUMBER@[49; 50) "2" 50 INT_NUMBER@49..50 "2"
51 R_BRACK@[50; 51) "]" 51 R_BRACK@50..51 "]"
52 SEMICOLON@[51; 52) ";" 52 SEMICOLON@51..52 ";"
53 WHITESPACE@[52; 53) "\n" 53 WHITESPACE@52..53 "\n"
54 R_CURLY@[53; 54) "}" 54 R_CURLY@53..54 "}"
55 WHITESPACE@[54; 55) "\n" 55 WHITESPACE@54..55 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0104_path_fn_trait_args.rast b/crates/ra_syntax/test_data/parser/inline/ok/0104_path_fn_trait_args.rast
index d65c75c65..e3c4cfeb3 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0104_path_fn_trait_args.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0104_path_fn_trait_args.rast
@@ -1,41 +1,41 @@
1SOURCE_FILE@[0; 29) 1SOURCE_FILE@0..29
2 TYPE_ALIAS_DEF@[0; 28) 2 TYPE_ALIAS_DEF@0..28
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "F" 6 IDENT@5..6 "F"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 PATH_TYPE@[9; 27) 10 PATH_TYPE@9..27
11 PATH@[9; 27) 11 PATH@9..27
12 PATH_SEGMENT@[9; 27) 12 PATH_SEGMENT@9..27
13 NAME_REF@[9; 12) 13 NAME_REF@9..12
14 IDENT@[9; 12) "Box" 14 IDENT@9..12 "Box"
15 TYPE_ARG_LIST@[12; 27) 15 TYPE_ARG_LIST@12..27
16 L_ANGLE@[12; 13) "<" 16 L_ANGLE@12..13 "<"
17 TYPE_ARG@[13; 26) 17 TYPE_ARG@13..26
18 PATH_TYPE@[13; 26) 18 PATH_TYPE@13..26
19 PATH@[13; 26) 19 PATH@13..26
20 PATH_SEGMENT@[13; 26) 20 PATH_SEGMENT@13..26
21 NAME_REF@[13; 15) 21 NAME_REF@13..15
22 IDENT@[13; 15) "Fn" 22 IDENT@13..15 "Fn"
23 PARAM_LIST@[15; 20) 23 PARAM_LIST@15..20
24 L_PAREN@[15; 16) "(" 24 L_PAREN@15..16 "("
25 PARAM@[16; 19) 25 PARAM@16..19
26 PATH_TYPE@[16; 19) 26 PATH_TYPE@16..19
27 PATH@[16; 19) 27 PATH@16..19
28 PATH_SEGMENT@[16; 19) 28 PATH_SEGMENT@16..19
29 NAME_REF@[16; 19) 29 NAME_REF@16..19
30 IDENT@[16; 19) "i32" 30 IDENT@16..19 "i32"
31 R_PAREN@[19; 20) ")" 31 R_PAREN@19..20 ")"
32 WHITESPACE@[20; 21) " " 32 WHITESPACE@20..21 " "
33 RET_TYPE@[21; 26) 33 RET_TYPE@21..26
34 THIN_ARROW@[21; 23) "->" 34 THIN_ARROW@21..23 "->"
35 WHITESPACE@[23; 24) " " 35 WHITESPACE@23..24 " "
36 TUPLE_TYPE@[24; 26) 36 TUPLE_TYPE@24..26
37 L_PAREN@[24; 25) "(" 37 L_PAREN@24..25 "("
38 R_PAREN@[25; 26) ")" 38 R_PAREN@25..26 ")"
39 R_ANGLE@[26; 27) ">" 39 R_ANGLE@26..27 ">"
40 SEMICOLON@[27; 28) ";" 40 SEMICOLON@27..28 ";"
41 WHITESPACE@[28; 29) "\n" 41 WHITESPACE@28..29 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rast
index 5635cba9b..8b2323cf2 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rast
@@ -1,43 +1,43 @@
1SOURCE_FILE@[0; 52) 1SOURCE_FILE@0..52
2 FN_DEF@[0; 51) 2 FN_DEF@0..51
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 51) 11 BLOCK_EXPR@9..51
12 BLOCK@[9; 51) 12 BLOCK@9..51
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 18) 15 EXPR_STMT@15..18
16 BLOCK_EXPR@[15; 17) 16 BLOCK_EXPR@15..17
17 BLOCK@[15; 17) 17 BLOCK@15..17
18 L_CURLY@[15; 16) "{" 18 L_CURLY@15..16 "{"
19 R_CURLY@[16; 17) "}" 19 R_CURLY@16..17 "}"
20 SEMICOLON@[17; 18) ";" 20 SEMICOLON@17..18 ";"
21 WHITESPACE@[18; 23) "\n " 21 WHITESPACE@18..23 "\n "
22 EXPR_STMT@[23; 33) 22 EXPR_STMT@23..33
23 BLOCK_EXPR@[23; 32) 23 BLOCK_EXPR@23..32
24 UNSAFE_KW@[23; 29) "unsafe" 24 UNSAFE_KW@23..29 "unsafe"
25 WHITESPACE@[29; 30) " " 25 WHITESPACE@29..30 " "
26 BLOCK@[30; 32) 26 BLOCK@30..32
27 L_CURLY@[30; 31) "{" 27 L_CURLY@30..31 "{"
28 R_CURLY@[31; 32) "}" 28 R_CURLY@31..32 "}"
29 SEMICOLON@[32; 33) ";" 29 SEMICOLON@32..33 ";"
30 WHITESPACE@[33; 38) "\n " 30 WHITESPACE@33..38 "\n "
31 EXPR_STMT@[38; 49) 31 EXPR_STMT@38..49
32 BLOCK_EXPR@[38; 48) 32 BLOCK_EXPR@38..48
33 LABEL@[38; 45) 33 LABEL@38..45
34 LIFETIME@[38; 44) "\'label" 34 LIFETIME@38..44 "\'label"
35 COLON@[44; 45) ":" 35 COLON@44..45 ":"
36 WHITESPACE@[45; 46) " " 36 WHITESPACE@45..46 " "
37 BLOCK@[46; 48) 37 BLOCK@46..48
38 L_CURLY@[46; 47) "{" 38 L_CURLY@46..47 "{"
39 R_CURLY@[47; 48) "}" 39 R_CURLY@47..48 "}"
40 SEMICOLON@[48; 49) ";" 40 SEMICOLON@48..49 ";"
41 WHITESPACE@[49; 50) "\n" 41 WHITESPACE@49..50 "\n"
42 R_CURLY@[50; 51) "}" 42 R_CURLY@50..51 "}"
43 WHITESPACE@[51; 52) "\n" 43 WHITESPACE@51..52 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0106_lambda_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0106_lambda_expr.rast
index 157dfcdb8..73c314e07 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0106_lambda_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0106_lambda_expr.rast
@@ -1,140 +1,140 @@
1SOURCE_FILE@[0; 134) 1SOURCE_FILE@0..134
2 FN_DEF@[0; 133) 2 FN_DEF@0..133
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 133) 11 BLOCK_EXPR@9..133
12 BLOCK@[9; 133) 12 BLOCK@9..133
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 21) 15 EXPR_STMT@15..21
16 LAMBDA_EXPR@[15; 20) 16 LAMBDA_EXPR@15..20
17 PARAM_LIST@[15; 17) 17 PARAM_LIST@15..17
18 PIPE@[15; 16) "|" 18 PIPE@15..16 "|"
19 PIPE@[16; 17) "|" 19 PIPE@16..17 "|"
20 WHITESPACE@[17; 18) " " 20 WHITESPACE@17..18 " "
21 TUPLE_EXPR@[18; 20) 21 TUPLE_EXPR@18..20
22 L_PAREN@[18; 19) "(" 22 L_PAREN@18..19 "("
23 R_PAREN@[19; 20) ")" 23 R_PAREN@19..20 ")"
24 SEMICOLON@[20; 21) ";" 24 SEMICOLON@20..21 ";"
25 WHITESPACE@[21; 26) "\n " 25 WHITESPACE@21..26 "\n "
26 EXPR_STMT@[26; 43) 26 EXPR_STMT@26..43
27 LAMBDA_EXPR@[26; 42) 27 LAMBDA_EXPR@26..42
28 PARAM_LIST@[26; 28) 28 PARAM_LIST@26..28
29 PIPE@[26; 27) "|" 29 PIPE@26..27 "|"
30 PIPE@[27; 28) "|" 30 PIPE@27..28 "|"
31 WHITESPACE@[28; 29) " " 31 WHITESPACE@28..29 " "
32 RET_TYPE@[29; 35) 32 RET_TYPE@29..35
33 THIN_ARROW@[29; 31) "->" 33 THIN_ARROW@29..31 "->"
34 WHITESPACE@[31; 32) " " 34 WHITESPACE@31..32 " "
35 PATH_TYPE@[32; 35) 35 PATH_TYPE@32..35
36 PATH@[32; 35) 36 PATH@32..35
37 PATH_SEGMENT@[32; 35) 37 PATH_SEGMENT@32..35
38 NAME_REF@[32; 35) 38 NAME_REF@32..35
39 IDENT@[32; 35) "i32" 39 IDENT@32..35 "i32"
40 WHITESPACE@[35; 36) " " 40 WHITESPACE@35..36 " "
41 BLOCK_EXPR@[36; 42) 41 BLOCK_EXPR@36..42
42 BLOCK@[36; 42) 42 BLOCK@36..42
43 L_CURLY@[36; 37) "{" 43 L_CURLY@36..37 "{"
44 WHITESPACE@[37; 38) " " 44 WHITESPACE@37..38 " "
45 LITERAL@[38; 40) 45 LITERAL@38..40
46 INT_NUMBER@[38; 40) "92" 46 INT_NUMBER@38..40 "92"
47 WHITESPACE@[40; 41) " " 47 WHITESPACE@40..41 " "
48 R_CURLY@[41; 42) "}" 48 R_CURLY@41..42 "}"
49 SEMICOLON@[42; 43) ";" 49 SEMICOLON@42..43 ";"
50 WHITESPACE@[43; 48) "\n " 50 WHITESPACE@43..48 "\n "
51 EXPR_STMT@[48; 54) 51 EXPR_STMT@48..54
52 LAMBDA_EXPR@[48; 53) 52 LAMBDA_EXPR@48..53
53 PARAM_LIST@[48; 51) 53 PARAM_LIST@48..51
54 PIPE@[48; 49) "|" 54 PIPE@48..49 "|"
55 PARAM@[49; 50) 55 PARAM@49..50
56 BIND_PAT@[49; 50) 56 BIND_PAT@49..50
57 NAME@[49; 50) 57 NAME@49..50
58 IDENT@[49; 50) "x" 58 IDENT@49..50 "x"
59 PIPE@[50; 51) "|" 59 PIPE@50..51 "|"
60 WHITESPACE@[51; 52) " " 60 WHITESPACE@51..52 " "
61 PATH_EXPR@[52; 53) 61 PATH_EXPR@52..53
62 PATH@[52; 53) 62 PATH@52..53
63 PATH_SEGMENT@[52; 53) 63 PATH_SEGMENT@52..53
64 NAME_REF@[52; 53) 64 NAME_REF@52..53
65 IDENT@[52; 53) "x" 65 IDENT@52..53 "x"
66 SEMICOLON@[53; 54) ";" 66 SEMICOLON@53..54 ";"
67 WHITESPACE@[54; 59) "\n " 67 WHITESPACE@54..59 "\n "
68 EXPR_STMT@[59; 76) 68 EXPR_STMT@59..76
69 LAMBDA_EXPR@[59; 75) 69 LAMBDA_EXPR@59..75
70 MOVE_KW@[59; 63) "move" 70 MOVE_KW@59..63 "move"
71 WHITESPACE@[63; 64) " " 71 WHITESPACE@63..64 " "
72 PARAM_LIST@[64; 73) 72 PARAM_LIST@64..73
73 PIPE@[64; 65) "|" 73 PIPE@64..65 "|"
74 PARAM@[65; 71) 74 PARAM@65..71
75 BIND_PAT@[65; 66) 75 BIND_PAT@65..66
76 NAME@[65; 66) 76 NAME@65..66
77 IDENT@[65; 66) "x" 77 IDENT@65..66 "x"
78 COLON@[66; 67) ":" 78 COLON@66..67 ":"
79 WHITESPACE@[67; 68) " " 79 WHITESPACE@67..68 " "
80 PATH_TYPE@[68; 71) 80 PATH_TYPE@68..71
81 PATH@[68; 71) 81 PATH@68..71
82 PATH_SEGMENT@[68; 71) 82 PATH_SEGMENT@68..71
83 NAME_REF@[68; 71) 83 NAME_REF@68..71
84 IDENT@[68; 71) "i32" 84 IDENT@68..71 "i32"
85 COMMA@[71; 72) "," 85 COMMA@71..72 ","
86 PIPE@[72; 73) "|" 86 PIPE@72..73 "|"
87 WHITESPACE@[73; 74) " " 87 WHITESPACE@73..74 " "
88 PATH_EXPR@[74; 75) 88 PATH_EXPR@74..75
89 PATH@[74; 75) 89 PATH@74..75
90 PATH_SEGMENT@[74; 75) 90 PATH_SEGMENT@74..75
91 NAME_REF@[74; 75) 91 NAME_REF@74..75
92 IDENT@[74; 75) "x" 92 IDENT@74..75 "x"
93 SEMICOLON@[75; 76) ";" 93 SEMICOLON@75..76 ";"
94 WHITESPACE@[76; 81) "\n " 94 WHITESPACE@76..81 "\n "
95 EXPR_STMT@[81; 93) 95 EXPR_STMT@81..93
96 LAMBDA_EXPR@[81; 92) 96 LAMBDA_EXPR@81..92
97 ASYNC_KW@[81; 86) "async" 97 ASYNC_KW@81..86 "async"
98 WHITESPACE@[86; 87) " " 98 WHITESPACE@86..87 " "
99 PARAM_LIST@[87; 89) 99 PARAM_LIST@87..89
100 PIPE@[87; 88) "|" 100 PIPE@87..88 "|"
101 PIPE@[88; 89) "|" 101 PIPE@88..89 "|"
102 WHITESPACE@[89; 90) " " 102 WHITESPACE@89..90 " "
103 BLOCK_EXPR@[90; 92) 103 BLOCK_EXPR@90..92
104 BLOCK@[90; 92) 104 BLOCK@90..92
105 L_CURLY@[90; 91) "{" 105 L_CURLY@90..91 "{"
106 R_CURLY@[91; 92) "}" 106 R_CURLY@91..92 "}"
107 SEMICOLON@[92; 93) ";" 107 SEMICOLON@92..93 ";"
108 WHITESPACE@[93; 98) "\n " 108 WHITESPACE@93..98 "\n "
109 EXPR_STMT@[98; 109) 109 EXPR_STMT@98..109
110 LAMBDA_EXPR@[98; 108) 110 LAMBDA_EXPR@98..108
111 MOVE_KW@[98; 102) "move" 111 MOVE_KW@98..102 "move"
112 WHITESPACE@[102; 103) " " 112 WHITESPACE@102..103 " "
113 PARAM_LIST@[103; 105) 113 PARAM_LIST@103..105
114 PIPE@[103; 104) "|" 114 PIPE@103..104 "|"
115 PIPE@[104; 105) "|" 115 PIPE@104..105 "|"
116 WHITESPACE@[105; 106) " " 116 WHITESPACE@105..106 " "
117 BLOCK_EXPR@[106; 108) 117 BLOCK_EXPR@106..108
118 BLOCK@[106; 108) 118 BLOCK@106..108
119 L_CURLY@[106; 107) "{" 119 L_CURLY@106..107 "{"
120 R_CURLY@[107; 108) "}" 120 R_CURLY@107..108 "}"
121 SEMICOLON@[108; 109) ";" 121 SEMICOLON@108..109 ";"
122 WHITESPACE@[109; 114) "\n " 122 WHITESPACE@109..114 "\n "
123 EXPR_STMT@[114; 131) 123 EXPR_STMT@114..131
124 LAMBDA_EXPR@[114; 130) 124 LAMBDA_EXPR@114..130
125 ASYNC_KW@[114; 119) "async" 125 ASYNC_KW@114..119 "async"
126 WHITESPACE@[119; 120) " " 126 WHITESPACE@119..120 " "
127 MOVE_KW@[120; 124) "move" 127 MOVE_KW@120..124 "move"
128 WHITESPACE@[124; 125) " " 128 WHITESPACE@124..125 " "
129 PARAM_LIST@[125; 127) 129 PARAM_LIST@125..127
130 PIPE@[125; 126) "|" 130 PIPE@125..126 "|"
131 PIPE@[126; 127) "|" 131 PIPE@126..127 "|"
132 WHITESPACE@[127; 128) " " 132 WHITESPACE@127..128 " "
133 BLOCK_EXPR@[128; 130) 133 BLOCK_EXPR@128..130
134 BLOCK@[128; 130) 134 BLOCK@128..130
135 L_CURLY@[128; 129) "{" 135 L_CURLY@128..129 "{"
136 R_CURLY@[129; 130) "}" 136 R_CURLY@129..130 "}"
137 SEMICOLON@[130; 131) ";" 137 SEMICOLON@130..131 ";"
138 WHITESPACE@[131; 132) "\n" 138 WHITESPACE@131..132 "\n"
139 R_CURLY@[132; 133) "}" 139 R_CURLY@132..133 "}"
140 WHITESPACE@[133; 134) "\n" 140 WHITESPACE@133..134 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0107_method_call_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0107_method_call_expr.rast
index cc813038c..5392b1a74 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0107_method_call_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0107_method_call_expr.rast
@@ -1,63 +1,63 @@
1SOURCE_FILE@[0; 49) 1SOURCE_FILE@0..49
2 FN_DEF@[0; 48) 2 FN_DEF@0..48
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 48) 11 BLOCK_EXPR@9..48
12 BLOCK@[9; 48) 12 BLOCK@9..48
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 23) 15 EXPR_STMT@15..23
16 METHOD_CALL_EXPR@[15; 22) 16 METHOD_CALL_EXPR@15..22
17 PATH_EXPR@[15; 16) 17 PATH_EXPR@15..16
18 PATH@[15; 16) 18 PATH@15..16
19 PATH_SEGMENT@[15; 16) 19 PATH_SEGMENT@15..16
20 NAME_REF@[15; 16) 20 NAME_REF@15..16
21 IDENT@[15; 16) "x" 21 IDENT@15..16 "x"
22 DOT@[16; 17) "." 22 DOT@16..17 "."
23 NAME_REF@[17; 20) 23 NAME_REF@17..20
24 IDENT@[17; 20) "foo" 24 IDENT@17..20 "foo"
25 ARG_LIST@[20; 22) 25 ARG_LIST@20..22
26 L_PAREN@[20; 21) "(" 26 L_PAREN@20..21 "("
27 R_PAREN@[21; 22) ")" 27 R_PAREN@21..22 ")"
28 SEMICOLON@[22; 23) ";" 28 SEMICOLON@22..23 ";"
29 WHITESPACE@[23; 28) "\n " 29 WHITESPACE@23..28 "\n "
30 EXPR_STMT@[28; 46) 30 EXPR_STMT@28..46
31 METHOD_CALL_EXPR@[28; 45) 31 METHOD_CALL_EXPR@28..45
32 PATH_EXPR@[28; 29) 32 PATH_EXPR@28..29
33 PATH@[28; 29) 33 PATH@28..29
34 PATH_SEGMENT@[28; 29) 34 PATH_SEGMENT@28..29
35 NAME_REF@[28; 29) 35 NAME_REF@28..29
36 IDENT@[28; 29) "y" 36 IDENT@28..29 "y"
37 DOT@[29; 30) "." 37 DOT@29..30 "."
38 NAME_REF@[30; 33) 38 NAME_REF@30..33
39 IDENT@[30; 33) "bar" 39 IDENT@30..33 "bar"
40 TYPE_ARG_LIST@[33; 38) 40 TYPE_ARG_LIST@33..38
41 COLON2@[33; 35) "::" 41 COLON2@33..35 "::"
42 L_ANGLE@[35; 36) "<" 42 L_ANGLE@35..36 "<"
43 TYPE_ARG@[36; 37) 43 TYPE_ARG@36..37
44 PATH_TYPE@[36; 37) 44 PATH_TYPE@36..37
45 PATH@[36; 37) 45 PATH@36..37
46 PATH_SEGMENT@[36; 37) 46 PATH_SEGMENT@36..37
47 NAME_REF@[36; 37) 47 NAME_REF@36..37
48 IDENT@[36; 37) "T" 48 IDENT@36..37 "T"
49 R_ANGLE@[37; 38) ">" 49 R_ANGLE@37..38 ">"
50 ARG_LIST@[38; 45) 50 ARG_LIST@38..45
51 L_PAREN@[38; 39) "(" 51 L_PAREN@38..39 "("
52 LITERAL@[39; 40) 52 LITERAL@39..40
53 INT_NUMBER@[39; 40) "1" 53 INT_NUMBER@39..40 "1"
54 COMMA@[40; 41) "," 54 COMMA@40..41 ","
55 WHITESPACE@[41; 42) " " 55 WHITESPACE@41..42 " "
56 LITERAL@[42; 43) 56 LITERAL@42..43
57 INT_NUMBER@[42; 43) "2" 57 INT_NUMBER@42..43 "2"
58 COMMA@[43; 44) "," 58 COMMA@43..44 ","
59 R_PAREN@[44; 45) ")" 59 R_PAREN@44..45 ")"
60 SEMICOLON@[45; 46) ";" 60 SEMICOLON@45..46 ";"
61 WHITESPACE@[46; 47) "\n" 61 WHITESPACE@46..47 "\n"
62 R_CURLY@[47; 48) "}" 62 R_CURLY@47..48 "}"
63 WHITESPACE@[48; 49) "\n" 63 WHITESPACE@48..49 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0108_tuple_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0108_tuple_expr.rast
index 27c3f398e..54f18adac 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0108_tuple_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0108_tuple_expr.rast
@@ -1,39 +1,39 @@
1SOURCE_FILE@[0; 40) 1SOURCE_FILE@0..40
2 FN_DEF@[0; 39) 2 FN_DEF@0..39
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 39) 11 BLOCK_EXPR@9..39
12 BLOCK@[9; 39) 12 BLOCK@9..39
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 18) 15 EXPR_STMT@15..18
16 TUPLE_EXPR@[15; 17) 16 TUPLE_EXPR@15..17
17 L_PAREN@[15; 16) "(" 17 L_PAREN@15..16 "("
18 R_PAREN@[16; 17) ")" 18 R_PAREN@16..17 ")"
19 SEMICOLON@[17; 18) ";" 19 SEMICOLON@17..18 ";"
20 WHITESPACE@[18; 23) "\n " 20 WHITESPACE@18..23 "\n "
21 EXPR_STMT@[23; 27) 21 EXPR_STMT@23..27
22 PAREN_EXPR@[23; 26) 22 PAREN_EXPR@23..26
23 L_PAREN@[23; 24) "(" 23 L_PAREN@23..24 "("
24 LITERAL@[24; 25) 24 LITERAL@24..25
25 INT_NUMBER@[24; 25) "1" 25 INT_NUMBER@24..25 "1"
26 R_PAREN@[25; 26) ")" 26 R_PAREN@25..26 ")"
27 SEMICOLON@[26; 27) ";" 27 SEMICOLON@26..27 ";"
28 WHITESPACE@[27; 32) "\n " 28 WHITESPACE@27..32 "\n "
29 EXPR_STMT@[32; 37) 29 EXPR_STMT@32..37
30 TUPLE_EXPR@[32; 36) 30 TUPLE_EXPR@32..36
31 L_PAREN@[32; 33) "(" 31 L_PAREN@32..33 "("
32 LITERAL@[33; 34) 32 LITERAL@33..34
33 INT_NUMBER@[33; 34) "1" 33 INT_NUMBER@33..34 "1"
34 COMMA@[34; 35) "," 34 COMMA@34..35 ","
35 R_PAREN@[35; 36) ")" 35 R_PAREN@35..36 ")"
36 SEMICOLON@[36; 37) ";" 36 SEMICOLON@36..37 ";"
37 WHITESPACE@[37; 38) "\n" 37 WHITESPACE@37..38 "\n"
38 R_CURLY@[38; 39) "}" 38 R_CURLY@38..39 "}"
39 WHITESPACE@[39; 40) "\n" 39 WHITESPACE@39..40 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0109_label.rast b/crates/ra_syntax/test_data/parser/inline/ok/0109_label.rast
index 3376a90cb..6c9e45684 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0109_label.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0109_label.rast
@@ -1,68 +1,68 @@
1SOURCE_FILE@[0; 74) 1SOURCE_FILE@0..74
2 FN_DEF@[0; 73) 2 FN_DEF@0..73
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 73) 11 BLOCK_EXPR@9..73
12 BLOCK@[9; 73) 12 BLOCK@9..73
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 26) 15 EXPR_STMT@15..26
16 LOOP_EXPR@[15; 26) 16 LOOP_EXPR@15..26
17 LABEL@[15; 18) 17 LABEL@15..18
18 LIFETIME@[15; 17) "\'a" 18 LIFETIME@15..17 "\'a"
19 COLON@[17; 18) ":" 19 COLON@17..18 ":"
20 WHITESPACE@[18; 19) " " 20 WHITESPACE@18..19 " "
21 LOOP_KW@[19; 23) "loop" 21 LOOP_KW@19..23 "loop"
22 WHITESPACE@[23; 24) " " 22 WHITESPACE@23..24 " "
23 BLOCK_EXPR@[24; 26) 23 BLOCK_EXPR@24..26
24 BLOCK@[24; 26) 24 BLOCK@24..26
25 L_CURLY@[24; 25) "{" 25 L_CURLY@24..25 "{"
26 R_CURLY@[25; 26) "}" 26 R_CURLY@25..26 "}"
27 WHITESPACE@[26; 31) "\n " 27 WHITESPACE@26..31 "\n "
28 EXPR_STMT@[31; 48) 28 EXPR_STMT@31..48
29 WHILE_EXPR@[31; 48) 29 WHILE_EXPR@31..48
30 LABEL@[31; 34) 30 LABEL@31..34
31 LIFETIME@[31; 33) "\'b" 31 LIFETIME@31..33 "\'b"
32 COLON@[33; 34) ":" 32 COLON@33..34 ":"
33 WHITESPACE@[34; 35) " " 33 WHITESPACE@34..35 " "
34 WHILE_KW@[35; 40) "while" 34 WHILE_KW@35..40 "while"
35 WHITESPACE@[40; 41) " " 35 WHITESPACE@40..41 " "
36 CONDITION@[41; 45) 36 CONDITION@41..45
37 LITERAL@[41; 45) 37 LITERAL@41..45
38 TRUE_KW@[41; 45) "true" 38 TRUE_KW@41..45 "true"
39 WHITESPACE@[45; 46) " " 39 WHITESPACE@45..46 " "
40 BLOCK_EXPR@[46; 48) 40 BLOCK_EXPR@46..48
41 BLOCK@[46; 48) 41 BLOCK@46..48
42 L_CURLY@[46; 47) "{" 42 L_CURLY@46..47 "{"
43 R_CURLY@[47; 48) "}" 43 R_CURLY@47..48 "}"
44 WHITESPACE@[48; 53) "\n " 44 WHITESPACE@48..53 "\n "
45 FOR_EXPR@[53; 71) 45 FOR_EXPR@53..71
46 LABEL@[53; 56) 46 LABEL@53..56
47 LIFETIME@[53; 55) "\'c" 47 LIFETIME@53..55 "\'c"
48 COLON@[55; 56) ":" 48 COLON@55..56 ":"
49 WHITESPACE@[56; 57) " " 49 WHITESPACE@56..57 " "
50 FOR_KW@[57; 60) "for" 50 FOR_KW@57..60 "for"
51 WHITESPACE@[60; 61) " " 51 WHITESPACE@60..61 " "
52 BIND_PAT@[61; 62) 52 BIND_PAT@61..62
53 NAME@[61; 62) 53 NAME@61..62
54 IDENT@[61; 62) "x" 54 IDENT@61..62 "x"
55 WHITESPACE@[62; 63) " " 55 WHITESPACE@62..63 " "
56 IN_KW@[63; 65) "in" 56 IN_KW@63..65 "in"
57 WHITESPACE@[65; 66) " " 57 WHITESPACE@65..66 " "
58 TUPLE_EXPR@[66; 68) 58 TUPLE_EXPR@66..68
59 L_PAREN@[66; 67) "(" 59 L_PAREN@66..67 "("
60 R_PAREN@[67; 68) ")" 60 R_PAREN@67..68 ")"
61 WHITESPACE@[68; 69) " " 61 WHITESPACE@68..69 " "
62 BLOCK_EXPR@[69; 71) 62 BLOCK_EXPR@69..71
63 BLOCK@[69; 71) 63 BLOCK@69..71
64 L_CURLY@[69; 70) "{" 64 L_CURLY@69..70 "{"
65 R_CURLY@[70; 71) "}" 65 R_CURLY@70..71 "}"
66 WHITESPACE@[71; 72) "\n" 66 WHITESPACE@71..72 "\n"
67 R_CURLY@[72; 73) "}" 67 R_CURLY@72..73 "}"
68 WHITESPACE@[73; 74) "\n" 68 WHITESPACE@73..74 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0110_use_path.rast b/crates/ra_syntax/test_data/parser/inline/ok/0110_use_path.rast
index d4f5737d5..015a7a7d2 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0110_use_path.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0110_use_path.rast
@@ -1,38 +1,38 @@
1SOURCE_FILE@[0; 154) 1SOURCE_FILE@0..154
2 USE_ITEM@[0; 17) 2 USE_ITEM@0..17
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 16) 5 USE_TREE@4..16
6 PATH@[4; 16) 6 PATH@4..16
7 PATH_SEGMENT@[4; 16) 7 PATH_SEGMENT@4..16
8 COLON2@[4; 6) "::" 8 COLON2@4..6 "::"
9 NAME_REF@[6; 16) 9 NAME_REF@6..16
10 IDENT@[6; 16) "crate_name" 10 IDENT@6..16 "crate_name"
11 SEMICOLON@[16; 17) ";" 11 SEMICOLON@16..17 ";"
12 WHITESPACE@[17; 18) " " 12 WHITESPACE@17..18 " "
13 COMMENT@[18; 45) "// Rust 2018 - All fl ..." 13 COMMENT@18..45 "// Rust 2018 - All fl ..."
14 WHITESPACE@[45; 46) "\n" 14 WHITESPACE@45..46 "\n"
15 USE_ITEM@[46; 61) 15 USE_ITEM@46..61
16 USE_KW@[46; 49) "use" 16 USE_KW@46..49 "use"
17 WHITESPACE@[49; 50) " " 17 WHITESPACE@49..50 " "
18 USE_TREE@[50; 60) 18 USE_TREE@50..60
19 PATH@[50; 60) 19 PATH@50..60
20 PATH_SEGMENT@[50; 60) 20 PATH_SEGMENT@50..60
21 NAME_REF@[50; 60) 21 NAME_REF@50..60
22 IDENT@[50; 60) "crate_name" 22 IDENT@50..60 "crate_name"
23 SEMICOLON@[60; 61) ";" 23 SEMICOLON@60..61 ";"
24 WHITESPACE@[61; 62) " " 24 WHITESPACE@61..62 " "
25 COMMENT@[62; 91) "// Rust 2018 - Anchor ..." 25 COMMENT@62..91 "// Rust 2018 - Anchor ..."
26 WHITESPACE@[91; 92) "\n" 26 WHITESPACE@91..92 "\n"
27 USE_ITEM@[92; 124) 27 USE_ITEM@92..124
28 USE_KW@[92; 95) "use" 28 USE_KW@92..95 "use"
29 WHITESPACE@[95; 96) " " 29 WHITESPACE@95..96 " "
30 USE_TREE@[96; 123) 30 USE_TREE@96..123
31 PATH@[96; 123) 31 PATH@96..123
32 PATH_SEGMENT@[96; 123) 32 PATH_SEGMENT@96..123
33 NAME_REF@[96; 123) 33 NAME_REF@96..123
34 IDENT@[96; 123) "item_in_scope_or_crat ..." 34 IDENT@96..123 "item_in_scope_or_crat ..."
35 SEMICOLON@[123; 124) ";" 35 SEMICOLON@123..124 ";"
36 WHITESPACE@[124; 125) " " 36 WHITESPACE@124..125 " "
37 COMMENT@[125; 153) "// Rust 2018 - Unifor ..." 37 COMMENT@125..153 "// Rust 2018 - Unifor ..."
38 WHITESPACE@[153; 154) "\n" 38 WHITESPACE@153..154 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast
index 88e72d057..a1c5475e7 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast
@@ -1,90 +1,90 @@
1SOURCE_FILE@[0; 94) 1SOURCE_FILE@0..94
2 FN_DEF@[0; 93) 2 FN_DEF@0..93
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 93) 11 BLOCK_EXPR@10..93
12 BLOCK@[10; 93) 12 BLOCK@10..93
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 LET_STMT@[16; 36) 15 LET_STMT@16..36
16 LET_KW@[16; 19) "let" 16 LET_KW@16..19 "let"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 TUPLE_PAT@[20; 30) 18 TUPLE_PAT@20..30
19 L_PAREN@[20; 21) "(" 19 L_PAREN@20..21 "("
20 BIND_PAT@[21; 22) 20 BIND_PAT@21..22
21 NAME@[21; 22) 21 NAME@21..22
22 IDENT@[21; 22) "a" 22 IDENT@21..22 "a"
23 COMMA@[22; 23) "," 23 COMMA@22..23 ","
24 WHITESPACE@[23; 24) " " 24 WHITESPACE@23..24 " "
25 BIND_PAT@[24; 25) 25 BIND_PAT@24..25
26 NAME@[24; 25) 26 NAME@24..25
27 IDENT@[24; 25) "b" 27 IDENT@24..25 "b"
28 COMMA@[25; 26) "," 28 COMMA@25..26 ","
29 WHITESPACE@[26; 27) " " 29 WHITESPACE@26..27 " "
30 DOT_DOT_PAT@[27; 29) 30 DOT_DOT_PAT@27..29
31 DOT2@[27; 29) ".." 31 DOT2@27..29 ".."
32 R_PAREN@[29; 30) ")" 32 R_PAREN@29..30 ")"
33 WHITESPACE@[30; 31) " " 33 WHITESPACE@30..31 " "
34 EQ@[31; 32) "=" 34 EQ@31..32 "="
35 WHITESPACE@[32; 33) " " 35 WHITESPACE@32..33 " "
36 TUPLE_EXPR@[33; 35) 36 TUPLE_EXPR@33..35
37 L_PAREN@[33; 34) "(" 37 L_PAREN@33..34 "("
38 R_PAREN@[34; 35) ")" 38 R_PAREN@34..35 ")"
39 SEMICOLON@[35; 36) ";" 39 SEMICOLON@35..36 ";"
40 WHITESPACE@[36; 41) "\n " 40 WHITESPACE@36..41 "\n "
41 LET_STMT@[41; 55) 41 LET_STMT@41..55
42 LET_KW@[41; 44) "let" 42 LET_KW@41..44 "let"
43 WHITESPACE@[44; 45) " " 43 WHITESPACE@44..45 " "
44 TUPLE_PAT@[45; 49) 44 TUPLE_PAT@45..49
45 L_PAREN@[45; 46) "(" 45 L_PAREN@45..46 "("
46 BIND_PAT@[46; 47) 46 BIND_PAT@46..47
47 NAME@[46; 47) 47 NAME@46..47
48 IDENT@[46; 47) "a" 48 IDENT@46..47 "a"
49 COMMA@[47; 48) "," 49 COMMA@47..48 ","
50 R_PAREN@[48; 49) ")" 50 R_PAREN@48..49 ")"
51 WHITESPACE@[49; 50) " " 51 WHITESPACE@49..50 " "
52 EQ@[50; 51) "=" 52 EQ@50..51 "="
53 WHITESPACE@[51; 52) " " 53 WHITESPACE@51..52 " "
54 TUPLE_EXPR@[52; 54) 54 TUPLE_EXPR@52..54
55 L_PAREN@[52; 53) "(" 55 L_PAREN@52..53 "("
56 R_PAREN@[53; 54) ")" 56 R_PAREN@53..54 ")"
57 SEMICOLON@[54; 55) ";" 57 SEMICOLON@54..55 ";"
58 WHITESPACE@[55; 60) "\n " 58 WHITESPACE@55..60 "\n "
59 LET_STMT@[60; 74) 59 LET_STMT@60..74
60 LET_KW@[60; 63) "let" 60 LET_KW@60..63 "let"
61 WHITESPACE@[63; 64) " " 61 WHITESPACE@63..64 " "
62 TUPLE_PAT@[64; 68) 62 TUPLE_PAT@64..68
63 L_PAREN@[64; 65) "(" 63 L_PAREN@64..65 "("
64 DOT_DOT_PAT@[65; 67) 64 DOT_DOT_PAT@65..67
65 DOT2@[65; 67) ".." 65 DOT2@65..67 ".."
66 R_PAREN@[67; 68) ")" 66 R_PAREN@67..68 ")"
67 WHITESPACE@[68; 69) " " 67 WHITESPACE@68..69 " "
68 EQ@[69; 70) "=" 68 EQ@69..70 "="
69 WHITESPACE@[70; 71) " " 69 WHITESPACE@70..71 " "
70 TUPLE_EXPR@[71; 73) 70 TUPLE_EXPR@71..73
71 L_PAREN@[71; 72) "(" 71 L_PAREN@71..72 "("
72 R_PAREN@[72; 73) ")" 72 R_PAREN@72..73 ")"
73 SEMICOLON@[73; 74) ";" 73 SEMICOLON@73..74 ";"
74 WHITESPACE@[74; 79) "\n " 74 WHITESPACE@74..79 "\n "
75 LET_STMT@[79; 91) 75 LET_STMT@79..91
76 LET_KW@[79; 82) "let" 76 LET_KW@79..82 "let"
77 WHITESPACE@[82; 83) " " 77 WHITESPACE@82..83 " "
78 TUPLE_PAT@[83; 85) 78 TUPLE_PAT@83..85
79 L_PAREN@[83; 84) "(" 79 L_PAREN@83..84 "("
80 R_PAREN@[84; 85) ")" 80 R_PAREN@84..85 ")"
81 WHITESPACE@[85; 86) " " 81 WHITESPACE@85..86 " "
82 EQ@[86; 87) "=" 82 EQ@86..87 "="
83 WHITESPACE@[87; 88) " " 83 WHITESPACE@87..88 " "
84 TUPLE_EXPR@[88; 90) 84 TUPLE_EXPR@88..90
85 L_PAREN@[88; 89) "(" 85 L_PAREN@88..89 "("
86 R_PAREN@[89; 90) ")" 86 R_PAREN@89..90 ")"
87 SEMICOLON@[90; 91) ";" 87 SEMICOLON@90..91 ";"
88 WHITESPACE@[91; 92) "\n" 88 WHITESPACE@91..92 "\n"
89 R_CURLY@[92; 93) "}" 89 R_CURLY@92..93 "}"
90 WHITESPACE@[93; 94) "\n" 90 WHITESPACE@93..94 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0112_bind_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0112_bind_pat.rast
index 5e8f625dc..42a770a83 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0112_bind_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0112_bind_pat.rast
@@ -1,128 +1,128 @@
1SOURCE_FILE@[0; 146) 1SOURCE_FILE@0..146
2 FN_DEF@[0; 145) 2 FN_DEF@0..145
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 145) 11 BLOCK_EXPR@10..145
12 BLOCK@[10; 145) 12 BLOCK@10..145
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 LET_STMT@[16; 27) 15 LET_STMT@16..27
16 LET_KW@[16; 19) "let" 16 LET_KW@16..19 "let"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 BIND_PAT@[20; 21) 18 BIND_PAT@20..21
19 NAME@[20; 21) 19 NAME@20..21
20 IDENT@[20; 21) "a" 20 IDENT@20..21 "a"
21 WHITESPACE@[21; 22) " " 21 WHITESPACE@21..22 " "
22 EQ@[22; 23) "=" 22 EQ@22..23 "="
23 WHITESPACE@[23; 24) " " 23 WHITESPACE@23..24 " "
24 TUPLE_EXPR@[24; 26) 24 TUPLE_EXPR@24..26
25 L_PAREN@[24; 25) "(" 25 L_PAREN@24..25 "("
26 R_PAREN@[25; 26) ")" 26 R_PAREN@25..26 ")"
27 SEMICOLON@[26; 27) ";" 27 SEMICOLON@26..27 ";"
28 WHITESPACE@[27; 32) "\n " 28 WHITESPACE@27..32 "\n "
29 LET_STMT@[32; 47) 29 LET_STMT@32..47
30 LET_KW@[32; 35) "let" 30 LET_KW@32..35 "let"
31 WHITESPACE@[35; 36) " " 31 WHITESPACE@35..36 " "
32 BIND_PAT@[36; 41) 32 BIND_PAT@36..41
33 MUT_KW@[36; 39) "mut" 33 MUT_KW@36..39 "mut"
34 WHITESPACE@[39; 40) " " 34 WHITESPACE@39..40 " "
35 NAME@[40; 41) 35 NAME@40..41
36 IDENT@[40; 41) "b" 36 IDENT@40..41 "b"
37 WHITESPACE@[41; 42) " " 37 WHITESPACE@41..42 " "
38 EQ@[42; 43) "=" 38 EQ@42..43 "="
39 WHITESPACE@[43; 44) " " 39 WHITESPACE@43..44 " "
40 TUPLE_EXPR@[44; 46) 40 TUPLE_EXPR@44..46
41 L_PAREN@[44; 45) "(" 41 L_PAREN@44..45 "("
42 R_PAREN@[45; 46) ")" 42 R_PAREN@45..46 ")"
43 SEMICOLON@[46; 47) ";" 43 SEMICOLON@46..47 ";"
44 WHITESPACE@[47; 52) "\n " 44 WHITESPACE@47..52 "\n "
45 LET_STMT@[52; 67) 45 LET_STMT@52..67
46 LET_KW@[52; 55) "let" 46 LET_KW@52..55 "let"
47 WHITESPACE@[55; 56) " " 47 WHITESPACE@55..56 " "
48 BIND_PAT@[56; 61) 48 BIND_PAT@56..61
49 REF_KW@[56; 59) "ref" 49 REF_KW@56..59 "ref"
50 WHITESPACE@[59; 60) " " 50 WHITESPACE@59..60 " "
51 NAME@[60; 61) 51 NAME@60..61
52 IDENT@[60; 61) "c" 52 IDENT@60..61 "c"
53 WHITESPACE@[61; 62) " " 53 WHITESPACE@61..62 " "
54 EQ@[62; 63) "=" 54 EQ@62..63 "="
55 WHITESPACE@[63; 64) " " 55 WHITESPACE@63..64 " "
56 TUPLE_EXPR@[64; 66) 56 TUPLE_EXPR@64..66
57 L_PAREN@[64; 65) "(" 57 L_PAREN@64..65 "("
58 R_PAREN@[65; 66) ")" 58 R_PAREN@65..66 ")"
59 SEMICOLON@[66; 67) ";" 59 SEMICOLON@66..67 ";"
60 WHITESPACE@[67; 72) "\n " 60 WHITESPACE@67..72 "\n "
61 LET_STMT@[72; 91) 61 LET_STMT@72..91
62 LET_KW@[72; 75) "let" 62 LET_KW@72..75 "let"
63 WHITESPACE@[75; 76) " " 63 WHITESPACE@75..76 " "
64 BIND_PAT@[76; 85) 64 BIND_PAT@76..85
65 REF_KW@[76; 79) "ref" 65 REF_KW@76..79 "ref"
66 WHITESPACE@[79; 80) " " 66 WHITESPACE@79..80 " "
67 MUT_KW@[80; 83) "mut" 67 MUT_KW@80..83 "mut"
68 WHITESPACE@[83; 84) " " 68 WHITESPACE@83..84 " "
69 NAME@[84; 85) 69 NAME@84..85
70 IDENT@[84; 85) "d" 70 IDENT@84..85 "d"
71 WHITESPACE@[85; 86) " " 71 WHITESPACE@85..86 " "
72 EQ@[86; 87) "=" 72 EQ@86..87 "="
73 WHITESPACE@[87; 88) " " 73 WHITESPACE@87..88 " "
74 TUPLE_EXPR@[88; 90) 74 TUPLE_EXPR@88..90
75 L_PAREN@[88; 89) "(" 75 L_PAREN@88..89 "("
76 R_PAREN@[89; 90) ")" 76 R_PAREN@89..90 ")"
77 SEMICOLON@[90; 91) ";" 77 SEMICOLON@90..91 ";"
78 WHITESPACE@[91; 96) "\n " 78 WHITESPACE@91..96 "\n "
79 LET_STMT@[96; 111) 79 LET_STMT@96..111
80 LET_KW@[96; 99) "let" 80 LET_KW@96..99 "let"
81 WHITESPACE@[99; 100) " " 81 WHITESPACE@99..100 " "
82 BIND_PAT@[100; 105) 82 BIND_PAT@100..105
83 NAME@[100; 101) 83 NAME@100..101
84 IDENT@[100; 101) "e" 84 IDENT@100..101 "e"
85 WHITESPACE@[101; 102) " " 85 WHITESPACE@101..102 " "
86 AT@[102; 103) "@" 86 AT@102..103 "@"
87 WHITESPACE@[103; 104) " " 87 WHITESPACE@103..104 " "
88 PLACEHOLDER_PAT@[104; 105) 88 PLACEHOLDER_PAT@104..105
89 UNDERSCORE@[104; 105) "_" 89 UNDERSCORE@104..105 "_"
90 WHITESPACE@[105; 106) " " 90 WHITESPACE@105..106 " "
91 EQ@[106; 107) "=" 91 EQ@106..107 "="
92 WHITESPACE@[107; 108) " " 92 WHITESPACE@107..108 " "
93 TUPLE_EXPR@[108; 110) 93 TUPLE_EXPR@108..110
94 L_PAREN@[108; 109) "(" 94 L_PAREN@108..109 "("
95 R_PAREN@[109; 110) ")" 95 R_PAREN@109..110 ")"
96 SEMICOLON@[110; 111) ";" 96 SEMICOLON@110..111 ";"
97 WHITESPACE@[111; 116) "\n " 97 WHITESPACE@111..116 "\n "
98 LET_STMT@[116; 143) 98 LET_STMT@116..143
99 LET_KW@[116; 119) "let" 99 LET_KW@116..119 "let"
100 WHITESPACE@[119; 120) " " 100 WHITESPACE@119..120 " "
101 BIND_PAT@[120; 137) 101 BIND_PAT@120..137
102 REF_KW@[120; 123) "ref" 102 REF_KW@120..123 "ref"
103 WHITESPACE@[123; 124) " " 103 WHITESPACE@123..124 " "
104 MUT_KW@[124; 127) "mut" 104 MUT_KW@124..127 "mut"
105 WHITESPACE@[127; 128) " " 105 WHITESPACE@127..128 " "
106 NAME@[128; 129) 106 NAME@128..129
107 IDENT@[128; 129) "f" 107 IDENT@128..129 "f"
108 WHITESPACE@[129; 130) " " 108 WHITESPACE@129..130 " "
109 AT@[130; 131) "@" 109 AT@130..131 "@"
110 WHITESPACE@[131; 132) " " 110 WHITESPACE@131..132 " "
111 BIND_PAT@[132; 137) 111 BIND_PAT@132..137
112 NAME@[132; 133) 112 NAME@132..133
113 IDENT@[132; 133) "g" 113 IDENT@132..133 "g"
114 WHITESPACE@[133; 134) " " 114 WHITESPACE@133..134 " "
115 AT@[134; 135) "@" 115 AT@134..135 "@"
116 WHITESPACE@[135; 136) " " 116 WHITESPACE@135..136 " "
117 PLACEHOLDER_PAT@[136; 137) 117 PLACEHOLDER_PAT@136..137
118 UNDERSCORE@[136; 137) "_" 118 UNDERSCORE@136..137 "_"
119 WHITESPACE@[137; 138) " " 119 WHITESPACE@137..138 " "
120 EQ@[138; 139) "=" 120 EQ@138..139 "="
121 WHITESPACE@[139; 140) " " 121 WHITESPACE@139..140 " "
122 TUPLE_EXPR@[140; 142) 122 TUPLE_EXPR@140..142
123 L_PAREN@[140; 141) "(" 123 L_PAREN@140..141 "("
124 R_PAREN@[141; 142) ")" 124 R_PAREN@141..142 ")"
125 SEMICOLON@[142; 143) ";" 125 SEMICOLON@142..143 ";"
126 WHITESPACE@[143; 144) "\n" 126 WHITESPACE@143..144 "\n"
127 R_CURLY@[144; 145) "}" 127 R_CURLY@144..145 "}"
128 WHITESPACE@[145; 146) "\n" 128 WHITESPACE@145..146 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0113_nocontentexpr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0113_nocontentexpr.rast
index f2f649410..5414c90b8 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0113_nocontentexpr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0113_nocontentexpr.rast
@@ -1,57 +1,57 @@
1SOURCE_FILE@[0; 50) 1SOURCE_FILE@0..50
2 FN_DEF@[0; 49) 2 FN_DEF@0..49
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 BLOCK_EXPR@[8; 49) 10 BLOCK_EXPR@8..49
11 BLOCK@[8; 49) 11 BLOCK@8..49
12 L_CURLY@[8; 9) "{" 12 L_CURLY@8..9 "{"
13 WHITESPACE@[9; 14) "\n " 13 WHITESPACE@9..14 "\n "
14 SEMICOLON@[14; 15) ";" 14 SEMICOLON@14..15 ";"
15 SEMICOLON@[15; 16) ";" 15 SEMICOLON@15..16 ";"
16 SEMICOLON@[16; 17) ";" 16 SEMICOLON@16..17 ";"
17 EXPR_STMT@[17; 29) 17 EXPR_STMT@17..29
18 CALL_EXPR@[17; 28) 18 CALL_EXPR@17..28
19 PATH_EXPR@[17; 26) 19 PATH_EXPR@17..26
20 PATH@[17; 26) 20 PATH@17..26
21 PATH_SEGMENT@[17; 26) 21 PATH_SEGMENT@17..26
22 NAME_REF@[17; 26) 22 NAME_REF@17..26
23 IDENT@[17; 26) "some_expr" 23 IDENT@17..26 "some_expr"
24 ARG_LIST@[26; 28) 24 ARG_LIST@26..28
25 L_PAREN@[26; 27) "(" 25 L_PAREN@26..27 "("
26 R_PAREN@[27; 28) ")" 26 R_PAREN@27..28 ")"
27 SEMICOLON@[28; 29) ";" 27 SEMICOLON@28..29 ";"
28 SEMICOLON@[29; 30) ";" 28 SEMICOLON@29..30 ";"
29 SEMICOLON@[30; 31) ";" 29 SEMICOLON@30..31 ";"
30 SEMICOLON@[31; 32) ";" 30 SEMICOLON@31..32 ";"
31 EXPR_STMT@[32; 38) 31 EXPR_STMT@32..38
32 BLOCK_EXPR@[32; 37) 32 BLOCK_EXPR@32..37
33 BLOCK@[32; 37) 33 BLOCK@32..37
34 L_CURLY@[32; 33) "{" 34 L_CURLY@32..33 "{"
35 SEMICOLON@[33; 34) ";" 35 SEMICOLON@33..34 ";"
36 SEMICOLON@[34; 35) ";" 36 SEMICOLON@34..35 ";"
37 SEMICOLON@[35; 36) ";" 37 SEMICOLON@35..36 ";"
38 R_CURLY@[36; 37) "}" 38 R_CURLY@36..37 "}"
39 SEMICOLON@[37; 38) ";" 39 SEMICOLON@37..38 ";"
40 SEMICOLON@[38; 39) ";" 40 SEMICOLON@38..39 ";"
41 SEMICOLON@[39; 40) ";" 41 SEMICOLON@39..40 ";"
42 SEMICOLON@[40; 41) ";" 42 SEMICOLON@40..41 ";"
43 CALL_EXPR@[41; 47) 43 CALL_EXPR@41..47
44 PATH_EXPR@[41; 43) 44 PATH_EXPR@41..43
45 PATH@[41; 43) 45 PATH@41..43
46 PATH_SEGMENT@[41; 43) 46 PATH_SEGMENT@41..43
47 NAME_REF@[41; 43) 47 NAME_REF@41..43
48 IDENT@[41; 43) "Ok" 48 IDENT@41..43 "Ok"
49 ARG_LIST@[43; 47) 49 ARG_LIST@43..47
50 L_PAREN@[43; 44) "(" 50 L_PAREN@43..44 "("
51 TUPLE_EXPR@[44; 46) 51 TUPLE_EXPR@44..46
52 L_PAREN@[44; 45) "(" 52 L_PAREN@44..45 "("
53 R_PAREN@[45; 46) ")" 53 R_PAREN@45..46 ")"
54 R_PAREN@[46; 47) ")" 54 R_PAREN@46..47 ")"
55 WHITESPACE@[47; 48) "\n" 55 WHITESPACE@47..48 "\n"
56 R_CURLY@[48; 49) "}" 56 R_CURLY@48..49 "}"
57 WHITESPACE@[49; 50) "\n" 57 WHITESPACE@49..50 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rast b/crates/ra_syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rast
index 457c82e74..01d717d6b 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rast
@@ -1,64 +1,64 @@
1SOURCE_FILE@[0; 53) 1SOURCE_FILE@0..53
2 STRUCT_DEF@[0; 33) 2 STRUCT_DEF@0..33
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 11) 5 NAME@7..11
6 IDENT@[7; 11) "Test" 6 IDENT@7..11 "Test"
7 TYPE_PARAM_LIST@[11; 14) 7 TYPE_PARAM_LIST@11..14
8 L_ANGLE@[11; 12) "<" 8 L_ANGLE@11..12 "<"
9 TYPE_PARAM@[12; 13) 9 TYPE_PARAM@12..13
10 NAME@[12; 13) 10 NAME@12..13
11 IDENT@[12; 13) "T" 11 IDENT@12..13 "T"
12 R_ANGLE@[13; 14) ">" 12 R_ANGLE@13..14 ">"
13 TUPLE_FIELD_DEF_LIST@[14; 17) 13 TUPLE_FIELD_DEF_LIST@14..17
14 L_PAREN@[14; 15) "(" 14 L_PAREN@14..15 "("
15 TUPLE_FIELD_DEF@[15; 16) 15 TUPLE_FIELD_DEF@15..16
16 PATH_TYPE@[15; 16) 16 PATH_TYPE@15..16
17 PATH@[15; 16) 17 PATH@15..16
18 PATH_SEGMENT@[15; 16) 18 PATH_SEGMENT@15..16
19 NAME_REF@[15; 16) 19 NAME_REF@15..16
20 IDENT@[15; 16) "T" 20 IDENT@15..16 "T"
21 R_PAREN@[16; 17) ")" 21 R_PAREN@16..17 ")"
22 WHITESPACE@[17; 18) " " 22 WHITESPACE@17..18 " "
23 WHERE_CLAUSE@[18; 32) 23 WHERE_CLAUSE@18..32
24 WHERE_KW@[18; 23) "where" 24 WHERE_KW@18..23 "where"
25 WHITESPACE@[23; 24) " " 25 WHITESPACE@23..24 " "
26 WHERE_PRED@[24; 32) 26 WHERE_PRED@24..32
27 PATH_TYPE@[24; 25) 27 PATH_TYPE@24..25
28 PATH@[24; 25) 28 PATH@24..25
29 PATH_SEGMENT@[24; 25) 29 PATH_SEGMENT@24..25
30 NAME_REF@[24; 25) 30 NAME_REF@24..25
31 IDENT@[24; 25) "T" 31 IDENT@24..25 "T"
32 COLON@[25; 26) ":" 32 COLON@25..26 ":"
33 WHITESPACE@[26; 27) " " 33 WHITESPACE@26..27 " "
34 TYPE_BOUND_LIST@[27; 32) 34 TYPE_BOUND_LIST@27..32
35 TYPE_BOUND@[27; 32) 35 TYPE_BOUND@27..32
36 PATH_TYPE@[27; 32) 36 PATH_TYPE@27..32
37 PATH@[27; 32) 37 PATH@27..32
38 PATH_SEGMENT@[27; 32) 38 PATH_SEGMENT@27..32
39 NAME_REF@[27; 32) 39 NAME_REF@27..32
40 IDENT@[27; 32) "Clone" 40 IDENT@27..32 "Clone"
41 SEMICOLON@[32; 33) ";" 41 SEMICOLON@32..33 ";"
42 WHITESPACE@[33; 34) "\n" 42 WHITESPACE@33..34 "\n"
43 STRUCT_DEF@[34; 52) 43 STRUCT_DEF@34..52
44 STRUCT_KW@[34; 40) "struct" 44 STRUCT_KW@34..40 "struct"
45 WHITESPACE@[40; 41) " " 45 WHITESPACE@40..41 " "
46 NAME@[41; 45) 46 NAME@41..45
47 IDENT@[41; 45) "Test" 47 IDENT@41..45 "Test"
48 TYPE_PARAM_LIST@[45; 48) 48 TYPE_PARAM_LIST@45..48
49 L_ANGLE@[45; 46) "<" 49 L_ANGLE@45..46 "<"
50 TYPE_PARAM@[46; 47) 50 TYPE_PARAM@46..47
51 NAME@[46; 47) 51 NAME@46..47
52 IDENT@[46; 47) "T" 52 IDENT@46..47 "T"
53 R_ANGLE@[47; 48) ">" 53 R_ANGLE@47..48 ">"
54 TUPLE_FIELD_DEF_LIST@[48; 51) 54 TUPLE_FIELD_DEF_LIST@48..51
55 L_PAREN@[48; 49) "(" 55 L_PAREN@48..49 "("
56 TUPLE_FIELD_DEF@[49; 50) 56 TUPLE_FIELD_DEF@49..50
57 PATH_TYPE@[49; 50) 57 PATH_TYPE@49..50
58 PATH@[49; 50) 58 PATH@49..50
59 PATH_SEGMENT@[49; 50) 59 PATH_SEGMENT@49..50
60 NAME_REF@[49; 50) 60 NAME_REF@49..50
61 IDENT@[49; 50) "T" 61 IDENT@49..50 "T"
62 R_PAREN@[50; 51) ")" 62 R_PAREN@50..51 ")"
63 SEMICOLON@[51; 52) ";" 63 SEMICOLON@51..52 ";"
64 WHITESPACE@[52; 53) "\n" 64 WHITESPACE@52..53 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0115_tuple_field_attrs.rast b/crates/ra_syntax/test_data/parser/inline/ok/0115_tuple_field_attrs.rast
index 0b1552a9d..3c0ef9005 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0115_tuple_field_attrs.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0115_tuple_field_attrs.rast
@@ -1,41 +1,41 @@
1SOURCE_FILE@[0; 60) 1SOURCE_FILE@0..60
2 STRUCT_DEF@[0; 59) 2 STRUCT_DEF@0..59
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 TUPLE_FIELD_DEF_LIST@[9; 58) 8 TUPLE_FIELD_DEF_LIST@9..58
9 L_PAREN@[9; 10) "(" 9 L_PAREN@9..10 "("
10 WHITESPACE@[10; 15) "\n " 10 WHITESPACE@10..15 "\n "
11 TUPLE_FIELD_DEF@[15; 55) 11 TUPLE_FIELD_DEF@15..55
12 ATTR@[15; 43) 12 ATTR@15..43
13 POUND@[15; 16) "#" 13 POUND@15..16 "#"
14 L_BRACK@[16; 17) "[" 14 L_BRACK@16..17 "["
15 PATH@[17; 22) 15 PATH@17..22
16 PATH_SEGMENT@[17; 22) 16 PATH_SEGMENT@17..22
17 NAME_REF@[17; 22) 17 NAME_REF@17..22
18 IDENT@[17; 22) "serde" 18 IDENT@17..22 "serde"
19 TOKEN_TREE@[22; 42) 19 TOKEN_TREE@22..42
20 L_PAREN@[22; 23) "(" 20 L_PAREN@22..23 "("
21 IDENT@[23; 27) "with" 21 IDENT@23..27 "with"
22 WHITESPACE@[27; 28) " " 22 WHITESPACE@27..28 " "
23 EQ@[28; 29) "=" 23 EQ@28..29 "="
24 WHITESPACE@[29; 30) " " 24 WHITESPACE@29..30 " "
25 STRING@[30; 41) "\"url_serde\"" 25 STRING@30..41 "\"url_serde\""
26 R_PAREN@[41; 42) ")" 26 R_PAREN@41..42 ")"
27 R_BRACK@[42; 43) "]" 27 R_BRACK@42..43 "]"
28 WHITESPACE@[43; 48) "\n " 28 WHITESPACE@43..48 "\n "
29 VISIBILITY@[48; 51) 29 VISIBILITY@48..51
30 PUB_KW@[48; 51) "pub" 30 PUB_KW@48..51 "pub"
31 WHITESPACE@[51; 52) " " 31 WHITESPACE@51..52 " "
32 PATH_TYPE@[52; 55) 32 PATH_TYPE@52..55
33 PATH@[52; 55) 33 PATH@52..55
34 PATH_SEGMENT@[52; 55) 34 PATH_SEGMENT@52..55
35 NAME_REF@[52; 55) 35 NAME_REF@52..55
36 IDENT@[52; 55) "Uri" 36 IDENT@52..55 "Uri"
37 COMMA@[55; 56) "," 37 COMMA@55..56 ","
38 WHITESPACE@[56; 57) "\n" 38 WHITESPACE@56..57 "\n"
39 R_PAREN@[57; 58) ")" 39 R_PAREN@57..58 ")"
40 SEMICOLON@[58; 59) ";" 40 SEMICOLON@58..59 ";"
41 WHITESPACE@[59; 60) "\n" 41 WHITESPACE@59..60 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0117_macro_call_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0117_macro_call_type.rast
index 4f9e80e2e..ddfcf974e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0117_macro_call_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0117_macro_call_type.rast
@@ -1,43 +1,43 @@
1SOURCE_FILE@[0; 41) 1SOURCE_FILE@0..41
2 TYPE_ALIAS_DEF@[0; 16) 2 TYPE_ALIAS_DEF@0..16
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "A" 6 IDENT@5..6 "A"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 MACRO_CALL@[9; 15) 10 MACRO_CALL@9..15
11 PATH@[9; 12) 11 PATH@9..12
12 PATH_SEGMENT@[9; 12) 12 PATH_SEGMENT@9..12
13 NAME_REF@[9; 12) 13 NAME_REF@9..12
14 IDENT@[9; 12) "foo" 14 IDENT@9..12 "foo"
15 BANG@[12; 13) "!" 15 BANG@12..13 "!"
16 TOKEN_TREE@[13; 15) 16 TOKEN_TREE@13..15
17 L_PAREN@[13; 14) "(" 17 L_PAREN@13..14 "("
18 R_PAREN@[14; 15) ")" 18 R_PAREN@14..15 ")"
19 SEMICOLON@[15; 16) ";" 19 SEMICOLON@15..16 ";"
20 WHITESPACE@[16; 17) "\n" 20 WHITESPACE@16..17 "\n"
21 TYPE_ALIAS_DEF@[17; 40) 21 TYPE_ALIAS_DEF@17..40
22 TYPE_KW@[17; 21) "type" 22 TYPE_KW@17..21 "type"
23 WHITESPACE@[21; 22) " " 23 WHITESPACE@21..22 " "
24 NAME@[22; 23) 24 NAME@22..23
25 IDENT@[22; 23) "B" 25 IDENT@22..23 "B"
26 WHITESPACE@[23; 24) " " 26 WHITESPACE@23..24 " "
27 EQ@[24; 25) "=" 27 EQ@24..25 "="
28 WHITESPACE@[25; 26) " " 28 WHITESPACE@25..26 " "
29 MACRO_CALL@[26; 39) 29 MACRO_CALL@26..39
30 PATH@[26; 36) 30 PATH@26..36
31 PATH@[26; 31) 31 PATH@26..31
32 PATH_SEGMENT@[26; 31) 32 PATH_SEGMENT@26..31
33 CRATE_KW@[26; 31) "crate" 33 CRATE_KW@26..31 "crate"
34 COLON2@[31; 33) "::" 34 COLON2@31..33 "::"
35 PATH_SEGMENT@[33; 36) 35 PATH_SEGMENT@33..36
36 NAME_REF@[33; 36) 36 NAME_REF@33..36
37 IDENT@[33; 36) "foo" 37 IDENT@33..36 "foo"
38 BANG@[36; 37) "!" 38 BANG@36..37 "!"
39 TOKEN_TREE@[37; 39) 39 TOKEN_TREE@37..39
40 L_PAREN@[37; 38) "(" 40 L_PAREN@37..38 "("
41 R_PAREN@[38; 39) ")" 41 R_PAREN@38..39 ")"
42 SEMICOLON@[39; 40) ";" 42 SEMICOLON@39..40 ";"
43 WHITESPACE@[40; 41) "\n" 43 WHITESPACE@40..41 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0118_impl_inner_attributes.rast b/crates/ra_syntax/test_data/parser/inline/ok/0118_impl_inner_attributes.rast
index f9a4bc81b..a65a5c85f 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0118_impl_inner_attributes.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0118_impl_inner_attributes.rast
@@ -1,40 +1,40 @@
1SOURCE_FILE@[0; 94) 1SOURCE_FILE@0..94
2 ENUM_DEF@[0; 8) 2 ENUM_DEF@0..8
3 ENUM_KW@[0; 4) "enum" 3 ENUM_KW@0..4 "enum"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "F" 6 IDENT@5..6 "F"
7 ENUM_VARIANT_LIST@[6; 8) 7 ENUM_VARIANT_LIST@6..8
8 L_CURLY@[6; 7) "{" 8 L_CURLY@6..7 "{"
9 R_CURLY@[7; 8) "}" 9 R_CURLY@7..8 "}"
10 WHITESPACE@[8; 9) "\n" 10 WHITESPACE@8..9 "\n"
11 IMPL_DEF@[9; 93) 11 IMPL_DEF@9..93
12 IMPL_KW@[9; 13) "impl" 12 IMPL_KW@9..13 "impl"
13 WHITESPACE@[13; 14) " " 13 WHITESPACE@13..14 " "
14 PATH_TYPE@[14; 15) 14 PATH_TYPE@14..15
15 PATH@[14; 15) 15 PATH@14..15
16 PATH_SEGMENT@[14; 15) 16 PATH_SEGMENT@14..15
17 NAME_REF@[14; 15) 17 NAME_REF@14..15
18 IDENT@[14; 15) "F" 18 IDENT@14..15 "F"
19 WHITESPACE@[15; 16) " " 19 WHITESPACE@15..16 " "
20 ITEM_LIST@[16; 93) 20 ITEM_LIST@16..93
21 L_CURLY@[16; 17) "{" 21 L_CURLY@16..17 "{"
22 WHITESPACE@[17; 23) "\n " 22 WHITESPACE@17..23 "\n "
23 COMMENT@[23; 48) "//! This is a doc com ..." 23 COMMENT@23..48 "//! This is a doc com ..."
24 WHITESPACE@[48; 54) "\n " 24 WHITESPACE@48..54 "\n "
25 ATTR@[54; 91) 25 ATTR@54..91
26 POUND@[54; 55) "#" 26 POUND@54..55 "#"
27 BANG@[55; 56) "!" 27 BANG@55..56 "!"
28 L_BRACK@[56; 57) "[" 28 L_BRACK@56..57 "["
29 PATH@[57; 60) 29 PATH@57..60
30 PATH_SEGMENT@[57; 60) 30 PATH_SEGMENT@57..60
31 NAME_REF@[57; 60) 31 NAME_REF@57..60
32 IDENT@[57; 60) "doc" 32 IDENT@57..60 "doc"
33 TOKEN_TREE@[60; 90) 33 TOKEN_TREE@60..90
34 L_PAREN@[60; 61) "(" 34 L_PAREN@60..61 "("
35 STRING@[61; 89) "\"This is also a doc c ..." 35 STRING@61..89 "\"This is also a doc c ..."
36 R_PAREN@[89; 90) ")" 36 R_PAREN@89..90 ")"
37 R_BRACK@[90; 91) "]" 37 R_BRACK@90..91 "]"
38 WHITESPACE@[91; 92) "\n" 38 WHITESPACE@91..92 "\n"
39 R_CURLY@[92; 93) "}" 39 R_CURLY@92..93 "}"
40 WHITESPACE@[93; 94) "\n" 40 WHITESPACE@93..94 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0118_match_guard.rast b/crates/ra_syntax/test_data/parser/inline/ok/0118_match_guard.rast
index 852e4e489..8e080fb60 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0118_match_guard.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0118_match_guard.rast
@@ -1,48 +1,48 @@
1SOURCE_FILE@[0; 58) 1SOURCE_FILE@0..58
2 FN_DEF@[0; 57) 2 FN_DEF@0..57
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 57) 11 BLOCK_EXPR@9..57
12 BLOCK@[9; 57) 12 BLOCK@9..57
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 MATCH_EXPR@[15; 55) 15 MATCH_EXPR@15..55
16 MATCH_KW@[15; 20) "match" 16 MATCH_KW@15..20 "match"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 TUPLE_EXPR@[21; 23) 18 TUPLE_EXPR@21..23
19 L_PAREN@[21; 22) "(" 19 L_PAREN@21..22 "("
20 R_PAREN@[22; 23) ")" 20 R_PAREN@22..23 ")"
21 WHITESPACE@[23; 24) " " 21 WHITESPACE@23..24 " "
22 MATCH_ARM_LIST@[24; 55) 22 MATCH_ARM_LIST@24..55
23 L_CURLY@[24; 25) "{" 23 L_CURLY@24..25 "{"
24 WHITESPACE@[25; 34) "\n " 24 WHITESPACE@25..34 "\n "
25 MATCH_ARM@[34; 48) 25 MATCH_ARM@34..48
26 PLACEHOLDER_PAT@[34; 35) 26 PLACEHOLDER_PAT@34..35
27 UNDERSCORE@[34; 35) "_" 27 UNDERSCORE@34..35 "_"
28 WHITESPACE@[35; 36) " " 28 WHITESPACE@35..36 " "
29 MATCH_GUARD@[36; 42) 29 MATCH_GUARD@36..42
30 IF_KW@[36; 38) "if" 30 IF_KW@36..38 "if"
31 WHITESPACE@[38; 39) " " 31 WHITESPACE@38..39 " "
32 PATH_EXPR@[39; 42) 32 PATH_EXPR@39..42
33 PATH@[39; 42) 33 PATH@39..42
34 PATH_SEGMENT@[39; 42) 34 PATH_SEGMENT@39..42
35 NAME_REF@[39; 42) 35 NAME_REF@39..42
36 IDENT@[39; 42) "foo" 36 IDENT@39..42 "foo"
37 WHITESPACE@[42; 43) " " 37 WHITESPACE@42..43 " "
38 FAT_ARROW@[43; 45) "=>" 38 FAT_ARROW@43..45 "=>"
39 WHITESPACE@[45; 46) " " 39 WHITESPACE@45..46 " "
40 TUPLE_EXPR@[46; 48) 40 TUPLE_EXPR@46..48
41 L_PAREN@[46; 47) "(" 41 L_PAREN@46..47 "("
42 R_PAREN@[47; 48) ")" 42 R_PAREN@47..48 ")"
43 COMMA@[48; 49) "," 43 COMMA@48..49 ","
44 WHITESPACE@[49; 54) "\n " 44 WHITESPACE@49..54 "\n "
45 R_CURLY@[54; 55) "}" 45 R_CURLY@54..55 "}"
46 WHITESPACE@[55; 56) "\n" 46 WHITESPACE@55..56 "\n"
47 R_CURLY@[56; 57) "}" 47 R_CURLY@56..57 "}"
48 WHITESPACE@[57; 58) "\n" 48 WHITESPACE@57..58 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0120_match_arms_inner_attribute.rast b/crates/ra_syntax/test_data/parser/inline/ok/0120_match_arms_inner_attribute.rast
index 7eec92e1b..728164f8e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0120_match_arms_inner_attribute.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0120_match_arms_inner_attribute.rast
@@ -1,81 +1,81 @@
1SOURCE_FILE@[0; 139) 1SOURCE_FILE@0..139
2 FN_DEF@[0; 138) 2 FN_DEF@0..138
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 138) 11 BLOCK_EXPR@9..138
12 BLOCK@[9; 138) 12 BLOCK@9..138
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 MATCH_EXPR@[15; 136) 15 MATCH_EXPR@15..136
16 MATCH_KW@[15; 20) "match" 16 MATCH_KW@15..20 "match"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 TUPLE_EXPR@[21; 23) 18 TUPLE_EXPR@21..23
19 L_PAREN@[21; 22) "(" 19 L_PAREN@21..22 "("
20 R_PAREN@[22; 23) ")" 20 R_PAREN@22..23 ")"
21 WHITESPACE@[23; 24) " " 21 WHITESPACE@23..24 " "
22 MATCH_ARM_LIST@[24; 136) 22 MATCH_ARM_LIST@24..136
23 L_CURLY@[24; 25) "{" 23 L_CURLY@24..25 "{"
24 WHITESPACE@[25; 34) "\n " 24 WHITESPACE@25..34 "\n "
25 ATTR@[34; 60) 25 ATTR@34..60
26 POUND@[34; 35) "#" 26 POUND@34..35 "#"
27 BANG@[35; 36) "!" 27 BANG@35..36 "!"
28 L_BRACK@[36; 37) "[" 28 L_BRACK@36..37 "["
29 PATH@[37; 40) 29 PATH@37..40
30 PATH_SEGMENT@[37; 40) 30 PATH_SEGMENT@37..40
31 NAME_REF@[37; 40) 31 NAME_REF@37..40
32 IDENT@[37; 40) "doc" 32 IDENT@37..40 "doc"
33 TOKEN_TREE@[40; 59) 33 TOKEN_TREE@40..59
34 L_PAREN@[40; 41) "(" 34 L_PAREN@40..41 "("
35 STRING@[41; 58) "\"Inner attribute\"" 35 STRING@41..58 "\"Inner attribute\""
36 R_PAREN@[58; 59) ")" 36 R_PAREN@58..59 ")"
37 R_BRACK@[59; 60) "]" 37 R_BRACK@59..60 "]"
38 WHITESPACE@[60; 69) "\n " 38 WHITESPACE@60..69 "\n "
39 ATTR@[69; 86) 39 ATTR@69..86
40 POUND@[69; 70) "#" 40 POUND@69..70 "#"
41 BANG@[70; 71) "!" 41 BANG@70..71 "!"
42 L_BRACK@[71; 72) "[" 42 L_BRACK@71..72 "["
43 PATH@[72; 75) 43 PATH@72..75
44 PATH_SEGMENT@[72; 75) 44 PATH_SEGMENT@72..75
45 NAME_REF@[72; 75) 45 NAME_REF@72..75
46 IDENT@[72; 75) "doc" 46 IDENT@72..75 "doc"
47 TOKEN_TREE@[75; 85) 47 TOKEN_TREE@75..85
48 L_PAREN@[75; 76) "(" 48 L_PAREN@75..76 "("
49 STRING@[76; 84) "\"Can be\"" 49 STRING@76..84 "\"Can be\""
50 R_PAREN@[84; 85) ")" 50 R_PAREN@84..85 ")"
51 R_BRACK@[85; 86) "]" 51 R_BRACK@85..86 "]"
52 WHITESPACE@[86; 95) "\n " 52 WHITESPACE@86..95 "\n "
53 ATTR@[95; 113) 53 ATTR@95..113
54 POUND@[95; 96) "#" 54 POUND@95..96 "#"
55 BANG@[96; 97) "!" 55 BANG@96..97 "!"
56 L_BRACK@[97; 98) "[" 56 L_BRACK@97..98 "["
57 PATH@[98; 101) 57 PATH@98..101
58 PATH_SEGMENT@[98; 101) 58 PATH_SEGMENT@98..101
59 NAME_REF@[98; 101) 59 NAME_REF@98..101
60 IDENT@[98; 101) "doc" 60 IDENT@98..101 "doc"
61 TOKEN_TREE@[101; 112) 61 TOKEN_TREE@101..112
62 L_PAREN@[101; 102) "(" 62 L_PAREN@101..102 "("
63 STRING@[102; 111) "\"Stacked\"" 63 STRING@102..111 "\"Stacked\""
64 R_PAREN@[111; 112) ")" 64 R_PAREN@111..112 ")"
65 R_BRACK@[112; 113) "]" 65 R_BRACK@112..113 "]"
66 WHITESPACE@[113; 122) "\n " 66 WHITESPACE@113..122 "\n "
67 MATCH_ARM@[122; 129) 67 MATCH_ARM@122..129
68 PLACEHOLDER_PAT@[122; 123) 68 PLACEHOLDER_PAT@122..123
69 UNDERSCORE@[122; 123) "_" 69 UNDERSCORE@122..123 "_"
70 WHITESPACE@[123; 124) " " 70 WHITESPACE@123..124 " "
71 FAT_ARROW@[124; 126) "=>" 71 FAT_ARROW@124..126 "=>"
72 WHITESPACE@[126; 127) " " 72 WHITESPACE@126..127 " "
73 TUPLE_EXPR@[127; 129) 73 TUPLE_EXPR@127..129
74 L_PAREN@[127; 128) "(" 74 L_PAREN@127..128 "("
75 R_PAREN@[128; 129) ")" 75 R_PAREN@128..129 ")"
76 COMMA@[129; 130) "," 76 COMMA@129..130 ","
77 WHITESPACE@[130; 135) "\n " 77 WHITESPACE@130..135 "\n "
78 R_CURLY@[135; 136) "}" 78 R_CURLY@135..136 "}"
79 WHITESPACE@[136; 137) "\n" 79 WHITESPACE@136..137 "\n"
80 R_CURLY@[137; 138) "}" 80 R_CURLY@137..138 "}"
81 WHITESPACE@[138; 139) "\n" 81 WHITESPACE@138..139 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0121_match_arms_outer_attributes.rast b/crates/ra_syntax/test_data/parser/inline/ok/0121_match_arms_outer_attributes.rast
index ff380b448..6123885e3 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0121_match_arms_outer_attributes.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0121_match_arms_outer_attributes.rast
@@ -1,146 +1,146 @@
1SOURCE_FILE@[0; 259) 1SOURCE_FILE@0..259
2 FN_DEF@[0; 258) 2 FN_DEF@0..258
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 258) 11 BLOCK_EXPR@9..258
12 BLOCK@[9; 258) 12 BLOCK@9..258
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 MATCH_EXPR@[15; 256) 15 MATCH_EXPR@15..256
16 MATCH_KW@[15; 20) "match" 16 MATCH_KW@15..20 "match"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 TUPLE_EXPR@[21; 23) 18 TUPLE_EXPR@21..23
19 L_PAREN@[21; 22) "(" 19 L_PAREN@21..22 "("
20 R_PAREN@[22; 23) ")" 20 R_PAREN@22..23 ")"
21 WHITESPACE@[23; 24) " " 21 WHITESPACE@23..24 " "
22 MATCH_ARM_LIST@[24; 256) 22 MATCH_ARM_LIST@24..256
23 L_CURLY@[24; 25) "{" 23 L_CURLY@24..25 "{"
24 WHITESPACE@[25; 34) "\n " 24 WHITESPACE@25..34 "\n "
25 MATCH_ARM@[34; 74) 25 MATCH_ARM@34..74
26 ATTR@[34; 58) 26 ATTR@34..58
27 POUND@[34; 35) "#" 27 POUND@34..35 "#"
28 L_BRACK@[35; 36) "[" 28 L_BRACK@35..36 "["
29 PATH@[36; 39) 29 PATH@36..39
30 PATH_SEGMENT@[36; 39) 30 PATH_SEGMENT@36..39
31 NAME_REF@[36; 39) 31 NAME_REF@36..39
32 IDENT@[36; 39) "cfg" 32 IDENT@36..39 "cfg"
33 TOKEN_TREE@[39; 57) 33 TOKEN_TREE@39..57
34 L_PAREN@[39; 40) "(" 34 L_PAREN@39..40 "("
35 IDENT@[40; 47) "feature" 35 IDENT@40..47 "feature"
36 WHITESPACE@[47; 48) " " 36 WHITESPACE@47..48 " "
37 EQ@[48; 49) "=" 37 EQ@48..49 "="
38 WHITESPACE@[49; 50) " " 38 WHITESPACE@49..50 " "
39 STRING@[50; 56) "\"some\"" 39 STRING@50..56 "\"some\""
40 R_PAREN@[56; 57) ")" 40 R_PAREN@56..57 ")"
41 R_BRACK@[57; 58) "]" 41 R_BRACK@57..58 "]"
42 WHITESPACE@[58; 67) "\n " 42 WHITESPACE@58..67 "\n "
43 PLACEHOLDER_PAT@[67; 68) 43 PLACEHOLDER_PAT@67..68
44 UNDERSCORE@[67; 68) "_" 44 UNDERSCORE@67..68 "_"
45 WHITESPACE@[68; 69) " " 45 WHITESPACE@68..69 " "
46 FAT_ARROW@[69; 71) "=>" 46 FAT_ARROW@69..71 "=>"
47 WHITESPACE@[71; 72) " " 47 WHITESPACE@71..72 " "
48 TUPLE_EXPR@[72; 74) 48 TUPLE_EXPR@72..74
49 L_PAREN@[72; 73) "(" 49 L_PAREN@72..73 "("
50 R_PAREN@[73; 74) ")" 50 R_PAREN@73..74 ")"
51 COMMA@[74; 75) "," 51 COMMA@74..75 ","
52 WHITESPACE@[75; 84) "\n " 52 WHITESPACE@75..84 "\n "
53 MATCH_ARM@[84; 125) 53 MATCH_ARM@84..125
54 ATTR@[84; 109) 54 ATTR@84..109
55 POUND@[84; 85) "#" 55 POUND@84..85 "#"
56 L_BRACK@[85; 86) "[" 56 L_BRACK@85..86 "["
57 PATH@[86; 89) 57 PATH@86..89
58 PATH_SEGMENT@[86; 89) 58 PATH_SEGMENT@86..89
59 NAME_REF@[86; 89) 59 NAME_REF@86..89
60 IDENT@[86; 89) "cfg" 60 IDENT@86..89 "cfg"
61 TOKEN_TREE@[89; 108) 61 TOKEN_TREE@89..108
62 L_PAREN@[89; 90) "(" 62 L_PAREN@89..90 "("
63 IDENT@[90; 97) "feature" 63 IDENT@90..97 "feature"
64 WHITESPACE@[97; 98) " " 64 WHITESPACE@97..98 " "
65 EQ@[98; 99) "=" 65 EQ@98..99 "="
66 WHITESPACE@[99; 100) " " 66 WHITESPACE@99..100 " "
67 STRING@[100; 107) "\"other\"" 67 STRING@100..107 "\"other\""
68 R_PAREN@[107; 108) ")" 68 R_PAREN@107..108 ")"
69 R_BRACK@[108; 109) "]" 69 R_BRACK@108..109 "]"
70 WHITESPACE@[109; 118) "\n " 70 WHITESPACE@109..118 "\n "
71 PLACEHOLDER_PAT@[118; 119) 71 PLACEHOLDER_PAT@118..119
72 UNDERSCORE@[118; 119) "_" 72 UNDERSCORE@118..119 "_"
73 WHITESPACE@[119; 120) " " 73 WHITESPACE@119..120 " "
74 FAT_ARROW@[120; 122) "=>" 74 FAT_ARROW@120..122 "=>"
75 WHITESPACE@[122; 123) " " 75 WHITESPACE@122..123 " "
76 TUPLE_EXPR@[123; 125) 76 TUPLE_EXPR@123..125
77 L_PAREN@[123; 124) "(" 77 L_PAREN@123..124 "("
78 R_PAREN@[124; 125) ")" 78 R_PAREN@124..125 ")"
79 COMMA@[125; 126) "," 79 COMMA@125..126 ","
80 WHITESPACE@[126; 135) "\n " 80 WHITESPACE@126..135 "\n "
81 MATCH_ARM@[135; 249) 81 MATCH_ARM@135..249
82 ATTR@[135; 159) 82 ATTR@135..159
83 POUND@[135; 136) "#" 83 POUND@135..136 "#"
84 L_BRACK@[136; 137) "[" 84 L_BRACK@136..137 "["
85 PATH@[137; 140) 85 PATH@137..140
86 PATH_SEGMENT@[137; 140) 86 PATH_SEGMENT@137..140
87 NAME_REF@[137; 140) 87 NAME_REF@137..140
88 IDENT@[137; 140) "cfg" 88 IDENT@137..140 "cfg"
89 TOKEN_TREE@[140; 158) 89 TOKEN_TREE@140..158
90 L_PAREN@[140; 141) "(" 90 L_PAREN@140..141 "("
91 IDENT@[141; 148) "feature" 91 IDENT@141..148 "feature"
92 WHITESPACE@[148; 149) " " 92 WHITESPACE@148..149 " "
93 EQ@[149; 150) "=" 93 EQ@149..150 "="
94 WHITESPACE@[150; 151) " " 94 WHITESPACE@150..151 " "
95 STRING@[151; 157) "\"many\"" 95 STRING@151..157 "\"many\""
96 R_PAREN@[157; 158) ")" 96 R_PAREN@157..158 ")"
97 R_BRACK@[158; 159) "]" 97 R_BRACK@158..159 "]"
98 WHITESPACE@[159; 168) "\n " 98 WHITESPACE@159..168 "\n "
99 ATTR@[168; 198) 99 ATTR@168..198
100 POUND@[168; 169) "#" 100 POUND@168..169 "#"
101 L_BRACK@[169; 170) "[" 101 L_BRACK@169..170 "["
102 PATH@[170; 173) 102 PATH@170..173
103 PATH_SEGMENT@[170; 173) 103 PATH_SEGMENT@170..173
104 NAME_REF@[170; 173) 104 NAME_REF@170..173
105 IDENT@[170; 173) "cfg" 105 IDENT@170..173 "cfg"
106 TOKEN_TREE@[173; 197) 106 TOKEN_TREE@173..197
107 L_PAREN@[173; 174) "(" 107 L_PAREN@173..174 "("
108 IDENT@[174; 181) "feature" 108 IDENT@174..181 "feature"
109 WHITESPACE@[181; 182) " " 109 WHITESPACE@181..182 " "
110 EQ@[182; 183) "=" 110 EQ@182..183 "="
111 WHITESPACE@[183; 184) " " 111 WHITESPACE@183..184 " "
112 STRING@[184; 196) "\"attributes\"" 112 STRING@184..196 "\"attributes\""
113 R_PAREN@[196; 197) ")" 113 R_PAREN@196..197 ")"
114 R_BRACK@[197; 198) "]" 114 R_BRACK@197..198 "]"
115 WHITESPACE@[198; 207) "\n " 115 WHITESPACE@198..207 "\n "
116 ATTR@[207; 233) 116 ATTR@207..233
117 POUND@[207; 208) "#" 117 POUND@207..208 "#"
118 L_BRACK@[208; 209) "[" 118 L_BRACK@208..209 "["
119 PATH@[209; 212) 119 PATH@209..212
120 PATH_SEGMENT@[209; 212) 120 PATH_SEGMENT@209..212
121 NAME_REF@[209; 212) 121 NAME_REF@209..212
122 IDENT@[209; 212) "cfg" 122 IDENT@209..212 "cfg"
123 TOKEN_TREE@[212; 232) 123 TOKEN_TREE@212..232
124 L_PAREN@[212; 213) "(" 124 L_PAREN@212..213 "("
125 IDENT@[213; 220) "feature" 125 IDENT@213..220 "feature"
126 WHITESPACE@[220; 221) " " 126 WHITESPACE@220..221 " "
127 EQ@[221; 222) "=" 127 EQ@221..222 "="
128 WHITESPACE@[222; 223) " " 128 WHITESPACE@222..223 " "
129 STRING@[223; 231) "\"before\"" 129 STRING@223..231 "\"before\""
130 R_PAREN@[231; 232) ")" 130 R_PAREN@231..232 ")"
131 R_BRACK@[232; 233) "]" 131 R_BRACK@232..233 "]"
132 WHITESPACE@[233; 242) "\n " 132 WHITESPACE@233..242 "\n "
133 PLACEHOLDER_PAT@[242; 243) 133 PLACEHOLDER_PAT@242..243
134 UNDERSCORE@[242; 243) "_" 134 UNDERSCORE@242..243 "_"
135 WHITESPACE@[243; 244) " " 135 WHITESPACE@243..244 " "
136 FAT_ARROW@[244; 246) "=>" 136 FAT_ARROW@244..246 "=>"
137 WHITESPACE@[246; 247) " " 137 WHITESPACE@246..247 " "
138 TUPLE_EXPR@[247; 249) 138 TUPLE_EXPR@247..249
139 L_PAREN@[247; 248) "(" 139 L_PAREN@247..248 "("
140 R_PAREN@[248; 249) ")" 140 R_PAREN@248..249 ")"
141 COMMA@[249; 250) "," 141 COMMA@249..250 ","
142 WHITESPACE@[250; 255) "\n " 142 WHITESPACE@250..255 "\n "
143 R_CURLY@[255; 256) "}" 143 R_CURLY@255..256 "}"
144 WHITESPACE@[256; 257) "\n" 144 WHITESPACE@256..257 "\n"
145 R_CURLY@[257; 258) "}" 145 R_CURLY@257..258 "}"
146 WHITESPACE@[258; 259) "\n" 146 WHITESPACE@258..259 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0122_generic_lifetime_type_attribute.rast b/crates/ra_syntax/test_data/parser/inline/ok/0122_generic_lifetime_type_attribute.rast
index a73ff9c90..67b9c10d5 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0122_generic_lifetime_type_attribute.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0122_generic_lifetime_type_attribute.rast
@@ -1,66 +1,66 @@
1SOURCE_FILE@[0; 64) 1SOURCE_FILE@0..64
2 FN_DEF@[0; 63) 2 FN_DEF@0..63
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 TYPE_PARAM_LIST@[6; 49) 7 TYPE_PARAM_LIST@6..49
8 L_ANGLE@[6; 7) "<" 8 L_ANGLE@6..7 "<"
9 LIFETIME_PARAM@[7; 29) 9 LIFETIME_PARAM@7..29
10 ATTR@[7; 26) 10 ATTR@7..26
11 POUND@[7; 8) "#" 11 POUND@7..8 "#"
12 L_BRACK@[8; 9) "[" 12 L_BRACK@8..9 "["
13 PATH@[9; 15) 13 PATH@9..15
14 PATH_SEGMENT@[9; 15) 14 PATH_SEGMENT@9..15
15 NAME_REF@[9; 15) 15 NAME_REF@9..15
16 IDENT@[9; 15) "derive" 16 IDENT@9..15 "derive"
17 TOKEN_TREE@[15; 25) 17 TOKEN_TREE@15..25
18 L_PAREN@[15; 16) "(" 18 L_PAREN@15..16 "("
19 IDENT@[16; 24) "Lifetime" 19 IDENT@16..24 "Lifetime"
20 R_PAREN@[24; 25) ")" 20 R_PAREN@24..25 ")"
21 R_BRACK@[25; 26) "]" 21 R_BRACK@25..26 "]"
22 WHITESPACE@[26; 27) " " 22 WHITESPACE@26..27 " "
23 LIFETIME@[27; 29) "\'a" 23 LIFETIME@27..29 "\'a"
24 COMMA@[29; 30) "," 24 COMMA@29..30 ","
25 WHITESPACE@[30; 31) " " 25 WHITESPACE@30..31 " "
26 TYPE_PARAM@[31; 48) 26 TYPE_PARAM@31..48
27 ATTR@[31; 46) 27 ATTR@31..46
28 POUND@[31; 32) "#" 28 POUND@31..32 "#"
29 L_BRACK@[32; 33) "[" 29 L_BRACK@32..33 "["
30 PATH@[33; 39) 30 PATH@33..39
31 PATH_SEGMENT@[33; 39) 31 PATH_SEGMENT@33..39
32 NAME_REF@[33; 39) 32 NAME_REF@33..39
33 IDENT@[33; 39) "derive" 33 IDENT@33..39 "derive"
34 TOKEN_TREE@[39; 45) 34 TOKEN_TREE@39..45
35 L_PAREN@[39; 40) "(" 35 L_PAREN@39..40 "("
36 IDENT@[40; 44) "Type" 36 IDENT@40..44 "Type"
37 R_PAREN@[44; 45) ")" 37 R_PAREN@44..45 ")"
38 R_BRACK@[45; 46) "]" 38 R_BRACK@45..46 "]"
39 WHITESPACE@[46; 47) " " 39 WHITESPACE@46..47 " "
40 NAME@[47; 48) 40 NAME@47..48
41 IDENT@[47; 48) "T" 41 IDENT@47..48 "T"
42 R_ANGLE@[48; 49) ">" 42 R_ANGLE@48..49 ">"
43 PARAM_LIST@[49; 59) 43 PARAM_LIST@49..59
44 L_PAREN@[49; 50) "(" 44 L_PAREN@49..50 "("
45 PARAM@[50; 58) 45 PARAM@50..58
46 PLACEHOLDER_PAT@[50; 51) 46 PLACEHOLDER_PAT@50..51
47 UNDERSCORE@[50; 51) "_" 47 UNDERSCORE@50..51 "_"
48 COLON@[51; 52) ":" 48 COLON@51..52 ":"
49 WHITESPACE@[52; 53) " " 49 WHITESPACE@52..53 " "
50 REFERENCE_TYPE@[53; 58) 50 REFERENCE_TYPE@53..58
51 AMP@[53; 54) "&" 51 AMP@53..54 "&"
52 LIFETIME@[54; 56) "\'a" 52 LIFETIME@54..56 "\'a"
53 WHITESPACE@[56; 57) " " 53 WHITESPACE@56..57 " "
54 PATH_TYPE@[57; 58) 54 PATH_TYPE@57..58
55 PATH@[57; 58) 55 PATH@57..58
56 PATH_SEGMENT@[57; 58) 56 PATH_SEGMENT@57..58
57 NAME_REF@[57; 58) 57 NAME_REF@57..58
58 IDENT@[57; 58) "T" 58 IDENT@57..58 "T"
59 R_PAREN@[58; 59) ")" 59 R_PAREN@58..59 ")"
60 WHITESPACE@[59; 60) " " 60 WHITESPACE@59..60 " "
61 BLOCK_EXPR@[60; 63) 61 BLOCK_EXPR@60..63
62 BLOCK@[60; 63) 62 BLOCK@60..63
63 L_CURLY@[60; 61) "{" 63 L_CURLY@60..61 "{"
64 WHITESPACE@[61; 62) "\n" 64 WHITESPACE@61..62 "\n"
65 R_CURLY@[62; 63) "}" 65 R_CURLY@62..63 "}"
66 WHITESPACE@[63; 64) "\n" 66 WHITESPACE@63..64 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0123_param_list_vararg.rast b/crates/ra_syntax/test_data/parser/inline/ok/0123_param_list_vararg.rast
index af8067b12..b3a33c14d 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0123_param_list_vararg.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0123_param_list_vararg.rast
@@ -1,50 +1,50 @@
1SOURCE_FILE@[0; 57) 1SOURCE_FILE@0..57
2 EXTERN_BLOCK@[0; 56) 2 EXTERN_BLOCK@0..56
3 ABI@[0; 10) 3 ABI@0..10
4 EXTERN_KW@[0; 6) "extern" 4 EXTERN_KW@0..6 "extern"
5 WHITESPACE@[6; 7) " " 5 WHITESPACE@6..7 " "
6 STRING@[7; 10) "\"C\"" 6 STRING@7..10 "\"C\""
7 WHITESPACE@[10; 11) " " 7 WHITESPACE@10..11 " "
8 EXTERN_ITEM_LIST@[11; 56) 8 EXTERN_ITEM_LIST@11..56
9 L_CURLY@[11; 12) "{" 9 L_CURLY@11..12 "{"
10 WHITESPACE@[12; 13) " " 10 WHITESPACE@12..13 " "
11 FN_DEF@[13; 54) 11 FN_DEF@13..54
12 FN_KW@[13; 15) "fn" 12 FN_KW@13..15 "fn"
13 WHITESPACE@[15; 16) " " 13 WHITESPACE@15..16 " "
14 NAME@[16; 22) 14 NAME@16..22
15 IDENT@[16; 22) "printf" 15 IDENT@16..22 "printf"
16 PARAM_LIST@[22; 46) 16 PARAM_LIST@22..46
17 L_PAREN@[22; 23) "(" 17 L_PAREN@22..23 "("
18 PARAM@[23; 40) 18 PARAM@23..40
19 BIND_PAT@[23; 29) 19 BIND_PAT@23..29
20 NAME@[23; 29) 20 NAME@23..29
21 IDENT@[23; 29) "format" 21 IDENT@23..29 "format"
22 COLON@[29; 30) ":" 22 COLON@29..30 ":"
23 WHITESPACE@[30; 31) " " 23 WHITESPACE@30..31 " "
24 POINTER_TYPE@[31; 40) 24 POINTER_TYPE@31..40
25 STAR@[31; 32) "*" 25 STAR@31..32 "*"
26 CONST_KW@[32; 37) "const" 26 CONST_KW@32..37 "const"
27 WHITESPACE@[37; 38) " " 27 WHITESPACE@37..38 " "
28 PATH_TYPE@[38; 40) 28 PATH_TYPE@38..40
29 PATH@[38; 40) 29 PATH@38..40
30 PATH_SEGMENT@[38; 40) 30 PATH_SEGMENT@38..40
31 NAME_REF@[38; 40) 31 NAME_REF@38..40
32 IDENT@[38; 40) "i8" 32 IDENT@38..40 "i8"
33 COMMA@[40; 41) "," 33 COMMA@40..41 ","
34 WHITESPACE@[41; 42) " " 34 WHITESPACE@41..42 " "
35 PARAM@[42; 45) 35 PARAM@42..45
36 DOT3@[42; 45) "..." 36 DOT3@42..45 "..."
37 R_PAREN@[45; 46) ")" 37 R_PAREN@45..46 ")"
38 WHITESPACE@[46; 47) " " 38 WHITESPACE@46..47 " "
39 RET_TYPE@[47; 53) 39 RET_TYPE@47..53
40 THIN_ARROW@[47; 49) "->" 40 THIN_ARROW@47..49 "->"
41 WHITESPACE@[49; 50) " " 41 WHITESPACE@49..50 " "
42 PATH_TYPE@[50; 53) 42 PATH_TYPE@50..53
43 PATH@[50; 53) 43 PATH@50..53
44 PATH_SEGMENT@[50; 53) 44 PATH_SEGMENT@50..53
45 NAME_REF@[50; 53) 45 NAME_REF@50..53
46 IDENT@[50; 53) "i32" 46 IDENT@50..53 "i32"
47 SEMICOLON@[53; 54) ";" 47 SEMICOLON@53..54 ";"
48 WHITESPACE@[54; 55) " " 48 WHITESPACE@54..55 " "
49 R_CURLY@[55; 56) "}" 49 R_CURLY@55..56 "}"
50 WHITESPACE@[56; 57) "\n" 50 WHITESPACE@56..57 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0124_async_fn.rast b/crates/ra_syntax/test_data/parser/inline/ok/0124_async_fn.rast
index 9c4bd7f11..baf22a8d7 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0124_async_fn.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0124_async_fn.rast
@@ -1,17 +1,17 @@
1SOURCE_FILE@[0; 18) 1SOURCE_FILE@0..18
2 FN_DEF@[0; 17) 2 FN_DEF@0..17
3 ASYNC_KW@[0; 5) "async" 3 ASYNC_KW@0..5 "async"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 FN_KW@[6; 8) "fn" 5 FN_KW@6..8 "fn"
6 WHITESPACE@[8; 9) " " 6 WHITESPACE@8..9 " "
7 NAME@[9; 12) 7 NAME@9..12
8 IDENT@[9; 12) "foo" 8 IDENT@9..12 "foo"
9 PARAM_LIST@[12; 14) 9 PARAM_LIST@12..14
10 L_PAREN@[12; 13) "(" 10 L_PAREN@12..13 "("
11 R_PAREN@[13; 14) ")" 11 R_PAREN@13..14 ")"
12 WHITESPACE@[14; 15) " " 12 WHITESPACE@14..15 " "
13 BLOCK_EXPR@[15; 17) 13 BLOCK_EXPR@15..17
14 BLOCK@[15; 17) 14 BLOCK@15..17
15 L_CURLY@[15; 16) "{" 15 L_CURLY@15..16 "{"
16 R_CURLY@[16; 17) "}" 16 R_CURLY@16..17 "}"
17 WHITESPACE@[17; 18) "\n" 17 WHITESPACE@17..18 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0125_crate_keyword_path.rast b/crates/ra_syntax/test_data/parser/inline/ok/0125_crate_keyword_path.rast
index f1f4de976..16f5b90b6 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0125_crate_keyword_path.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0125_crate_keyword_path.rast
@@ -1,32 +1,32 @@
1SOURCE_FILE@[0; 27) 1SOURCE_FILE@0..27
2 FN_DEF@[0; 26) 2 FN_DEF@0..26
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 26) 11 BLOCK_EXPR@9..26
12 BLOCK@[9; 26) 12 BLOCK@9..26
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 11) " " 14 WHITESPACE@10..11 " "
15 EXPR_STMT@[11; 24) 15 EXPR_STMT@11..24
16 CALL_EXPR@[11; 23) 16 CALL_EXPR@11..23
17 PATH_EXPR@[11; 21) 17 PATH_EXPR@11..21
18 PATH@[11; 21) 18 PATH@11..21
19 PATH@[11; 16) 19 PATH@11..16
20 PATH_SEGMENT@[11; 16) 20 PATH_SEGMENT@11..16
21 CRATE_KW@[11; 16) "crate" 21 CRATE_KW@11..16 "crate"
22 COLON2@[16; 18) "::" 22 COLON2@16..18 "::"
23 PATH_SEGMENT@[18; 21) 23 PATH_SEGMENT@18..21
24 NAME_REF@[18; 21) 24 NAME_REF@18..21
25 IDENT@[18; 21) "foo" 25 IDENT@18..21 "foo"
26 ARG_LIST@[21; 23) 26 ARG_LIST@21..23
27 L_PAREN@[21; 22) "(" 27 L_PAREN@21..22 "("
28 R_PAREN@[22; 23) ")" 28 R_PAREN@22..23 ")"
29 SEMICOLON@[23; 24) ";" 29 SEMICOLON@23..24 ";"
30 WHITESPACE@[24; 25) " " 30 WHITESPACE@24..25 " "
31 R_CURLY@[25; 26) "}" 31 R_CURLY@25..26 "}"
32 WHITESPACE@[26; 27) "\n" 32 WHITESPACE@26..27 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0125_record_literal_field_with_attr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0125_record_literal_field_with_attr.rast
index a36c3df0e..07ed14773 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0125_record_literal_field_with_attr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0125_record_literal_field_with_attr.rast
@@ -1,48 +1,48 @@
1SOURCE_FILE@[0; 46) 1SOURCE_FILE@0..46
2 FN_DEF@[0; 45) 2 FN_DEF@0..45
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 45) 11 BLOCK_EXPR@10..45
12 BLOCK@[10; 45) 12 BLOCK@10..45
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 RECORD_LIT@[16; 43) 15 RECORD_LIT@16..43
16 PATH@[16; 17) 16 PATH@16..17
17 PATH_SEGMENT@[16; 17) 17 PATH_SEGMENT@16..17
18 NAME_REF@[16; 17) 18 NAME_REF@16..17
19 IDENT@[16; 17) "S" 19 IDENT@16..17 "S"
20 WHITESPACE@[17; 18) " " 20 WHITESPACE@17..18 " "
21 RECORD_FIELD_LIST@[18; 43) 21 RECORD_FIELD_LIST@18..43
22 L_CURLY@[18; 19) "{" 22 L_CURLY@18..19 "{"
23 WHITESPACE@[19; 20) " " 23 WHITESPACE@19..20 " "
24 RECORD_FIELD@[20; 41) 24 RECORD_FIELD@20..41
25 ATTR@[20; 32) 25 ATTR@20..32
26 POUND@[20; 21) "#" 26 POUND@20..21 "#"
27 L_BRACK@[21; 22) "[" 27 L_BRACK@21..22 "["
28 PATH@[22; 25) 28 PATH@22..25
29 PATH_SEGMENT@[22; 25) 29 PATH_SEGMENT@22..25
30 NAME_REF@[22; 25) 30 NAME_REF@22..25
31 IDENT@[22; 25) "cfg" 31 IDENT@22..25 "cfg"
32 TOKEN_TREE@[25; 31) 32 TOKEN_TREE@25..31
33 L_PAREN@[25; 26) "(" 33 L_PAREN@25..26 "("
34 IDENT@[26; 30) "test" 34 IDENT@26..30 "test"
35 R_PAREN@[30; 31) ")" 35 R_PAREN@30..31 ")"
36 R_BRACK@[31; 32) "]" 36 R_BRACK@31..32 "]"
37 WHITESPACE@[32; 33) " " 37 WHITESPACE@32..33 " "
38 NAME_REF@[33; 38) 38 NAME_REF@33..38
39 IDENT@[33; 38) "field" 39 IDENT@33..38 "field"
40 COLON@[38; 39) ":" 40 COLON@38..39 ":"
41 WHITESPACE@[39; 40) " " 41 WHITESPACE@39..40 " "
42 LITERAL@[40; 41) 42 LITERAL@40..41
43 INT_NUMBER@[40; 41) "1" 43 INT_NUMBER@40..41 "1"
44 WHITESPACE@[41; 42) " " 44 WHITESPACE@41..42 " "
45 R_CURLY@[42; 43) "}" 45 R_CURLY@42..43 "}"
46 WHITESPACE@[43; 44) "\n" 46 WHITESPACE@43..44 "\n"
47 R_CURLY@[44; 45) "}" 47 R_CURLY@44..45 "}"
48 WHITESPACE@[45; 46) "\n" 48 WHITESPACE@45..46 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0126_attr_on_expr_stmt.rast b/crates/ra_syntax/test_data/parser/inline/ok/0126_attr_on_expr_stmt.rast
index 3b462871a..8307d4c15 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0126_attr_on_expr_stmt.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0126_attr_on_expr_stmt.rast
@@ -1,99 +1,99 @@
1SOURCE_FILE@[0; 82) 1SOURCE_FILE@0..82
2 FN_DEF@[0; 81) 2 FN_DEF@0..81
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 81) 11 BLOCK_EXPR@9..81
12 BLOCK@[9; 81) 12 BLOCK@9..81
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 26) 15 EXPR_STMT@15..26
16 ATTR@[15; 19) 16 ATTR@15..19
17 POUND@[15; 16) "#" 17 POUND@15..16 "#"
18 L_BRACK@[16; 17) "[" 18 L_BRACK@16..17 "["
19 PATH@[17; 18) 19 PATH@17..18
20 PATH_SEGMENT@[17; 18) 20 PATH_SEGMENT@17..18
21 NAME_REF@[17; 18) 21 NAME_REF@17..18
22 IDENT@[17; 18) "A" 22 IDENT@17..18 "A"
23 R_BRACK@[18; 19) "]" 23 R_BRACK@18..19 "]"
24 WHITESPACE@[19; 20) " " 24 WHITESPACE@19..20 " "
25 CALL_EXPR@[20; 25) 25 CALL_EXPR@20..25
26 PATH_EXPR@[20; 23) 26 PATH_EXPR@20..23
27 PATH@[20; 23) 27 PATH@20..23
28 PATH_SEGMENT@[20; 23) 28 PATH_SEGMENT@20..23
29 NAME_REF@[20; 23) 29 NAME_REF@20..23
30 IDENT@[20; 23) "foo" 30 IDENT@20..23 "foo"
31 ARG_LIST@[23; 25) 31 ARG_LIST@23..25
32 L_PAREN@[23; 24) "(" 32 L_PAREN@23..24 "("
33 R_PAREN@[24; 25) ")" 33 R_PAREN@24..25 ")"
34 SEMICOLON@[25; 26) ";" 34 SEMICOLON@25..26 ";"
35 WHITESPACE@[26; 31) "\n " 35 WHITESPACE@26..31 "\n "
36 EXPR_STMT@[31; 42) 36 EXPR_STMT@31..42
37 ATTR@[31; 35) 37 ATTR@31..35
38 POUND@[31; 32) "#" 38 POUND@31..32 "#"
39 L_BRACK@[32; 33) "[" 39 L_BRACK@32..33 "["
40 PATH@[33; 34) 40 PATH@33..34
41 PATH_SEGMENT@[33; 34) 41 PATH_SEGMENT@33..34
42 NAME_REF@[33; 34) 42 NAME_REF@33..34
43 IDENT@[33; 34) "B" 43 IDENT@33..34 "B"
44 R_BRACK@[34; 35) "]" 44 R_BRACK@34..35 "]"
45 WHITESPACE@[35; 36) " " 45 WHITESPACE@35..36 " "
46 MACRO_CALL@[36; 42) 46 MACRO_CALL@36..42
47 PATH@[36; 39) 47 PATH@36..39
48 PATH_SEGMENT@[36; 39) 48 PATH_SEGMENT@36..39
49 NAME_REF@[36; 39) 49 NAME_REF@36..39
50 IDENT@[36; 39) "bar" 50 IDENT@36..39 "bar"
51 BANG@[39; 40) "!" 51 BANG@39..40 "!"
52 TOKEN_TREE@[40; 42) 52 TOKEN_TREE@40..42
53 L_CURLY@[40; 41) "{" 53 L_CURLY@40..41 "{"
54 R_CURLY@[41; 42) "}" 54 R_CURLY@41..42 "}"
55 WHITESPACE@[42; 47) "\n " 55 WHITESPACE@42..47 "\n "
56 EXPR_STMT@[47; 59) 56 EXPR_STMT@47..59
57 ATTR@[47; 51) 57 ATTR@47..51
58 POUND@[47; 48) "#" 58 POUND@47..48 "#"
59 L_BRACK@[48; 49) "[" 59 L_BRACK@48..49 "["
60 PATH@[49; 50) 60 PATH@49..50
61 PATH_SEGMENT@[49; 50) 61 PATH_SEGMENT@49..50
62 NAME_REF@[49; 50) 62 NAME_REF@49..50
63 IDENT@[49; 50) "C" 63 IDENT@49..50 "C"
64 R_BRACK@[50; 51) "]" 64 R_BRACK@50..51 "]"
65 WHITESPACE@[51; 52) " " 65 WHITESPACE@51..52 " "
66 ATTR@[52; 56) 66 ATTR@52..56
67 POUND@[52; 53) "#" 67 POUND@52..53 "#"
68 L_BRACK@[53; 54) "[" 68 L_BRACK@53..54 "["
69 PATH@[54; 55) 69 PATH@54..55
70 PATH_SEGMENT@[54; 55) 70 PATH_SEGMENT@54..55
71 NAME_REF@[54; 55) 71 NAME_REF@54..55
72 IDENT@[54; 55) "D" 72 IDENT@54..55 "D"
73 R_BRACK@[55; 56) "]" 73 R_BRACK@55..56 "]"
74 WHITESPACE@[56; 57) " " 74 WHITESPACE@56..57 " "
75 BLOCK_EXPR@[57; 59) 75 BLOCK_EXPR@57..59
76 BLOCK@[57; 59) 76 BLOCK@57..59
77 L_CURLY@[57; 58) "{" 77 L_CURLY@57..58 "{"
78 R_CURLY@[58; 59) "}" 78 R_CURLY@58..59 "}"
79 WHITESPACE@[59; 64) "\n " 79 WHITESPACE@59..64 "\n "
80 EXPR_STMT@[64; 79) 80 EXPR_STMT@64..79
81 ATTR@[64; 68) 81 ATTR@64..68
82 POUND@[64; 65) "#" 82 POUND@64..65 "#"
83 L_BRACK@[65; 66) "[" 83 L_BRACK@65..66 "["
84 PATH@[66; 67) 84 PATH@66..67
85 PATH_SEGMENT@[66; 67) 85 PATH_SEGMENT@66..67
86 NAME_REF@[66; 67) 86 NAME_REF@66..67
87 IDENT@[66; 67) "D" 87 IDENT@66..67 "D"
88 R_BRACK@[67; 68) "]" 88 R_BRACK@67..68 "]"
89 WHITESPACE@[68; 69) " " 89 WHITESPACE@68..69 " "
90 RETURN_EXPR@[69; 78) 90 RETURN_EXPR@69..78
91 RETURN_KW@[69; 75) "return" 91 RETURN_KW@69..75 "return"
92 WHITESPACE@[75; 76) " " 92 WHITESPACE@75..76 " "
93 TUPLE_EXPR@[76; 78) 93 TUPLE_EXPR@76..78
94 L_PAREN@[76; 77) "(" 94 L_PAREN@76..77 "("
95 R_PAREN@[77; 78) ")" 95 R_PAREN@77..78 ")"
96 SEMICOLON@[78; 79) ";" 96 SEMICOLON@78..79 ";"
97 WHITESPACE@[79; 80) "\n" 97 WHITESPACE@79..80 "\n"
98 R_CURLY@[80; 81) "}" 98 R_CURLY@80..81 "}"
99 WHITESPACE@[81; 82) "\n" 99 WHITESPACE@81..82 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0127_attr_on_last_expr_in_block.rast b/crates/ra_syntax/test_data/parser/inline/ok/0127_attr_on_last_expr_in_block.rast
index 9bc6be62d..19c47ea25 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0127_attr_on_last_expr_in_block.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0127_attr_on_last_expr_in_block.rast
@@ -1,59 +1,59 @@
1SOURCE_FILE@[0; 47) 1SOURCE_FILE@0..47
2 FN_DEF@[0; 46) 2 FN_DEF@0..46
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 46) 11 BLOCK_EXPR@9..46
12 BLOCK@[9; 46) 12 BLOCK@9..46
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 31) 15 EXPR_STMT@15..31
16 BLOCK_EXPR@[15; 31) 16 BLOCK_EXPR@15..31
17 BLOCK@[15; 31) 17 BLOCK@15..31
18 L_CURLY@[15; 16) "{" 18 L_CURLY@15..16 "{"
19 WHITESPACE@[16; 17) " " 19 WHITESPACE@16..17 " "
20 TRY_EXPR@[17; 29) 20 TRY_EXPR@17..29
21 ATTR@[17; 21) 21 ATTR@17..21
22 POUND@[17; 18) "#" 22 POUND@17..18 "#"
23 L_BRACK@[18; 19) "[" 23 L_BRACK@18..19 "["
24 PATH@[19; 20) 24 PATH@19..20
25 PATH_SEGMENT@[19; 20) 25 PATH_SEGMENT@19..20
26 NAME_REF@[19; 20) 26 NAME_REF@19..20
27 IDENT@[19; 20) "A" 27 IDENT@19..20 "A"
28 R_BRACK@[20; 21) "]" 28 R_BRACK@20..21 "]"
29 WHITESPACE@[21; 22) " " 29 WHITESPACE@21..22 " "
30 MACRO_CALL@[22; 28) 30 MACRO_CALL@22..28
31 PATH@[22; 25) 31 PATH@22..25
32 PATH_SEGMENT@[22; 25) 32 PATH_SEGMENT@22..25
33 NAME_REF@[22; 25) 33 NAME_REF@22..25
34 IDENT@[22; 25) "bar" 34 IDENT@22..25 "bar"
35 BANG@[25; 26) "!" 35 BANG@25..26 "!"
36 TOKEN_TREE@[26; 28) 36 TOKEN_TREE@26..28
37 L_PAREN@[26; 27) "(" 37 L_PAREN@26..27 "("
38 R_PAREN@[27; 28) ")" 38 R_PAREN@27..28 ")"
39 QUESTION@[28; 29) "?" 39 QUESTION@28..29 "?"
40 WHITESPACE@[29; 30) " " 40 WHITESPACE@29..30 " "
41 R_CURLY@[30; 31) "}" 41 R_CURLY@30..31 "}"
42 WHITESPACE@[31; 36) "\n " 42 WHITESPACE@31..36 "\n "
43 REF_EXPR@[36; 44) 43 REF_EXPR@36..44
44 ATTR@[36; 40) 44 ATTR@36..40
45 POUND@[36; 37) "#" 45 POUND@36..37 "#"
46 L_BRACK@[37; 38) "[" 46 L_BRACK@37..38 "["
47 PATH@[38; 39) 47 PATH@38..39
48 PATH_SEGMENT@[38; 39) 48 PATH_SEGMENT@38..39
49 NAME_REF@[38; 39) 49 NAME_REF@38..39
50 IDENT@[38; 39) "B" 50 IDENT@38..39 "B"
51 R_BRACK@[39; 40) "]" 51 R_BRACK@39..40 "]"
52 WHITESPACE@[40; 41) " " 52 WHITESPACE@40..41 " "
53 AMP@[41; 42) "&" 53 AMP@41..42 "&"
54 TUPLE_EXPR@[42; 44) 54 TUPLE_EXPR@42..44
55 L_PAREN@[42; 43) "(" 55 L_PAREN@42..43 "("
56 R_PAREN@[43; 44) ")" 56 R_PAREN@43..44 ")"
57 WHITESPACE@[44; 45) "\n" 57 WHITESPACE@44..45 "\n"
58 R_CURLY@[45; 46) "}" 58 R_CURLY@45..46 "}"
59 WHITESPACE@[46; 47) "\n" 59 WHITESPACE@46..47 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0128_combined_fns.rast b/crates/ra_syntax/test_data/parser/inline/ok/0128_combined_fns.rast
index 8a972cdb2..5630b20af 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0128_combined_fns.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0128_combined_fns.rast
@@ -1,37 +1,37 @@
1SOURCE_FILE@[0; 50) 1SOURCE_FILE@0..50
2 FN_DEF@[0; 24) 2 FN_DEF@0..24
3 ASYNC_KW@[0; 5) "async" 3 ASYNC_KW@0..5 "async"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 UNSAFE_KW@[6; 12) "unsafe" 5 UNSAFE_KW@6..12 "unsafe"
6 WHITESPACE@[12; 13) " " 6 WHITESPACE@12..13 " "
7 FN_KW@[13; 15) "fn" 7 FN_KW@13..15 "fn"
8 WHITESPACE@[15; 16) " " 8 WHITESPACE@15..16 " "
9 NAME@[16; 19) 9 NAME@16..19
10 IDENT@[16; 19) "foo" 10 IDENT@16..19 "foo"
11 PARAM_LIST@[19; 21) 11 PARAM_LIST@19..21
12 L_PAREN@[19; 20) "(" 12 L_PAREN@19..20 "("
13 R_PAREN@[20; 21) ")" 13 R_PAREN@20..21 ")"
14 WHITESPACE@[21; 22) " " 14 WHITESPACE@21..22 " "
15 BLOCK_EXPR@[22; 24) 15 BLOCK_EXPR@22..24
16 BLOCK@[22; 24) 16 BLOCK@22..24
17 L_CURLY@[22; 23) "{" 17 L_CURLY@22..23 "{"
18 R_CURLY@[23; 24) "}" 18 R_CURLY@23..24 "}"
19 WHITESPACE@[24; 25) "\n" 19 WHITESPACE@24..25 "\n"
20 FN_DEF@[25; 49) 20 FN_DEF@25..49
21 CONST_KW@[25; 30) "const" 21 CONST_KW@25..30 "const"
22 WHITESPACE@[30; 31) " " 22 WHITESPACE@30..31 " "
23 UNSAFE_KW@[31; 37) "unsafe" 23 UNSAFE_KW@31..37 "unsafe"
24 WHITESPACE@[37; 38) " " 24 WHITESPACE@37..38 " "
25 FN_KW@[38; 40) "fn" 25 FN_KW@38..40 "fn"
26 WHITESPACE@[40; 41) " " 26 WHITESPACE@40..41 " "
27 NAME@[41; 44) 27 NAME@41..44
28 IDENT@[41; 44) "bar" 28 IDENT@41..44 "bar"
29 PARAM_LIST@[44; 46) 29 PARAM_LIST@44..46
30 L_PAREN@[44; 45) "(" 30 L_PAREN@44..45 "("
31 R_PAREN@[45; 46) ")" 31 R_PAREN@45..46 ")"
32 WHITESPACE@[46; 47) " " 32 WHITESPACE@46..47 " "
33 BLOCK_EXPR@[47; 49) 33 BLOCK_EXPR@47..49
34 BLOCK@[47; 49) 34 BLOCK@47..49
35 L_CURLY@[47; 48) "{" 35 L_CURLY@47..48 "{"
36 R_CURLY@[48; 49) "}" 36 R_CURLY@48..49 "}"
37 WHITESPACE@[49; 50) "\n" 37 WHITESPACE@49..50 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0129_marco_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0129_marco_pat.rast
index 31481d2f9..4946ee050 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0129_marco_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0129_marco_pat.rast
@@ -1,37 +1,37 @@
1SOURCE_FILE@[0; 33) 1SOURCE_FILE@0..33
2 FN_DEF@[0; 32) 2 FN_DEF@0..32
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 32) 11 BLOCK_EXPR@10..32
12 BLOCK@[10; 32) 12 BLOCK@10..32
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 LET_STMT@[16; 30) 15 LET_STMT@16..30
16 LET_KW@[16; 19) "let" 16 LET_KW@16..19 "let"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 MACRO_PAT@[20; 25) 18 MACRO_PAT@20..25
19 MACRO_CALL@[20; 25) 19 MACRO_CALL@20..25
20 PATH@[20; 21) 20 PATH@20..21
21 PATH_SEGMENT@[20; 21) 21 PATH_SEGMENT@20..21
22 NAME_REF@[20; 21) 22 NAME_REF@20..21
23 IDENT@[20; 21) "m" 23 IDENT@20..21 "m"
24 BANG@[21; 22) "!" 24 BANG@21..22 "!"
25 TOKEN_TREE@[22; 25) 25 TOKEN_TREE@22..25
26 L_PAREN@[22; 23) "(" 26 L_PAREN@22..23 "("
27 IDENT@[23; 24) "x" 27 IDENT@23..24 "x"
28 R_PAREN@[24; 25) ")" 28 R_PAREN@24..25 ")"
29 WHITESPACE@[25; 26) " " 29 WHITESPACE@25..26 " "
30 EQ@[26; 27) "=" 30 EQ@26..27 "="
31 WHITESPACE@[27; 28) " " 31 WHITESPACE@27..28 " "
32 LITERAL@[28; 29) 32 LITERAL@28..29
33 INT_NUMBER@[28; 29) "0" 33 INT_NUMBER@28..29 "0"
34 SEMICOLON@[29; 30) ";" 34 SEMICOLON@29..30 ";"
35 WHITESPACE@[30; 31) "\n" 35 WHITESPACE@30..31 "\n"
36 R_CURLY@[31; 32) "}" 36 R_CURLY@31..32 "}"
37 WHITESPACE@[32; 33) "\n" 37 WHITESPACE@32..33 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0130_let_stmt.rast b/crates/ra_syntax/test_data/parser/inline/ok/0130_let_stmt.rast
index 1f2690c00..18fdd9dc9 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0130_let_stmt.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0130_let_stmt.rast
@@ -1,129 +1,129 @@
1SOURCE_FILE@[0; 135) 1SOURCE_FILE@0..135
2 FN_DEF@[0; 134) 2 FN_DEF@0..134
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 134) 11 BLOCK_EXPR@9..134
12 BLOCK@[9; 134) 12 BLOCK@9..134
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 21) 15 LET_STMT@15..21
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 BIND_PAT@[19; 20) 18 BIND_PAT@19..20
19 NAME@[19; 20) 19 NAME@19..20
20 IDENT@[19; 20) "a" 20 IDENT@19..20 "a"
21 SEMICOLON@[20; 21) ";" 21 SEMICOLON@20..21 ";"
22 WHITESPACE@[21; 26) "\n " 22 WHITESPACE@21..26 "\n "
23 LET_STMT@[26; 37) 23 LET_STMT@26..37
24 LET_KW@[26; 29) "let" 24 LET_KW@26..29 "let"
25 WHITESPACE@[29; 30) " " 25 WHITESPACE@29..30 " "
26 BIND_PAT@[30; 31) 26 BIND_PAT@30..31
27 NAME@[30; 31) 27 NAME@30..31
28 IDENT@[30; 31) "b" 28 IDENT@30..31 "b"
29 COLON@[31; 32) ":" 29 COLON@31..32 ":"
30 WHITESPACE@[32; 33) " " 30 WHITESPACE@32..33 " "
31 PATH_TYPE@[33; 36) 31 PATH_TYPE@33..36
32 PATH@[33; 36) 32 PATH@33..36
33 PATH_SEGMENT@[33; 36) 33 PATH_SEGMENT@33..36
34 NAME_REF@[33; 36) 34 NAME_REF@33..36
35 IDENT@[33; 36) "i32" 35 IDENT@33..36 "i32"
36 SEMICOLON@[36; 37) ";" 36 SEMICOLON@36..37 ";"
37 WHITESPACE@[37; 42) "\n " 37 WHITESPACE@37..42 "\n "
38 LET_STMT@[42; 53) 38 LET_STMT@42..53
39 LET_KW@[42; 45) "let" 39 LET_KW@42..45 "let"
40 WHITESPACE@[45; 46) " " 40 WHITESPACE@45..46 " "
41 BIND_PAT@[46; 47) 41 BIND_PAT@46..47
42 NAME@[46; 47) 42 NAME@46..47
43 IDENT@[46; 47) "c" 43 IDENT@46..47 "c"
44 WHITESPACE@[47; 48) " " 44 WHITESPACE@47..48 " "
45 EQ@[48; 49) "=" 45 EQ@48..49 "="
46 WHITESPACE@[49; 50) " " 46 WHITESPACE@49..50 " "
47 LITERAL@[50; 52) 47 LITERAL@50..52
48 INT_NUMBER@[50; 52) "92" 48 INT_NUMBER@50..52 "92"
49 SEMICOLON@[52; 53) ";" 49 SEMICOLON@52..53 ";"
50 WHITESPACE@[53; 58) "\n " 50 WHITESPACE@53..58 "\n "
51 LET_STMT@[58; 74) 51 LET_STMT@58..74
52 LET_KW@[58; 61) "let" 52 LET_KW@58..61 "let"
53 WHITESPACE@[61; 62) " " 53 WHITESPACE@61..62 " "
54 BIND_PAT@[62; 63) 54 BIND_PAT@62..63
55 NAME@[62; 63) 55 NAME@62..63
56 IDENT@[62; 63) "d" 56 IDENT@62..63 "d"
57 COLON@[63; 64) ":" 57 COLON@63..64 ":"
58 WHITESPACE@[64; 65) " " 58 WHITESPACE@64..65 " "
59 PATH_TYPE@[65; 68) 59 PATH_TYPE@65..68
60 PATH@[65; 68) 60 PATH@65..68
61 PATH_SEGMENT@[65; 68) 61 PATH_SEGMENT@65..68
62 NAME_REF@[65; 68) 62 NAME_REF@65..68
63 IDENT@[65; 68) "i32" 63 IDENT@65..68 "i32"
64 WHITESPACE@[68; 69) " " 64 WHITESPACE@68..69 " "
65 EQ@[69; 70) "=" 65 EQ@69..70 "="
66 WHITESPACE@[70; 71) " " 66 WHITESPACE@70..71 " "
67 LITERAL@[71; 73) 67 LITERAL@71..73
68 INT_NUMBER@[71; 73) "92" 68 INT_NUMBER@71..73 "92"
69 SEMICOLON@[73; 74) ";" 69 SEMICOLON@73..74 ";"
70 WHITESPACE@[74; 79) "\n " 70 WHITESPACE@74..79 "\n "
71 LET_STMT@[79; 88) 71 LET_STMT@79..88
72 LET_KW@[79; 82) "let" 72 LET_KW@79..82 "let"
73 WHITESPACE@[82; 83) " " 73 WHITESPACE@82..83 " "
74 BIND_PAT@[83; 84) 74 BIND_PAT@83..84
75 NAME@[83; 84) 75 NAME@83..84
76 IDENT@[83; 84) "e" 76 IDENT@83..84 "e"
77 COLON@[84; 85) ":" 77 COLON@84..85 ":"
78 WHITESPACE@[85; 86) " " 78 WHITESPACE@85..86 " "
79 NEVER_TYPE@[86; 87) 79 NEVER_TYPE@86..87
80 BANG@[86; 87) "!" 80 BANG@86..87 "!"
81 SEMICOLON@[87; 88) ";" 81 SEMICOLON@87..88 ";"
82 WHITESPACE@[88; 93) "\n " 82 WHITESPACE@88..93 "\n "
83 LET_STMT@[93; 107) 83 LET_STMT@93..107
84 LET_KW@[93; 96) "let" 84 LET_KW@93..96 "let"
85 WHITESPACE@[96; 97) " " 85 WHITESPACE@96..97 " "
86 PLACEHOLDER_PAT@[97; 98) 86 PLACEHOLDER_PAT@97..98
87 UNDERSCORE@[97; 98) "_" 87 UNDERSCORE@97..98 "_"
88 COLON@[98; 99) ":" 88 COLON@98..99 ":"
89 WHITESPACE@[99; 100) " " 89 WHITESPACE@99..100 " "
90 NEVER_TYPE@[100; 101) 90 NEVER_TYPE@100..101
91 BANG@[100; 101) "!" 91 BANG@100..101 "!"
92 WHITESPACE@[101; 102) " " 92 WHITESPACE@101..102 " "
93 EQ@[102; 103) "=" 93 EQ@102..103 "="
94 WHITESPACE@[103; 104) " " 94 WHITESPACE@103..104 " "
95 BLOCK_EXPR@[104; 106) 95 BLOCK_EXPR@104..106
96 BLOCK@[104; 106) 96 BLOCK@104..106
97 L_CURLY@[104; 105) "{" 97 L_CURLY@104..105 "{"
98 R_CURLY@[105; 106) "}" 98 R_CURLY@105..106 "}"
99 SEMICOLON@[106; 107) ";" 99 SEMICOLON@106..107 ";"
100 WHITESPACE@[107; 112) "\n " 100 WHITESPACE@107..112 "\n "
101 LET_STMT@[112; 132) 101 LET_STMT@112..132
102 LET_KW@[112; 115) "let" 102 LET_KW@112..115 "let"
103 WHITESPACE@[115; 116) " " 103 WHITESPACE@115..116 " "
104 BIND_PAT@[116; 117) 104 BIND_PAT@116..117
105 NAME@[116; 117) 105 NAME@116..117
106 IDENT@[116; 117) "f" 106 IDENT@116..117 "f"
107 WHITESPACE@[117; 118) " " 107 WHITESPACE@117..118 " "
108 EQ@[118; 119) "=" 108 EQ@118..119 "="
109 WHITESPACE@[119; 120) " " 109 WHITESPACE@119..120 " "
110 LAMBDA_EXPR@[120; 131) 110 LAMBDA_EXPR@120..131
111 ATTR@[120; 127) 111 ATTR@120..127
112 POUND@[120; 121) "#" 112 POUND@120..121 "#"
113 L_BRACK@[121; 122) "[" 113 L_BRACK@121..122 "["
114 PATH@[122; 126) 114 PATH@122..126
115 PATH_SEGMENT@[122; 126) 115 PATH_SEGMENT@122..126
116 NAME_REF@[122; 126) 116 NAME_REF@122..126
117 IDENT@[122; 126) "attr" 117 IDENT@122..126 "attr"
118 R_BRACK@[126; 127) "]" 118 R_BRACK@126..127 "]"
119 PARAM_LIST@[127; 129) 119 PARAM_LIST@127..129
120 PIPE@[127; 128) "|" 120 PIPE@127..128 "|"
121 PIPE@[128; 129) "|" 121 PIPE@128..129 "|"
122 BLOCK_EXPR@[129; 131) 122 BLOCK_EXPR@129..131
123 BLOCK@[129; 131) 123 BLOCK@129..131
124 L_CURLY@[129; 130) "{" 124 L_CURLY@129..130 "{"
125 R_CURLY@[130; 131) "}" 125 R_CURLY@130..131 "}"
126 SEMICOLON@[131; 132) ";" 126 SEMICOLON@131..132 ";"
127 WHITESPACE@[132; 133) "\n" 127 WHITESPACE@132..133 "\n"
128 R_CURLY@[133; 134) "}" 128 R_CURLY@133..134 "}"
129 WHITESPACE@[134; 135) "\n" 129 WHITESPACE@134..135 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0130_try_block_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0130_try_block_expr.rast
index b96991035..01fffd7b0 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0130_try_block_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0130_try_block_expr.rast
@@ -1,33 +1,33 @@
1SOURCE_FILE@[0; 33) 1SOURCE_FILE@0..33
2 FN_DEF@[0; 32) 2 FN_DEF@0..32
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 32) 11 BLOCK_EXPR@9..32
12 BLOCK@[9; 32) 12 BLOCK@9..32
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 30) 15 LET_STMT@15..30
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 PLACEHOLDER_PAT@[19; 20) 18 PLACEHOLDER_PAT@19..20
19 UNDERSCORE@[19; 20) "_" 19 UNDERSCORE@19..20 "_"
20 WHITESPACE@[20; 21) " " 20 WHITESPACE@20..21 " "
21 EQ@[21; 22) "=" 21 EQ@21..22 "="
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 TRY_EXPR@[23; 29) 23 TRY_EXPR@23..29
24 TRY_KW@[23; 26) "try" 24 TRY_KW@23..26 "try"
25 WHITESPACE@[26; 27) " " 25 WHITESPACE@26..27 " "
26 BLOCK_EXPR@[27; 29) 26 BLOCK_EXPR@27..29
27 BLOCK@[27; 29) 27 BLOCK@27..29
28 L_CURLY@[27; 28) "{" 28 L_CURLY@27..28 "{"
29 R_CURLY@[28; 29) "}" 29 R_CURLY@28..29 "}"
30 SEMICOLON@[29; 30) ";" 30 SEMICOLON@29..30 ";"
31 WHITESPACE@[30; 31) "\n" 31 WHITESPACE@30..31 "\n"
32 R_CURLY@[31; 32) "}" 32 R_CURLY@31..32 "}"
33 WHITESPACE@[32; 33) "\n" 33 WHITESPACE@32..33 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0131_existential_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0131_existential_type.rast
index ed3d8fb0b..4a1c2b3a4 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0131_existential_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0131_existential_type.rast
@@ -1,31 +1,31 @@
1SOURCE_FILE@[0; 37) 1SOURCE_FILE@0..37
2 TYPE_ALIAS_DEF@[0; 36) 2 TYPE_ALIAS_DEF@0..36
3 EXISTENTIAL_KW@[0; 11) "existential" 3 EXISTENTIAL_KW@0..11 "existential"
4 WHITESPACE@[11; 12) " " 4 WHITESPACE@11..12 " "
5 TYPE_KW@[12; 16) "type" 5 TYPE_KW@12..16 "type"
6 WHITESPACE@[16; 17) " " 6 WHITESPACE@16..17 " "
7 NAME@[17; 20) 7 NAME@17..20
8 IDENT@[17; 20) "Foo" 8 IDENT@17..20 "Foo"
9 COLON@[20; 21) ":" 9 COLON@20..21 ":"
10 WHITESPACE@[21; 22) " " 10 WHITESPACE@21..22 " "
11 TYPE_BOUND_LIST@[22; 35) 11 TYPE_BOUND_LIST@22..35
12 TYPE_BOUND@[22; 35) 12 TYPE_BOUND@22..35
13 PATH_TYPE@[22; 35) 13 PATH_TYPE@22..35
14 PATH@[22; 35) 14 PATH@22..35
15 PATH_SEGMENT@[22; 35) 15 PATH_SEGMENT@22..35
16 NAME_REF@[22; 24) 16 NAME_REF@22..24
17 IDENT@[22; 24) "Fn" 17 IDENT@22..24 "Fn"
18 PARAM_LIST@[24; 26) 18 PARAM_LIST@24..26
19 L_PAREN@[24; 25) "(" 19 L_PAREN@24..25 "("
20 R_PAREN@[25; 26) ")" 20 R_PAREN@25..26 ")"
21 WHITESPACE@[26; 27) " " 21 WHITESPACE@26..27 " "
22 RET_TYPE@[27; 35) 22 RET_TYPE@27..35
23 THIN_ARROW@[27; 29) "->" 23 THIN_ARROW@27..29 "->"
24 WHITESPACE@[29; 30) " " 24 WHITESPACE@29..30 " "
25 PATH_TYPE@[30; 35) 25 PATH_TYPE@30..35
26 PATH@[30; 35) 26 PATH@30..35
27 PATH_SEGMENT@[30; 35) 27 PATH_SEGMENT@30..35
28 NAME_REF@[30; 35) 28 NAME_REF@30..35
29 IDENT@[30; 35) "usize" 29 IDENT@30..35 "usize"
30 SEMICOLON@[35; 36) ";" 30 SEMICOLON@35..36 ";"
31 WHITESPACE@[36; 37) "\n" 31 WHITESPACE@36..37 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0132_box_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0132_box_expr.rast
index c392a7d84..498b3121e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0132_box_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0132_box_expr.rast
@@ -1,90 +1,90 @@
1SOURCE_FILE@[0; 106) 1SOURCE_FILE@0..106
2 FN_DEF@[0; 105) 2 FN_DEF@0..105
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 105) 11 BLOCK_EXPR@9..105
12 BLOCK@[9; 105) 12 BLOCK@9..105
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 32) 15 LET_STMT@15..32
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 BIND_PAT@[19; 20) 18 BIND_PAT@19..20
19 NAME@[19; 20) 19 NAME@19..20
20 IDENT@[19; 20) "x" 20 IDENT@19..20 "x"
21 WHITESPACE@[20; 21) " " 21 WHITESPACE@20..21 " "
22 EQ@[21; 22) "=" 22 EQ@21..22 "="
23 WHITESPACE@[22; 23) " " 23 WHITESPACE@22..23 " "
24 BOX_EXPR@[23; 31) 24 BOX_EXPR@23..31
25 BOX_KW@[23; 26) "box" 25 BOX_KW@23..26 "box"
26 WHITESPACE@[26; 27) " " 26 WHITESPACE@26..27 " "
27 LITERAL@[27; 31) 27 LITERAL@27..31
28 INT_NUMBER@[27; 31) "1i32" 28 INT_NUMBER@27..31 "1i32"
29 SEMICOLON@[31; 32) ";" 29 SEMICOLON@31..32 ";"
30 WHITESPACE@[32; 37) "\n " 30 WHITESPACE@32..37 "\n "
31 LET_STMT@[37; 66) 31 LET_STMT@37..66
32 LET_KW@[37; 40) "let" 32 LET_KW@37..40 "let"
33 WHITESPACE@[40; 41) " " 33 WHITESPACE@40..41 " "
34 BIND_PAT@[41; 42) 34 BIND_PAT@41..42
35 NAME@[41; 42) 35 NAME@41..42
36 IDENT@[41; 42) "y" 36 IDENT@41..42 "y"
37 WHITESPACE@[42; 43) " " 37 WHITESPACE@42..43 " "
38 EQ@[43; 44) "=" 38 EQ@43..44 "="
39 WHITESPACE@[44; 45) " " 39 WHITESPACE@44..45 " "
40 TUPLE_EXPR@[45; 65) 40 TUPLE_EXPR@45..65
41 L_PAREN@[45; 46) "(" 41 L_PAREN@45..46 "("
42 BOX_EXPR@[46; 54) 42 BOX_EXPR@46..54
43 BOX_KW@[46; 49) "box" 43 BOX_KW@46..49 "box"
44 WHITESPACE@[49; 50) " " 44 WHITESPACE@49..50 " "
45 LITERAL@[50; 54) 45 LITERAL@50..54
46 INT_NUMBER@[50; 54) "1i32" 46 INT_NUMBER@50..54 "1i32"
47 COMMA@[54; 55) "," 47 COMMA@54..55 ","
48 WHITESPACE@[55; 56) " " 48 WHITESPACE@55..56 " "
49 BOX_EXPR@[56; 64) 49 BOX_EXPR@56..64
50 BOX_KW@[56; 59) "box" 50 BOX_KW@56..59 "box"
51 WHITESPACE@[59; 60) " " 51 WHITESPACE@59..60 " "
52 LITERAL@[60; 64) 52 LITERAL@60..64
53 INT_NUMBER@[60; 64) "2i32" 53 INT_NUMBER@60..64 "2i32"
54 R_PAREN@[64; 65) ")" 54 R_PAREN@64..65 ")"
55 SEMICOLON@[65; 66) ";" 55 SEMICOLON@65..66 ";"
56 WHITESPACE@[66; 71) "\n " 56 WHITESPACE@66..71 "\n "
57 LET_STMT@[71; 103) 57 LET_STMT@71..103
58 LET_KW@[71; 74) "let" 58 LET_KW@71..74 "let"
59 WHITESPACE@[74; 75) " " 59 WHITESPACE@74..75 " "
60 BIND_PAT@[75; 76) 60 BIND_PAT@75..76
61 NAME@[75; 76) 61 NAME@75..76
62 IDENT@[75; 76) "z" 62 IDENT@75..76 "z"
63 WHITESPACE@[76; 77) " " 63 WHITESPACE@76..77 " "
64 EQ@[77; 78) "=" 64 EQ@77..78 "="
65 WHITESPACE@[78; 79) " " 65 WHITESPACE@78..79 " "
66 CALL_EXPR@[79; 102) 66 CALL_EXPR@79..102
67 PATH_EXPR@[79; 82) 67 PATH_EXPR@79..82
68 PATH@[79; 82) 68 PATH@79..82
69 PATH_SEGMENT@[79; 82) 69 PATH_SEGMENT@79..82
70 NAME_REF@[79; 82) 70 NAME_REF@79..82
71 IDENT@[79; 82) "Foo" 71 IDENT@79..82 "Foo"
72 ARG_LIST@[82; 102) 72 ARG_LIST@82..102
73 L_PAREN@[82; 83) "(" 73 L_PAREN@82..83 "("
74 BOX_EXPR@[83; 91) 74 BOX_EXPR@83..91
75 BOX_KW@[83; 86) "box" 75 BOX_KW@83..86 "box"
76 WHITESPACE@[86; 87) " " 76 WHITESPACE@86..87 " "
77 LITERAL@[87; 91) 77 LITERAL@87..91
78 INT_NUMBER@[87; 91) "1i32" 78 INT_NUMBER@87..91 "1i32"
79 COMMA@[91; 92) "," 79 COMMA@91..92 ","
80 WHITESPACE@[92; 93) " " 80 WHITESPACE@92..93 " "
81 BOX_EXPR@[93; 101) 81 BOX_EXPR@93..101
82 BOX_KW@[93; 96) "box" 82 BOX_KW@93..96 "box"
83 WHITESPACE@[96; 97) " " 83 WHITESPACE@96..97 " "
84 LITERAL@[97; 101) 84 LITERAL@97..101
85 INT_NUMBER@[97; 101) "2i32" 85 INT_NUMBER@97..101 "2i32"
86 R_PAREN@[101; 102) ")" 86 R_PAREN@101..102 ")"
87 SEMICOLON@[102; 103) ";" 87 SEMICOLON@102..103 ";"
88 WHITESPACE@[103; 104) "\n" 88 WHITESPACE@103..104 "\n"
89 R_CURLY@[104; 105) "}" 89 R_CURLY@104..105 "}"
90 WHITESPACE@[105; 106) "\n" 90 WHITESPACE@105..106 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast b/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast
index cff03fcf3..db58a928e 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast
@@ -1,56 +1,56 @@
1SOURCE_FILE@[0; 69) 1SOURCE_FILE@0..69
2 IMPL_DEF@[0; 68) 2 IMPL_DEF@0..68
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 6) 5 PATH_TYPE@5..6
6 PATH@[5; 6) 6 PATH@5..6
7 PATH_SEGMENT@[5; 6) 7 PATH_SEGMENT@5..6
8 NAME_REF@[5; 6) 8 NAME_REF@5..6
9 IDENT@[5; 6) "T" 9 IDENT@5..6 "T"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 FOR_KW@[7; 10) "for" 11 FOR_KW@7..10 "for"
12 WHITESPACE@[10; 11) " " 12 WHITESPACE@10..11 " "
13 PATH_TYPE@[11; 14) 13 PATH_TYPE@11..14
14 PATH@[11; 14) 14 PATH@11..14
15 PATH_SEGMENT@[11; 14) 15 PATH_SEGMENT@11..14
16 NAME_REF@[11; 14) 16 NAME_REF@11..14
17 IDENT@[11; 14) "Foo" 17 IDENT@11..14 "Foo"
18 WHITESPACE@[14; 15) " " 18 WHITESPACE@14..15 " "
19 ITEM_LIST@[15; 68) 19 ITEM_LIST@15..68
20 L_CURLY@[15; 16) "{" 20 L_CURLY@15..16 "{"
21 WHITESPACE@[16; 21) "\n " 21 WHITESPACE@16..21 "\n "
22 TYPE_ALIAS_DEF@[21; 42) 22 TYPE_ALIAS_DEF@21..42
23 DEFAULT_KW@[21; 28) "default" 23 DEFAULT_KW@21..28 "default"
24 WHITESPACE@[28; 29) " " 24 WHITESPACE@28..29 " "
25 TYPE_KW@[29; 33) "type" 25 TYPE_KW@29..33 "type"
26 WHITESPACE@[33; 34) " " 26 WHITESPACE@33..34 " "
27 NAME@[34; 35) 27 NAME@34..35
28 IDENT@[34; 35) "T" 28 IDENT@34..35 "T"
29 WHITESPACE@[35; 36) " " 29 WHITESPACE@35..36 " "
30 EQ@[36; 37) "=" 30 EQ@36..37 "="
31 WHITESPACE@[37; 38) " " 31 WHITESPACE@37..38 " "
32 PATH_TYPE@[38; 41) 32 PATH_TYPE@38..41
33 PATH@[38; 41) 33 PATH@38..41
34 PATH_SEGMENT@[38; 41) 34 PATH_SEGMENT@38..41
35 NAME_REF@[38; 41) 35 NAME_REF@38..41
36 IDENT@[38; 41) "Bar" 36 IDENT@38..41 "Bar"
37 SEMICOLON@[41; 42) ";" 37 SEMICOLON@41..42 ";"
38 WHITESPACE@[42; 47) "\n " 38 WHITESPACE@42..47 "\n "
39 FN_DEF@[47; 66) 39 FN_DEF@47..66
40 DEFAULT_KW@[47; 54) "default" 40 DEFAULT_KW@47..54 "default"
41 WHITESPACE@[54; 55) " " 41 WHITESPACE@54..55 " "
42 FN_KW@[55; 57) "fn" 42 FN_KW@55..57 "fn"
43 WHITESPACE@[57; 58) " " 43 WHITESPACE@57..58 " "
44 NAME@[58; 61) 44 NAME@58..61
45 IDENT@[58; 61) "foo" 45 IDENT@58..61 "foo"
46 PARAM_LIST@[61; 63) 46 PARAM_LIST@61..63
47 L_PAREN@[61; 62) "(" 47 L_PAREN@61..62 "("
48 R_PAREN@[62; 63) ")" 48 R_PAREN@62..63 ")"
49 WHITESPACE@[63; 64) " " 49 WHITESPACE@63..64 " "
50 BLOCK_EXPR@[64; 66) 50 BLOCK_EXPR@64..66
51 BLOCK@[64; 66) 51 BLOCK@64..66
52 L_CURLY@[64; 65) "{" 52 L_CURLY@64..65 "{"
53 R_CURLY@[65; 66) "}" 53 R_CURLY@65..66 "}"
54 WHITESPACE@[66; 67) "\n" 54 WHITESPACE@66..67 "\n"
55 R_CURLY@[67; 68) "}" 55 R_CURLY@67..68 "}"
56 WHITESPACE@[68; 69) "\n" 56 WHITESPACE@68..69 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0134_nocontentexpr_after_item.rast b/crates/ra_syntax/test_data/parser/inline/ok/0134_nocontentexpr_after_item.rast
index f66f32370..4ca554ef8 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0134_nocontentexpr_after_item.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0134_nocontentexpr_after_item.rast
@@ -1,64 +1,64 @@
1SOURCE_FILE@[0; 111) 1SOURCE_FILE@0..111
2 FN_DEF@[0; 110) 2 FN_DEF@0..110
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 18) 5 NAME@3..18
6 IDENT@[3; 18) "simple_function" 6 IDENT@3..18 "simple_function"
7 PARAM_LIST@[18; 20) 7 PARAM_LIST@18..20
8 L_PAREN@[18; 19) "(" 8 L_PAREN@18..19 "("
9 R_PAREN@[19; 20) ")" 9 R_PAREN@19..20 ")"
10 WHITESPACE@[20; 21) " " 10 WHITESPACE@20..21 " "
11 BLOCK_EXPR@[21; 110) 11 BLOCK_EXPR@21..110
12 BLOCK@[21; 110) 12 BLOCK@21..110
13 L_CURLY@[21; 22) "{" 13 L_CURLY@21..22 "{"
14 WHITESPACE@[22; 27) "\n " 14 WHITESPACE@22..27 "\n "
15 ENUM_DEF@[27; 75) 15 ENUM_DEF@27..75
16 ENUM_KW@[27; 31) "enum" 16 ENUM_KW@27..31 "enum"
17 WHITESPACE@[31; 32) " " 17 WHITESPACE@31..32 " "
18 NAME@[32; 41) 18 NAME@32..41
19 IDENT@[32; 41) "LocalEnum" 19 IDENT@32..41 "LocalEnum"
20 WHITESPACE@[41; 42) " " 20 WHITESPACE@41..42 " "
21 ENUM_VARIANT_LIST@[42; 75) 21 ENUM_VARIANT_LIST@42..75
22 L_CURLY@[42; 43) "{" 22 L_CURLY@42..43 "{"
23 WHITESPACE@[43; 52) "\n " 23 WHITESPACE@43..52 "\n "
24 ENUM_VARIANT@[52; 55) 24 ENUM_VARIANT@52..55
25 NAME@[52; 55) 25 NAME@52..55
26 IDENT@[52; 55) "One" 26 IDENT@52..55 "One"
27 COMMA@[55; 56) "," 27 COMMA@55..56 ","
28 WHITESPACE@[56; 65) "\n " 28 WHITESPACE@56..65 "\n "
29 ENUM_VARIANT@[65; 68) 29 ENUM_VARIANT@65..68
30 NAME@[65; 68) 30 NAME@65..68
31 IDENT@[65; 68) "Two" 31 IDENT@65..68 "Two"
32 COMMA@[68; 69) "," 32 COMMA@68..69 ","
33 WHITESPACE@[69; 74) "\n " 33 WHITESPACE@69..74 "\n "
34 R_CURLY@[74; 75) "}" 34 R_CURLY@74..75 "}"
35 SEMICOLON@[75; 76) ";" 35 SEMICOLON@75..76 ";"
36 WHITESPACE@[76; 81) "\n " 36 WHITESPACE@76..81 "\n "
37 FN_DEF@[81; 90) 37 FN_DEF@81..90
38 FN_KW@[81; 83) "fn" 38 FN_KW@81..83 "fn"
39 WHITESPACE@[83; 84) " " 39 WHITESPACE@83..84 " "
40 NAME@[84; 85) 40 NAME@84..85
41 IDENT@[84; 85) "f" 41 IDENT@84..85 "f"
42 PARAM_LIST@[85; 87) 42 PARAM_LIST@85..87
43 L_PAREN@[85; 86) "(" 43 L_PAREN@85..86 "("
44 R_PAREN@[86; 87) ")" 44 R_PAREN@86..87 ")"
45 WHITESPACE@[87; 88) " " 45 WHITESPACE@87..88 " "
46 BLOCK_EXPR@[88; 90) 46 BLOCK_EXPR@88..90
47 BLOCK@[88; 90) 47 BLOCK@88..90
48 L_CURLY@[88; 89) "{" 48 L_CURLY@88..89 "{"
49 R_CURLY@[89; 90) "}" 49 R_CURLY@89..90 "}"
50 SEMICOLON@[90; 91) ";" 50 SEMICOLON@90..91 ";"
51 WHITESPACE@[91; 96) "\n " 51 WHITESPACE@91..96 "\n "
52 STRUCT_DEF@[96; 107) 52 STRUCT_DEF@96..107
53 STRUCT_KW@[96; 102) "struct" 53 STRUCT_KW@96..102 "struct"
54 WHITESPACE@[102; 103) " " 54 WHITESPACE@102..103 " "
55 NAME@[103; 104) 55 NAME@103..104
56 IDENT@[103; 104) "S" 56 IDENT@103..104 "S"
57 WHITESPACE@[104; 105) " " 57 WHITESPACE@104..105 " "
58 RECORD_FIELD_DEF_LIST@[105; 107) 58 RECORD_FIELD_DEF_LIST@105..107
59 L_CURLY@[105; 106) "{" 59 L_CURLY@105..106 "{"
60 R_CURLY@[106; 107) "}" 60 R_CURLY@106..107 "}"
61 SEMICOLON@[107; 108) ";" 61 SEMICOLON@107..108 ";"
62 WHITESPACE@[108; 109) "\n" 62 WHITESPACE@108..109 "\n"
63 R_CURLY@[109; 110) "}" 63 R_CURLY@109..110 "}"
64 WHITESPACE@[110; 111) "\n" 64 WHITESPACE@110..111 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0137_await_expr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0137_await_expr.rast
index 4946e6325..7fa3b9f32 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0137_await_expr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0137_await_expr.rast
@@ -1,70 +1,70 @@
1SOURCE_FILE@[0; 67) 1SOURCE_FILE@0..67
2 FN_DEF@[0; 66) 2 FN_DEF@0..66
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 66) 11 BLOCK_EXPR@9..66
12 BLOCK@[9; 66) 12 BLOCK@9..66
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 23) 15 EXPR_STMT@15..23
16 AWAIT_EXPR@[15; 22) 16 AWAIT_EXPR@15..22
17 PATH_EXPR@[15; 16) 17 PATH_EXPR@15..16
18 PATH@[15; 16) 18 PATH@15..16
19 PATH_SEGMENT@[15; 16) 19 PATH_SEGMENT@15..16
20 NAME_REF@[15; 16) 20 NAME_REF@15..16
21 IDENT@[15; 16) "x" 21 IDENT@15..16 "x"
22 DOT@[16; 17) "." 22 DOT@16..17 "."
23 AWAIT_KW@[17; 22) "await" 23 AWAIT_KW@17..22 "await"
24 SEMICOLON@[22; 23) ";" 24 SEMICOLON@22..23 ";"
25 WHITESPACE@[23; 28) "\n " 25 WHITESPACE@23..28 "\n "
26 EXPR_STMT@[28; 38) 26 EXPR_STMT@28..38
27 AWAIT_EXPR@[28; 37) 27 AWAIT_EXPR@28..37
28 FIELD_EXPR@[28; 31) 28 FIELD_EXPR@28..31
29 PATH_EXPR@[28; 29) 29 PATH_EXPR@28..29
30 PATH@[28; 29) 30 PATH@28..29
31 PATH_SEGMENT@[28; 29) 31 PATH_SEGMENT@28..29
32 NAME_REF@[28; 29) 32 NAME_REF@28..29
33 IDENT@[28; 29) "x" 33 IDENT@28..29 "x"
34 DOT@[29; 30) "." 34 DOT@29..30 "."
35 NAME_REF@[30; 31) 35 NAME_REF@30..31
36 INT_NUMBER@[30; 31) "0" 36 INT_NUMBER@30..31 "0"
37 DOT@[31; 32) "." 37 DOT@31..32 "."
38 AWAIT_KW@[32; 37) "await" 38 AWAIT_KW@32..37 "await"
39 SEMICOLON@[37; 38) ";" 39 SEMICOLON@37..38 ";"
40 WHITESPACE@[38; 43) "\n " 40 WHITESPACE@38..43 "\n "
41 EXPR_STMT@[43; 64) 41 EXPR_STMT@43..64
42 METHOD_CALL_EXPR@[43; 63) 42 METHOD_CALL_EXPR@43..63
43 TRY_EXPR@[43; 55) 43 TRY_EXPR@43..55
44 AWAIT_EXPR@[43; 54) 44 AWAIT_EXPR@43..54
45 CALL_EXPR@[43; 48) 45 CALL_EXPR@43..48
46 FIELD_EXPR@[43; 46) 46 FIELD_EXPR@43..46
47 PATH_EXPR@[43; 44) 47 PATH_EXPR@43..44
48 PATH@[43; 44) 48 PATH@43..44
49 PATH_SEGMENT@[43; 44) 49 PATH_SEGMENT@43..44
50 NAME_REF@[43; 44) 50 NAME_REF@43..44
51 IDENT@[43; 44) "x" 51 IDENT@43..44 "x"
52 DOT@[44; 45) "." 52 DOT@44..45 "."
53 NAME_REF@[45; 46) 53 NAME_REF@45..46
54 INT_NUMBER@[45; 46) "0" 54 INT_NUMBER@45..46 "0"
55 ARG_LIST@[46; 48) 55 ARG_LIST@46..48
56 L_PAREN@[46; 47) "(" 56 L_PAREN@46..47 "("
57 R_PAREN@[47; 48) ")" 57 R_PAREN@47..48 ")"
58 DOT@[48; 49) "." 58 DOT@48..49 "."
59 AWAIT_KW@[49; 54) "await" 59 AWAIT_KW@49..54 "await"
60 QUESTION@[54; 55) "?" 60 QUESTION@54..55 "?"
61 DOT@[55; 56) "." 61 DOT@55..56 "."
62 NAME_REF@[56; 61) 62 NAME_REF@56..61
63 IDENT@[56; 61) "hello" 63 IDENT@56..61 "hello"
64 ARG_LIST@[61; 63) 64 ARG_LIST@61..63
65 L_PAREN@[61; 62) "(" 65 L_PAREN@61..62 "("
66 R_PAREN@[62; 63) ")" 66 R_PAREN@62..63 ")"
67 SEMICOLON@[63; 64) ";" 67 SEMICOLON@63..64 ";"
68 WHITESPACE@[64; 65) "\n" 68 WHITESPACE@64..65 "\n"
69 R_CURLY@[65; 66) "}" 69 R_CURLY@65..66 "}"
70 WHITESPACE@[66; 67) "\n" 70 WHITESPACE@66..67 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0138_associated_type_bounds.rast b/crates/ra_syntax/test_data/parser/inline/ok/0138_associated_type_bounds.rast
index d18096b47..a32484f2c 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0138_associated_type_bounds.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0138_associated_type_bounds.rast
@@ -1,56 +1,56 @@
1SOURCE_FILE@[0; 59) 1SOURCE_FILE@0..59
2 FN_DEF@[0; 58) 2 FN_DEF@0..58
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 12) 5 NAME@3..12
6 IDENT@[3; 12) "print_all" 6 IDENT@3..12 "print_all"
7 TYPE_PARAM_LIST@[12; 40) 7 TYPE_PARAM_LIST@12..40
8 L_ANGLE@[12; 13) "<" 8 L_ANGLE@12..13 "<"
9 TYPE_PARAM@[13; 39) 9 TYPE_PARAM@13..39
10 NAME@[13; 14) 10 NAME@13..14
11 IDENT@[13; 14) "T" 11 IDENT@13..14 "T"
12 COLON@[14; 15) ":" 12 COLON@14..15 ":"
13 WHITESPACE@[15; 16) " " 13 WHITESPACE@15..16 " "
14 TYPE_BOUND_LIST@[16; 39) 14 TYPE_BOUND_LIST@16..39
15 TYPE_BOUND@[16; 39) 15 TYPE_BOUND@16..39
16 PATH_TYPE@[16; 39) 16 PATH_TYPE@16..39
17 PATH@[16; 39) 17 PATH@16..39
18 PATH_SEGMENT@[16; 39) 18 PATH_SEGMENT@16..39
19 NAME_REF@[16; 24) 19 NAME_REF@16..24
20 IDENT@[16; 24) "Iterator" 20 IDENT@16..24 "Iterator"
21 TYPE_ARG_LIST@[24; 39) 21 TYPE_ARG_LIST@24..39
22 L_ANGLE@[24; 25) "<" 22 L_ANGLE@24..25 "<"
23 ASSOC_TYPE_ARG@[25; 38) 23 ASSOC_TYPE_ARG@25..38
24 NAME_REF@[25; 29) 24 NAME_REF@25..29
25 IDENT@[25; 29) "Item" 25 IDENT@25..29 "Item"
26 COLON@[29; 30) ":" 26 COLON@29..30 ":"
27 WHITESPACE@[30; 31) " " 27 WHITESPACE@30..31 " "
28 TYPE_BOUND_LIST@[31; 38) 28 TYPE_BOUND_LIST@31..38
29 TYPE_BOUND@[31; 38) 29 TYPE_BOUND@31..38
30 PATH_TYPE@[31; 38) 30 PATH_TYPE@31..38
31 PATH@[31; 38) 31 PATH@31..38
32 PATH_SEGMENT@[31; 38) 32 PATH_SEGMENT@31..38
33 NAME_REF@[31; 38) 33 NAME_REF@31..38
34 IDENT@[31; 38) "Display" 34 IDENT@31..38 "Display"
35 R_ANGLE@[38; 39) ">" 35 R_ANGLE@38..39 ">"
36 R_ANGLE@[39; 40) ">" 36 R_ANGLE@39..40 ">"
37 PARAM_LIST@[40; 55) 37 PARAM_LIST@40..55
38 L_PAREN@[40; 41) "(" 38 L_PAREN@40..41 "("
39 PARAM@[41; 54) 39 PARAM@41..54
40 BIND_PAT@[41; 51) 40 BIND_PAT@41..51
41 NAME@[41; 51) 41 NAME@41..51
42 IDENT@[41; 51) "printables" 42 IDENT@41..51 "printables"
43 COLON@[51; 52) ":" 43 COLON@51..52 ":"
44 WHITESPACE@[52; 53) " " 44 WHITESPACE@52..53 " "
45 PATH_TYPE@[53; 54) 45 PATH_TYPE@53..54
46 PATH@[53; 54) 46 PATH@53..54
47 PATH_SEGMENT@[53; 54) 47 PATH_SEGMENT@53..54
48 NAME_REF@[53; 54) 48 NAME_REF@53..54
49 IDENT@[53; 54) "T" 49 IDENT@53..54 "T"
50 R_PAREN@[54; 55) ")" 50 R_PAREN@54..55 ")"
51 WHITESPACE@[55; 56) " " 51 WHITESPACE@55..56 " "
52 BLOCK_EXPR@[56; 58) 52 BLOCK_EXPR@56..58
53 BLOCK@[56; 58) 53 BLOCK@56..58
54 L_CURLY@[56; 57) "{" 54 L_CURLY@56..57 "{"
55 R_CURLY@[57; 58) "}" 55 R_CURLY@57..58 "}"
56 WHITESPACE@[58; 59) "\n" 56 WHITESPACE@58..59 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0138_expression_after_block.rast b/crates/ra_syntax/test_data/parser/inline/ok/0138_expression_after_block.rast
index ca1d69f64..9017236cc 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0138_expression_after_block.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0138_expression_after_block.rast
@@ -1,66 +1,66 @@
1SOURCE_FILE@[0; 52) 1SOURCE_FILE@0..52
2 FN_DEF@[0; 51) 2 FN_DEF@0..51
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 51) 11 BLOCK_EXPR@9..51
12 BLOCK@[9; 51) 12 BLOCK@9..51
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 14) "\n " 14 WHITESPACE@10..14 "\n "
15 LET_STMT@[14; 34) 15 LET_STMT@14..34
16 LET_KW@[14; 17) "let" 16 LET_KW@14..17 "let"
17 WHITESPACE@[17; 18) " " 17 WHITESPACE@17..18 " "
18 BIND_PAT@[18; 23) 18 BIND_PAT@18..23
19 MUT_KW@[18; 21) "mut" 19 MUT_KW@18..21 "mut"
20 WHITESPACE@[21; 22) " " 20 WHITESPACE@21..22 " "
21 NAME@[22; 23) 21 NAME@22..23
22 IDENT@[22; 23) "p" 22 IDENT@22..23 "p"
23 WHITESPACE@[23; 24) " " 23 WHITESPACE@23..24 " "
24 EQ@[24; 25) "=" 24 EQ@24..25 "="
25 WHITESPACE@[25; 26) " " 25 WHITESPACE@25..26 " "
26 RECORD_LIT@[26; 33) 26 RECORD_LIT@26..33
27 PATH@[26; 27) 27 PATH@26..27
28 PATH_SEGMENT@[26; 27) 28 PATH_SEGMENT@26..27
29 NAME_REF@[26; 27) 29 NAME_REF@26..27
30 IDENT@[26; 27) "F" 30 IDENT@26..27 "F"
31 RECORD_FIELD_LIST@[27; 33) 31 RECORD_FIELD_LIST@27..33
32 L_CURLY@[27; 28) "{" 32 L_CURLY@27..28 "{"
33 RECORD_FIELD@[28; 32) 33 RECORD_FIELD@28..32
34 NAME_REF@[28; 29) 34 NAME_REF@28..29
35 IDENT@[28; 29) "x" 35 IDENT@28..29 "x"
36 COLON@[29; 30) ":" 36 COLON@29..30 ":"
37 WHITESPACE@[30; 31) " " 37 WHITESPACE@30..31 " "
38 LITERAL@[31; 32) 38 LITERAL@31..32
39 INT_NUMBER@[31; 32) "5" 39 INT_NUMBER@31..32 "5"
40 R_CURLY@[32; 33) "}" 40 R_CURLY@32..33 "}"
41 SEMICOLON@[33; 34) ";" 41 SEMICOLON@33..34 ";"
42 WHITESPACE@[34; 38) "\n " 42 WHITESPACE@34..38 "\n "
43 EXPR_STMT@[38; 49) 43 EXPR_STMT@38..49
44 BIN_EXPR@[38; 48) 44 BIN_EXPR@38..48
45 FIELD_EXPR@[38; 43) 45 FIELD_EXPR@38..43
46 BLOCK_EXPR@[38; 41) 46 BLOCK_EXPR@38..41
47 BLOCK@[38; 41) 47 BLOCK@38..41
48 L_CURLY@[38; 39) "{" 48 L_CURLY@38..39 "{"
49 PATH_EXPR@[39; 40) 49 PATH_EXPR@39..40
50 PATH@[39; 40) 50 PATH@39..40
51 PATH_SEGMENT@[39; 40) 51 PATH_SEGMENT@39..40
52 NAME_REF@[39; 40) 52 NAME_REF@39..40
53 IDENT@[39; 40) "p" 53 IDENT@39..40 "p"
54 R_CURLY@[40; 41) "}" 54 R_CURLY@40..41 "}"
55 DOT@[41; 42) "." 55 DOT@41..42 "."
56 NAME_REF@[42; 43) 56 NAME_REF@42..43
57 IDENT@[42; 43) "x" 57 IDENT@42..43 "x"
58 WHITESPACE@[43; 44) " " 58 WHITESPACE@43..44 " "
59 EQ@[44; 45) "=" 59 EQ@44..45 "="
60 WHITESPACE@[45; 46) " " 60 WHITESPACE@45..46 " "
61 LITERAL@[46; 48) 61 LITERAL@46..48
62 INT_NUMBER@[46; 48) "10" 62 INT_NUMBER@46..48 "10"
63 SEMICOLON@[48; 49) ";" 63 SEMICOLON@48..49 ";"
64 WHITESPACE@[49; 50) "\n" 64 WHITESPACE@49..50 "\n"
65 R_CURLY@[50; 51) "}" 65 R_CURLY@50..51 "}"
66 WHITESPACE@[51; 52) "\n" 66 WHITESPACE@51..52 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0138_self_param_outer_attr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0138_self_param_outer_attr.rast
index e627b9746..2cb5b52f4 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0138_self_param_outer_attr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0138_self_param_outer_attr.rast
@@ -1,26 +1,26 @@
1SOURCE_FILE@[0; 26) 1SOURCE_FILE@0..26
2 FN_DEF@[0; 25) 2 FN_DEF@0..25
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "f" 6 IDENT@3..4 "f"
7 PARAM_LIST@[4; 22) 7 PARAM_LIST@4..22
8 L_PAREN@[4; 5) "(" 8 L_PAREN@4..5 "("
9 ATTR@[5; 16) 9 ATTR@5..16
10 POUND@[5; 6) "#" 10 POUND@5..6 "#"
11 L_BRACK@[6; 7) "[" 11 L_BRACK@6..7 "["
12 PATH@[7; 15) 12 PATH@7..15
13 PATH_SEGMENT@[7; 15) 13 PATH_SEGMENT@7..15
14 NAME_REF@[7; 15) 14 NAME_REF@7..15
15 IDENT@[7; 15) "must_use" 15 IDENT@7..15 "must_use"
16 R_BRACK@[15; 16) "]" 16 R_BRACK@15..16 "]"
17 WHITESPACE@[16; 17) " " 17 WHITESPACE@16..17 " "
18 SELF_PARAM@[17; 21) 18 SELF_PARAM@17..21
19 SELF_KW@[17; 21) "self" 19 SELF_KW@17..21 "self"
20 R_PAREN@[21; 22) ")" 20 R_PAREN@21..22 ")"
21 WHITESPACE@[22; 23) " " 21 WHITESPACE@22..23 " "
22 BLOCK_EXPR@[23; 25) 22 BLOCK_EXPR@23..25
23 BLOCK@[23; 25) 23 BLOCK@23..25
24 L_CURLY@[23; 24) "{" 24 L_CURLY@23..24 "{"
25 R_CURLY@[24; 25) "}" 25 R_CURLY@24..25 "}"
26 WHITESPACE@[25; 26) "\n" 26 WHITESPACE@25..26 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0139_param_outer_arg.rast b/crates/ra_syntax/test_data/parser/inline/ok/0139_param_outer_arg.rast
index cf202c94b..ac3f4de26 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0139_param_outer_arg.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0139_param_outer_arg.rast
@@ -1,35 +1,35 @@
1SOURCE_FILE@[0; 28) 1SOURCE_FILE@0..28
2 FN_DEF@[0; 27) 2 FN_DEF@0..27
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "f" 6 IDENT@3..4 "f"
7 PARAM_LIST@[4; 24) 7 PARAM_LIST@4..24
8 L_PAREN@[4; 5) "(" 8 L_PAREN@4..5 "("
9 ATTR@[5; 13) 9 ATTR@5..13
10 POUND@[5; 6) "#" 10 POUND@5..6 "#"
11 L_BRACK@[6; 7) "[" 11 L_BRACK@6..7 "["
12 PATH@[7; 12) 12 PATH@7..12
13 PATH_SEGMENT@[7; 12) 13 PATH_SEGMENT@7..12
14 NAME_REF@[7; 12) 14 NAME_REF@7..12
15 IDENT@[7; 12) "attr1" 15 IDENT@7..12 "attr1"
16 R_BRACK@[12; 13) "]" 16 R_BRACK@12..13 "]"
17 WHITESPACE@[13; 14) " " 17 WHITESPACE@13..14 " "
18 PARAM@[14; 23) 18 PARAM@14..23
19 BIND_PAT@[14; 17) 19 BIND_PAT@14..17
20 NAME@[14; 17) 20 NAME@14..17
21 IDENT@[14; 17) "pat" 21 IDENT@14..17 "pat"
22 COLON@[17; 18) ":" 22 COLON@17..18 ":"
23 WHITESPACE@[18; 19) " " 23 WHITESPACE@18..19 " "
24 PATH_TYPE@[19; 23) 24 PATH_TYPE@19..23
25 PATH@[19; 23) 25 PATH@19..23
26 PATH_SEGMENT@[19; 23) 26 PATH_SEGMENT@19..23
27 NAME_REF@[19; 23) 27 NAME_REF@19..23
28 IDENT@[19; 23) "Type" 28 IDENT@19..23 "Type"
29 R_PAREN@[23; 24) ")" 29 R_PAREN@23..24 ")"
30 WHITESPACE@[24; 25) " " 30 WHITESPACE@24..25 " "
31 BLOCK_EXPR@[25; 27) 31 BLOCK_EXPR@25..27
32 BLOCK@[25; 27) 32 BLOCK@25..27
33 L_CURLY@[25; 26) "{" 33 L_CURLY@25..26 "{"
34 R_CURLY@[26; 27) "}" 34 R_CURLY@26..27 "}"
35 WHITESPACE@[27; 28) "\n" 35 WHITESPACE@27..28 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0142_for_range_from.rast b/crates/ra_syntax/test_data/parser/inline/ok/0142_for_range_from.rast
index 6d01140d2..8d4919cbd 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0142_for_range_from.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0142_for_range_from.rast
@@ -1,42 +1,42 @@
1SOURCE_FILE@[0; 51) 1SOURCE_FILE@0..51
2 FN_DEF@[0; 50) 2 FN_DEF@0..50
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 50) 11 BLOCK_EXPR@9..50
12 BLOCK@[9; 50) 12 BLOCK@9..50
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 14) "\n " 14 WHITESPACE@10..14 "\n "
15 FOR_EXPR@[14; 48) 15 FOR_EXPR@14..48
16 FOR_KW@[14; 17) "for" 16 FOR_KW@14..17 "for"
17 WHITESPACE@[17; 18) " " 17 WHITESPACE@17..18 " "
18 BIND_PAT@[18; 19) 18 BIND_PAT@18..19
19 NAME@[18; 19) 19 NAME@18..19
20 IDENT@[18; 19) "x" 20 IDENT@18..19 "x"
21 WHITESPACE@[19; 20) " " 21 WHITESPACE@19..20 " "
22 IN_KW@[20; 22) "in" 22 IN_KW@20..22 "in"
23 WHITESPACE@[22; 23) " " 23 WHITESPACE@22..23 " "
24 RANGE_EXPR@[23; 27) 24 RANGE_EXPR@23..27
25 LITERAL@[23; 24) 25 LITERAL@23..24
26 INT_NUMBER@[23; 24) "0" 26 INT_NUMBER@23..24 "0"
27 WHITESPACE@[24; 25) " " 27 WHITESPACE@24..25 " "
28 DOT2@[25; 27) ".." 28 DOT2@25..27 ".."
29 WHITESPACE@[27; 28) " " 29 WHITESPACE@27..28 " "
30 BLOCK_EXPR@[28; 48) 30 BLOCK_EXPR@28..48
31 BLOCK@[28; 48) 31 BLOCK@28..48
32 L_CURLY@[28; 29) "{" 32 L_CURLY@28..29 "{"
33 WHITESPACE@[29; 37) "\n " 33 WHITESPACE@29..37 "\n "
34 EXPR_STMT@[37; 43) 34 EXPR_STMT@37..43
35 BREAK_EXPR@[37; 42) 35 BREAK_EXPR@37..42
36 BREAK_KW@[37; 42) "break" 36 BREAK_KW@37..42 "break"
37 SEMICOLON@[42; 43) ";" 37 SEMICOLON@42..43 ";"
38 WHITESPACE@[43; 47) "\n " 38 WHITESPACE@43..47 "\n "
39 R_CURLY@[47; 48) "}" 39 R_CURLY@47..48 "}"
40 WHITESPACE@[48; 49) "\n" 40 WHITESPACE@48..49 "\n"
41 R_CURLY@[49; 50) "}" 41 R_CURLY@49..50 "}"
42 WHITESPACE@[50; 51) "\n" 42 WHITESPACE@50..51 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0143_box_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0143_box_pat.rast
index 1d245f8f3..2c933fa76 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0143_box_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0143_box_pat.rast
@@ -1,111 +1,111 @@
1SOURCE_FILE@[0; 118) 1SOURCE_FILE@0..118
2 FN_DEF@[0; 117) 2 FN_DEF@0..117
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 117) 11 BLOCK_EXPR@10..117
12 BLOCK@[10; 117) 12 BLOCK@10..117
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 LET_STMT@[16; 31) 15 LET_STMT@16..31
16 LET_KW@[16; 19) "let" 16 LET_KW@16..19 "let"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 BOX_PAT@[20; 25) 18 BOX_PAT@20..25
19 BOX_KW@[20; 23) "box" 19 BOX_KW@20..23 "box"
20 WHITESPACE@[23; 24) " " 20 WHITESPACE@23..24 " "
21 BIND_PAT@[24; 25) 21 BIND_PAT@24..25
22 NAME@[24; 25) 22 NAME@24..25
23 IDENT@[24; 25) "i" 23 IDENT@24..25 "i"
24 WHITESPACE@[25; 26) " " 24 WHITESPACE@25..26 " "
25 EQ@[26; 27) "=" 25 EQ@26..27 "="
26 WHITESPACE@[27; 28) " " 26 WHITESPACE@27..28 " "
27 TUPLE_EXPR@[28; 30) 27 TUPLE_EXPR@28..30
28 L_PAREN@[28; 29) "(" 28 L_PAREN@28..29 "("
29 R_PAREN@[29; 30) ")" 29 R_PAREN@29..30 ")"
30 SEMICOLON@[30; 31) ";" 30 SEMICOLON@30..31 ";"
31 WHITESPACE@[31; 36) "\n " 31 WHITESPACE@31..36 "\n "
32 LET_STMT@[36; 87) 32 LET_STMT@36..87
33 LET_KW@[36; 39) "let" 33 LET_KW@36..39 "let"
34 WHITESPACE@[39; 40) " " 34 WHITESPACE@39..40 " "
35 BOX_PAT@[40; 81) 35 BOX_PAT@40..81
36 BOX_KW@[40; 43) "box" 36 BOX_KW@40..43 "box"
37 WHITESPACE@[43; 44) " " 37 WHITESPACE@43..44 " "
38 RECORD_PAT@[44; 81) 38 RECORD_PAT@44..81
39 PATH@[44; 49) 39 PATH@44..49
40 PATH_SEGMENT@[44; 49) 40 PATH_SEGMENT@44..49
41 NAME_REF@[44; 49) 41 NAME_REF@44..49
42 IDENT@[44; 49) "Outer" 42 IDENT@44..49 "Outer"
43 WHITESPACE@[49; 50) " " 43 WHITESPACE@49..50 " "
44 RECORD_FIELD_PAT_LIST@[50; 81) 44 RECORD_FIELD_PAT_LIST@50..81
45 L_CURLY@[50; 51) "{" 45 L_CURLY@50..51 "{"
46 WHITESPACE@[51; 52) " " 46 WHITESPACE@51..52 " "
47 RECORD_FIELD_PAT@[52; 57) 47 RECORD_FIELD_PAT@52..57
48 BOX_PAT@[52; 57) 48 BOX_PAT@52..57
49 BOX_KW@[52; 55) "box" 49 BOX_KW@52..55 "box"
50 WHITESPACE@[55; 56) " " 50 WHITESPACE@55..56 " "
51 BIND_PAT@[56; 57) 51 BIND_PAT@56..57
52 NAME@[56; 57) 52 NAME@56..57
53 IDENT@[56; 57) "i" 53 IDENT@56..57 "i"
54 COMMA@[57; 58) "," 54 COMMA@57..58 ","
55 WHITESPACE@[58; 59) " " 55 WHITESPACE@58..59 " "
56 RECORD_FIELD_PAT@[59; 79) 56 RECORD_FIELD_PAT@59..79
57 NAME_REF@[59; 60) 57 NAME_REF@59..60
58 IDENT@[59; 60) "j" 58 IDENT@59..60 "j"
59 COLON@[60; 61) ":" 59 COLON@60..61 ":"
60 WHITESPACE@[61; 62) " " 60 WHITESPACE@61..62 " "
61 BOX_PAT@[62; 79) 61 BOX_PAT@62..79
62 BOX_KW@[62; 65) "box" 62 BOX_KW@62..65 "box"
63 WHITESPACE@[65; 66) " " 63 WHITESPACE@65..66 " "
64 TUPLE_STRUCT_PAT@[66; 79) 64 TUPLE_STRUCT_PAT@66..79
65 PATH@[66; 71) 65 PATH@66..71
66 PATH_SEGMENT@[66; 71) 66 PATH_SEGMENT@66..71
67 NAME_REF@[66; 71) 67 NAME_REF@66..71
68 IDENT@[66; 71) "Inner" 68 IDENT@66..71 "Inner"
69 L_PAREN@[71; 72) "(" 69 L_PAREN@71..72 "("
70 BOX_PAT@[72; 78) 70 BOX_PAT@72..78
71 BOX_KW@[72; 75) "box" 71 BOX_KW@72..75 "box"
72 WHITESPACE@[75; 76) " " 72 WHITESPACE@75..76 " "
73 REF_PAT@[76; 78) 73 REF_PAT@76..78
74 AMP@[76; 77) "&" 74 AMP@76..77 "&"
75 BIND_PAT@[77; 78) 75 BIND_PAT@77..78
76 NAME@[77; 78) 76 NAME@77..78
77 IDENT@[77; 78) "x" 77 IDENT@77..78 "x"
78 R_PAREN@[78; 79) ")" 78 R_PAREN@78..79 ")"
79 WHITESPACE@[79; 80) " " 79 WHITESPACE@79..80 " "
80 R_CURLY@[80; 81) "}" 80 R_CURLY@80..81 "}"
81 WHITESPACE@[81; 82) " " 81 WHITESPACE@81..82 " "
82 EQ@[82; 83) "=" 82 EQ@82..83 "="
83 WHITESPACE@[83; 84) " " 83 WHITESPACE@83..84 " "
84 TUPLE_EXPR@[84; 86) 84 TUPLE_EXPR@84..86
85 L_PAREN@[84; 85) "(" 85 L_PAREN@84..85 "("
86 R_PAREN@[85; 86) ")" 86 R_PAREN@85..86 ")"
87 SEMICOLON@[86; 87) ";" 87 SEMICOLON@86..87 ";"
88 WHITESPACE@[87; 92) "\n " 88 WHITESPACE@87..92 "\n "
89 LET_STMT@[92; 115) 89 LET_STMT@92..115
90 LET_KW@[92; 95) "let" 90 LET_KW@92..95 "let"
91 WHITESPACE@[95; 96) " " 91 WHITESPACE@95..96 " "
92 BOX_PAT@[96; 109) 92 BOX_PAT@96..109
93 BOX_KW@[96; 99) "box" 93 BOX_KW@96..99 "box"
94 WHITESPACE@[99; 100) " " 94 WHITESPACE@99..100 " "
95 BIND_PAT@[100; 109) 95 BIND_PAT@100..109
96 REF_KW@[100; 103) "ref" 96 REF_KW@100..103 "ref"
97 WHITESPACE@[103; 104) " " 97 WHITESPACE@103..104 " "
98 MUT_KW@[104; 107) "mut" 98 MUT_KW@104..107 "mut"
99 WHITESPACE@[107; 108) " " 99 WHITESPACE@107..108 " "
100 NAME@[108; 109) 100 NAME@108..109
101 IDENT@[108; 109) "i" 101 IDENT@108..109 "i"
102 WHITESPACE@[109; 110) " " 102 WHITESPACE@109..110 " "
103 EQ@[110; 111) "=" 103 EQ@110..111 "="
104 WHITESPACE@[111; 112) " " 104 WHITESPACE@111..112 " "
105 TUPLE_EXPR@[112; 114) 105 TUPLE_EXPR@112..114
106 L_PAREN@[112; 113) "(" 106 L_PAREN@112..113 "("
107 R_PAREN@[113; 114) ")" 107 R_PAREN@113..114 ")"
108 SEMICOLON@[114; 115) ";" 108 SEMICOLON@114..115 ";"
109 WHITESPACE@[115; 116) "\n" 109 WHITESPACE@115..116 "\n"
110 R_CURLY@[116; 117) "}" 110 R_CURLY@116..117 "}"
111 WHITESPACE@[117; 118) "\n" 111 WHITESPACE@117..118 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast
index 60186a992..e0b50d8be 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast
@@ -1,456 +1,456 @@
1SOURCE_FILE@[0; 555) 1SOURCE_FILE@0..555
2 FN_DEF@[0; 554) 2 FN_DEF@0..554
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 554) 11 BLOCK_EXPR@10..554
12 BLOCK@[10; 554) 12 BLOCK@10..554
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 LET_STMT@[16; 28) 15 LET_STMT@16..28
16 LET_KW@[16; 19) "let" 16 LET_KW@16..19 "let"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 DOT_DOT_PAT@[20; 22) 18 DOT_DOT_PAT@20..22
19 DOT2@[20; 22) ".." 19 DOT2@20..22 ".."
20 WHITESPACE@[22; 23) " " 20 WHITESPACE@22..23 " "
21 EQ@[23; 24) "=" 21 EQ@23..24 "="
22 WHITESPACE@[24; 25) " " 22 WHITESPACE@24..25 " "
23 TUPLE_EXPR@[25; 27) 23 TUPLE_EXPR@25..27
24 L_PAREN@[25; 26) "(" 24 L_PAREN@25..26 "("
25 R_PAREN@[26; 27) ")" 25 R_PAREN@26..27 ")"
26 SEMICOLON@[27; 28) ";" 26 SEMICOLON@27..28 ";"
27 WHITESPACE@[28; 33) "\n " 27 WHITESPACE@28..33 "\n "
28 COMMENT@[33; 35) "//" 28 COMMENT@33..35 "//"
29 WHITESPACE@[35; 40) "\n " 29 WHITESPACE@35..40 "\n "
30 COMMENT@[40; 49) "// Tuples" 30 COMMENT@40..49 "// Tuples"
31 WHITESPACE@[49; 54) "\n " 31 WHITESPACE@49..54 "\n "
32 COMMENT@[54; 56) "//" 32 COMMENT@54..56 "//"
33 WHITESPACE@[56; 61) "\n " 33 WHITESPACE@56..61 "\n "
34 LET_STMT@[61; 78) 34 LET_STMT@61..78
35 LET_KW@[61; 64) "let" 35 LET_KW@61..64 "let"
36 WHITESPACE@[64; 65) " " 36 WHITESPACE@64..65 " "
37 TUPLE_PAT@[65; 72) 37 TUPLE_PAT@65..72
38 L_PAREN@[65; 66) "(" 38 L_PAREN@65..66 "("
39 BIND_PAT@[66; 67) 39 BIND_PAT@66..67
40 NAME@[66; 67) 40 NAME@66..67
41 IDENT@[66; 67) "a" 41 IDENT@66..67 "a"
42 COMMA@[67; 68) "," 42 COMMA@67..68 ","
43 WHITESPACE@[68; 69) " " 43 WHITESPACE@68..69 " "
44 DOT_DOT_PAT@[69; 71) 44 DOT_DOT_PAT@69..71
45 DOT2@[69; 71) ".." 45 DOT2@69..71 ".."
46 R_PAREN@[71; 72) ")" 46 R_PAREN@71..72 ")"
47 WHITESPACE@[72; 73) " " 47 WHITESPACE@72..73 " "
48 EQ@[73; 74) "=" 48 EQ@73..74 "="
49 WHITESPACE@[74; 75) " " 49 WHITESPACE@74..75 " "
50 TUPLE_EXPR@[75; 77) 50 TUPLE_EXPR@75..77
51 L_PAREN@[75; 76) "(" 51 L_PAREN@75..76 "("
52 R_PAREN@[76; 77) ")" 52 R_PAREN@76..77 ")"
53 SEMICOLON@[77; 78) ";" 53 SEMICOLON@77..78 ";"
54 WHITESPACE@[78; 83) "\n " 54 WHITESPACE@78..83 "\n "
55 LET_STMT@[83; 101) 55 LET_STMT@83..101
56 LET_KW@[83; 86) "let" 56 LET_KW@83..86 "let"
57 WHITESPACE@[86; 87) " " 57 WHITESPACE@86..87 " "
58 TUPLE_PAT@[87; 95) 58 TUPLE_PAT@87..95
59 L_PAREN@[87; 88) "(" 59 L_PAREN@87..88 "("
60 BIND_PAT@[88; 89) 60 BIND_PAT@88..89
61 NAME@[88; 89) 61 NAME@88..89
62 IDENT@[88; 89) "a" 62 IDENT@88..89 "a"
63 COMMA@[89; 90) "," 63 COMMA@89..90 ","
64 WHITESPACE@[90; 91) " " 64 WHITESPACE@90..91 " "
65 DOT_DOT_PAT@[91; 93) 65 DOT_DOT_PAT@91..93
66 DOT2@[91; 93) ".." 66 DOT2@91..93 ".."
67 COMMA@[93; 94) "," 67 COMMA@93..94 ","
68 R_PAREN@[94; 95) ")" 68 R_PAREN@94..95 ")"
69 WHITESPACE@[95; 96) " " 69 WHITESPACE@95..96 " "
70 EQ@[96; 97) "=" 70 EQ@96..97 "="
71 WHITESPACE@[97; 98) " " 71 WHITESPACE@97..98 " "
72 TUPLE_EXPR@[98; 100) 72 TUPLE_EXPR@98..100
73 L_PAREN@[98; 99) "(" 73 L_PAREN@98..99 "("
74 R_PAREN@[99; 100) ")" 74 R_PAREN@99..100 ")"
75 SEMICOLON@[100; 101) ";" 75 SEMICOLON@100..101 ";"
76 WHITESPACE@[101; 106) "\n " 76 WHITESPACE@101..106 "\n "
77 LET_STMT@[106; 128) 77 LET_STMT@106..128
78 LET_KW@[106; 109) "let" 78 LET_KW@106..109 "let"
79 WHITESPACE@[109; 110) " " 79 WHITESPACE@109..110 " "
80 TUPLE_STRUCT_PAT@[110; 122) 80 TUPLE_STRUCT_PAT@110..122
81 PATH@[110; 115) 81 PATH@110..115
82 PATH_SEGMENT@[110; 115) 82 PATH_SEGMENT@110..115
83 NAME_REF@[110; 115) 83 NAME_REF@110..115
84 IDENT@[110; 115) "Tuple" 84 IDENT@110..115 "Tuple"
85 L_PAREN@[115; 116) "(" 85 L_PAREN@115..116 "("
86 BIND_PAT@[116; 117) 86 BIND_PAT@116..117
87 NAME@[116; 117) 87 NAME@116..117
88 IDENT@[116; 117) "a" 88 IDENT@116..117 "a"
89 COMMA@[117; 118) "," 89 COMMA@117..118 ","
90 WHITESPACE@[118; 119) " " 90 WHITESPACE@118..119 " "
91 DOT_DOT_PAT@[119; 121) 91 DOT_DOT_PAT@119..121
92 DOT2@[119; 121) ".." 92 DOT2@119..121 ".."
93 R_PAREN@[121; 122) ")" 93 R_PAREN@121..122 ")"
94 WHITESPACE@[122; 123) " " 94 WHITESPACE@122..123 " "
95 EQ@[123; 124) "=" 95 EQ@123..124 "="
96 WHITESPACE@[124; 125) " " 96 WHITESPACE@124..125 " "
97 TUPLE_EXPR@[125; 127) 97 TUPLE_EXPR@125..127
98 L_PAREN@[125; 126) "(" 98 L_PAREN@125..126 "("
99 R_PAREN@[126; 127) ")" 99 R_PAREN@126..127 ")"
100 SEMICOLON@[127; 128) ";" 100 SEMICOLON@127..128 ";"
101 WHITESPACE@[128; 133) "\n " 101 WHITESPACE@128..133 "\n "
102 LET_STMT@[133; 156) 102 LET_STMT@133..156
103 LET_KW@[133; 136) "let" 103 LET_KW@133..136 "let"
104 WHITESPACE@[136; 137) " " 104 WHITESPACE@136..137 " "
105 TUPLE_STRUCT_PAT@[137; 150) 105 TUPLE_STRUCT_PAT@137..150
106 PATH@[137; 142) 106 PATH@137..142
107 PATH_SEGMENT@[137; 142) 107 PATH_SEGMENT@137..142
108 NAME_REF@[137; 142) 108 NAME_REF@137..142
109 IDENT@[137; 142) "Tuple" 109 IDENT@137..142 "Tuple"
110 L_PAREN@[142; 143) "(" 110 L_PAREN@142..143 "("
111 BIND_PAT@[143; 144) 111 BIND_PAT@143..144
112 NAME@[143; 144) 112 NAME@143..144
113 IDENT@[143; 144) "a" 113 IDENT@143..144 "a"
114 COMMA@[144; 145) "," 114 COMMA@144..145 ","
115 WHITESPACE@[145; 146) " " 115 WHITESPACE@145..146 " "
116 DOT_DOT_PAT@[146; 148) 116 DOT_DOT_PAT@146..148
117 DOT2@[146; 148) ".." 117 DOT2@146..148 ".."
118 COMMA@[148; 149) "," 118 COMMA@148..149 ","
119 R_PAREN@[149; 150) ")" 119 R_PAREN@149..150 ")"
120 WHITESPACE@[150; 151) " " 120 WHITESPACE@150..151 " "
121 EQ@[151; 152) "=" 121 EQ@151..152 "="
122 WHITESPACE@[152; 153) " " 122 WHITESPACE@152..153 " "
123 TUPLE_EXPR@[153; 155) 123 TUPLE_EXPR@153..155
124 L_PAREN@[153; 154) "(" 124 L_PAREN@153..154 "("
125 R_PAREN@[154; 155) ")" 125 R_PAREN@154..155 ")"
126 SEMICOLON@[155; 156) ";" 126 SEMICOLON@155..156 ";"
127 WHITESPACE@[156; 161) "\n " 127 WHITESPACE@156..161 "\n "
128 LET_STMT@[161; 179) 128 LET_STMT@161..179
129 LET_KW@[161; 164) "let" 129 LET_KW@161..164 "let"
130 WHITESPACE@[164; 165) " " 130 WHITESPACE@164..165 " "
131 TUPLE_PAT@[165; 173) 131 TUPLE_PAT@165..173
132 L_PAREN@[165; 166) "(" 132 L_PAREN@165..166 "("
133 DOT_DOT_PAT@[166; 168) 133 DOT_DOT_PAT@166..168
134 DOT2@[166; 168) ".." 134 DOT2@166..168 ".."
135 COMMA@[168; 169) "," 135 COMMA@168..169 ","
136 WHITESPACE@[169; 170) " " 136 WHITESPACE@169..170 " "
137 DOT_DOT_PAT@[170; 172) 137 DOT_DOT_PAT@170..172
138 DOT2@[170; 172) ".." 138 DOT2@170..172 ".."
139 R_PAREN@[172; 173) ")" 139 R_PAREN@172..173 ")"
140 WHITESPACE@[173; 174) " " 140 WHITESPACE@173..174 " "
141 EQ@[174; 175) "=" 141 EQ@174..175 "="
142 WHITESPACE@[175; 176) " " 142 WHITESPACE@175..176 " "
143 TUPLE_EXPR@[176; 178) 143 TUPLE_EXPR@176..178
144 L_PAREN@[176; 177) "(" 144 L_PAREN@176..177 "("
145 R_PAREN@[177; 178) ")" 145 R_PAREN@177..178 ")"
146 SEMICOLON@[178; 179) ";" 146 SEMICOLON@178..179 ";"
147 WHITESPACE@[179; 184) "\n " 147 WHITESPACE@179..184 "\n "
148 LET_STMT@[184; 207) 148 LET_STMT@184..207
149 LET_KW@[184; 187) "let" 149 LET_KW@184..187 "let"
150 WHITESPACE@[187; 188) " " 150 WHITESPACE@187..188 " "
151 TUPLE_STRUCT_PAT@[188; 201) 151 TUPLE_STRUCT_PAT@188..201
152 PATH@[188; 193) 152 PATH@188..193
153 PATH_SEGMENT@[188; 193) 153 PATH_SEGMENT@188..193
154 NAME_REF@[188; 193) 154 NAME_REF@188..193
155 IDENT@[188; 193) "Tuple" 155 IDENT@188..193 "Tuple"
156 L_PAREN@[193; 194) "(" 156 L_PAREN@193..194 "("
157 DOT_DOT_PAT@[194; 196) 157 DOT_DOT_PAT@194..196
158 DOT2@[194; 196) ".." 158 DOT2@194..196 ".."
159 COMMA@[196; 197) "," 159 COMMA@196..197 ","
160 WHITESPACE@[197; 198) " " 160 WHITESPACE@197..198 " "
161 DOT_DOT_PAT@[198; 200) 161 DOT_DOT_PAT@198..200
162 DOT2@[198; 200) ".." 162 DOT2@198..200 ".."
163 R_PAREN@[200; 201) ")" 163 R_PAREN@200..201 ")"
164 WHITESPACE@[201; 202) " " 164 WHITESPACE@201..202 " "
165 EQ@[202; 203) "=" 165 EQ@202..203 "="
166 WHITESPACE@[203; 204) " " 166 WHITESPACE@203..204 " "
167 TUPLE_EXPR@[204; 206) 167 TUPLE_EXPR@204..206
168 L_PAREN@[204; 205) "(" 168 L_PAREN@204..205 "("
169 R_PAREN@[205; 206) ")" 169 R_PAREN@205..206 ")"
170 SEMICOLON@[206; 207) ";" 170 SEMICOLON@206..207 ";"
171 WHITESPACE@[207; 212) "\n " 171 WHITESPACE@207..212 "\n "
172 LET_STMT@[212; 233) 172 LET_STMT@212..233
173 LET_KW@[212; 215) "let" 173 LET_KW@212..215 "let"
174 WHITESPACE@[215; 216) " " 174 WHITESPACE@215..216 " "
175 TUPLE_PAT@[216; 227) 175 TUPLE_PAT@216..227
176 L_PAREN@[216; 217) "(" 176 L_PAREN@216..217 "("
177 DOT_DOT_PAT@[217; 219) 177 DOT_DOT_PAT@217..219
178 DOT2@[217; 219) ".." 178 DOT2@217..219 ".."
179 COMMA@[219; 220) "," 179 COMMA@219..220 ","
180 WHITESPACE@[220; 221) " " 180 WHITESPACE@220..221 " "
181 BIND_PAT@[221; 222) 181 BIND_PAT@221..222
182 NAME@[221; 222) 182 NAME@221..222
183 IDENT@[221; 222) "a" 183 IDENT@221..222 "a"
184 COMMA@[222; 223) "," 184 COMMA@222..223 ","
185 WHITESPACE@[223; 224) " " 185 WHITESPACE@223..224 " "
186 DOT_DOT_PAT@[224; 226) 186 DOT_DOT_PAT@224..226
187 DOT2@[224; 226) ".." 187 DOT2@224..226 ".."
188 R_PAREN@[226; 227) ")" 188 R_PAREN@226..227 ")"
189 WHITESPACE@[227; 228) " " 189 WHITESPACE@227..228 " "
190 EQ@[228; 229) "=" 190 EQ@228..229 "="
191 WHITESPACE@[229; 230) " " 191 WHITESPACE@229..230 " "
192 TUPLE_EXPR@[230; 232) 192 TUPLE_EXPR@230..232
193 L_PAREN@[230; 231) "(" 193 L_PAREN@230..231 "("
194 R_PAREN@[231; 232) ")" 194 R_PAREN@231..232 ")"
195 SEMICOLON@[232; 233) ";" 195 SEMICOLON@232..233 ";"
196 WHITESPACE@[233; 238) "\n " 196 WHITESPACE@233..238 "\n "
197 LET_STMT@[238; 264) 197 LET_STMT@238..264
198 LET_KW@[238; 241) "let" 198 LET_KW@238..241 "let"
199 WHITESPACE@[241; 242) " " 199 WHITESPACE@241..242 " "
200 TUPLE_STRUCT_PAT@[242; 258) 200 TUPLE_STRUCT_PAT@242..258
201 PATH@[242; 247) 201 PATH@242..247
202 PATH_SEGMENT@[242; 247) 202 PATH_SEGMENT@242..247
203 NAME_REF@[242; 247) 203 NAME_REF@242..247
204 IDENT@[242; 247) "Tuple" 204 IDENT@242..247 "Tuple"
205 L_PAREN@[247; 248) "(" 205 L_PAREN@247..248 "("
206 DOT_DOT_PAT@[248; 250) 206 DOT_DOT_PAT@248..250
207 DOT2@[248; 250) ".." 207 DOT2@248..250 ".."
208 COMMA@[250; 251) "," 208 COMMA@250..251 ","
209 WHITESPACE@[251; 252) " " 209 WHITESPACE@251..252 " "
210 BIND_PAT@[252; 253) 210 BIND_PAT@252..253
211 NAME@[252; 253) 211 NAME@252..253
212 IDENT@[252; 253) "a" 212 IDENT@252..253 "a"
213 COMMA@[253; 254) "," 213 COMMA@253..254 ","
214 WHITESPACE@[254; 255) " " 214 WHITESPACE@254..255 " "
215 DOT_DOT_PAT@[255; 257) 215 DOT_DOT_PAT@255..257
216 DOT2@[255; 257) ".." 216 DOT2@255..257 ".."
217 R_PAREN@[257; 258) ")" 217 R_PAREN@257..258 ")"
218 WHITESPACE@[258; 259) " " 218 WHITESPACE@258..259 " "
219 EQ@[259; 260) "=" 219 EQ@259..260 "="
220 WHITESPACE@[260; 261) " " 220 WHITESPACE@260..261 " "
221 TUPLE_EXPR@[261; 263) 221 TUPLE_EXPR@261..263
222 L_PAREN@[261; 262) "(" 222 L_PAREN@261..262 "("
223 R_PAREN@[262; 263) ")" 223 R_PAREN@262..263 ")"
224 SEMICOLON@[263; 264) ";" 224 SEMICOLON@263..264 ";"
225 WHITESPACE@[264; 269) "\n " 225 WHITESPACE@264..269 "\n "
226 COMMENT@[269; 271) "//" 226 COMMENT@269..271 "//"
227 WHITESPACE@[271; 276) "\n " 227 WHITESPACE@271..276 "\n "
228 COMMENT@[276; 285) "// Slices" 228 COMMENT@276..285 "// Slices"
229 WHITESPACE@[285; 290) "\n " 229 WHITESPACE@285..290 "\n "
230 COMMENT@[290; 292) "//" 230 COMMENT@290..292 "//"
231 WHITESPACE@[292; 297) "\n " 231 WHITESPACE@292..297 "\n "
232 LET_STMT@[297; 311) 232 LET_STMT@297..311
233 LET_KW@[297; 300) "let" 233 LET_KW@297..300 "let"
234 WHITESPACE@[300; 301) " " 234 WHITESPACE@300..301 " "
235 SLICE_PAT@[301; 305) 235 SLICE_PAT@301..305
236 L_BRACK@[301; 302) "[" 236 L_BRACK@301..302 "["
237 DOT_DOT_PAT@[302; 304) 237 DOT_DOT_PAT@302..304
238 DOT2@[302; 304) ".." 238 DOT2@302..304 ".."
239 R_BRACK@[304; 305) "]" 239 R_BRACK@304..305 "]"
240 WHITESPACE@[305; 306) " " 240 WHITESPACE@305..306 " "
241 EQ@[306; 307) "=" 241 EQ@306..307 "="
242 WHITESPACE@[307; 308) " " 242 WHITESPACE@307..308 " "
243 TUPLE_EXPR@[308; 310) 243 TUPLE_EXPR@308..310
244 L_PAREN@[308; 309) "(" 244 L_PAREN@308..309 "("
245 R_PAREN@[309; 310) ")" 245 R_PAREN@309..310 ")"
246 SEMICOLON@[310; 311) ";" 246 SEMICOLON@310..311 ";"
247 WHITESPACE@[311; 316) "\n " 247 WHITESPACE@311..316 "\n "
248 LET_STMT@[316; 336) 248 LET_STMT@316..336
249 LET_KW@[316; 319) "let" 249 LET_KW@316..319 "let"
250 WHITESPACE@[319; 320) " " 250 WHITESPACE@319..320 " "
251 SLICE_PAT@[320; 330) 251 SLICE_PAT@320..330
252 L_BRACK@[320; 321) "[" 252 L_BRACK@320..321 "["
253 BIND_PAT@[321; 325) 253 BIND_PAT@321..325
254 NAME@[321; 325) 254 NAME@321..325
255 IDENT@[321; 325) "head" 255 IDENT@321..325 "head"
256 COMMA@[325; 326) "," 256 COMMA@325..326 ","
257 WHITESPACE@[326; 327) " " 257 WHITESPACE@326..327 " "
258 DOT_DOT_PAT@[327; 329) 258 DOT_DOT_PAT@327..329
259 DOT2@[327; 329) ".." 259 DOT2@327..329 ".."
260 R_BRACK@[329; 330) "]" 260 R_BRACK@329..330 "]"
261 WHITESPACE@[330; 331) " " 261 WHITESPACE@330..331 " "
262 EQ@[331; 332) "=" 262 EQ@331..332 "="
263 WHITESPACE@[332; 333) " " 263 WHITESPACE@332..333 " "
264 TUPLE_EXPR@[333; 335) 264 TUPLE_EXPR@333..335
265 L_PAREN@[333; 334) "(" 265 L_PAREN@333..334 "("
266 R_PAREN@[334; 335) ")" 266 R_PAREN@334..335 ")"
267 SEMICOLON@[335; 336) ";" 267 SEMICOLON@335..336 ";"
268 WHITESPACE@[336; 341) "\n " 268 WHITESPACE@336..341 "\n "
269 LET_STMT@[341; 368) 269 LET_STMT@341..368
270 LET_KW@[341; 344) "let" 270 LET_KW@341..344 "let"
271 WHITESPACE@[344; 345) " " 271 WHITESPACE@344..345 " "
272 SLICE_PAT@[345; 362) 272 SLICE_PAT@345..362
273 L_BRACK@[345; 346) "[" 273 L_BRACK@345..346 "["
274 BIND_PAT@[346; 350) 274 BIND_PAT@346..350
275 NAME@[346; 350) 275 NAME@346..350
276 IDENT@[346; 350) "head" 276 IDENT@346..350 "head"
277 COMMA@[350; 351) "," 277 COMMA@350..351 ","
278 WHITESPACE@[351; 352) " " 278 WHITESPACE@351..352 " "
279 BIND_PAT@[352; 361) 279 BIND_PAT@352..361
280 NAME@[352; 356) 280 NAME@352..356
281 IDENT@[352; 356) "tail" 281 IDENT@352..356 "tail"
282 WHITESPACE@[356; 357) " " 282 WHITESPACE@356..357 " "
283 AT@[357; 358) "@" 283 AT@357..358 "@"
284 WHITESPACE@[358; 359) " " 284 WHITESPACE@358..359 " "
285 DOT_DOT_PAT@[359; 361) 285 DOT_DOT_PAT@359..361
286 DOT2@[359; 361) ".." 286 DOT2@359..361 ".."
287 R_BRACK@[361; 362) "]" 287 R_BRACK@361..362 "]"
288 WHITESPACE@[362; 363) " " 288 WHITESPACE@362..363 " "
289 EQ@[363; 364) "=" 289 EQ@363..364 "="
290 WHITESPACE@[364; 365) " " 290 WHITESPACE@364..365 " "
291 TUPLE_EXPR@[365; 367) 291 TUPLE_EXPR@365..367
292 L_PAREN@[365; 366) "(" 292 L_PAREN@365..366 "("
293 R_PAREN@[366; 367) ")" 293 R_PAREN@366..367 ")"
294 SEMICOLON@[367; 368) ";" 294 SEMICOLON@367..368 ";"
295 WHITESPACE@[368; 373) "\n " 295 WHITESPACE@368..373 "\n "
296 LET_STMT@[373; 399) 296 LET_STMT@373..399
297 LET_KW@[373; 376) "let" 297 LET_KW@373..376 "let"
298 WHITESPACE@[376; 377) " " 298 WHITESPACE@376..377 " "
299 SLICE_PAT@[377; 393) 299 SLICE_PAT@377..393
300 L_BRACK@[377; 378) "[" 300 L_BRACK@377..378 "["
301 BIND_PAT@[378; 382) 301 BIND_PAT@378..382
302 NAME@[378; 382) 302 NAME@378..382
303 IDENT@[378; 382) "head" 303 IDENT@378..382 "head"
304 COMMA@[382; 383) "," 304 COMMA@382..383 ","
305 WHITESPACE@[383; 384) " " 305 WHITESPACE@383..384 " "
306 DOT_DOT_PAT@[384; 386) 306 DOT_DOT_PAT@384..386
307 DOT2@[384; 386) ".." 307 DOT2@384..386 ".."
308 COMMA@[386; 387) "," 308 COMMA@386..387 ","
309 WHITESPACE@[387; 388) " " 309 WHITESPACE@387..388 " "
310 BIND_PAT@[388; 392) 310 BIND_PAT@388..392
311 NAME@[388; 392) 311 NAME@388..392
312 IDENT@[388; 392) "cons" 312 IDENT@388..392 "cons"
313 R_BRACK@[392; 393) "]" 313 R_BRACK@392..393 "]"
314 WHITESPACE@[393; 394) " " 314 WHITESPACE@393..394 " "
315 EQ@[394; 395) "=" 315 EQ@394..395 "="
316 WHITESPACE@[395; 396) " " 316 WHITESPACE@395..396 " "
317 TUPLE_EXPR@[396; 398) 317 TUPLE_EXPR@396..398
318 L_PAREN@[396; 397) "(" 318 L_PAREN@396..397 "("
319 R_PAREN@[397; 398) ")" 319 R_PAREN@397..398 ")"
320 SEMICOLON@[398; 399) ";" 320 SEMICOLON@398..399 ";"
321 WHITESPACE@[399; 404) "\n " 321 WHITESPACE@399..404 "\n "
322 LET_STMT@[404; 436) 322 LET_STMT@404..436
323 LET_KW@[404; 407) "let" 323 LET_KW@404..407 "let"
324 WHITESPACE@[407; 408) " " 324 WHITESPACE@407..408 " "
325 SLICE_PAT@[408; 430) 325 SLICE_PAT@408..430
326 L_BRACK@[408; 409) "[" 326 L_BRACK@408..409 "["
327 BIND_PAT@[409; 413) 327 BIND_PAT@409..413
328 NAME@[409; 413) 328 NAME@409..413
329 IDENT@[409; 413) "head" 329 IDENT@409..413 "head"
330 COMMA@[413; 414) "," 330 COMMA@413..414 ","
331 WHITESPACE@[414; 415) " " 331 WHITESPACE@414..415 " "
332 BIND_PAT@[415; 423) 332 BIND_PAT@415..423
333 NAME@[415; 418) 333 NAME@415..418
334 IDENT@[415; 418) "mid" 334 IDENT@415..418 "mid"
335 WHITESPACE@[418; 419) " " 335 WHITESPACE@418..419 " "
336 AT@[419; 420) "@" 336 AT@419..420 "@"
337 WHITESPACE@[420; 421) " " 337 WHITESPACE@420..421 " "
338 DOT_DOT_PAT@[421; 423) 338 DOT_DOT_PAT@421..423
339 DOT2@[421; 423) ".." 339 DOT2@421..423 ".."
340 COMMA@[423; 424) "," 340 COMMA@423..424 ","
341 WHITESPACE@[424; 425) " " 341 WHITESPACE@424..425 " "
342 BIND_PAT@[425; 429) 342 BIND_PAT@425..429
343 NAME@[425; 429) 343 NAME@425..429
344 IDENT@[425; 429) "cons" 344 IDENT@425..429 "cons"
345 R_BRACK@[429; 430) "]" 345 R_BRACK@429..430 "]"
346 WHITESPACE@[430; 431) " " 346 WHITESPACE@430..431 " "
347 EQ@[431; 432) "=" 347 EQ@431..432 "="
348 WHITESPACE@[432; 433) " " 348 WHITESPACE@432..433 " "
349 TUPLE_EXPR@[433; 435) 349 TUPLE_EXPR@433..435
350 L_PAREN@[433; 434) "(" 350 L_PAREN@433..434 "("
351 R_PAREN@[434; 435) ")" 351 R_PAREN@434..435 ")"
352 SEMICOLON@[435; 436) ";" 352 SEMICOLON@435..436 ";"
353 WHITESPACE@[436; 441) "\n " 353 WHITESPACE@436..441 "\n "
354 LET_STMT@[441; 471) 354 LET_STMT@441..471
355 LET_KW@[441; 444) "let" 355 LET_KW@441..444 "let"
356 WHITESPACE@[444; 445) " " 356 WHITESPACE@444..445 " "
357 SLICE_PAT@[445; 465) 357 SLICE_PAT@445..465
358 L_BRACK@[445; 446) "[" 358 L_BRACK@445..446 "["
359 BIND_PAT@[446; 450) 359 BIND_PAT@446..450
360 NAME@[446; 450) 360 NAME@446..450
361 IDENT@[446; 450) "head" 361 IDENT@446..450 "head"
362 COMMA@[450; 451) "," 362 COMMA@450..451 ","
363 WHITESPACE@[451; 452) " " 363 WHITESPACE@451..452 " "
364 DOT_DOT_PAT@[452; 454) 364 DOT_DOT_PAT@452..454
365 DOT2@[452; 454) ".." 365 DOT2@452..454 ".."
366 COMMA@[454; 455) "," 366 COMMA@454..455 ","
367 WHITESPACE@[455; 456) " " 367 WHITESPACE@455..456 " "
368 DOT_DOT_PAT@[456; 458) 368 DOT_DOT_PAT@456..458
369 DOT2@[456; 458) ".." 369 DOT2@456..458 ".."
370 COMMA@[458; 459) "," 370 COMMA@458..459 ","
371 WHITESPACE@[459; 460) " " 371 WHITESPACE@459..460 " "
372 BIND_PAT@[460; 464) 372 BIND_PAT@460..464
373 NAME@[460; 464) 373 NAME@460..464
374 IDENT@[460; 464) "cons" 374 IDENT@460..464 "cons"
375 R_BRACK@[464; 465) "]" 375 R_BRACK@464..465 "]"
376 WHITESPACE@[465; 466) " " 376 WHITESPACE@465..466 " "
377 EQ@[466; 467) "=" 377 EQ@466..467 "="
378 WHITESPACE@[467; 468) " " 378 WHITESPACE@467..468 " "
379 TUPLE_EXPR@[468; 470) 379 TUPLE_EXPR@468..470
380 L_PAREN@[468; 469) "(" 380 L_PAREN@468..469 "("
381 R_PAREN@[469; 470) ")" 381 R_PAREN@469..470 ")"
382 SEMICOLON@[470; 471) ";" 382 SEMICOLON@470..471 ";"
383 WHITESPACE@[471; 476) "\n " 383 WHITESPACE@471..476 "\n "
384 LET_STMT@[476; 512) 384 LET_STMT@476..512
385 LET_KW@[476; 479) "let" 385 LET_KW@476..479 "let"
386 WHITESPACE@[479; 480) " " 386 WHITESPACE@479..480 " "
387 SLICE_PAT@[480; 506) 387 SLICE_PAT@480..506
388 L_BRACK@[480; 481) "[" 388 L_BRACK@480..481 "["
389 BIND_PAT@[481; 485) 389 BIND_PAT@481..485
390 NAME@[481; 485) 390 NAME@481..485
391 IDENT@[481; 485) "head" 391 IDENT@481..485 "head"
392 COMMA@[485; 486) "," 392 COMMA@485..486 ","
393 WHITESPACE@[486; 487) " " 393 WHITESPACE@486..487 " "
394 DOT_DOT_PAT@[487; 489) 394 DOT_DOT_PAT@487..489
395 DOT2@[487; 489) ".." 395 DOT2@487..489 ".."
396 COMMA@[489; 490) "," 396 COMMA@489..490 ","
397 WHITESPACE@[490; 491) " " 397 WHITESPACE@490..491 " "
398 BIND_PAT@[491; 494) 398 BIND_PAT@491..494
399 NAME@[491; 494) 399 NAME@491..494
400 IDENT@[491; 494) "mid" 400 IDENT@491..494 "mid"
401 COMMA@[494; 495) "," 401 COMMA@494..495 ","
402 WHITESPACE@[495; 496) " " 402 WHITESPACE@495..496 " "
403 BIND_PAT@[496; 505) 403 BIND_PAT@496..505
404 NAME@[496; 500) 404 NAME@496..500
405 IDENT@[496; 500) "tail" 405 IDENT@496..500 "tail"
406 WHITESPACE@[500; 501) " " 406 WHITESPACE@500..501 " "
407 AT@[501; 502) "@" 407 AT@501..502 "@"
408 WHITESPACE@[502; 503) " " 408 WHITESPACE@502..503 " "
409 DOT_DOT_PAT@[503; 505) 409 DOT_DOT_PAT@503..505
410 DOT2@[503; 505) ".." 410 DOT2@503..505 ".."
411 R_BRACK@[505; 506) "]" 411 R_BRACK@505..506 "]"
412 WHITESPACE@[506; 507) " " 412 WHITESPACE@506..507 " "
413 EQ@[507; 508) "=" 413 EQ@507..508 "="
414 WHITESPACE@[508; 509) " " 414 WHITESPACE@508..509 " "
415 TUPLE_EXPR@[509; 511) 415 TUPLE_EXPR@509..511
416 L_PAREN@[509; 510) "(" 416 L_PAREN@509..510 "("
417 R_PAREN@[510; 511) ")" 417 R_PAREN@510..511 ")"
418 SEMICOLON@[511; 512) ";" 418 SEMICOLON@511..512 ";"
419 WHITESPACE@[512; 517) "\n " 419 WHITESPACE@512..517 "\n "
420 LET_STMT@[517; 552) 420 LET_STMT@517..552
421 LET_KW@[517; 520) "let" 421 LET_KW@517..520 "let"
422 WHITESPACE@[520; 521) " " 422 WHITESPACE@520..521 " "
423 SLICE_PAT@[521; 546) 423 SLICE_PAT@521..546
424 L_BRACK@[521; 522) "[" 424 L_BRACK@521..522 "["
425 BIND_PAT@[522; 526) 425 BIND_PAT@522..526
426 NAME@[522; 526) 426 NAME@522..526
427 IDENT@[522; 526) "head" 427 IDENT@522..526 "head"
428 COMMA@[526; 527) "," 428 COMMA@526..527 ","
429 WHITESPACE@[527; 528) " " 429 WHITESPACE@527..528 " "
430 DOT_DOT_PAT@[528; 530) 430 DOT_DOT_PAT@528..530
431 DOT2@[528; 530) ".." 431 DOT2@528..530 ".."
432 COMMA@[530; 531) "," 432 COMMA@530..531 ","
433 WHITESPACE@[531; 532) " " 433 WHITESPACE@531..532 " "
434 BIND_PAT@[532; 535) 434 BIND_PAT@532..535
435 NAME@[532; 535) 435 NAME@532..535
436 IDENT@[532; 535) "mid" 436 IDENT@532..535 "mid"
437 COMMA@[535; 536) "," 437 COMMA@535..536 ","
438 WHITESPACE@[536; 537) " " 438 WHITESPACE@536..537 " "
439 DOT_DOT_PAT@[537; 539) 439 DOT_DOT_PAT@537..539
440 DOT2@[537; 539) ".." 440 DOT2@537..539 ".."
441 COMMA@[539; 540) "," 441 COMMA@539..540 ","
442 WHITESPACE@[540; 541) " " 442 WHITESPACE@540..541 " "
443 BIND_PAT@[541; 545) 443 BIND_PAT@541..545
444 NAME@[541; 545) 444 NAME@541..545
445 IDENT@[541; 545) "cons" 445 IDENT@541..545 "cons"
446 R_BRACK@[545; 546) "]" 446 R_BRACK@545..546 "]"
447 WHITESPACE@[546; 547) " " 447 WHITESPACE@546..547 " "
448 EQ@[547; 548) "=" 448 EQ@547..548 "="
449 WHITESPACE@[548; 549) " " 449 WHITESPACE@548..549 " "
450 TUPLE_EXPR@[549; 551) 450 TUPLE_EXPR@549..551
451 L_PAREN@[549; 550) "(" 451 L_PAREN@549..550 "("
452 R_PAREN@[550; 551) ")" 452 R_PAREN@550..551 ")"
453 SEMICOLON@[551; 552) ";" 453 SEMICOLON@551..552 ";"
454 WHITESPACE@[552; 553) "\n" 454 WHITESPACE@552..553 "\n"
455 R_CURLY@[553; 554) "}" 455 R_CURLY@553..554 "}"
456 WHITESPACE@[554; 555) "\n" 456 WHITESPACE@554..555 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rast
index cac2ffdcf..10434b637 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rast
@@ -1,76 +1,76 @@
1SOURCE_FILE@[0; 63) 1SOURCE_FILE@0..63
2 FN_DEF@[0; 62) 2 FN_DEF@0..62
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 62) 11 BLOCK_EXPR@9..62
12 BLOCK@[9; 62) 12 BLOCK@9..62
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 35) 15 LET_STMT@15..35
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 RECORD_PAT@[19; 29) 18 RECORD_PAT@19..29
19 PATH@[19; 20) 19 PATH@19..20
20 PATH_SEGMENT@[19; 20) 20 PATH_SEGMENT@19..20
21 NAME_REF@[19; 20) 21 NAME_REF@19..20
22 IDENT@[19; 20) "S" 22 IDENT@19..20 "S"
23 WHITESPACE@[20; 21) " " 23 WHITESPACE@20..21 " "
24 RECORD_FIELD_PAT_LIST@[21; 29) 24 RECORD_FIELD_PAT_LIST@21..29
25 L_CURLY@[21; 22) "{" 25 L_CURLY@21..22 "{"
26 WHITESPACE@[22; 23) " " 26 WHITESPACE@22..23 " "
27 RECORD_FIELD_PAT@[23; 27) 27 RECORD_FIELD_PAT@23..27
28 NAME_REF@[23; 24) 28 NAME_REF@23..24
29 INT_NUMBER@[23; 24) "0" 29 INT_NUMBER@23..24 "0"
30 COLON@[24; 25) ":" 30 COLON@24..25 ":"
31 WHITESPACE@[25; 26) " " 31 WHITESPACE@25..26 " "
32 LITERAL_PAT@[26; 27) 32 LITERAL_PAT@26..27
33 LITERAL@[26; 27) 33 LITERAL@26..27
34 INT_NUMBER@[26; 27) "1" 34 INT_NUMBER@26..27 "1"
35 WHITESPACE@[27; 28) " " 35 WHITESPACE@27..28 " "
36 R_CURLY@[28; 29) "}" 36 R_CURLY@28..29 "}"
37 WHITESPACE@[29; 30) " " 37 WHITESPACE@29..30 " "
38 EQ@[30; 31) "=" 38 EQ@30..31 "="
39 WHITESPACE@[31; 32) " " 39 WHITESPACE@31..32 " "
40 TUPLE_EXPR@[32; 34) 40 TUPLE_EXPR@32..34
41 L_PAREN@[32; 33) "(" 41 L_PAREN@32..33 "("
42 R_PAREN@[33; 34) ")" 42 R_PAREN@33..34 ")"
43 SEMICOLON@[34; 35) ";" 43 SEMICOLON@34..35 ";"
44 WHITESPACE@[35; 40) "\n " 44 WHITESPACE@35..40 "\n "
45 LET_STMT@[40; 60) 45 LET_STMT@40..60
46 LET_KW@[40; 43) "let" 46 LET_KW@40..43 "let"
47 WHITESPACE@[43; 44) " " 47 WHITESPACE@43..44 " "
48 RECORD_PAT@[44; 54) 48 RECORD_PAT@44..54
49 PATH@[44; 45) 49 PATH@44..45
50 PATH_SEGMENT@[44; 45) 50 PATH_SEGMENT@44..45
51 NAME_REF@[44; 45) 51 NAME_REF@44..45
52 IDENT@[44; 45) "S" 52 IDENT@44..45 "S"
53 WHITESPACE@[45; 46) " " 53 WHITESPACE@45..46 " "
54 RECORD_FIELD_PAT_LIST@[46; 54) 54 RECORD_FIELD_PAT_LIST@46..54
55 L_CURLY@[46; 47) "{" 55 L_CURLY@46..47 "{"
56 WHITESPACE@[47; 48) " " 56 WHITESPACE@47..48 " "
57 RECORD_FIELD_PAT@[48; 52) 57 RECORD_FIELD_PAT@48..52
58 NAME_REF@[48; 49) 58 NAME_REF@48..49
59 IDENT@[48; 49) "x" 59 IDENT@48..49 "x"
60 COLON@[49; 50) ":" 60 COLON@49..50 ":"
61 WHITESPACE@[50; 51) " " 61 WHITESPACE@50..51 " "
62 LITERAL_PAT@[51; 52) 62 LITERAL_PAT@51..52
63 LITERAL@[51; 52) 63 LITERAL@51..52
64 INT_NUMBER@[51; 52) "1" 64 INT_NUMBER@51..52 "1"
65 WHITESPACE@[52; 53) " " 65 WHITESPACE@52..53 " "
66 R_CURLY@[53; 54) "}" 66 R_CURLY@53..54 "}"
67 WHITESPACE@[54; 55) " " 67 WHITESPACE@54..55 " "
68 EQ@[55; 56) "=" 68 EQ@55..56 "="
69 WHITESPACE@[56; 57) " " 69 WHITESPACE@56..57 " "
70 TUPLE_EXPR@[57; 59) 70 TUPLE_EXPR@57..59
71 L_PAREN@[57; 58) "(" 71 L_PAREN@57..58 "("
72 R_PAREN@[58; 59) ")" 72 R_PAREN@58..59 ")"
73 SEMICOLON@[59; 60) ";" 73 SEMICOLON@59..60 ";"
74 WHITESPACE@[60; 61) "\n" 74 WHITESPACE@60..61 "\n"
75 R_CURLY@[61; 62) "}" 75 R_CURLY@61..62 "}"
76 WHITESPACE@[62; 63) "\n" 76 WHITESPACE@62..63 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0146_as_precedence.rast b/crates/ra_syntax/test_data/parser/inline/ok/0146_as_precedence.rast
index d2f6d8fde..66ad546b9 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0146_as_precedence.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0146_as_precedence.rast
@@ -1,43 +1,43 @@
1SOURCE_FILE@[0; 43) 1SOURCE_FILE@0..43
2 FN_DEF@[0; 42) 2 FN_DEF@0..42
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 42) 11 BLOCK_EXPR@9..42
12 BLOCK@[9; 42) 12 BLOCK@9..42
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 LET_STMT@[15; 40) 15 LET_STMT@15..40
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 PLACEHOLDER_PAT@[19; 20) 18 PLACEHOLDER_PAT@19..20
19 UNDERSCORE@[19; 20) "_" 19 UNDERSCORE@19..20 "_"
20 WHITESPACE@[20; 21) " " 20 WHITESPACE@20..21 " "
21 EQ@[21; 22) "=" 21 EQ@21..22 "="
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 CAST_EXPR@[23; 39) 23 CAST_EXPR@23..39
24 REF_EXPR@[23; 25) 24 REF_EXPR@23..25
25 AMP@[23; 24) "&" 25 AMP@23..24 "&"
26 LITERAL@[24; 25) 26 LITERAL@24..25
27 INT_NUMBER@[24; 25) "1" 27 INT_NUMBER@24..25 "1"
28 WHITESPACE@[25; 26) " " 28 WHITESPACE@25..26 " "
29 AS_KW@[26; 28) "as" 29 AS_KW@26..28 "as"
30 WHITESPACE@[28; 29) " " 30 WHITESPACE@28..29 " "
31 POINTER_TYPE@[29; 39) 31 POINTER_TYPE@29..39
32 STAR@[29; 30) "*" 32 STAR@29..30 "*"
33 CONST_KW@[30; 35) "const" 33 CONST_KW@30..35 "const"
34 WHITESPACE@[35; 36) " " 34 WHITESPACE@35..36 " "
35 PATH_TYPE@[36; 39) 35 PATH_TYPE@36..39
36 PATH@[36; 39) 36 PATH@36..39
37 PATH_SEGMENT@[36; 39) 37 PATH_SEGMENT@36..39
38 NAME_REF@[36; 39) 38 NAME_REF@36..39
39 IDENT@[36; 39) "i32" 39 IDENT@36..39 "i32"
40 SEMICOLON@[39; 40) ";" 40 SEMICOLON@39..40 ";"
41 WHITESPACE@[40; 41) "\n" 41 WHITESPACE@40..41 "\n"
42 R_CURLY@[41; 42) "}" 42 R_CURLY@41..42 "}"
43 WHITESPACE@[42; 43) "\n" 43 WHITESPACE@42..43 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0147_const_param.rast b/crates/ra_syntax/test_data/parser/inline/ok/0147_const_param.rast
index 21161f7bf..4b9b8e0ab 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0147_const_param.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0147_const_param.rast
@@ -1,23 +1,23 @@
1SOURCE_FILE@[0; 24) 1SOURCE_FILE@0..24
2 STRUCT_DEF@[0; 23) 2 STRUCT_DEF@0..23
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 TYPE_PARAM_LIST@[8; 22) 7 TYPE_PARAM_LIST@8..22
8 L_ANGLE@[8; 9) "<" 8 L_ANGLE@8..9 "<"
9 CONST_PARAM@[9; 21) 9 CONST_PARAM@9..21
10 CONST_KW@[9; 14) "const" 10 CONST_KW@9..14 "const"
11 WHITESPACE@[14; 15) " " 11 WHITESPACE@14..15 " "
12 NAME@[15; 16) 12 NAME@15..16
13 IDENT@[15; 16) "N" 13 IDENT@15..16 "N"
14 COLON@[16; 17) ":" 14 COLON@16..17 ":"
15 WHITESPACE@[17; 18) " " 15 WHITESPACE@17..18 " "
16 PATH_TYPE@[18; 21) 16 PATH_TYPE@18..21
17 PATH@[18; 21) 17 PATH@18..21
18 PATH_SEGMENT@[18; 21) 18 PATH_SEGMENT@18..21
19 NAME_REF@[18; 21) 19 NAME_REF@18..21
20 IDENT@[18; 21) "u32" 20 IDENT@18..21 "u32"
21 R_ANGLE@[21; 22) ">" 21 R_ANGLE@21..22 ">"
22 SEMICOLON@[22; 23) ";" 22 SEMICOLON@22..23 ";"
23 WHITESPACE@[23; 24) "\n" 23 WHITESPACE@23..24 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0147_macro_def.rast b/crates/ra_syntax/test_data/parser/inline/ok/0147_macro_def.rast
index 3556099bd..6655aeab1 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0147_macro_def.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0147_macro_def.rast
@@ -1,45 +1,45 @@
1SOURCE_FILE@[0; 50) 1SOURCE_FILE@0..50
2 MACRO_DEF@[0; 28) 2 MACRO_DEF@0..28
3 MACRO_KW@[0; 5) "macro" 3 MACRO_KW@0..5 "macro"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 7) 5 NAME@6..7
6 IDENT@[6; 7) "m" 6 IDENT@6..7 "m"
7 WHITESPACE@[7; 8) " " 7 WHITESPACE@7..8 " "
8 TOKEN_TREE@[8; 28) 8 TOKEN_TREE@8..28
9 L_CURLY@[8; 9) "{" 9 L_CURLY@8..9 "{"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 TOKEN_TREE@[10; 20) 11 TOKEN_TREE@10..20
12 L_PAREN@[10; 11) "(" 12 L_PAREN@10..11 "("
13 DOLLAR@[11; 12) "$" 13 DOLLAR@11..12 "$"
14 IDENT@[12; 13) "i" 14 IDENT@12..13 "i"
15 COLON@[13; 14) ":" 15 COLON@13..14 ":"
16 IDENT@[14; 19) "ident" 16 IDENT@14..19 "ident"
17 R_PAREN@[19; 20) ")" 17 R_PAREN@19..20 ")"
18 WHITESPACE@[20; 21) " " 18 WHITESPACE@20..21 " "
19 EQ@[21; 22) "=" 19 EQ@21..22 "="
20 R_ANGLE@[22; 23) ">" 20 R_ANGLE@22..23 ">"
21 WHITESPACE@[23; 24) " " 21 WHITESPACE@23..24 " "
22 TOKEN_TREE@[24; 26) 22 TOKEN_TREE@24..26
23 L_CURLY@[24; 25) "{" 23 L_CURLY@24..25 "{"
24 R_CURLY@[25; 26) "}" 24 R_CURLY@25..26 "}"
25 WHITESPACE@[26; 27) " " 25 WHITESPACE@26..27 " "
26 R_CURLY@[27; 28) "}" 26 R_CURLY@27..28 "}"
27 WHITESPACE@[28; 29) "\n" 27 WHITESPACE@28..29 "\n"
28 MACRO_DEF@[29; 49) 28 MACRO_DEF@29..49
29 MACRO_KW@[29; 34) "macro" 29 MACRO_KW@29..34 "macro"
30 WHITESPACE@[34; 35) " " 30 WHITESPACE@34..35 " "
31 NAME@[35; 36) 31 NAME@35..36
32 IDENT@[35; 36) "m" 32 IDENT@35..36 "m"
33 TOKEN_TREE@[36; 49) 33 TOKEN_TREE@36..49
34 TOKEN_TREE@[36; 46) 34 TOKEN_TREE@36..46
35 L_PAREN@[36; 37) "(" 35 L_PAREN@36..37 "("
36 DOLLAR@[37; 38) "$" 36 DOLLAR@37..38 "$"
37 IDENT@[38; 39) "i" 37 IDENT@38..39 "i"
38 COLON@[39; 40) ":" 38 COLON@39..40 ":"
39 IDENT@[40; 45) "ident" 39 IDENT@40..45 "ident"
40 R_PAREN@[45; 46) ")" 40 R_PAREN@45..46 ")"
41 WHITESPACE@[46; 47) " " 41 WHITESPACE@46..47 " "
42 TOKEN_TREE@[47; 49) 42 TOKEN_TREE@47..49
43 L_CURLY@[47; 48) "{" 43 L_CURLY@47..48 "{"
44 R_CURLY@[48; 49) "}" 44 R_CURLY@48..49 "}"
45 WHITESPACE@[49; 50) "\n" 45 WHITESPACE@49..50 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0148_pub_macro_def.rast b/crates/ra_syntax/test_data/parser/inline/ok/0148_pub_macro_def.rast
index cfd79d9c2..1c527f60b 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0148_pub_macro_def.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0148_pub_macro_def.rast
@@ -1,21 +1,21 @@
1SOURCE_FILE@[0; 24) 1SOURCE_FILE@0..24
2 MACRO_DEF@[0; 23) 2 MACRO_DEF@0..23
3 VISIBILITY@[0; 3) 3 VISIBILITY@0..3
4 PUB_KW@[0; 3) "pub" 4 PUB_KW@0..3 "pub"
5 WHITESPACE@[3; 4) " " 5 WHITESPACE@3..4 " "
6 MACRO_KW@[4; 9) "macro" 6 MACRO_KW@4..9 "macro"
7 WHITESPACE@[9; 10) " " 7 WHITESPACE@9..10 " "
8 NAME@[10; 11) 8 NAME@10..11
9 IDENT@[10; 11) "m" 9 IDENT@10..11 "m"
10 TOKEN_TREE@[11; 23) 10 TOKEN_TREE@11..23
11 TOKEN_TREE@[11; 20) 11 TOKEN_TREE@11..20
12 L_PAREN@[11; 12) "(" 12 L_PAREN@11..12 "("
13 DOLLAR@[12; 13) "$" 13 DOLLAR@12..13 "$"
14 COLON@[13; 14) ":" 14 COLON@13..14 ":"
15 IDENT@[14; 19) "ident" 15 IDENT@14..19 "ident"
16 R_PAREN@[19; 20) ")" 16 R_PAREN@19..20 ")"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 TOKEN_TREE@[21; 23) 18 TOKEN_TREE@21..23
19 L_CURLY@[21; 22) "{" 19 L_CURLY@21..22 "{"
20 R_CURLY@[22; 23) "}" 20 R_CURLY@22..23 "}"
21 WHITESPACE@[23; 24) "\n" 21 WHITESPACE@23..24 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0150_array_attrs.rast b/crates/ra_syntax/test_data/parser/inline/ok/0150_array_attrs.rast
index 1f297e479..3c00a2647 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0150_array_attrs.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0150_array_attrs.rast
@@ -1,47 +1,47 @@
1SOURCE_FILE@[0; 40) 1SOURCE_FILE@0..40
2 CONST_DEF@[0; 39) 2 CONST_DEF@0..39
3 CONST_KW@[0; 5) "const" 3 CONST_KW@0..5 "const"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 7) 5 NAME@6..7
6 IDENT@[6; 7) "A" 6 IDENT@6..7 "A"
7 COLON@[7; 8) ":" 7 COLON@7..8 ":"
8 WHITESPACE@[8; 9) " " 8 WHITESPACE@8..9 " "
9 REFERENCE_TYPE@[9; 15) 9 REFERENCE_TYPE@9..15
10 AMP@[9; 10) "&" 10 AMP@9..10 "&"
11 SLICE_TYPE@[10; 15) 11 SLICE_TYPE@10..15
12 L_BRACK@[10; 11) "[" 12 L_BRACK@10..11 "["
13 PATH_TYPE@[11; 14) 13 PATH_TYPE@11..14
14 PATH@[11; 14) 14 PATH@11..14
15 PATH_SEGMENT@[11; 14) 15 PATH_SEGMENT@11..14
16 NAME_REF@[11; 14) 16 NAME_REF@11..14
17 IDENT@[11; 14) "i64" 17 IDENT@11..14 "i64"
18 R_BRACK@[14; 15) "]" 18 R_BRACK@14..15 "]"
19 WHITESPACE@[15; 16) " " 19 WHITESPACE@15..16 " "
20 EQ@[16; 17) "=" 20 EQ@16..17 "="
21 WHITESPACE@[17; 18) " " 21 WHITESPACE@17..18 " "
22 REF_EXPR@[18; 38) 22 REF_EXPR@18..38
23 AMP@[18; 19) "&" 23 AMP@18..19 "&"
24 ARRAY_EXPR@[19; 38) 24 ARRAY_EXPR@19..38
25 L_BRACK@[19; 20) "[" 25 L_BRACK@19..20 "["
26 LITERAL@[20; 21) 26 LITERAL@20..21
27 INT_NUMBER@[20; 21) "1" 27 INT_NUMBER@20..21 "1"
28 COMMA@[21; 22) "," 28 COMMA@21..22 ","
29 WHITESPACE@[22; 23) " " 29 WHITESPACE@22..23 " "
30 LITERAL@[23; 37) 30 LITERAL@23..37
31 ATTR@[23; 35) 31 ATTR@23..35
32 POUND@[23; 24) "#" 32 POUND@23..24 "#"
33 L_BRACK@[24; 25) "[" 33 L_BRACK@24..25 "["
34 PATH@[25; 28) 34 PATH@25..28
35 PATH_SEGMENT@[25; 28) 35 PATH_SEGMENT@25..28
36 NAME_REF@[25; 28) 36 NAME_REF@25..28
37 IDENT@[25; 28) "cfg" 37 IDENT@25..28 "cfg"
38 TOKEN_TREE@[28; 34) 38 TOKEN_TREE@28..34
39 L_PAREN@[28; 29) "(" 39 L_PAREN@28..29 "("
40 IDENT@[29; 33) "test" 40 IDENT@29..33 "test"
41 R_PAREN@[33; 34) ")" 41 R_PAREN@33..34 ")"
42 R_BRACK@[34; 35) "]" 42 R_BRACK@34..35 "]"
43 WHITESPACE@[35; 36) " " 43 WHITESPACE@35..36 " "
44 INT_NUMBER@[36; 37) "2" 44 INT_NUMBER@36..37 "2"
45 R_BRACK@[37; 38) "]" 45 R_BRACK@37..38 "]"
46 SEMICOLON@[38; 39) ";" 46 SEMICOLON@38..39 ";"
47 WHITESPACE@[39; 40) "\n" 47 WHITESPACE@39..40 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0150_impl_type_params.rast b/crates/ra_syntax/test_data/parser/inline/ok/0150_impl_type_params.rast
index 2d46eebb3..e70c3b710 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0150_impl_type_params.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0150_impl_type_params.rast
@@ -1,38 +1,38 @@
1SOURCE_FILE@[0; 29) 1SOURCE_FILE@0..29
2 IMPL_DEF@[0; 28) 2 IMPL_DEF@0..28
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 TYPE_PARAM_LIST@[4; 18) 4 TYPE_PARAM_LIST@4..18
5 L_ANGLE@[4; 5) "<" 5 L_ANGLE@4..5 "<"
6 CONST_PARAM@[5; 17) 6 CONST_PARAM@5..17
7 CONST_KW@[5; 10) "const" 7 CONST_KW@5..10 "const"
8 WHITESPACE@[10; 11) " " 8 WHITESPACE@10..11 " "
9 NAME@[11; 12) 9 NAME@11..12
10 IDENT@[11; 12) "N" 10 IDENT@11..12 "N"
11 COLON@[12; 13) ":" 11 COLON@12..13 ":"
12 WHITESPACE@[13; 14) " " 12 WHITESPACE@13..14 " "
13 PATH_TYPE@[14; 17) 13 PATH_TYPE@14..17
14 PATH@[14; 17) 14 PATH@14..17
15 PATH_SEGMENT@[14; 17) 15 PATH_SEGMENT@14..17
16 NAME_REF@[14; 17) 16 NAME_REF@14..17
17 IDENT@[14; 17) "u32" 17 IDENT@14..17 "u32"
18 R_ANGLE@[17; 18) ">" 18 R_ANGLE@17..18 ">"
19 WHITESPACE@[18; 19) " " 19 WHITESPACE@18..19 " "
20 PATH_TYPE@[19; 25) 20 PATH_TYPE@19..25
21 PATH@[19; 25) 21 PATH@19..25
22 PATH_SEGMENT@[19; 25) 22 PATH_SEGMENT@19..25
23 NAME_REF@[19; 22) 23 NAME_REF@19..22
24 IDENT@[19; 22) "Bar" 24 IDENT@19..22 "Bar"
25 TYPE_ARG_LIST@[22; 25) 25 TYPE_ARG_LIST@22..25
26 L_ANGLE@[22; 23) "<" 26 L_ANGLE@22..23 "<"
27 TYPE_ARG@[23; 24) 27 TYPE_ARG@23..24
28 PATH_TYPE@[23; 24) 28 PATH_TYPE@23..24
29 PATH@[23; 24) 29 PATH@23..24
30 PATH_SEGMENT@[23; 24) 30 PATH_SEGMENT@23..24
31 NAME_REF@[23; 24) 31 NAME_REF@23..24
32 IDENT@[23; 24) "N" 32 IDENT@23..24 "N"
33 R_ANGLE@[24; 25) ">" 33 R_ANGLE@24..25 ">"
34 WHITESPACE@[25; 26) " " 34 WHITESPACE@25..26 " "
35 ITEM_LIST@[26; 28) 35 ITEM_LIST@26..28
36 L_CURLY@[26; 27) "{" 36 L_CURLY@26..27 "{"
37 R_CURLY@[27; 28) "}" 37 R_CURLY@27..28 "}"
38 WHITESPACE@[28; 29) "\n" 38 WHITESPACE@28..29 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0151_trait_alias.rast b/crates/ra_syntax/test_data/parser/inline/ok/0151_trait_alias.rast
index 167c0fffa..48d73a4e7 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0151_trait_alias.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0151_trait_alias.rast
@@ -1,128 +1,128 @@
1SOURCE_FILE@[0; 83) 1SOURCE_FILE@0..83
2 TRAIT_DEF@[0; 18) 2 TRAIT_DEF@0..18
3 TRAIT_KW@[0; 5) "trait" 3 TRAIT_KW@0..5 "trait"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 7) 5 NAME@6..7
6 IDENT@[6; 7) "Z" 6 IDENT@6..7 "Z"
7 TYPE_PARAM_LIST@[7; 10) 7 TYPE_PARAM_LIST@7..10
8 L_ANGLE@[7; 8) "<" 8 L_ANGLE@7..8 "<"
9 TYPE_PARAM@[8; 9) 9 TYPE_PARAM@8..9
10 NAME@[8; 9) 10 NAME@8..9
11 IDENT@[8; 9) "U" 11 IDENT@8..9 "U"
12 R_ANGLE@[9; 10) ">" 12 R_ANGLE@9..10 ">"
13 WHITESPACE@[10; 11) " " 13 WHITESPACE@10..11 " "
14 EQ@[11; 12) "=" 14 EQ@11..12 "="
15 WHITESPACE@[12; 13) " " 15 WHITESPACE@12..13 " "
16 TYPE_BOUND_LIST@[13; 17) 16 TYPE_BOUND_LIST@13..17
17 TYPE_BOUND@[13; 17) 17 TYPE_BOUND@13..17
18 PATH_TYPE@[13; 17) 18 PATH_TYPE@13..17
19 PATH@[13; 17) 19 PATH@13..17
20 PATH_SEGMENT@[13; 17) 20 PATH_SEGMENT@13..17
21 NAME_REF@[13; 14) 21 NAME_REF@13..14
22 IDENT@[13; 14) "T" 22 IDENT@13..14 "T"
23 TYPE_ARG_LIST@[14; 17) 23 TYPE_ARG_LIST@14..17
24 L_ANGLE@[14; 15) "<" 24 L_ANGLE@14..15 "<"
25 TYPE_ARG@[15; 16) 25 TYPE_ARG@15..16
26 PATH_TYPE@[15; 16) 26 PATH_TYPE@15..16
27 PATH@[15; 16) 27 PATH@15..16
28 PATH_SEGMENT@[15; 16) 28 PATH_SEGMENT@15..16
29 NAME_REF@[15; 16) 29 NAME_REF@15..16
30 IDENT@[15; 16) "U" 30 IDENT@15..16 "U"
31 R_ANGLE@[16; 17) ">" 31 R_ANGLE@16..17 ">"
32 SEMICOLON@[17; 18) ";" 32 SEMICOLON@17..18 ";"
33 WHITESPACE@[18; 19) "\n" 33 WHITESPACE@18..19 "\n"
34 TRAIT_DEF@[19; 51) 34 TRAIT_DEF@19..51
35 TRAIT_KW@[19; 24) "trait" 35 TRAIT_KW@19..24 "trait"
36 WHITESPACE@[24; 25) " " 36 WHITESPACE@24..25 " "
37 NAME@[25; 26) 37 NAME@25..26
38 IDENT@[25; 26) "Z" 38 IDENT@25..26 "Z"
39 TYPE_PARAM_LIST@[26; 29) 39 TYPE_PARAM_LIST@26..29
40 L_ANGLE@[26; 27) "<" 40 L_ANGLE@26..27 "<"
41 TYPE_PARAM@[27; 28) 41 TYPE_PARAM@27..28
42 NAME@[27; 28) 42 NAME@27..28
43 IDENT@[27; 28) "U" 43 IDENT@27..28 "U"
44 R_ANGLE@[28; 29) ">" 44 R_ANGLE@28..29 ">"
45 WHITESPACE@[29; 30) " " 45 WHITESPACE@29..30 " "
46 EQ@[30; 31) "=" 46 EQ@30..31 "="
47 WHITESPACE@[31; 32) " " 47 WHITESPACE@31..32 " "
48 TYPE_BOUND_LIST@[32; 36) 48 TYPE_BOUND_LIST@32..36
49 TYPE_BOUND@[32; 36) 49 TYPE_BOUND@32..36
50 PATH_TYPE@[32; 36) 50 PATH_TYPE@32..36
51 PATH@[32; 36) 51 PATH@32..36
52 PATH_SEGMENT@[32; 36) 52 PATH_SEGMENT@32..36
53 NAME_REF@[32; 33) 53 NAME_REF@32..33
54 IDENT@[32; 33) "T" 54 IDENT@32..33 "T"
55 TYPE_ARG_LIST@[33; 36) 55 TYPE_ARG_LIST@33..36
56 L_ANGLE@[33; 34) "<" 56 L_ANGLE@33..34 "<"
57 TYPE_ARG@[34; 35) 57 TYPE_ARG@34..35
58 PATH_TYPE@[34; 35) 58 PATH_TYPE@34..35
59 PATH@[34; 35) 59 PATH@34..35
60 PATH_SEGMENT@[34; 35) 60 PATH_SEGMENT@34..35
61 NAME_REF@[34; 35) 61 NAME_REF@34..35
62 IDENT@[34; 35) "U" 62 IDENT@34..35 "U"
63 R_ANGLE@[35; 36) ">" 63 R_ANGLE@35..36 ">"
64 WHITESPACE@[36; 37) " " 64 WHITESPACE@36..37 " "
65 WHERE_CLAUSE@[37; 50) 65 WHERE_CLAUSE@37..50
66 WHERE_KW@[37; 42) "where" 66 WHERE_KW@37..42 "where"
67 WHITESPACE@[42; 43) " " 67 WHITESPACE@42..43 " "
68 WHERE_PRED@[43; 50) 68 WHERE_PRED@43..50
69 PATH_TYPE@[43; 44) 69 PATH_TYPE@43..44
70 PATH@[43; 44) 70 PATH@43..44
71 PATH_SEGMENT@[43; 44) 71 PATH_SEGMENT@43..44
72 NAME_REF@[43; 44) 72 NAME_REF@43..44
73 IDENT@[43; 44) "U" 73 IDENT@43..44 "U"
74 COLON@[44; 45) ":" 74 COLON@44..45 ":"
75 WHITESPACE@[45; 46) " " 75 WHITESPACE@45..46 " "
76 TYPE_BOUND_LIST@[46; 50) 76 TYPE_BOUND_LIST@46..50
77 TYPE_BOUND@[46; 50) 77 TYPE_BOUND@46..50
78 PATH_TYPE@[46; 50) 78 PATH_TYPE@46..50
79 PATH@[46; 50) 79 PATH@46..50
80 PATH_SEGMENT@[46; 50) 80 PATH_SEGMENT@46..50
81 NAME_REF@[46; 50) 81 NAME_REF@46..50
82 IDENT@[46; 50) "Copy" 82 IDENT@46..50 "Copy"
83 SEMICOLON@[50; 51) ";" 83 SEMICOLON@50..51 ";"
84 WHITESPACE@[51; 52) "\n" 84 WHITESPACE@51..52 "\n"
85 TRAIT_DEF@[52; 82) 85 TRAIT_DEF@52..82
86 TRAIT_KW@[52; 57) "trait" 86 TRAIT_KW@52..57 "trait"
87 WHITESPACE@[57; 58) " " 87 WHITESPACE@57..58 " "
88 NAME@[58; 59) 88 NAME@58..59
89 IDENT@[58; 59) "Z" 89 IDENT@58..59 "Z"
90 TYPE_PARAM_LIST@[59; 62) 90 TYPE_PARAM_LIST@59..62
91 L_ANGLE@[59; 60) "<" 91 L_ANGLE@59..60 "<"
92 TYPE_PARAM@[60; 61) 92 TYPE_PARAM@60..61
93 NAME@[60; 61) 93 NAME@60..61
94 IDENT@[60; 61) "U" 94 IDENT@60..61 "U"
95 R_ANGLE@[61; 62) ">" 95 R_ANGLE@61..62 ">"
96 WHITESPACE@[62; 63) " " 96 WHITESPACE@62..63 " "
97 EQ@[63; 64) "=" 97 EQ@63..64 "="
98 WHITESPACE@[64; 65) " " 98 WHITESPACE@64..65 " "
99 TYPE_BOUND_LIST@[65; 65) 99 TYPE_BOUND_LIST@65..65
100 WHERE_CLAUSE@[65; 81) 100 WHERE_CLAUSE@65..81
101 WHERE_KW@[65; 70) "where" 101 WHERE_KW@65..70 "where"
102 WHITESPACE@[70; 71) " " 102 WHITESPACE@70..71 " "
103 WHERE_PRED@[71; 81) 103 WHERE_PRED@71..81
104 PATH_TYPE@[71; 75) 104 PATH_TYPE@71..75
105 PATH@[71; 75) 105 PATH@71..75
106 PATH_SEGMENT@[71; 75) 106 PATH_SEGMENT@71..75
107 NAME_REF@[71; 75) 107 NAME_REF@71..75
108 IDENT@[71; 75) "Self" 108 IDENT@71..75 "Self"
109 COLON@[75; 76) ":" 109 COLON@75..76 ":"
110 WHITESPACE@[76; 77) " " 110 WHITESPACE@76..77 " "
111 TYPE_BOUND_LIST@[77; 81) 111 TYPE_BOUND_LIST@77..81
112 TYPE_BOUND@[77; 81) 112 TYPE_BOUND@77..81
113 PATH_TYPE@[77; 81) 113 PATH_TYPE@77..81
114 PATH@[77; 81) 114 PATH@77..81
115 PATH_SEGMENT@[77; 81) 115 PATH_SEGMENT@77..81
116 NAME_REF@[77; 78) 116 NAME_REF@77..78
117 IDENT@[77; 78) "T" 117 IDENT@77..78 "T"
118 TYPE_ARG_LIST@[78; 81) 118 TYPE_ARG_LIST@78..81
119 L_ANGLE@[78; 79) "<" 119 L_ANGLE@78..79 "<"
120 TYPE_ARG@[79; 80) 120 TYPE_ARG@79..80
121 PATH_TYPE@[79; 80) 121 PATH_TYPE@79..80
122 PATH@[79; 80) 122 PATH@79..80
123 PATH_SEGMENT@[79; 80) 123 PATH_SEGMENT@79..80
124 NAME_REF@[79; 80) 124 NAME_REF@79..80
125 IDENT@[79; 80) "U" 125 IDENT@79..80 "U"
126 R_ANGLE@[80; 81) ">" 126 R_ANGLE@80..81 ">"
127 SEMICOLON@[81; 82) ";" 127 SEMICOLON@81..82 ";"
128 WHITESPACE@[82; 83) "\n" 128 WHITESPACE@82..83 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0152_arg_with_attr.rast b/crates/ra_syntax/test_data/parser/inline/ok/0152_arg_with_attr.rast
index 8092d7009..c2e290a62 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0152_arg_with_attr.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0152_arg_with_attr.rast
@@ -1,37 +1,37 @@
1SOURCE_FILE@[0; 34) 1SOURCE_FILE@0..34
2 FN_DEF@[0; 33) 2 FN_DEF@0..33
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 33) 11 BLOCK_EXPR@10..33
12 BLOCK@[10; 33) 12 BLOCK@10..33
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 CALL_EXPR@[16; 31) 15 CALL_EXPR@16..31
16 PATH_EXPR@[16; 19) 16 PATH_EXPR@16..19
17 PATH@[16; 19) 17 PATH@16..19
18 PATH_SEGMENT@[16; 19) 18 PATH_SEGMENT@16..19
19 NAME_REF@[16; 19) 19 NAME_REF@16..19
20 IDENT@[16; 19) "foo" 20 IDENT@16..19 "foo"
21 ARG_LIST@[19; 31) 21 ARG_LIST@19..31
22 L_PAREN@[19; 20) "(" 22 L_PAREN@19..20 "("
23 LITERAL@[20; 30) 23 LITERAL@20..30
24 ATTR@[20; 27) 24 ATTR@20..27
25 POUND@[20; 21) "#" 25 POUND@20..21 "#"
26 L_BRACK@[21; 22) "[" 26 L_BRACK@21..22 "["
27 PATH@[22; 26) 27 PATH@22..26
28 PATH_SEGMENT@[22; 26) 28 PATH_SEGMENT@22..26
29 NAME_REF@[22; 26) 29 NAME_REF@22..26
30 IDENT@[22; 26) "attr" 30 IDENT@22..26 "attr"
31 R_BRACK@[26; 27) "]" 31 R_BRACK@26..27 "]"
32 WHITESPACE@[27; 28) " " 32 WHITESPACE@27..28 " "
33 INT_NUMBER@[28; 30) "92" 33 INT_NUMBER@28..30 "92"
34 R_PAREN@[30; 31) ")" 34 R_PAREN@30..31 ")"
35 WHITESPACE@[31; 32) "\n" 35 WHITESPACE@31..32 "\n"
36 R_CURLY@[32; 33) "}" 36 R_CURLY@32..33 "}"
37 WHITESPACE@[33; 34) "\n" 37 WHITESPACE@33..34 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0154_fn_pointer_param_ident_path.rast b/crates/ra_syntax/test_data/parser/inline/ok/0154_fn_pointer_param_ident_path.rast
index ee1bd361d..861065362 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0154_fn_pointer_param_ident_path.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0154_fn_pointer_param_ident_path.rast
@@ -1,58 +1,58 @@
1SOURCE_FILE@[0; 55) 1SOURCE_FILE@0..55
2 TYPE_ALIAS_DEF@[0; 24) 2 TYPE_ALIAS_DEF@0..24
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 8) 5 NAME@5..8
6 IDENT@[5; 8) "Foo" 6 IDENT@5..8 "Foo"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 EQ@[9; 10) "=" 8 EQ@9..10 "="
9 WHITESPACE@[10; 11) " " 9 WHITESPACE@10..11 " "
10 FN_POINTER_TYPE@[11; 23) 10 FN_POINTER_TYPE@11..23
11 FN_KW@[11; 13) "fn" 11 FN_KW@11..13 "fn"
12 PARAM_LIST@[13; 23) 12 PARAM_LIST@13..23
13 L_PAREN@[13; 14) "(" 13 L_PAREN@13..14 "("
14 PARAM@[14; 22) 14 PARAM@14..22
15 PATH_TYPE@[14; 22) 15 PATH_TYPE@14..22
16 PATH@[14; 22) 16 PATH@14..22
17 PATH@[14; 17) 17 PATH@14..17
18 PATH_SEGMENT@[14; 17) 18 PATH_SEGMENT@14..17
19 NAME_REF@[14; 17) 19 NAME_REF@14..17
20 IDENT@[14; 17) "Bar" 20 IDENT@14..17 "Bar"
21 COLON2@[17; 19) "::" 21 COLON2@17..19 "::"
22 PATH_SEGMENT@[19; 22) 22 PATH_SEGMENT@19..22
23 NAME_REF@[19; 22) 23 NAME_REF@19..22
24 IDENT@[19; 22) "Baz" 24 IDENT@19..22 "Baz"
25 R_PAREN@[22; 23) ")" 25 R_PAREN@22..23 ")"
26 SEMICOLON@[23; 24) ";" 26 SEMICOLON@23..24 ";"
27 WHITESPACE@[24; 25) "\n" 27 WHITESPACE@24..25 "\n"
28 TYPE_ALIAS_DEF@[25; 54) 28 TYPE_ALIAS_DEF@25..54
29 TYPE_KW@[25; 29) "type" 29 TYPE_KW@25..29 "type"
30 WHITESPACE@[29; 30) " " 30 WHITESPACE@29..30 " "
31 NAME@[30; 33) 31 NAME@30..33
32 IDENT@[30; 33) "Qux" 32 IDENT@30..33 "Qux"
33 WHITESPACE@[33; 34) " " 33 WHITESPACE@33..34 " "
34 EQ@[34; 35) "=" 34 EQ@34..35 "="
35 WHITESPACE@[35; 36) " " 35 WHITESPACE@35..36 " "
36 FN_POINTER_TYPE@[36; 53) 36 FN_POINTER_TYPE@36..53
37 FN_KW@[36; 38) "fn" 37 FN_KW@36..38 "fn"
38 PARAM_LIST@[38; 53) 38 PARAM_LIST@38..53
39 L_PAREN@[38; 39) "(" 39 L_PAREN@38..39 "("
40 PARAM@[39; 52) 40 PARAM@39..52
41 BIND_PAT@[39; 42) 41 BIND_PAT@39..42
42 NAME@[39; 42) 42 NAME@39..42
43 IDENT@[39; 42) "baz" 43 IDENT@39..42 "baz"
44 COLON@[42; 43) ":" 44 COLON@42..43 ":"
45 WHITESPACE@[43; 44) " " 45 WHITESPACE@43..44 " "
46 PATH_TYPE@[44; 52) 46 PATH_TYPE@44..52
47 PATH@[44; 52) 47 PATH@44..52
48 PATH@[44; 47) 48 PATH@44..47
49 PATH_SEGMENT@[44; 47) 49 PATH_SEGMENT@44..47
50 NAME_REF@[44; 47) 50 NAME_REF@44..47
51 IDENT@[44; 47) "Bar" 51 IDENT@44..47 "Bar"
52 COLON2@[47; 49) "::" 52 COLON2@47..49 "::"
53 PATH_SEGMENT@[49; 52) 53 PATH_SEGMENT@49..52
54 NAME_REF@[49; 52) 54 NAME_REF@49..52
55 IDENT@[49; 52) "Baz" 55 IDENT@49..52 "Baz"
56 R_PAREN@[52; 53) ")" 56 R_PAREN@52..53 ")"
57 SEMICOLON@[53; 54) ";" 57 SEMICOLON@53..54 ";"
58 WHITESPACE@[54; 55) "\n" 58 WHITESPACE@54..55 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0155_closure_params.rast b/crates/ra_syntax/test_data/parser/inline/ok/0155_closure_params.rast
index a5f8b6480..dad3dfe4d 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0155_closure_params.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0155_closure_params.rast
@@ -1,70 +1,70 @@
1SOURCE_FILE@[0; 63) 1SOURCE_FILE@0..63
2 FN_DEF@[0; 62) 2 FN_DEF@0..62
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 62) 11 BLOCK_EXPR@10..62
12 BLOCK@[10; 62) 12 BLOCK@10..62
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 15) "\n " 14 WHITESPACE@11..15 "\n "
15 LET_STMT@[15; 60) 15 LET_STMT@15..60
16 LET_KW@[15; 18) "let" 16 LET_KW@15..18 "let"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 BIND_PAT@[19; 22) 18 BIND_PAT@19..22
19 NAME@[19; 22) 19 NAME@19..22
20 IDENT@[19; 22) "foo" 20 IDENT@19..22 "foo"
21 WHITESPACE@[22; 23) " " 21 WHITESPACE@22..23 " "
22 EQ@[23; 24) "=" 22 EQ@23..24 "="
23 WHITESPACE@[24; 25) " " 23 WHITESPACE@24..25 " "
24 LAMBDA_EXPR@[25; 59) 24 LAMBDA_EXPR@25..59
25 PARAM_LIST@[25; 56) 25 PARAM_LIST@25..56
26 PIPE@[25; 26) "|" 26 PIPE@25..26 "|"
27 PARAM@[26; 29) 27 PARAM@26..29
28 BIND_PAT@[26; 29) 28 BIND_PAT@26..29
29 NAME@[26; 29) 29 NAME@26..29
30 IDENT@[26; 29) "bar" 30 IDENT@26..29 "bar"
31 COMMA@[29; 30) "," 31 COMMA@29..30 ","
32 WHITESPACE@[30; 31) " " 32 WHITESPACE@30..31 " "
33 PARAM@[31; 39) 33 PARAM@31..39
34 BIND_PAT@[31; 34) 34 BIND_PAT@31..34
35 NAME@[31; 34) 35 NAME@31..34
36 IDENT@[31; 34) "baz" 36 IDENT@31..34 "baz"
37 COLON@[34; 35) ":" 37 COLON@34..35 ":"
38 WHITESPACE@[35; 36) " " 38 WHITESPACE@35..36 " "
39 PATH_TYPE@[36; 39) 39 PATH_TYPE@36..39
40 PATH@[36; 39) 40 PATH@36..39
41 PATH_SEGMENT@[36; 39) 41 PATH_SEGMENT@36..39
42 NAME_REF@[36; 39) 42 NAME_REF@36..39
43 IDENT@[36; 39) "Baz" 43 IDENT@36..39 "Baz"
44 COMMA@[39; 40) "," 44 COMMA@39..40 ","
45 WHITESPACE@[40; 41) " " 45 WHITESPACE@40..41 " "
46 PARAM@[41; 55) 46 PARAM@41..55
47 BIND_PAT@[41; 44) 47 BIND_PAT@41..44
48 NAME@[41; 44) 48 NAME@41..44
49 IDENT@[41; 44) "qux" 49 IDENT@41..44 "qux"
50 COLON@[44; 45) ":" 50 COLON@44..45 ":"
51 WHITESPACE@[45; 46) " " 51 WHITESPACE@45..46 " "
52 PATH_TYPE@[46; 55) 52 PATH_TYPE@46..55
53 PATH@[46; 55) 53 PATH@46..55
54 PATH@[46; 49) 54 PATH@46..49
55 PATH_SEGMENT@[46; 49) 55 PATH_SEGMENT@46..49
56 NAME_REF@[46; 49) 56 NAME_REF@46..49
57 IDENT@[46; 49) "Qux" 57 IDENT@46..49 "Qux"
58 COLON2@[49; 51) "::" 58 COLON2@49..51 "::"
59 PATH_SEGMENT@[51; 55) 59 PATH_SEGMENT@51..55
60 NAME_REF@[51; 55) 60 NAME_REF@51..55
61 IDENT@[51; 55) "Quux" 61 IDENT@51..55 "Quux"
62 PIPE@[55; 56) "|" 62 PIPE@55..56 "|"
63 WHITESPACE@[56; 57) " " 63 WHITESPACE@56..57 " "
64 TUPLE_EXPR@[57; 59) 64 TUPLE_EXPR@57..59
65 L_PAREN@[57; 58) "(" 65 L_PAREN@57..58 "("
66 R_PAREN@[58; 59) ")" 66 R_PAREN@58..59 ")"
67 SEMICOLON@[59; 60) ";" 67 SEMICOLON@59..60 ";"
68 WHITESPACE@[60; 61) "\n" 68 WHITESPACE@60..61 "\n"
69 R_CURLY@[61; 62) "}" 69 R_CURLY@61..62 "}"
70 WHITESPACE@[62; 63) "\n" 70 WHITESPACE@62..63 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0156_fn_def_param.rast b/crates/ra_syntax/test_data/parser/inline/ok/0156_fn_def_param.rast
index 103e254a6..3110bf5c0 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0156_fn_def_param.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0156_fn_def_param.rast
@@ -1,44 +1,44 @@
1SOURCE_FILE@[0; 30) 1SOURCE_FILE@0..30
2 FN_DEF@[0; 29) 2 FN_DEF@0..29
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 26) 7 PARAM_LIST@6..26
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 PARAM@[7; 25) 9 PARAM@7..25
10 TUPLE_PAT@[7; 13) 10 TUPLE_PAT@7..13
11 L_PAREN@[7; 8) "(" 11 L_PAREN@7..8 "("
12 BIND_PAT@[8; 9) 12 BIND_PAT@8..9
13 NAME@[8; 9) 13 NAME@8..9
14 IDENT@[8; 9) "x" 14 IDENT@8..9 "x"
15 COMMA@[9; 10) "," 15 COMMA@9..10 ","
16 WHITESPACE@[10; 11) " " 16 WHITESPACE@10..11 " "
17 BIND_PAT@[11; 12) 17 BIND_PAT@11..12
18 NAME@[11; 12) 18 NAME@11..12
19 IDENT@[11; 12) "y" 19 IDENT@11..12 "y"
20 R_PAREN@[12; 13) ")" 20 R_PAREN@12..13 ")"
21 COLON@[13; 14) ":" 21 COLON@13..14 ":"
22 WHITESPACE@[14; 15) " " 22 WHITESPACE@14..15 " "
23 TUPLE_TYPE@[15; 25) 23 TUPLE_TYPE@15..25
24 L_PAREN@[15; 16) "(" 24 L_PAREN@15..16 "("
25 PATH_TYPE@[16; 19) 25 PATH_TYPE@16..19
26 PATH@[16; 19) 26 PATH@16..19
27 PATH_SEGMENT@[16; 19) 27 PATH_SEGMENT@16..19
28 NAME_REF@[16; 19) 28 NAME_REF@16..19
29 IDENT@[16; 19) "i32" 29 IDENT@16..19 "i32"
30 COMMA@[19; 20) "," 30 COMMA@19..20 ","
31 WHITESPACE@[20; 21) " " 31 WHITESPACE@20..21 " "
32 PATH_TYPE@[21; 24) 32 PATH_TYPE@21..24
33 PATH@[21; 24) 33 PATH@21..24
34 PATH_SEGMENT@[21; 24) 34 PATH_SEGMENT@21..24
35 NAME_REF@[21; 24) 35 NAME_REF@21..24
36 IDENT@[21; 24) "i32" 36 IDENT@21..24 "i32"
37 R_PAREN@[24; 25) ")" 37 R_PAREN@24..25 ")"
38 R_PAREN@[25; 26) ")" 38 R_PAREN@25..26 ")"
39 WHITESPACE@[26; 27) " " 39 WHITESPACE@26..27 " "
40 BLOCK_EXPR@[27; 29) 40 BLOCK_EXPR@27..29
41 BLOCK@[27; 29) 41 BLOCK@27..29
42 L_CURLY@[27; 28) "{" 42 L_CURLY@27..28 "{"
43 R_CURLY@[28; 29) "}" 43 R_CURLY@28..29 "}"
44 WHITESPACE@[29; 30) "\n" 44 WHITESPACE@29..30 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0156_or_pattern.rast b/crates/ra_syntax/test_data/parser/inline/ok/0156_or_pattern.rast
index 3a196d3c0..3f3e6a9a2 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0156_or_pattern.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0156_or_pattern.rast
@@ -1,112 +1,112 @@
1SOURCE_FILE@[0; 130) 1SOURCE_FILE@0..130
2 FN_DEF@[0; 129) 2 FN_DEF@0..129
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 129) 11 BLOCK_EXPR@10..129
12 BLOCK@[10; 129) 12 BLOCK@10..129
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 MATCH_EXPR@[16; 127) 15 MATCH_EXPR@16..127
16 MATCH_KW@[16; 21) "match" 16 MATCH_KW@16..21 "match"
17 WHITESPACE@[21; 22) " " 17 WHITESPACE@21..22 " "
18 TUPLE_EXPR@[22; 24) 18 TUPLE_EXPR@22..24
19 L_PAREN@[22; 23) "(" 19 L_PAREN@22..23 "("
20 R_PAREN@[23; 24) ")" 20 R_PAREN@23..24 ")"
21 WHITESPACE@[24; 25) " " 21 WHITESPACE@24..25 " "
22 MATCH_ARM_LIST@[25; 127) 22 MATCH_ARM_LIST@25..127
23 L_CURLY@[25; 26) "{" 23 L_CURLY@25..26 "{"
24 WHITESPACE@[26; 35) "\n " 24 WHITESPACE@26..35 "\n "
25 MATCH_ARM@[35; 48) 25 MATCH_ARM@35..48
26 PAREN_PAT@[35; 42) 26 PAREN_PAT@35..42
27 L_PAREN@[35; 36) "(" 27 L_PAREN@35..36 "("
28 OR_PAT@[36; 41) 28 OR_PAT@36..41
29 PLACEHOLDER_PAT@[36; 37) 29 PLACEHOLDER_PAT@36..37
30 UNDERSCORE@[36; 37) "_" 30 UNDERSCORE@36..37 "_"
31 WHITESPACE@[37; 38) " " 31 WHITESPACE@37..38 " "
32 PIPE@[38; 39) "|" 32 PIPE@38..39 "|"
33 WHITESPACE@[39; 40) " " 33 WHITESPACE@39..40 " "
34 PLACEHOLDER_PAT@[40; 41) 34 PLACEHOLDER_PAT@40..41
35 UNDERSCORE@[40; 41) "_" 35 UNDERSCORE@40..41 "_"
36 R_PAREN@[41; 42) ")" 36 R_PAREN@41..42 ")"
37 WHITESPACE@[42; 43) " " 37 WHITESPACE@42..43 " "
38 FAT_ARROW@[43; 45) "=>" 38 FAT_ARROW@43..45 "=>"
39 WHITESPACE@[45; 46) " " 39 WHITESPACE@45..46 " "
40 TUPLE_EXPR@[46; 48) 40 TUPLE_EXPR@46..48
41 L_PAREN@[46; 47) "(" 41 L_PAREN@46..47 "("
42 R_PAREN@[47; 48) ")" 42 R_PAREN@47..48 ")"
43 COMMA@[48; 49) "," 43 COMMA@48..49 ","
44 WHITESPACE@[49; 58) "\n " 44 WHITESPACE@49..58 "\n "
45 MATCH_ARM@[58; 72) 45 MATCH_ARM@58..72
46 REF_PAT@[58; 66) 46 REF_PAT@58..66
47 AMP@[58; 59) "&" 47 AMP@58..59 "&"
48 PAREN_PAT@[59; 66) 48 PAREN_PAT@59..66
49 L_PAREN@[59; 60) "(" 49 L_PAREN@59..60 "("
50 OR_PAT@[60; 65) 50 OR_PAT@60..65
51 PLACEHOLDER_PAT@[60; 61) 51 PLACEHOLDER_PAT@60..61
52 UNDERSCORE@[60; 61) "_" 52 UNDERSCORE@60..61 "_"
53 WHITESPACE@[61; 62) " " 53 WHITESPACE@61..62 " "
54 PIPE@[62; 63) "|" 54 PIPE@62..63 "|"
55 WHITESPACE@[63; 64) " " 55 WHITESPACE@63..64 " "
56 PLACEHOLDER_PAT@[64; 65) 56 PLACEHOLDER_PAT@64..65
57 UNDERSCORE@[64; 65) "_" 57 UNDERSCORE@64..65 "_"
58 R_PAREN@[65; 66) ")" 58 R_PAREN@65..66 ")"
59 WHITESPACE@[66; 67) " " 59 WHITESPACE@66..67 " "
60 FAT_ARROW@[67; 69) "=>" 60 FAT_ARROW@67..69 "=>"
61 WHITESPACE@[69; 70) " " 61 WHITESPACE@69..70 " "
62 TUPLE_EXPR@[70; 72) 62 TUPLE_EXPR@70..72
63 L_PAREN@[70; 71) "(" 63 L_PAREN@70..71 "("
64 R_PAREN@[71; 72) ")" 64 R_PAREN@71..72 ")"
65 COMMA@[72; 73) "," 65 COMMA@72..73 ","
66 WHITESPACE@[73; 82) "\n " 66 WHITESPACE@73..82 "\n "
67 MATCH_ARM@[82; 96) 67 MATCH_ARM@82..96
68 TUPLE_PAT@[82; 90) 68 TUPLE_PAT@82..90
69 L_PAREN@[82; 83) "(" 69 L_PAREN@82..83 "("
70 OR_PAT@[83; 88) 70 OR_PAT@83..88
71 PLACEHOLDER_PAT@[83; 84) 71 PLACEHOLDER_PAT@83..84
72 UNDERSCORE@[83; 84) "_" 72 UNDERSCORE@83..84 "_"
73 WHITESPACE@[84; 85) " " 73 WHITESPACE@84..85 " "
74 PIPE@[85; 86) "|" 74 PIPE@85..86 "|"
75 WHITESPACE@[86; 87) " " 75 WHITESPACE@86..87 " "
76 PLACEHOLDER_PAT@[87; 88) 76 PLACEHOLDER_PAT@87..88
77 UNDERSCORE@[87; 88) "_" 77 UNDERSCORE@87..88 "_"
78 COMMA@[88; 89) "," 78 COMMA@88..89 ","
79 R_PAREN@[89; 90) ")" 79 R_PAREN@89..90 ")"
80 WHITESPACE@[90; 91) " " 80 WHITESPACE@90..91 " "
81 FAT_ARROW@[91; 93) "=>" 81 FAT_ARROW@91..93 "=>"
82 WHITESPACE@[93; 94) " " 82 WHITESPACE@93..94 " "
83 TUPLE_EXPR@[94; 96) 83 TUPLE_EXPR@94..96
84 L_PAREN@[94; 95) "(" 84 L_PAREN@94..95 "("
85 R_PAREN@[95; 96) ")" 85 R_PAREN@95..96 ")"
86 COMMA@[96; 97) "," 86 COMMA@96..97 ","
87 WHITESPACE@[97; 106) "\n " 87 WHITESPACE@97..106 "\n "
88 MATCH_ARM@[106; 120) 88 MATCH_ARM@106..120
89 SLICE_PAT@[106; 114) 89 SLICE_PAT@106..114
90 L_BRACK@[106; 107) "[" 90 L_BRACK@106..107 "["
91 OR_PAT@[107; 112) 91 OR_PAT@107..112
92 PLACEHOLDER_PAT@[107; 108) 92 PLACEHOLDER_PAT@107..108
93 UNDERSCORE@[107; 108) "_" 93 UNDERSCORE@107..108 "_"
94 WHITESPACE@[108; 109) " " 94 WHITESPACE@108..109 " "
95 PIPE@[109; 110) "|" 95 PIPE@109..110 "|"
96 WHITESPACE@[110; 111) " " 96 WHITESPACE@110..111 " "
97 PLACEHOLDER_PAT@[111; 112) 97 PLACEHOLDER_PAT@111..112
98 UNDERSCORE@[111; 112) "_" 98 UNDERSCORE@111..112 "_"
99 COMMA@[112; 113) "," 99 COMMA@112..113 ","
100 R_BRACK@[113; 114) "]" 100 R_BRACK@113..114 "]"
101 WHITESPACE@[114; 115) " " 101 WHITESPACE@114..115 " "
102 FAT_ARROW@[115; 117) "=>" 102 FAT_ARROW@115..117 "=>"
103 WHITESPACE@[117; 118) " " 103 WHITESPACE@117..118 " "
104 TUPLE_EXPR@[118; 120) 104 TUPLE_EXPR@118..120
105 L_PAREN@[118; 119) "(" 105 L_PAREN@118..119 "("
106 R_PAREN@[119; 120) ")" 106 R_PAREN@119..120 ")"
107 COMMA@[120; 121) "," 107 COMMA@120..121 ","
108 WHITESPACE@[121; 126) "\n " 108 WHITESPACE@121..126 "\n "
109 R_CURLY@[126; 127) "}" 109 R_CURLY@126..127 "}"
110 WHITESPACE@[127; 128) "\n" 110 WHITESPACE@127..128 "\n"
111 R_CURLY@[128; 129) "}" 111 R_CURLY@128..129 "}"
112 WHITESPACE@[129; 130) "\n" 112 WHITESPACE@129..130 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0157_fn_pointer_unnamed_arg.rast b/crates/ra_syntax/test_data/parser/inline/ok/0157_fn_pointer_unnamed_arg.rast
index e0081a9f2..fad9df007 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0157_fn_pointer_unnamed_arg.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0157_fn_pointer_unnamed_arg.rast
@@ -1,26 +1,26 @@
1SOURCE_FILE@[0; 23) 1SOURCE_FILE@0..23
2 TYPE_ALIAS_DEF@[0; 22) 2 TYPE_ALIAS_DEF@0..22
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 8) 5 NAME@5..8
6 IDENT@[5; 8) "Foo" 6 IDENT@5..8 "Foo"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 EQ@[9; 10) "=" 8 EQ@9..10 "="
9 WHITESPACE@[10; 11) " " 9 WHITESPACE@10..11 " "
10 FN_POINTER_TYPE@[11; 21) 10 FN_POINTER_TYPE@11..21
11 FN_KW@[11; 13) "fn" 11 FN_KW@11..13 "fn"
12 PARAM_LIST@[13; 21) 12 PARAM_LIST@13..21
13 L_PAREN@[13; 14) "(" 13 L_PAREN@13..14 "("
14 PARAM@[14; 20) 14 PARAM@14..20
15 PLACEHOLDER_PAT@[14; 15) 15 PLACEHOLDER_PAT@14..15
16 UNDERSCORE@[14; 15) "_" 16 UNDERSCORE@14..15 "_"
17 COLON@[15; 16) ":" 17 COLON@15..16 ":"
18 WHITESPACE@[16; 17) " " 18 WHITESPACE@16..17 " "
19 PATH_TYPE@[17; 20) 19 PATH_TYPE@17..20
20 PATH@[17; 20) 20 PATH@17..20
21 PATH_SEGMENT@[17; 20) 21 PATH_SEGMENT@17..20
22 NAME_REF@[17; 20) 22 NAME_REF@17..20
23 IDENT@[17; 20) "bar" 23 IDENT@17..20 "bar"
24 R_PAREN@[20; 21) ")" 24 R_PAREN@20..21 ")"
25 SEMICOLON@[21; 22) ";" 25 SEMICOLON@21..22 ";"
26 WHITESPACE@[22; 23) "\n" 26 WHITESPACE@22..23 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0157_variant_discriminant.rast b/crates/ra_syntax/test_data/parser/inline/ok/0157_variant_discriminant.rast
index a378dd80b..e8a0e9ddd 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0157_variant_discriminant.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0157_variant_discriminant.rast
@@ -1,30 +1,30 @@
1SOURCE_FILE@[0; 23) 1SOURCE_FILE@0..23
2 ENUM_DEF@[0; 22) 2 ENUM_DEF@0..22
3 ENUM_KW@[0; 4) "enum" 3 ENUM_KW@0..4 "enum"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "E" 6 IDENT@5..6 "E"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 ENUM_VARIANT_LIST@[7; 22) 8 ENUM_VARIANT_LIST@7..22
9 L_CURLY@[7; 8) "{" 9 L_CURLY@7..8 "{"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 ENUM_VARIANT@[9; 20) 11 ENUM_VARIANT@9..20
12 NAME@[9; 10) 12 NAME@9..10
13 IDENT@[9; 10) "X" 13 IDENT@9..10 "X"
14 TUPLE_FIELD_DEF_LIST@[10; 15) 14 TUPLE_FIELD_DEF_LIST@10..15
15 L_PAREN@[10; 11) "(" 15 L_PAREN@10..11 "("
16 TUPLE_FIELD_DEF@[11; 14) 16 TUPLE_FIELD_DEF@11..14
17 PATH_TYPE@[11; 14) 17 PATH_TYPE@11..14
18 PATH@[11; 14) 18 PATH@11..14
19 PATH_SEGMENT@[11; 14) 19 PATH_SEGMENT@11..14
20 NAME_REF@[11; 14) 20 NAME_REF@11..14
21 IDENT@[11; 14) "i32" 21 IDENT@11..14 "i32"
22 R_PAREN@[14; 15) ")" 22 R_PAREN@14..15 ")"
23 WHITESPACE@[15; 16) " " 23 WHITESPACE@15..16 " "
24 EQ@[16; 17) "=" 24 EQ@16..17 "="
25 WHITESPACE@[17; 18) " " 25 WHITESPACE@17..18 " "
26 LITERAL@[18; 20) 26 LITERAL@18..20
27 INT_NUMBER@[18; 20) "10" 27 INT_NUMBER@18..20 "10"
28 WHITESPACE@[20; 21) " " 28 WHITESPACE@20..21 " "
29 R_CURLY@[21; 22) "}" 29 R_CURLY@21..22 "}"
30 WHITESPACE@[22; 23) "\n" 30 WHITESPACE@22..23 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0158_binop_resets_statementness.rast b/crates/ra_syntax/test_data/parser/inline/ok/0158_binop_resets_statementness.rast
index 548be2698..50db9e967 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0158_binop_resets_statementness.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0158_binop_resets_statementness.rast
@@ -1,38 +1,38 @@
1SOURCE_FILE@[0; 28) 1SOURCE_FILE@0..28
2 FN_DEF@[0; 27) 2 FN_DEF@0..27
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 27) 11 BLOCK_EXPR@9..27
12 BLOCK@[9; 27) 12 BLOCK@9..27
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 25) 15 EXPR_STMT@15..25
16 BIN_EXPR@[15; 24) 16 BIN_EXPR@15..24
17 PATH_EXPR@[15; 16) 17 PATH_EXPR@15..16
18 PATH@[15; 16) 18 PATH@15..16
19 PATH_SEGMENT@[15; 16) 19 PATH_SEGMENT@15..16
20 NAME_REF@[15; 16) 20 NAME_REF@15..16
21 IDENT@[15; 16) "v" 21 IDENT@15..16 "v"
22 WHITESPACE@[16; 17) " " 22 WHITESPACE@16..17 " "
23 EQ@[17; 18) "=" 23 EQ@17..18 "="
24 WHITESPACE@[18; 19) " " 24 WHITESPACE@18..19 " "
25 BIN_EXPR@[19; 24) 25 BIN_EXPR@19..24
26 BLOCK_EXPR@[19; 22) 26 BLOCK_EXPR@19..22
27 BLOCK@[19; 22) 27 BLOCK@19..22
28 L_CURLY@[19; 20) "{" 28 L_CURLY@19..20 "{"
29 LITERAL@[20; 21) 29 LITERAL@20..21
30 INT_NUMBER@[20; 21) "1" 30 INT_NUMBER@20..21 "1"
31 R_CURLY@[21; 22) "}" 31 R_CURLY@21..22 "}"
32 AMP@[22; 23) "&" 32 AMP@22..23 "&"
33 LITERAL@[23; 24) 33 LITERAL@23..24
34 INT_NUMBER@[23; 24) "2" 34 INT_NUMBER@23..24 "2"
35 SEMICOLON@[24; 25) ";" 35 SEMICOLON@24..25 ";"
36 WHITESPACE@[25; 26) "\n" 36 WHITESPACE@25..26 "\n"
37 R_CURLY@[26; 27) "}" 37 R_CURLY@26..27 "}"
38 WHITESPACE@[27; 28) "\n" 38 WHITESPACE@27..28 "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0158_lambda_ret_block.rast b/crates/ra_syntax/test_data/parser/inline/ok/0158_lambda_ret_block.rast
index a7a547fce..c05e05bf3 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0158_lambda_ret_block.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0158_lambda_ret_block.rast
@@ -1,45 +1,45 @@
1SOURCE_FILE@[0; 34) 1SOURCE_FILE@0..34
2 FN_DEF@[0; 33) 2 FN_DEF@0..33
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 33) 11 BLOCK_EXPR@10..33
12 BLOCK@[10; 33) 12 BLOCK@10..33
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 12) " " 14 WHITESPACE@11..12 " "
15 EXPR_STMT@[12; 31) 15 EXPR_STMT@12..31
16 CALL_EXPR@[12; 30) 16 CALL_EXPR@12..30
17 LAMBDA_EXPR@[12; 28) 17 LAMBDA_EXPR@12..28
18 PARAM_LIST@[12; 14) 18 PARAM_LIST@12..14
19 PIPE@[12; 13) "|" 19 PIPE@12..13 "|"
20 PIPE@[13; 14) "|" 20 PIPE@13..14 "|"
21 WHITESPACE@[14; 15) " " 21 WHITESPACE@14..15 " "
22 RET_TYPE@[15; 21) 22 RET_TYPE@15..21
23 THIN_ARROW@[15; 17) "->" 23 THIN_ARROW@15..17 "->"
24 WHITESPACE@[17; 18) " " 24 WHITESPACE@17..18 " "
25 PATH_TYPE@[18; 21) 25 PATH_TYPE@18..21
26 PATH@[18; 21) 26 PATH@18..21
27 PATH_SEGMENT@[18; 21) 27 PATH_SEGMENT@18..21
28 NAME_REF@[18; 21) 28 NAME_REF@18..21
29 IDENT@[18; 21) "i32" 29 IDENT@18..21 "i32"
30 WHITESPACE@[21; 22) " " 30 WHITESPACE@21..22 " "
31 BLOCK_EXPR@[22; 28) 31 BLOCK_EXPR@22..28
32 BLOCK@[22; 28) 32 BLOCK@22..28
33 L_CURLY@[22; 23) "{" 33 L_CURLY@22..23 "{"
34 WHITESPACE@[23; 24) " " 34 WHITESPACE@23..24 " "
35 LITERAL@[24; 26) 35 LITERAL@24..26
36 INT_NUMBER@[24; 26) "92" 36 INT_NUMBER@24..26 "92"
37 WHITESPACE@[26; 27) " " 37 WHITESPACE@26..27 " "
38 R_CURLY@[27; 28) "}" 38 R_CURLY@27..28 "}"
39 ARG_LIST@[28; 30) 39 ARG_LIST@28..30
40 L_PAREN@[28; 29) "(" 40 L_PAREN@28..29 "("
41 R_PAREN@[29; 30) ")" 41 R_PAREN@29..30 ")"
42 SEMICOLON@[30; 31) ";" 42 SEMICOLON@30..31 ";"
43 WHITESPACE@[31; 32) " " 43 WHITESPACE@31..32 " "
44 R_CURLY@[32; 33) "}" 44 R_CURLY@32..33 "}"
45 WHITESPACE@[33; 34) "\n" 45 WHITESPACE@33..34 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0000_empty.rast b/crates/ra_syntax/test_data/parser/ok/0000_empty.rast
index 08f5a942f..6b234b0b2 100644
--- a/crates/ra_syntax/test_data/parser/ok/0000_empty.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0000_empty.rast
@@ -1 +1 @@
SOURCE_FILE@[0; 0) SOURCE_FILE@0..0
diff --git a/crates/ra_syntax/test_data/parser/ok/0001_struct_item.rast b/crates/ra_syntax/test_data/parser/ok/0001_struct_item.rast
index fdc2d6768..705f7e001 100644
--- a/crates/ra_syntax/test_data/parser/ok/0001_struct_item.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0001_struct_item.rast
@@ -1,39 +1,39 @@
1SOURCE_FILE@[0; 32) 1SOURCE_FILE@0..32
2 STRUCT_DEF@[0; 31) 2 STRUCT_DEF@0..31
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 TYPE_PARAM_LIST@[8; 17) 7 TYPE_PARAM_LIST@8..17
8 L_ANGLE@[8; 9) "<" 8 L_ANGLE@8..9 "<"
9 TYPE_PARAM@[9; 16) 9 TYPE_PARAM@9..16
10 NAME@[9; 10) 10 NAME@9..10
11 IDENT@[9; 10) "T" 11 IDENT@9..10 "T"
12 COLON@[10; 11) ":" 12 COLON@10..11 ":"
13 WHITESPACE@[11; 12) " " 13 WHITESPACE@11..12 " "
14 TYPE_BOUND_LIST@[12; 16) 14 TYPE_BOUND_LIST@12..16
15 TYPE_BOUND@[12; 16) 15 TYPE_BOUND@12..16
16 PATH_TYPE@[12; 16) 16 PATH_TYPE@12..16
17 PATH@[12; 16) 17 PATH@12..16
18 PATH_SEGMENT@[12; 16) 18 PATH_SEGMENT@12..16
19 NAME_REF@[12; 16) 19 NAME_REF@12..16
20 IDENT@[12; 16) "Copy" 20 IDENT@12..16 "Copy"
21 R_ANGLE@[16; 17) ">" 21 R_ANGLE@16..17 ">"
22 WHITESPACE@[17; 18) " " 22 WHITESPACE@17..18 " "
23 RECORD_FIELD_DEF_LIST@[18; 31) 23 RECORD_FIELD_DEF_LIST@18..31
24 L_CURLY@[18; 19) "{" 24 L_CURLY@18..19 "{"
25 WHITESPACE@[19; 24) "\n " 25 WHITESPACE@19..24 "\n "
26 RECORD_FIELD_DEF@[24; 28) 26 RECORD_FIELD_DEF@24..28
27 NAME@[24; 25) 27 NAME@24..25
28 IDENT@[24; 25) "f" 28 IDENT@24..25 "f"
29 COLON@[25; 26) ":" 29 COLON@25..26 ":"
30 WHITESPACE@[26; 27) " " 30 WHITESPACE@26..27 " "
31 PATH_TYPE@[27; 28) 31 PATH_TYPE@27..28
32 PATH@[27; 28) 32 PATH@27..28
33 PATH_SEGMENT@[27; 28) 33 PATH_SEGMENT@27..28
34 NAME_REF@[27; 28) 34 NAME_REF@27..28
35 IDENT@[27; 28) "T" 35 IDENT@27..28 "T"
36 COMMA@[28; 29) "," 36 COMMA@28..29 ","
37 WHITESPACE@[29; 30) "\n" 37 WHITESPACE@29..30 "\n"
38 R_CURLY@[30; 31) "}" 38 R_CURLY@30..31 "}"
39 WHITESPACE@[31; 32) "\n" 39 WHITESPACE@31..32 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0002_struct_item_field.rast b/crates/ra_syntax/test_data/parser/ok/0002_struct_item_field.rast
index ef34702fd..a1d546491 100644
--- a/crates/ra_syntax/test_data/parser/ok/0002_struct_item_field.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0002_struct_item_field.rast
@@ -1,22 +1,22 @@
1SOURCE_FILE@[0; 25) 1SOURCE_FILE@0..25
2 STRUCT_DEF@[0; 25) 2 STRUCT_DEF@0..25
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 RECORD_FIELD_DEF_LIST@[9; 25) 8 RECORD_FIELD_DEF_LIST@9..25
9 L_CURLY@[9; 10) "{" 9 L_CURLY@9..10 "{"
10 WHITESPACE@[10; 15) "\n " 10 WHITESPACE@10..15 "\n "
11 RECORD_FIELD_DEF@[15; 23) 11 RECORD_FIELD_DEF@15..23
12 NAME@[15; 18) 12 NAME@15..18
13 IDENT@[15; 18) "foo" 13 IDENT@15..18 "foo"
14 COLON@[18; 19) ":" 14 COLON@18..19 ":"
15 WHITESPACE@[19; 20) " " 15 WHITESPACE@19..20 " "
16 PATH_TYPE@[20; 23) 16 PATH_TYPE@20..23
17 PATH@[20; 23) 17 PATH@20..23
18 PATH_SEGMENT@[20; 23) 18 PATH_SEGMENT@20..23
19 NAME_REF@[20; 23) 19 NAME_REF@20..23
20 IDENT@[20; 23) "u32" 20 IDENT@20..23 "u32"
21 WHITESPACE@[23; 24) "\n" 21 WHITESPACE@23..24 "\n"
22 R_CURLY@[24; 25) "}" 22 R_CURLY@24..25 "}"
diff --git a/crates/ra_syntax/test_data/parser/ok/0004_file_shebang.rast b/crates/ra_syntax/test_data/parser/ok/0004_file_shebang.rast
index e3915c2df..67e21df13 100644
--- a/crates/ra_syntax/test_data/parser/ok/0004_file_shebang.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0004_file_shebang.rast
@@ -1,2 +1,2 @@
1SOURCE_FILE@[0; 20) 1SOURCE_FILE@0..20
2 SHEBANG@[0; 20) "#!/use/bin/env rusti" 2 SHEBANG@0..20 "#!/use/bin/env rusti"
diff --git a/crates/ra_syntax/test_data/parser/ok/0005_fn_item.rast b/crates/ra_syntax/test_data/parser/ok/0005_fn_item.rast
index 955b789b5..993ba72b6 100644
--- a/crates/ra_syntax/test_data/parser/ok/0005_fn_item.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0005_fn_item.rast
@@ -1,16 +1,16 @@
1SOURCE_FILE@[0; 13) 1SOURCE_FILE@0..13
2 FN_DEF@[0; 12) 2 FN_DEF@0..12
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 12) 11 BLOCK_EXPR@9..12
12 BLOCK@[9; 12) 12 BLOCK@9..12
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 11) "\n" 14 WHITESPACE@10..11 "\n"
15 R_CURLY@[11; 12) "}" 15 R_CURLY@11..12 "}"
16 WHITESPACE@[12; 13) "\n" 16 WHITESPACE@12..13 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0006_inner_attributes.rast b/crates/ra_syntax/test_data/parser/ok/0006_inner_attributes.rast
index 308b5680f..42587243a 100644
--- a/crates/ra_syntax/test_data/parser/ok/0006_inner_attributes.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0006_inner_attributes.rast
@@ -1,184 +1,184 @@
1SOURCE_FILE@[0; 236) 1SOURCE_FILE@0..236
2 ATTR@[0; 8) 2 ATTR@0..8
3 POUND@[0; 1) "#" 3 POUND@0..1 "#"
4 BANG@[1; 2) "!" 4 BANG@1..2 "!"
5 L_BRACK@[2; 3) "[" 5 L_BRACK@2..3 "["
6 PATH@[3; 7) 6 PATH@3..7
7 PATH_SEGMENT@[3; 7) 7 PATH_SEGMENT@3..7
8 NAME_REF@[3; 7) 8 NAME_REF@3..7
9 IDENT@[3; 7) "attr" 9 IDENT@3..7 "attr"
10 R_BRACK@[7; 8) "]" 10 R_BRACK@7..8 "]"
11 WHITESPACE@[8; 9) "\n" 11 WHITESPACE@8..9 "\n"
12 ATTR@[9; 23) 12 ATTR@9..23
13 POUND@[9; 10) "#" 13 POUND@9..10 "#"
14 BANG@[10; 11) "!" 14 BANG@10..11 "!"
15 L_BRACK@[11; 12) "[" 15 L_BRACK@11..12 "["
16 PATH@[12; 16) 16 PATH@12..16
17 PATH_SEGMENT@[12; 16) 17 PATH_SEGMENT@12..16
18 NAME_REF@[12; 16) 18 NAME_REF@12..16
19 IDENT@[12; 16) "attr" 19 IDENT@12..16 "attr"
20 TOKEN_TREE@[16; 22) 20 TOKEN_TREE@16..22
21 L_PAREN@[16; 17) "(" 21 L_PAREN@16..17 "("
22 TRUE_KW@[17; 21) "true" 22 TRUE_KW@17..21 "true"
23 R_PAREN@[21; 22) ")" 23 R_PAREN@21..22 ")"
24 R_BRACK@[22; 23) "]" 24 R_BRACK@22..23 "]"
25 WHITESPACE@[23; 24) "\n" 25 WHITESPACE@23..24 "\n"
26 ATTR@[24; 39) 26 ATTR@24..39
27 POUND@[24; 25) "#" 27 POUND@24..25 "#"
28 BANG@[25; 26) "!" 28 BANG@25..26 "!"
29 L_BRACK@[26; 27) "[" 29 L_BRACK@26..27 "["
30 PATH@[27; 31) 30 PATH@27..31
31 PATH_SEGMENT@[27; 31) 31 PATH_SEGMENT@27..31
32 NAME_REF@[27; 31) 32 NAME_REF@27..31
33 IDENT@[27; 31) "attr" 33 IDENT@27..31 "attr"
34 TOKEN_TREE@[31; 38) 34 TOKEN_TREE@31..38
35 L_PAREN@[31; 32) "(" 35 L_PAREN@31..32 "("
36 IDENT@[32; 37) "ident" 36 IDENT@32..37 "ident"
37 R_PAREN@[37; 38) ")" 37 R_PAREN@37..38 ")"
38 R_BRACK@[38; 39) "]" 38 R_BRACK@38..39 "]"
39 WHITESPACE@[39; 40) "\n" 39 WHITESPACE@39..40 "\n"
40 ATTR@[40; 116) 40 ATTR@40..116
41 POUND@[40; 41) "#" 41 POUND@40..41 "#"
42 BANG@[41; 42) "!" 42 BANG@41..42 "!"
43 L_BRACK@[42; 43) "[" 43 L_BRACK@42..43 "["
44 PATH@[43; 47) 44 PATH@43..47
45 PATH_SEGMENT@[43; 47) 45 PATH_SEGMENT@43..47
46 NAME_REF@[43; 47) 46 NAME_REF@43..47
47 IDENT@[43; 47) "attr" 47 IDENT@43..47 "attr"
48 TOKEN_TREE@[47; 115) 48 TOKEN_TREE@47..115
49 L_PAREN@[47; 48) "(" 49 L_PAREN@47..48 "("
50 IDENT@[48; 53) "ident" 50 IDENT@48..53 "ident"
51 COMMA@[53; 54) "," 51 COMMA@53..54 ","
52 WHITESPACE@[54; 55) " " 52 WHITESPACE@54..55 " "
53 INT_NUMBER@[55; 58) "100" 53 INT_NUMBER@55..58 "100"
54 COMMA@[58; 59) "," 54 COMMA@58..59 ","
55 WHITESPACE@[59; 60) " " 55 WHITESPACE@59..60 " "
56 TRUE_KW@[60; 64) "true" 56 TRUE_KW@60..64 "true"
57 COMMA@[64; 65) "," 57 COMMA@64..65 ","
58 WHITESPACE@[65; 66) " " 58 WHITESPACE@65..66 " "
59 STRING@[66; 72) "\"true\"" 59 STRING@66..72 "\"true\""
60 COMMA@[72; 73) "," 60 COMMA@72..73 ","
61 WHITESPACE@[73; 74) " " 61 WHITESPACE@73..74 " "
62 IDENT@[74; 79) "ident" 62 IDENT@74..79 "ident"
63 WHITESPACE@[79; 80) " " 63 WHITESPACE@79..80 " "
64 EQ@[80; 81) "=" 64 EQ@80..81 "="
65 WHITESPACE@[81; 82) " " 65 WHITESPACE@81..82 " "
66 INT_NUMBER@[82; 85) "100" 66 INT_NUMBER@82..85 "100"
67 COMMA@[85; 86) "," 67 COMMA@85..86 ","
68 WHITESPACE@[86; 87) " " 68 WHITESPACE@86..87 " "
69 IDENT@[87; 92) "ident" 69 IDENT@87..92 "ident"
70 WHITESPACE@[92; 93) " " 70 WHITESPACE@92..93 " "
71 EQ@[93; 94) "=" 71 EQ@93..94 "="
72 WHITESPACE@[94; 95) " " 72 WHITESPACE@94..95 " "
73 STRING@[95; 102) "\"hello\"" 73 STRING@95..102 "\"hello\""
74 COMMA@[102; 103) "," 74 COMMA@102..103 ","
75 WHITESPACE@[103; 104) " " 75 WHITESPACE@103..104 " "
76 IDENT@[104; 109) "ident" 76 IDENT@104..109 "ident"
77 TOKEN_TREE@[109; 114) 77 TOKEN_TREE@109..114
78 L_PAREN@[109; 110) "(" 78 L_PAREN@109..110 "("
79 INT_NUMBER@[110; 113) "100" 79 INT_NUMBER@110..113 "100"
80 R_PAREN@[113; 114) ")" 80 R_PAREN@113..114 ")"
81 R_PAREN@[114; 115) ")" 81 R_PAREN@114..115 ")"
82 R_BRACK@[115; 116) "]" 82 R_BRACK@115..116 "]"
83 WHITESPACE@[116; 117) "\n" 83 WHITESPACE@116..117 "\n"
84 ATTR@[117; 130) 84 ATTR@117..130
85 POUND@[117; 118) "#" 85 POUND@117..118 "#"
86 BANG@[118; 119) "!" 86 BANG@118..119 "!"
87 L_BRACK@[119; 120) "[" 87 L_BRACK@119..120 "["
88 PATH@[120; 124) 88 PATH@120..124
89 PATH_SEGMENT@[120; 124) 89 PATH_SEGMENT@120..124
90 NAME_REF@[120; 124) 90 NAME_REF@120..124
91 IDENT@[120; 124) "attr" 91 IDENT@120..124 "attr"
92 TOKEN_TREE@[124; 129) 92 TOKEN_TREE@124..129
93 L_PAREN@[124; 125) "(" 93 L_PAREN@124..125 "("
94 INT_NUMBER@[125; 128) "100" 94 INT_NUMBER@125..128 "100"
95 R_PAREN@[128; 129) ")" 95 R_PAREN@128..129 ")"
96 R_BRACK@[129; 130) "]" 96 R_BRACK@129..130 "]"
97 WHITESPACE@[130; 131) "\n" 97 WHITESPACE@130..131 "\n"
98 ATTR@[131; 155) 98 ATTR@131..155
99 POUND@[131; 132) "#" 99 POUND@131..132 "#"
100 BANG@[132; 133) "!" 100 BANG@132..133 "!"
101 L_BRACK@[133; 134) "[" 101 L_BRACK@133..134 "["
102 PATH@[134; 138) 102 PATH@134..138
103 PATH_SEGMENT@[134; 138) 103 PATH_SEGMENT@134..138
104 NAME_REF@[134; 138) 104 NAME_REF@134..138
105 IDENT@[134; 138) "attr" 105 IDENT@134..138 "attr"
106 TOKEN_TREE@[138; 154) 106 TOKEN_TREE@138..154
107 L_PAREN@[138; 139) "(" 107 L_PAREN@138..139 "("
108 IDENT@[139; 146) "enabled" 108 IDENT@139..146 "enabled"
109 WHITESPACE@[146; 147) " " 109 WHITESPACE@146..147 " "
110 EQ@[147; 148) "=" 110 EQ@147..148 "="
111 WHITESPACE@[148; 149) " " 111 WHITESPACE@148..149 " "
112 TRUE_KW@[149; 153) "true" 112 TRUE_KW@149..153 "true"
113 R_PAREN@[153; 154) ")" 113 R_PAREN@153..154 ")"
114 R_BRACK@[154; 155) "]" 114 R_BRACK@154..155 "]"
115 WHITESPACE@[155; 156) "\n" 115 WHITESPACE@155..156 "\n"
116 ATTR@[156; 173) 116 ATTR@156..173
117 POUND@[156; 157) "#" 117 POUND@156..157 "#"
118 BANG@[157; 158) "!" 118 BANG@157..158 "!"
119 L_BRACK@[158; 159) "[" 119 L_BRACK@158..159 "["
120 PATH@[159; 166) 120 PATH@159..166
121 PATH_SEGMENT@[159; 166) 121 PATH_SEGMENT@159..166
122 NAME_REF@[159; 166) 122 NAME_REF@159..166
123 IDENT@[159; 166) "enabled" 123 IDENT@159..166 "enabled"
124 TOKEN_TREE@[166; 172) 124 TOKEN_TREE@166..172
125 L_PAREN@[166; 167) "(" 125 L_PAREN@166..167 "("
126 TRUE_KW@[167; 171) "true" 126 TRUE_KW@167..171 "true"
127 R_PAREN@[171; 172) ")" 127 R_PAREN@171..172 ")"
128 R_BRACK@[172; 173) "]" 128 R_BRACK@172..173 "]"
129 WHITESPACE@[173; 174) "\n" 129 WHITESPACE@173..174 "\n"
130 ATTR@[174; 191) 130 ATTR@174..191
131 POUND@[174; 175) "#" 131 POUND@174..175 "#"
132 BANG@[175; 176) "!" 132 BANG@175..176 "!"
133 L_BRACK@[176; 177) "[" 133 L_BRACK@176..177 "["
134 PATH@[177; 181) 134 PATH@177..181
135 PATH_SEGMENT@[177; 181) 135 PATH_SEGMENT@177..181
136 NAME_REF@[177; 181) 136 NAME_REF@177..181
137 IDENT@[177; 181) "attr" 137 IDENT@177..181 "attr"
138 TOKEN_TREE@[181; 190) 138 TOKEN_TREE@181..190
139 L_PAREN@[181; 182) "(" 139 L_PAREN@181..182 "("
140 STRING@[182; 189) "\"hello\"" 140 STRING@182..189 "\"hello\""
141 R_PAREN@[189; 190) ")" 141 R_PAREN@189..190 ")"
142 R_BRACK@[190; 191) "]" 142 R_BRACK@190..191 "]"
143 WHITESPACE@[191; 192) "\n" 143 WHITESPACE@191..192 "\n"
144 ATTR@[192; 214) 144 ATTR@192..214
145 POUND@[192; 193) "#" 145 POUND@192..193 "#"
146 BANG@[193; 194) "!" 146 BANG@193..194 "!"
147 L_BRACK@[194; 195) "[" 147 L_BRACK@194..195 "["
148 PATH@[195; 199) 148 PATH@195..199
149 PATH_SEGMENT@[195; 199) 149 PATH_SEGMENT@195..199
150 NAME_REF@[195; 199) 150 NAME_REF@195..199
151 IDENT@[195; 199) "repr" 151 IDENT@195..199 "repr"
152 TOKEN_TREE@[199; 213) 152 TOKEN_TREE@199..213
153 L_PAREN@[199; 200) "(" 153 L_PAREN@199..200 "("
154 IDENT@[200; 201) "C" 154 IDENT@200..201 "C"
155 COMMA@[201; 202) "," 155 COMMA@201..202 ","
156 WHITESPACE@[202; 203) " " 156 WHITESPACE@202..203 " "
157 IDENT@[203; 208) "align" 157 IDENT@203..208 "align"
158 WHITESPACE@[208; 209) " " 158 WHITESPACE@208..209 " "
159 EQ@[209; 210) "=" 159 EQ@209..210 "="
160 WHITESPACE@[210; 211) " " 160 WHITESPACE@210..211 " "
161 INT_NUMBER@[211; 212) "4" 161 INT_NUMBER@211..212 "4"
162 R_PAREN@[212; 213) ")" 162 R_PAREN@212..213 ")"
163 R_BRACK@[213; 214) "]" 163 R_BRACK@213..214 "]"
164 WHITESPACE@[214; 215) "\n" 164 WHITESPACE@214..215 "\n"
165 ATTR@[215; 236) 165 ATTR@215..236
166 POUND@[215; 216) "#" 166 POUND@215..216 "#"
167 BANG@[216; 217) "!" 167 BANG@216..217 "!"
168 L_BRACK@[217; 218) "[" 168 L_BRACK@217..218 "["
169 PATH@[218; 222) 169 PATH@218..222
170 PATH_SEGMENT@[218; 222) 170 PATH_SEGMENT@218..222
171 NAME_REF@[218; 222) 171 NAME_REF@218..222
172 IDENT@[218; 222) "repr" 172 IDENT@218..222 "repr"
173 TOKEN_TREE@[222; 235) 173 TOKEN_TREE@222..235
174 L_PAREN@[222; 223) "(" 174 L_PAREN@222..223 "("
175 IDENT@[223; 224) "C" 175 IDENT@223..224 "C"
176 COMMA@[224; 225) "," 176 COMMA@224..225 ","
177 WHITESPACE@[225; 226) " " 177 WHITESPACE@225..226 " "
178 IDENT@[226; 231) "align" 178 IDENT@226..231 "align"
179 TOKEN_TREE@[231; 234) 179 TOKEN_TREE@231..234
180 L_PAREN@[231; 232) "(" 180 L_PAREN@231..232 "("
181 INT_NUMBER@[232; 233) "4" 181 INT_NUMBER@232..233 "4"
182 R_PAREN@[233; 234) ")" 182 R_PAREN@233..234 ")"
183 R_PAREN@[234; 235) ")" 183 R_PAREN@234..235 ")"
184 R_BRACK@[235; 236) "]" 184 R_BRACK@235..236 "]"
diff --git a/crates/ra_syntax/test_data/parser/ok/0007_extern_crate.rast b/crates/ra_syntax/test_data/parser/ok/0007_extern_crate.rast
index 4856b4f81..b5bdf0aa9 100644
--- a/crates/ra_syntax/test_data/parser/ok/0007_extern_crate.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0007_extern_crate.rast
@@ -1,40 +1,40 @@
1SOURCE_FILE@[0; 69) 1SOURCE_FILE@0..69
2 EXTERN_CRATE_ITEM@[0; 17) 2 EXTERN_CRATE_ITEM@0..17
3 EXTERN_KW@[0; 6) "extern" 3 EXTERN_KW@0..6 "extern"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 CRATE_KW@[7; 12) "crate" 5 CRATE_KW@7..12 "crate"
6 WHITESPACE@[12; 13) " " 6 WHITESPACE@12..13 " "
7 NAME_REF@[13; 16) 7 NAME_REF@13..16
8 IDENT@[13; 16) "foo" 8 IDENT@13..16 "foo"
9 SEMICOLON@[16; 17) ";" 9 SEMICOLON@16..17 ";"
10 WHITESPACE@[17; 18) "\n" 10 WHITESPACE@17..18 "\n"
11 EXTERN_CRATE_ITEM@[18; 42) 11 EXTERN_CRATE_ITEM@18..42
12 EXTERN_KW@[18; 24) "extern" 12 EXTERN_KW@18..24 "extern"
13 WHITESPACE@[24; 25) " " 13 WHITESPACE@24..25 " "
14 CRATE_KW@[25; 30) "crate" 14 CRATE_KW@25..30 "crate"
15 WHITESPACE@[30; 31) " " 15 WHITESPACE@30..31 " "
16 NAME_REF@[31; 34) 16 NAME_REF@31..34
17 IDENT@[31; 34) "foo" 17 IDENT@31..34 "foo"
18 WHITESPACE@[34; 35) " " 18 WHITESPACE@34..35 " "
19 ALIAS@[35; 41) 19 ALIAS@35..41
20 AS_KW@[35; 37) "as" 20 AS_KW@35..37 "as"
21 WHITESPACE@[37; 38) " " 21 WHITESPACE@37..38 " "
22 NAME@[38; 41) 22 NAME@38..41
23 IDENT@[38; 41) "bar" 23 IDENT@38..41 "bar"
24 SEMICOLON@[41; 42) ";" 24 SEMICOLON@41..42 ";"
25 WHITESPACE@[42; 43) "\n" 25 WHITESPACE@42..43 "\n"
26 EXTERN_CRATE_ITEM@[43; 68) 26 EXTERN_CRATE_ITEM@43..68
27 EXTERN_KW@[43; 49) "extern" 27 EXTERN_KW@43..49 "extern"
28 WHITESPACE@[49; 50) " " 28 WHITESPACE@49..50 " "
29 CRATE_KW@[50; 55) "crate" 29 CRATE_KW@50..55 "crate"
30 WHITESPACE@[55; 56) " " 30 WHITESPACE@55..56 " "
31 SELF_KW@[56; 60) 31 SELF_KW@56..60
32 SELF_KW@[56; 60) "self" 32 SELF_KW@56..60 "self"
33 WHITESPACE@[60; 61) " " 33 WHITESPACE@60..61 " "
34 ALIAS@[61; 67) 34 ALIAS@61..67
35 AS_KW@[61; 63) "as" 35 AS_KW@61..63 "as"
36 WHITESPACE@[63; 64) " " 36 WHITESPACE@63..64 " "
37 NAME@[64; 67) 37 NAME@64..67
38 IDENT@[64; 67) "baz" 38 IDENT@64..67 "baz"
39 SEMICOLON@[67; 68) ";" 39 SEMICOLON@67..68 ";"
40 WHITESPACE@[68; 69) "\n" 40 WHITESPACE@68..69 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0008_mod_item.rast b/crates/ra_syntax/test_data/parser/ok/0008_mod_item.rast
index 1c18edd4e..353bf2d2e 100644
--- a/crates/ra_syntax/test_data/parser/ok/0008_mod_item.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0008_mod_item.rast
@@ -1,93 +1,93 @@
1SOURCE_FILE@[0; 118) 1SOURCE_FILE@0..118
2 MODULE@[0; 6) 2 MODULE@0..6
3 MOD_KW@[0; 3) "mod" 3 MOD_KW@0..3 "mod"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 NAME@[4; 5) 5 NAME@4..5
6 IDENT@[4; 5) "a" 6 IDENT@4..5 "a"
7 SEMICOLON@[5; 6) ";" 7 SEMICOLON@5..6 ";"
8 WHITESPACE@[6; 8) "\n\n" 8 WHITESPACE@6..8 "\n\n"
9 MODULE@[8; 17) 9 MODULE@8..17
10 MOD_KW@[8; 11) "mod" 10 MOD_KW@8..11 "mod"
11 WHITESPACE@[11; 12) " " 11 WHITESPACE@11..12 " "
12 NAME@[12; 13) 12 NAME@12..13
13 IDENT@[12; 13) "b" 13 IDENT@12..13 "b"
14 WHITESPACE@[13; 14) " " 14 WHITESPACE@13..14 " "
15 ITEM_LIST@[14; 17) 15 ITEM_LIST@14..17
16 L_CURLY@[14; 15) "{" 16 L_CURLY@14..15 "{"
17 WHITESPACE@[15; 16) "\n" 17 WHITESPACE@15..16 "\n"
18 R_CURLY@[16; 17) "}" 18 R_CURLY@16..17 "}"
19 WHITESPACE@[17; 19) "\n\n" 19 WHITESPACE@17..19 "\n\n"
20 MODULE@[19; 65) 20 MODULE@19..65
21 MOD_KW@[19; 22) "mod" 21 MOD_KW@19..22 "mod"
22 WHITESPACE@[22; 23) " " 22 WHITESPACE@22..23 " "
23 NAME@[23; 24) 23 NAME@23..24
24 IDENT@[23; 24) "c" 24 IDENT@23..24 "c"
25 WHITESPACE@[24; 25) " " 25 WHITESPACE@24..25 " "
26 ITEM_LIST@[25; 65) 26 ITEM_LIST@25..65
27 L_CURLY@[25; 26) "{" 27 L_CURLY@25..26 "{"
28 WHITESPACE@[26; 31) "\n " 28 WHITESPACE@26..31 "\n "
29 FN_DEF@[31; 47) 29 FN_DEF@31..47
30 FN_KW@[31; 33) "fn" 30 FN_KW@31..33 "fn"
31 WHITESPACE@[33; 34) " " 31 WHITESPACE@33..34 " "
32 NAME@[34; 37) 32 NAME@34..37
33 IDENT@[34; 37) "foo" 33 IDENT@34..37 "foo"
34 PARAM_LIST@[37; 39) 34 PARAM_LIST@37..39
35 L_PAREN@[37; 38) "(" 35 L_PAREN@37..38 "("
36 R_PAREN@[38; 39) ")" 36 R_PAREN@38..39 ")"
37 WHITESPACE@[39; 40) " " 37 WHITESPACE@39..40 " "
38 BLOCK_EXPR@[40; 47) 38 BLOCK_EXPR@40..47
39 BLOCK@[40; 47) 39 BLOCK@40..47
40 L_CURLY@[40; 41) "{" 40 L_CURLY@40..41 "{"
41 WHITESPACE@[41; 46) "\n " 41 WHITESPACE@41..46 "\n "
42 R_CURLY@[46; 47) "}" 42 R_CURLY@46..47 "}"
43 WHITESPACE@[47; 52) "\n " 43 WHITESPACE@47..52 "\n "
44 STRUCT_DEF@[52; 63) 44 STRUCT_DEF@52..63
45 STRUCT_KW@[52; 58) "struct" 45 STRUCT_KW@52..58 "struct"
46 WHITESPACE@[58; 59) " " 46 WHITESPACE@58..59 " "
47 NAME@[59; 60) 47 NAME@59..60
48 IDENT@[59; 60) "S" 48 IDENT@59..60 "S"
49 WHITESPACE@[60; 61) " " 49 WHITESPACE@60..61 " "
50 RECORD_FIELD_DEF_LIST@[61; 63) 50 RECORD_FIELD_DEF_LIST@61..63
51 L_CURLY@[61; 62) "{" 51 L_CURLY@61..62 "{"
52 R_CURLY@[62; 63) "}" 52 R_CURLY@62..63 "}"
53 WHITESPACE@[63; 64) "\n" 53 WHITESPACE@63..64 "\n"
54 R_CURLY@[64; 65) "}" 54 R_CURLY@64..65 "}"
55 WHITESPACE@[65; 67) "\n\n" 55 WHITESPACE@65..67 "\n\n"
56 MODULE@[67; 118) 56 MODULE@67..118
57 MOD_KW@[67; 70) "mod" 57 MOD_KW@67..70 "mod"
58 WHITESPACE@[70; 71) " " 58 WHITESPACE@70..71 " "
59 NAME@[71; 72) 59 NAME@71..72
60 IDENT@[71; 72) "d" 60 IDENT@71..72 "d"
61 WHITESPACE@[72; 73) " " 61 WHITESPACE@72..73 " "
62 ITEM_LIST@[73; 118) 62 ITEM_LIST@73..118
63 L_CURLY@[73; 74) "{" 63 L_CURLY@73..74 "{"
64 WHITESPACE@[74; 79) "\n " 64 WHITESPACE@74..79 "\n "
65 ATTR@[79; 87) 65 ATTR@79..87
66 POUND@[79; 80) "#" 66 POUND@79..80 "#"
67 BANG@[80; 81) "!" 67 BANG@80..81 "!"
68 L_BRACK@[81; 82) "[" 68 L_BRACK@81..82 "["
69 PATH@[82; 86) 69 PATH@82..86
70 PATH_SEGMENT@[82; 86) 70 PATH_SEGMENT@82..86
71 NAME_REF@[82; 86) 71 NAME_REF@82..86
72 IDENT@[82; 86) "attr" 72 IDENT@82..86 "attr"
73 R_BRACK@[86; 87) "]" 73 R_BRACK@86..87 "]"
74 WHITESPACE@[87; 92) "\n " 74 WHITESPACE@87..92 "\n "
75 MODULE@[92; 98) 75 MODULE@92..98
76 MOD_KW@[92; 95) "mod" 76 MOD_KW@92..95 "mod"
77 WHITESPACE@[95; 96) " " 77 WHITESPACE@95..96 " "
78 NAME@[96; 97) 78 NAME@96..97
79 IDENT@[96; 97) "e" 79 IDENT@96..97 "e"
80 SEMICOLON@[97; 98) ";" 80 SEMICOLON@97..98 ";"
81 WHITESPACE@[98; 103) "\n " 81 WHITESPACE@98..103 "\n "
82 MODULE@[103; 116) 82 MODULE@103..116
83 MOD_KW@[103; 106) "mod" 83 MOD_KW@103..106 "mod"
84 WHITESPACE@[106; 107) " " 84 WHITESPACE@106..107 " "
85 NAME@[107; 108) 85 NAME@107..108
86 IDENT@[107; 108) "f" 86 IDENT@107..108 "f"
87 WHITESPACE@[108; 109) " " 87 WHITESPACE@108..109 " "
88 ITEM_LIST@[109; 116) 88 ITEM_LIST@109..116
89 L_CURLY@[109; 110) "{" 89 L_CURLY@109..110 "{"
90 WHITESPACE@[110; 115) "\n " 90 WHITESPACE@110..115 "\n "
91 R_CURLY@[115; 116) "}" 91 R_CURLY@115..116 "}"
92 WHITESPACE@[116; 117) "\n" 92 WHITESPACE@116..117 "\n"
93 R_CURLY@[117; 118) "}" 93 R_CURLY@117..118 "}"
diff --git a/crates/ra_syntax/test_data/parser/ok/0009_use_item.rast b/crates/ra_syntax/test_data/parser/ok/0009_use_item.rast
index 62a8ae433..96b8a94fc 100644
--- a/crates/ra_syntax/test_data/parser/ok/0009_use_item.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0009_use_item.rast
@@ -1,21 +1,21 @@
1SOURCE_FILE@[0; 19) 1SOURCE_FILE@0..19
2 USE_ITEM@[0; 8) 2 USE_ITEM@0..8
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 7) 5 USE_TREE@4..7
6 PATH@[4; 7) 6 PATH@4..7
7 PATH_SEGMENT@[4; 7) 7 PATH_SEGMENT@4..7
8 NAME_REF@[4; 7) 8 NAME_REF@4..7
9 IDENT@[4; 7) "foo" 9 IDENT@4..7 "foo"
10 SEMICOLON@[7; 8) ";" 10 SEMICOLON@7..8 ";"
11 WHITESPACE@[8; 9) "\n" 11 WHITESPACE@8..9 "\n"
12 USE_ITEM@[9; 19) 12 USE_ITEM@9..19
13 USE_KW@[9; 12) "use" 13 USE_KW@9..12 "use"
14 WHITESPACE@[12; 13) " " 14 WHITESPACE@12..13 " "
15 USE_TREE@[13; 18) 15 USE_TREE@13..18
16 PATH@[13; 18) 16 PATH@13..18
17 PATH_SEGMENT@[13; 18) 17 PATH_SEGMENT@13..18
18 COLON2@[13; 15) "::" 18 COLON2@13..15 "::"
19 NAME_REF@[15; 18) 19 NAME_REF@15..18
20 IDENT@[15; 18) "bar" 20 IDENT@15..18 "bar"
21 SEMICOLON@[18; 19) ";" 21 SEMICOLON@18..19 ";"
diff --git a/crates/ra_syntax/test_data/parser/ok/0010_use_path_segments.rast b/crates/ra_syntax/test_data/parser/ok/0010_use_path_segments.rast
index f2689e1ed..07272dc3c 100644
--- a/crates/ra_syntax/test_data/parser/ok/0010_use_path_segments.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0010_use_path_segments.rast
@@ -1,42 +1,42 @@
1SOURCE_FILE@[0; 40) 1SOURCE_FILE@0..40
2 USE_ITEM@[0; 20) 2 USE_ITEM@0..20
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 19) 5 USE_TREE@4..19
6 PATH@[4; 19) 6 PATH@4..19
7 PATH@[4; 14) 7 PATH@4..14
8 PATH@[4; 9) 8 PATH@4..9
9 PATH_SEGMENT@[4; 9) 9 PATH_SEGMENT@4..9
10 COLON2@[4; 6) "::" 10 COLON2@4..6 "::"
11 NAME_REF@[6; 9) 11 NAME_REF@6..9
12 IDENT@[6; 9) "foo" 12 IDENT@6..9 "foo"
13 COLON2@[9; 11) "::" 13 COLON2@9..11 "::"
14 PATH_SEGMENT@[11; 14) 14 PATH_SEGMENT@11..14
15 NAME_REF@[11; 14) 15 NAME_REF@11..14
16 IDENT@[11; 14) "bar" 16 IDENT@11..14 "bar"
17 COLON2@[14; 16) "::" 17 COLON2@14..16 "::"
18 PATH_SEGMENT@[16; 19) 18 PATH_SEGMENT@16..19
19 NAME_REF@[16; 19) 19 NAME_REF@16..19
20 IDENT@[16; 19) "baz" 20 IDENT@16..19 "baz"
21 SEMICOLON@[19; 20) ";" 21 SEMICOLON@19..20 ";"
22 WHITESPACE@[20; 21) "\n" 22 WHITESPACE@20..21 "\n"
23 USE_ITEM@[21; 39) 23 USE_ITEM@21..39
24 USE_KW@[21; 24) "use" 24 USE_KW@21..24 "use"
25 WHITESPACE@[24; 25) " " 25 WHITESPACE@24..25 " "
26 USE_TREE@[25; 38) 26 USE_TREE@25..38
27 PATH@[25; 38) 27 PATH@25..38
28 PATH@[25; 33) 28 PATH@25..33
29 PATH@[25; 28) 29 PATH@25..28
30 PATH_SEGMENT@[25; 28) 30 PATH_SEGMENT@25..28
31 NAME_REF@[25; 28) 31 NAME_REF@25..28
32 IDENT@[25; 28) "foo" 32 IDENT@25..28 "foo"
33 COLON2@[28; 30) "::" 33 COLON2@28..30 "::"
34 PATH_SEGMENT@[30; 33) 34 PATH_SEGMENT@30..33
35 NAME_REF@[30; 33) 35 NAME_REF@30..33
36 IDENT@[30; 33) "bar" 36 IDENT@30..33 "bar"
37 COLON2@[33; 35) "::" 37 COLON2@33..35 "::"
38 PATH_SEGMENT@[35; 38) 38 PATH_SEGMENT@35..38
39 NAME_REF@[35; 38) 39 NAME_REF@35..38
40 IDENT@[35; 38) "baz" 40 IDENT@35..38 "baz"
41 SEMICOLON@[38; 39) ";" 41 SEMICOLON@38..39 ";"
42 WHITESPACE@[39; 40) "\n" 42 WHITESPACE@39..40 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0011_outer_attribute.rast b/crates/ra_syntax/test_data/parser/ok/0011_outer_attribute.rast
index 4426d586a..3919cc78b 100644
--- a/crates/ra_syntax/test_data/parser/ok/0011_outer_attribute.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0011_outer_attribute.rast
@@ -1,58 +1,58 @@
1SOURCE_FILE@[0; 60) 1SOURCE_FILE@0..60
2 FN_DEF@[0; 34) 2 FN_DEF@0..34
3 ATTR@[0; 12) 3 ATTR@0..12
4 POUND@[0; 1) "#" 4 POUND@0..1 "#"
5 L_BRACK@[1; 2) "[" 5 L_BRACK@1..2 "["
6 PATH@[2; 5) 6 PATH@2..5
7 PATH_SEGMENT@[2; 5) 7 PATH_SEGMENT@2..5
8 NAME_REF@[2; 5) 8 NAME_REF@2..5
9 IDENT@[2; 5) "cfg" 9 IDENT@2..5 "cfg"
10 TOKEN_TREE@[5; 11) 10 TOKEN_TREE@5..11
11 L_PAREN@[5; 6) "(" 11 L_PAREN@5..6 "("
12 IDENT@[6; 10) "test" 12 IDENT@6..10 "test"
13 R_PAREN@[10; 11) ")" 13 R_PAREN@10..11 ")"
14 R_BRACK@[11; 12) "]" 14 R_BRACK@11..12 "]"
15 WHITESPACE@[12; 13) "\n" 15 WHITESPACE@12..13 "\n"
16 ATTR@[13; 22) 16 ATTR@13..22
17 POUND@[13; 14) "#" 17 POUND@13..14 "#"
18 L_BRACK@[14; 15) "[" 18 L_BRACK@14..15 "["
19 PATH@[15; 21) 19 PATH@15..21
20 PATH_SEGMENT@[15; 21) 20 PATH_SEGMENT@15..21
21 NAME_REF@[15; 21) 21 NAME_REF@15..21
22 IDENT@[15; 21) "ignore" 22 IDENT@15..21 "ignore"
23 R_BRACK@[21; 22) "]" 23 R_BRACK@21..22 "]"
24 WHITESPACE@[22; 23) "\n" 24 WHITESPACE@22..23 "\n"
25 FN_KW@[23; 25) "fn" 25 FN_KW@23..25 "fn"
26 WHITESPACE@[25; 26) " " 26 WHITESPACE@25..26 " "
27 NAME@[26; 29) 27 NAME@26..29
28 IDENT@[26; 29) "foo" 28 IDENT@26..29 "foo"
29 PARAM_LIST@[29; 31) 29 PARAM_LIST@29..31
30 L_PAREN@[29; 30) "(" 30 L_PAREN@29..30 "("
31 R_PAREN@[30; 31) ")" 31 R_PAREN@30..31 ")"
32 WHITESPACE@[31; 32) " " 32 WHITESPACE@31..32 " "
33 BLOCK_EXPR@[32; 34) 33 BLOCK_EXPR@32..34
34 BLOCK@[32; 34) 34 BLOCK@32..34
35 L_CURLY@[32; 33) "{" 35 L_CURLY@32..33 "{"
36 R_CURLY@[33; 34) "}" 36 R_CURLY@33..34 "}"
37 WHITESPACE@[34; 36) "\n\n" 37 WHITESPACE@34..36 "\n\n"
38 MODULE@[36; 59) 38 MODULE@36..59
39 ATTR@[36; 52) 39 ATTR@36..52
40 POUND@[36; 37) "#" 40 POUND@36..37 "#"
41 L_BRACK@[37; 38) "[" 41 L_BRACK@37..38 "["
42 PATH@[38; 42) 42 PATH@38..42
43 PATH_SEGMENT@[38; 42) 43 PATH_SEGMENT@38..42
44 NAME_REF@[38; 42) 44 NAME_REF@38..42
45 IDENT@[38; 42) "path" 45 IDENT@38..42 "path"
46 WHITESPACE@[42; 43) " " 46 WHITESPACE@42..43 " "
47 EQ@[43; 44) "=" 47 EQ@43..44 "="
48 WHITESPACE@[44; 45) " " 48 WHITESPACE@44..45 " "
49 LITERAL@[45; 51) 49 LITERAL@45..51
50 STRING@[45; 51) "\"a.rs\"" 50 STRING@45..51 "\"a.rs\""
51 R_BRACK@[51; 52) "]" 51 R_BRACK@51..52 "]"
52 WHITESPACE@[52; 53) "\n" 52 WHITESPACE@52..53 "\n"
53 MOD_KW@[53; 56) "mod" 53 MOD_KW@53..56 "mod"
54 WHITESPACE@[56; 57) " " 54 WHITESPACE@56..57 " "
55 NAME@[57; 58) 55 NAME@57..58
56 IDENT@[57; 58) "b" 56 IDENT@57..58 "b"
57 SEMICOLON@[58; 59) ";" 57 SEMICOLON@58..59 ";"
58 WHITESPACE@[59; 60) "\n" 58 WHITESPACE@59..60 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0012_visibility.rast b/crates/ra_syntax/test_data/parser/ok/0012_visibility.rast
index c76cf9fe9..750a045ef 100644
--- a/crates/ra_syntax/test_data/parser/ok/0012_visibility.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0012_visibility.rast
@@ -1,107 +1,107 @@
1SOURCE_FILE@[0; 98) 1SOURCE_FILE@0..98
2 FN_DEF@[0; 9) 2 FN_DEF@0..9
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "a" 6 IDENT@3..4 "a"
7 PARAM_LIST@[4; 6) 7 PARAM_LIST@4..6
8 L_PAREN@[4; 5) "(" 8 L_PAREN@4..5 "("
9 R_PAREN@[5; 6) ")" 9 R_PAREN@5..6 ")"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 BLOCK_EXPR@[7; 9) 11 BLOCK_EXPR@7..9
12 BLOCK@[7; 9) 12 BLOCK@7..9
13 L_CURLY@[7; 8) "{" 13 L_CURLY@7..8 "{"
14 R_CURLY@[8; 9) "}" 14 R_CURLY@8..9 "}"
15 WHITESPACE@[9; 10) "\n" 15 WHITESPACE@9..10 "\n"
16 FN_DEF@[10; 23) 16 FN_DEF@10..23
17 VISIBILITY@[10; 13) 17 VISIBILITY@10..13
18 PUB_KW@[10; 13) "pub" 18 PUB_KW@10..13 "pub"
19 WHITESPACE@[13; 14) " " 19 WHITESPACE@13..14 " "
20 FN_KW@[14; 16) "fn" 20 FN_KW@14..16 "fn"
21 WHITESPACE@[16; 17) " " 21 WHITESPACE@16..17 " "
22 NAME@[17; 18) 22 NAME@17..18
23 IDENT@[17; 18) "b" 23 IDENT@17..18 "b"
24 PARAM_LIST@[18; 20) 24 PARAM_LIST@18..20
25 L_PAREN@[18; 19) "(" 25 L_PAREN@18..19 "("
26 R_PAREN@[19; 20) ")" 26 R_PAREN@19..20 ")"
27 WHITESPACE@[20; 21) " " 27 WHITESPACE@20..21 " "
28 BLOCK_EXPR@[21; 23) 28 BLOCK_EXPR@21..23
29 BLOCK@[21; 23) 29 BLOCK@21..23
30 L_CURLY@[21; 22) "{" 30 L_CURLY@21..22 "{"
31 R_CURLY@[22; 23) "}" 31 R_CURLY@22..23 "}"
32 WHITESPACE@[23; 24) "\n" 32 WHITESPACE@23..24 "\n"
33 FN_DEF@[24; 44) 33 FN_DEF@24..44
34 VISIBILITY@[24; 34) 34 VISIBILITY@24..34
35 PUB_KW@[24; 27) "pub" 35 PUB_KW@24..27 "pub"
36 L_PAREN@[27; 28) "(" 36 L_PAREN@27..28 "("
37 CRATE_KW@[28; 33) "crate" 37 CRATE_KW@28..33 "crate"
38 R_PAREN@[33; 34) ")" 38 R_PAREN@33..34 ")"
39 WHITESPACE@[34; 35) " " 39 WHITESPACE@34..35 " "
40 FN_KW@[35; 37) "fn" 40 FN_KW@35..37 "fn"
41 WHITESPACE@[37; 38) " " 41 WHITESPACE@37..38 " "
42 NAME@[38; 39) 42 NAME@38..39
43 IDENT@[38; 39) "c" 43 IDENT@38..39 "c"
44 PARAM_LIST@[39; 41) 44 PARAM_LIST@39..41
45 L_PAREN@[39; 40) "(" 45 L_PAREN@39..40 "("
46 R_PAREN@[40; 41) ")" 46 R_PAREN@40..41 ")"
47 WHITESPACE@[41; 42) " " 47 WHITESPACE@41..42 " "
48 BLOCK_EXPR@[42; 44) 48 BLOCK_EXPR@42..44
49 BLOCK@[42; 44) 49 BLOCK@42..44
50 L_CURLY@[42; 43) "{" 50 L_CURLY@42..43 "{"
51 R_CURLY@[43; 44) "}" 51 R_CURLY@43..44 "}"
52 WHITESPACE@[44; 45) "\n" 52 WHITESPACE@44..45 "\n"
53 FN_DEF@[45; 65) 53 FN_DEF@45..65
54 VISIBILITY@[45; 55) 54 VISIBILITY@45..55
55 PUB_KW@[45; 48) "pub" 55 PUB_KW@45..48 "pub"
56 L_PAREN@[48; 49) "(" 56 L_PAREN@48..49 "("
57 SUPER_KW@[49; 54) "super" 57 SUPER_KW@49..54 "super"
58 R_PAREN@[54; 55) ")" 58 R_PAREN@54..55 ")"
59 WHITESPACE@[55; 56) " " 59 WHITESPACE@55..56 " "
60 FN_KW@[56; 58) "fn" 60 FN_KW@56..58 "fn"
61 WHITESPACE@[58; 59) " " 61 WHITESPACE@58..59 " "
62 NAME@[59; 60) 62 NAME@59..60
63 IDENT@[59; 60) "d" 63 IDENT@59..60 "d"
64 PARAM_LIST@[60; 62) 64 PARAM_LIST@60..62
65 L_PAREN@[60; 61) "(" 65 L_PAREN@60..61 "("
66 R_PAREN@[61; 62) ")" 66 R_PAREN@61..62 ")"
67 WHITESPACE@[62; 63) " " 67 WHITESPACE@62..63 " "
68 BLOCK_EXPR@[63; 65) 68 BLOCK_EXPR@63..65
69 BLOCK@[63; 65) 69 BLOCK@63..65
70 L_CURLY@[63; 64) "{" 70 L_CURLY@63..64 "{"
71 R_CURLY@[64; 65) "}" 71 R_CURLY@64..65 "}"
72 WHITESPACE@[65; 66) "\n" 72 WHITESPACE@65..66 "\n"
73 FN_DEF@[66; 97) 73 FN_DEF@66..97
74 VISIBILITY@[66; 87) 74 VISIBILITY@66..87
75 PUB_KW@[66; 69) "pub" 75 PUB_KW@66..69 "pub"
76 L_PAREN@[69; 70) "(" 76 L_PAREN@69..70 "("
77 IN_KW@[70; 72) "in" 77 IN_KW@70..72 "in"
78 WHITESPACE@[72; 73) " " 78 WHITESPACE@72..73 " "
79 PATH@[73; 86) 79 PATH@73..86
80 PATH@[73; 81) 80 PATH@73..81
81 PATH@[73; 76) 81 PATH@73..76
82 PATH_SEGMENT@[73; 76) 82 PATH_SEGMENT@73..76
83 NAME_REF@[73; 76) 83 NAME_REF@73..76
84 IDENT@[73; 76) "foo" 84 IDENT@73..76 "foo"
85 COLON2@[76; 78) "::" 85 COLON2@76..78 "::"
86 PATH_SEGMENT@[78; 81) 86 PATH_SEGMENT@78..81
87 NAME_REF@[78; 81) 87 NAME_REF@78..81
88 IDENT@[78; 81) "bar" 88 IDENT@78..81 "bar"
89 COLON2@[81; 83) "::" 89 COLON2@81..83 "::"
90 PATH_SEGMENT@[83; 86) 90 PATH_SEGMENT@83..86
91 NAME_REF@[83; 86) 91 NAME_REF@83..86
92 IDENT@[83; 86) "baz" 92 IDENT@83..86 "baz"
93 R_PAREN@[86; 87) ")" 93 R_PAREN@86..87 ")"
94 WHITESPACE@[87; 88) " " 94 WHITESPACE@87..88 " "
95 FN_KW@[88; 90) "fn" 95 FN_KW@88..90 "fn"
96 WHITESPACE@[90; 91) " " 96 WHITESPACE@90..91 " "
97 NAME@[91; 92) 97 NAME@91..92
98 IDENT@[91; 92) "e" 98 IDENT@91..92 "e"
99 PARAM_LIST@[92; 94) 99 PARAM_LIST@92..94
100 L_PAREN@[92; 93) "(" 100 L_PAREN@92..93 "("
101 R_PAREN@[93; 94) ")" 101 R_PAREN@93..94 ")"
102 WHITESPACE@[94; 95) " " 102 WHITESPACE@94..95 " "
103 BLOCK_EXPR@[95; 97) 103 BLOCK_EXPR@95..97
104 BLOCK@[95; 97) 104 BLOCK@95..97
105 L_CURLY@[95; 96) "{" 105 L_CURLY@95..96 "{"
106 R_CURLY@[96; 97) "}" 106 R_CURLY@96..97 "}"
107 WHITESPACE@[97; 98) "\n" 107 WHITESPACE@97..98 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast b/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast
index 552cb3daf..a5a90df7b 100644
--- a/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast
@@ -1,57 +1,57 @@
1SOURCE_FILE@[0; 65) 1SOURCE_FILE@0..65
2 USE_ITEM@[0; 14) 2 USE_ITEM@0..14
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 13) 5 USE_TREE@4..13
6 PATH@[4; 13) 6 PATH@4..13
7 PATH@[4; 8) 7 PATH@4..8
8 PATH_SEGMENT@[4; 8) 8 PATH_SEGMENT@4..8
9 SELF_KW@[4; 8) "self" 9 SELF_KW@4..8 "self"
10 COLON2@[8; 10) "::" 10 COLON2@8..10 "::"
11 PATH_SEGMENT@[10; 13) 11 PATH_SEGMENT@10..13
12 NAME_REF@[10; 13) 12 NAME_REF@10..13
13 IDENT@[10; 13) "foo" 13 IDENT@10..13 "foo"
14 SEMICOLON@[13; 14) ";" 14 SEMICOLON@13..14 ";"
15 WHITESPACE@[14; 15) "\n" 15 WHITESPACE@14..15 "\n"
16 USE_ITEM@[15; 37) 16 USE_ITEM@15..37
17 USE_KW@[15; 18) "use" 17 USE_KW@15..18 "use"
18 WHITESPACE@[18; 19) " " 18 WHITESPACE@18..19 " "
19 USE_TREE@[19; 36) 19 USE_TREE@19..36
20 PATH@[19; 36) 20 PATH@19..36
21 PATH@[19; 31) 21 PATH@19..31
22 PATH@[19; 24) 22 PATH@19..24
23 PATH_SEGMENT@[19; 24) 23 PATH_SEGMENT@19..24
24 SUPER_KW@[19; 24) "super" 24 SUPER_KW@19..24 "super"
25 COLON2@[24; 26) "::" 25 COLON2@24..26 "::"
26 PATH_SEGMENT@[26; 31) 26 PATH_SEGMENT@26..31
27 SUPER_KW@[26; 31) "super" 27 SUPER_KW@26..31 "super"
28 COLON2@[31; 33) "::" 28 COLON2@31..33 "::"
29 PATH_SEGMENT@[33; 36) 29 PATH_SEGMENT@33..36
30 NAME_REF@[33; 36) 30 NAME_REF@33..36
31 IDENT@[33; 36) "bar" 31 IDENT@33..36 "bar"
32 SEMICOLON@[36; 37) ";" 32 SEMICOLON@36..37 ";"
33 WHITESPACE@[37; 38) "\n" 33 WHITESPACE@37..38 "\n"
34 USE_ITEM@[38; 64) 34 USE_ITEM@38..64
35 USE_KW@[38; 41) "use" 35 USE_KW@38..41 "use"
36 WHITESPACE@[41; 42) " " 36 WHITESPACE@41..42 " "
37 USE_TREE@[42; 63) 37 USE_TREE@42..63
38 PATH@[42; 63) 38 PATH@42..63
39 PATH@[42; 58) 39 PATH@42..58
40 PATH@[42; 51) 40 PATH@42..51
41 PATH@[42; 48) 41 PATH@42..48
42 PATH_SEGMENT@[42; 48) 42 PATH_SEGMENT@42..48
43 COLON2@[42; 44) "::" 43 COLON2@42..44 "::"
44 SELF_KW@[44; 48) "self" 44 SELF_KW@44..48 "self"
45 COLON2@[48; 50) "::" 45 COLON2@48..50 "::"
46 PATH_SEGMENT@[50; 51) 46 PATH_SEGMENT@50..51
47 NAME_REF@[50; 51) 47 NAME_REF@50..51
48 IDENT@[50; 51) "a" 48 IDENT@50..51 "a"
49 COLON2@[51; 53) "::" 49 COLON2@51..53 "::"
50 PATH_SEGMENT@[53; 58) 50 PATH_SEGMENT@53..58
51 SUPER_KW@[53; 58) "super" 51 SUPER_KW@53..58 "super"
52 COLON2@[58; 60) "::" 52 COLON2@58..60 "::"
53 PATH_SEGMENT@[60; 63) 53 PATH_SEGMENT@60..63
54 NAME_REF@[60; 63) 54 NAME_REF@60..63
55 IDENT@[60; 63) "bar" 55 IDENT@60..63 "bar"
56 SEMICOLON@[63; 64) ";" 56 SEMICOLON@63..64 ";"
57 WHITESPACE@[64; 65) "\n" 57 WHITESPACE@64..65 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0014_use_tree.rast b/crates/ra_syntax/test_data/parser/ok/0014_use_tree.rast
index 49a68e881..3642c107b 100644
--- a/crates/ra_syntax/test_data/parser/ok/0014_use_tree.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0014_use_tree.rast
@@ -1,95 +1,95 @@
1SOURCE_FILE@[0; 81) 1SOURCE_FILE@0..81
2 USE_ITEM@[0; 6) 2 USE_ITEM@0..6
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 5) 5 USE_TREE@4..5
6 STAR@[4; 5) "*" 6 STAR@4..5 "*"
7 SEMICOLON@[5; 6) ";" 7 SEMICOLON@5..6 ";"
8 WHITESPACE@[6; 7) "\n" 8 WHITESPACE@6..7 "\n"
9 USE_ITEM@[7; 15) 9 USE_ITEM@7..15
10 USE_KW@[7; 10) "use" 10 USE_KW@7..10 "use"
11 WHITESPACE@[10; 11) " " 11 WHITESPACE@10..11 " "
12 USE_TREE@[11; 14) 12 USE_TREE@11..14
13 COLON2@[11; 13) "::" 13 COLON2@11..13 "::"
14 STAR@[13; 14) "*" 14 STAR@13..14 "*"
15 SEMICOLON@[14; 15) ";" 15 SEMICOLON@14..15 ";"
16 WHITESPACE@[15; 16) "\n" 16 WHITESPACE@15..16 "\n"
17 USE_ITEM@[16; 25) 17 USE_ITEM@16..25
18 USE_KW@[16; 19) "use" 18 USE_KW@16..19 "use"
19 WHITESPACE@[19; 20) " " 19 WHITESPACE@19..20 " "
20 USE_TREE@[20; 24) 20 USE_TREE@20..24
21 COLON2@[20; 22) "::" 21 COLON2@20..22 "::"
22 USE_TREE_LIST@[22; 24) 22 USE_TREE_LIST@22..24
23 L_CURLY@[22; 23) "{" 23 L_CURLY@22..23 "{"
24 R_CURLY@[23; 24) "}" 24 R_CURLY@23..24 "}"
25 SEMICOLON@[24; 25) ";" 25 SEMICOLON@24..25 ";"
26 WHITESPACE@[25; 26) "\n" 26 WHITESPACE@25..26 "\n"
27 USE_ITEM@[26; 33) 27 USE_ITEM@26..33
28 USE_KW@[26; 29) "use" 28 USE_KW@26..29 "use"
29 WHITESPACE@[29; 30) " " 29 WHITESPACE@29..30 " "
30 USE_TREE@[30; 32) 30 USE_TREE@30..32
31 USE_TREE_LIST@[30; 32) 31 USE_TREE_LIST@30..32
32 L_CURLY@[30; 31) "{" 32 L_CURLY@30..31 "{"
33 R_CURLY@[31; 32) "}" 33 R_CURLY@31..32 "}"
34 SEMICOLON@[32; 33) ";" 34 SEMICOLON@32..33 ";"
35 WHITESPACE@[33; 34) "\n" 35 WHITESPACE@33..34 "\n"
36 USE_ITEM@[34; 45) 36 USE_ITEM@34..45
37 USE_KW@[34; 37) "use" 37 USE_KW@34..37 "use"
38 WHITESPACE@[37; 38) " " 38 WHITESPACE@37..38 " "
39 USE_TREE@[38; 44) 39 USE_TREE@38..44
40 PATH@[38; 41) 40 PATH@38..41
41 PATH_SEGMENT@[38; 41) 41 PATH_SEGMENT@38..41
42 NAME_REF@[38; 41) 42 NAME_REF@38..41
43 IDENT@[38; 41) "foo" 43 IDENT@38..41 "foo"
44 COLON2@[41; 43) "::" 44 COLON2@41..43 "::"
45 STAR@[43; 44) "*" 45 STAR@43..44 "*"
46 SEMICOLON@[44; 45) ";" 46 SEMICOLON@44..45 ";"
47 WHITESPACE@[45; 46) "\n" 47 WHITESPACE@45..46 "\n"
48 USE_ITEM@[46; 58) 48 USE_ITEM@46..58
49 USE_KW@[46; 49) "use" 49 USE_KW@46..49 "use"
50 WHITESPACE@[49; 50) " " 50 WHITESPACE@49..50 " "
51 USE_TREE@[50; 57) 51 USE_TREE@50..57
52 PATH@[50; 53) 52 PATH@50..53
53 PATH_SEGMENT@[50; 53) 53 PATH_SEGMENT@50..53
54 NAME_REF@[50; 53) 54 NAME_REF@50..53
55 IDENT@[50; 53) "foo" 55 IDENT@50..53 "foo"
56 COLON2@[53; 55) "::" 56 COLON2@53..55 "::"
57 USE_TREE_LIST@[55; 57) 57 USE_TREE_LIST@55..57
58 L_CURLY@[55; 56) "{" 58 L_CURLY@55..56 "{"
59 R_CURLY@[56; 57) "}" 59 R_CURLY@56..57 "}"
60 SEMICOLON@[57; 58) ";" 60 SEMICOLON@57..58 ";"
61 WHITESPACE@[58; 59) "\n" 61 WHITESPACE@58..59 "\n"
62 USE_ITEM@[59; 80) 62 USE_ITEM@59..80
63 USE_KW@[59; 62) "use" 63 USE_KW@59..62 "use"
64 WHITESPACE@[62; 63) " " 64 WHITESPACE@62..63 " "
65 USE_TREE@[63; 79) 65 USE_TREE@63..79
66 PATH@[63; 68) 66 PATH@63..68
67 PATH_SEGMENT@[63; 68) 67 PATH_SEGMENT@63..68
68 COLON2@[63; 65) "::" 68 COLON2@63..65 "::"
69 NAME_REF@[65; 68) 69 NAME_REF@65..68
70 IDENT@[65; 68) "foo" 70 IDENT@65..68 "foo"
71 COLON2@[68; 70) "::" 71 COLON2@68..70 "::"
72 USE_TREE_LIST@[70; 79) 72 USE_TREE_LIST@70..79
73 L_CURLY@[70; 71) "{" 73 L_CURLY@70..71 "{"
74 USE_TREE@[71; 72) 74 USE_TREE@71..72
75 PATH@[71; 72) 75 PATH@71..72
76 PATH_SEGMENT@[71; 72) 76 PATH_SEGMENT@71..72
77 NAME_REF@[71; 72) 77 NAME_REF@71..72
78 IDENT@[71; 72) "a" 78 IDENT@71..72 "a"
79 COMMA@[72; 73) "," 79 COMMA@72..73 ","
80 WHITESPACE@[73; 74) " " 80 WHITESPACE@73..74 " "
81 USE_TREE@[74; 75) 81 USE_TREE@74..75
82 PATH@[74; 75) 82 PATH@74..75
83 PATH_SEGMENT@[74; 75) 83 PATH_SEGMENT@74..75
84 NAME_REF@[74; 75) 84 NAME_REF@74..75
85 IDENT@[74; 75) "b" 85 IDENT@74..75 "b"
86 COMMA@[75; 76) "," 86 COMMA@75..76 ","
87 WHITESPACE@[76; 77) " " 87 WHITESPACE@76..77 " "
88 USE_TREE@[77; 78) 88 USE_TREE@77..78
89 PATH@[77; 78) 89 PATH@77..78
90 PATH_SEGMENT@[77; 78) 90 PATH_SEGMENT@77..78
91 NAME_REF@[77; 78) 91 NAME_REF@77..78
92 IDENT@[77; 78) "c" 92 IDENT@77..78 "c"
93 R_CURLY@[78; 79) "}" 93 R_CURLY@78..79 "}"
94 SEMICOLON@[79; 80) ";" 94 SEMICOLON@79..80 ";"
95 WHITESPACE@[80; 81) "\n" 95 WHITESPACE@80..81 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0015_use_tree.rast b/crates/ra_syntax/test_data/parser/ok/0015_use_tree.rast
index 719ac98ef..09e0050f0 100644
--- a/crates/ra_syntax/test_data/parser/ok/0015_use_tree.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0015_use_tree.rast
@@ -1,65 +1,65 @@
1SOURCE_FILE@[0; 55) 1SOURCE_FILE@0..55
2 USE_ITEM@[0; 15) 2 USE_ITEM@0..15
3 USE_KW@[0; 3) "use" 3 USE_KW@0..3 "use"
4 WHITESPACE@[3; 4) " " 4 WHITESPACE@3..4 " "
5 USE_TREE@[4; 14) 5 USE_TREE@4..14
6 PATH@[4; 7) 6 PATH@4..7
7 PATH_SEGMENT@[4; 7) 7 PATH_SEGMENT@4..7
8 NAME_REF@[4; 7) 8 NAME_REF@4..7
9 IDENT@[4; 7) "foo" 9 IDENT@4..7 "foo"
10 WHITESPACE@[7; 8) " " 10 WHITESPACE@7..8 " "
11 ALIAS@[8; 14) 11 ALIAS@8..14
12 AS_KW@[8; 10) "as" 12 AS_KW@8..10 "as"
13 WHITESPACE@[10; 11) " " 13 WHITESPACE@10..11 " "
14 NAME@[11; 14) 14 NAME@11..14
15 IDENT@[11; 14) "bar" 15 IDENT@11..14 "bar"
16 SEMICOLON@[14; 15) ";" 16 SEMICOLON@14..15 ";"
17 WHITESPACE@[15; 16) "\n" 17 WHITESPACE@15..16 "\n"
18 USE_ITEM@[16; 54) 18 USE_ITEM@16..54
19 USE_KW@[16; 19) "use" 19 USE_KW@16..19 "use"
20 WHITESPACE@[19; 20) " " 20 WHITESPACE@19..20 " "
21 USE_TREE@[20; 53) 21 USE_TREE@20..53
22 PATH@[20; 23) 22 PATH@20..23
23 PATH_SEGMENT@[20; 23) 23 PATH_SEGMENT@20..23
24 NAME_REF@[20; 23) 24 NAME_REF@20..23
25 IDENT@[20; 23) "foo" 25 IDENT@20..23 "foo"
26 COLON2@[23; 25) "::" 26 COLON2@23..25 "::"
27 USE_TREE_LIST@[25; 53) 27 USE_TREE_LIST@25..53
28 L_CURLY@[25; 26) "{" 28 L_CURLY@25..26 "{"
29 USE_TREE@[26; 32) 29 USE_TREE@26..32
30 PATH@[26; 27) 30 PATH@26..27
31 PATH_SEGMENT@[26; 27) 31 PATH_SEGMENT@26..27
32 NAME_REF@[26; 27) 32 NAME_REF@26..27
33 IDENT@[26; 27) "a" 33 IDENT@26..27 "a"
34 WHITESPACE@[27; 28) " " 34 WHITESPACE@27..28 " "
35 ALIAS@[28; 32) 35 ALIAS@28..32
36 AS_KW@[28; 30) "as" 36 AS_KW@28..30 "as"
37 WHITESPACE@[30; 31) " " 37 WHITESPACE@30..31 " "
38 NAME@[31; 32) 38 NAME@31..32
39 IDENT@[31; 32) "b" 39 IDENT@31..32 "b"
40 COMMA@[32; 33) "," 40 COMMA@32..33 ","
41 WHITESPACE@[33; 34) " " 41 WHITESPACE@33..34 " "
42 USE_TREE@[34; 35) 42 USE_TREE@34..35
43 STAR@[34; 35) "*" 43 STAR@34..35 "*"
44 COMMA@[35; 36) "," 44 COMMA@35..36 ","
45 WHITESPACE@[36; 37) " " 45 WHITESPACE@36..37 " "
46 USE_TREE@[37; 40) 46 USE_TREE@37..40
47 COLON2@[37; 39) "::" 47 COLON2@37..39 "::"
48 STAR@[39; 40) "*" 48 STAR@39..40 "*"
49 COMMA@[40; 41) "," 49 COMMA@40..41 ","
50 WHITESPACE@[41; 42) " " 50 WHITESPACE@41..42 " "
51 USE_TREE@[42; 52) 51 USE_TREE@42..52
52 PATH@[42; 47) 52 PATH@42..47
53 PATH_SEGMENT@[42; 47) 53 PATH_SEGMENT@42..47
54 COLON2@[42; 44) "::" 54 COLON2@42..44 "::"
55 NAME_REF@[44; 47) 55 NAME_REF@44..47
56 IDENT@[44; 47) "foo" 56 IDENT@44..47 "foo"
57 WHITESPACE@[47; 48) " " 57 WHITESPACE@47..48 " "
58 ALIAS@[48; 52) 58 ALIAS@48..52
59 AS_KW@[48; 50) "as" 59 AS_KW@48..50 "as"
60 WHITESPACE@[50; 51) " " 60 WHITESPACE@50..51 " "
61 NAME@[51; 52) 61 NAME@51..52
62 IDENT@[51; 52) "x" 62 IDENT@51..52 "x"
63 R_CURLY@[52; 53) "}" 63 R_CURLY@52..53 "}"
64 SEMICOLON@[53; 54) ";" 64 SEMICOLON@53..54 ";"
65 WHITESPACE@[54; 55) "\n" 65 WHITESPACE@54..55 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0016_struct_flavors.rast b/crates/ra_syntax/test_data/parser/ok/0016_struct_flavors.rast
index f4739451e..95656d19b 100644
--- a/crates/ra_syntax/test_data/parser/ok/0016_struct_flavors.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0016_struct_flavors.rast
@@ -1,93 +1,93 @@
1SOURCE_FILE@[0; 97) 1SOURCE_FILE@0..97
2 STRUCT_DEF@[0; 9) 2 STRUCT_DEF@0..9
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "A" 6 IDENT@7..8 "A"
7 SEMICOLON@[8; 9) ";" 7 SEMICOLON@8..9 ";"
8 WHITESPACE@[9; 10) "\n" 8 WHITESPACE@9..10 "\n"
9 STRUCT_DEF@[10; 21) 9 STRUCT_DEF@10..21
10 STRUCT_KW@[10; 16) "struct" 10 STRUCT_KW@10..16 "struct"
11 WHITESPACE@[16; 17) " " 11 WHITESPACE@16..17 " "
12 NAME@[17; 18) 12 NAME@17..18
13 IDENT@[17; 18) "B" 13 IDENT@17..18 "B"
14 WHITESPACE@[18; 19) " " 14 WHITESPACE@18..19 " "
15 RECORD_FIELD_DEF_LIST@[19; 21) 15 RECORD_FIELD_DEF_LIST@19..21
16 L_CURLY@[19; 20) "{" 16 L_CURLY@19..20 "{"
17 R_CURLY@[20; 21) "}" 17 R_CURLY@20..21 "}"
18 WHITESPACE@[21; 22) "\n" 18 WHITESPACE@21..22 "\n"
19 STRUCT_DEF@[22; 33) 19 STRUCT_DEF@22..33
20 STRUCT_KW@[22; 28) "struct" 20 STRUCT_KW@22..28 "struct"
21 WHITESPACE@[28; 29) " " 21 WHITESPACE@28..29 " "
22 NAME@[29; 30) 22 NAME@29..30
23 IDENT@[29; 30) "C" 23 IDENT@29..30 "C"
24 TUPLE_FIELD_DEF_LIST@[30; 32) 24 TUPLE_FIELD_DEF_LIST@30..32
25 L_PAREN@[30; 31) "(" 25 L_PAREN@30..31 "("
26 R_PAREN@[31; 32) ")" 26 R_PAREN@31..32 ")"
27 SEMICOLON@[32; 33) ";" 27 SEMICOLON@32..33 ";"
28 WHITESPACE@[33; 35) "\n\n" 28 WHITESPACE@33..35 "\n\n"
29 STRUCT_DEF@[35; 74) 29 STRUCT_DEF@35..74
30 STRUCT_KW@[35; 41) "struct" 30 STRUCT_KW@35..41 "struct"
31 WHITESPACE@[41; 42) " " 31 WHITESPACE@41..42 " "
32 NAME@[42; 43) 32 NAME@42..43
33 IDENT@[42; 43) "D" 33 IDENT@42..43 "D"
34 WHITESPACE@[43; 44) " " 34 WHITESPACE@43..44 " "
35 RECORD_FIELD_DEF_LIST@[44; 74) 35 RECORD_FIELD_DEF_LIST@44..74
36 L_CURLY@[44; 45) "{" 36 L_CURLY@44..45 "{"
37 WHITESPACE@[45; 50) "\n " 37 WHITESPACE@45..50 "\n "
38 RECORD_FIELD_DEF@[50; 56) 38 RECORD_FIELD_DEF@50..56
39 NAME@[50; 51) 39 NAME@50..51
40 IDENT@[50; 51) "a" 40 IDENT@50..51 "a"
41 COLON@[51; 52) ":" 41 COLON@51..52 ":"
42 WHITESPACE@[52; 53) " " 42 WHITESPACE@52..53 " "
43 PATH_TYPE@[53; 56) 43 PATH_TYPE@53..56
44 PATH@[53; 56) 44 PATH@53..56
45 PATH_SEGMENT@[53; 56) 45 PATH_SEGMENT@53..56
46 NAME_REF@[53; 56) 46 NAME_REF@53..56
47 IDENT@[53; 56) "u32" 47 IDENT@53..56 "u32"
48 COMMA@[56; 57) "," 48 COMMA@56..57 ","
49 WHITESPACE@[57; 62) "\n " 49 WHITESPACE@57..62 "\n "
50 RECORD_FIELD_DEF@[62; 72) 50 RECORD_FIELD_DEF@62..72
51 VISIBILITY@[62; 65) 51 VISIBILITY@62..65
52 PUB_KW@[62; 65) "pub" 52 PUB_KW@62..65 "pub"
53 WHITESPACE@[65; 66) " " 53 WHITESPACE@65..66 " "
54 NAME@[66; 67) 54 NAME@66..67
55 IDENT@[66; 67) "b" 55 IDENT@66..67 "b"
56 COLON@[67; 68) ":" 56 COLON@67..68 ":"
57 WHITESPACE@[68; 69) " " 57 WHITESPACE@68..69 " "
58 PATH_TYPE@[69; 72) 58 PATH_TYPE@69..72
59 PATH@[69; 72) 59 PATH@69..72
60 PATH_SEGMENT@[69; 72) 60 PATH_SEGMENT@69..72
61 NAME_REF@[69; 72) 61 NAME_REF@69..72
62 IDENT@[69; 72) "u32" 62 IDENT@69..72 "u32"
63 WHITESPACE@[72; 73) "\n" 63 WHITESPACE@72..73 "\n"
64 R_CURLY@[73; 74) "}" 64 R_CURLY@73..74 "}"
65 WHITESPACE@[74; 76) "\n\n" 65 WHITESPACE@74..76 "\n\n"
66 STRUCT_DEF@[76; 96) 66 STRUCT_DEF@76..96
67 STRUCT_KW@[76; 82) "struct" 67 STRUCT_KW@76..82 "struct"
68 WHITESPACE@[82; 83) " " 68 WHITESPACE@82..83 " "
69 NAME@[83; 84) 69 NAME@83..84
70 IDENT@[83; 84) "E" 70 IDENT@83..84 "E"
71 TUPLE_FIELD_DEF_LIST@[84; 95) 71 TUPLE_FIELD_DEF_LIST@84..95
72 L_PAREN@[84; 85) "(" 72 L_PAREN@84..85 "("
73 TUPLE_FIELD_DEF@[85; 90) 73 TUPLE_FIELD_DEF@85..90
74 VISIBILITY@[85; 88) 74 VISIBILITY@85..88
75 PUB_KW@[85; 88) "pub" 75 PUB_KW@85..88 "pub"
76 WHITESPACE@[88; 89) " " 76 WHITESPACE@88..89 " "
77 PATH_TYPE@[89; 90) 77 PATH_TYPE@89..90
78 PATH@[89; 90) 78 PATH@89..90
79 PATH_SEGMENT@[89; 90) 79 PATH_SEGMENT@89..90
80 NAME_REF@[89; 90) 80 NAME_REF@89..90
81 IDENT@[89; 90) "x" 81 IDENT@89..90 "x"
82 COMMA@[90; 91) "," 82 COMMA@90..91 ","
83 WHITESPACE@[91; 92) " " 83 WHITESPACE@91..92 " "
84 TUPLE_FIELD_DEF@[92; 93) 84 TUPLE_FIELD_DEF@92..93
85 PATH_TYPE@[92; 93) 85 PATH_TYPE@92..93
86 PATH@[92; 93) 86 PATH@92..93
87 PATH_SEGMENT@[92; 93) 87 PATH_SEGMENT@92..93
88 NAME_REF@[92; 93) 88 NAME_REF@92..93
89 IDENT@[92; 93) "y" 89 IDENT@92..93 "y"
90 COMMA@[93; 94) "," 90 COMMA@93..94 ","
91 R_PAREN@[94; 95) ")" 91 R_PAREN@94..95 ")"
92 SEMICOLON@[95; 96) ";" 92 SEMICOLON@95..96 ";"
93 WHITESPACE@[96; 97) "\n" 93 WHITESPACE@96..97 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0017_attr_trailing_comma.rast b/crates/ra_syntax/test_data/parser/ok/0017_attr_trailing_comma.rast
index 1d65b0d6e..b5747aacd 100644
--- a/crates/ra_syntax/test_data/parser/ok/0017_attr_trailing_comma.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0017_attr_trailing_comma.rast
@@ -1,29 +1,29 @@
1SOURCE_FILE@[0; 23) 1SOURCE_FILE@0..23
2 FN_DEF@[0; 22) 2 FN_DEF@0..22
3 ATTR@[0; 10) 3 ATTR@0..10
4 POUND@[0; 1) "#" 4 POUND@0..1 "#"
5 L_BRACK@[1; 2) "[" 5 L_BRACK@1..2 "["
6 PATH@[2; 5) 6 PATH@2..5
7 PATH_SEGMENT@[2; 5) 7 PATH_SEGMENT@2..5
8 NAME_REF@[2; 5) 8 NAME_REF@2..5
9 IDENT@[2; 5) "foo" 9 IDENT@2..5 "foo"
10 TOKEN_TREE@[5; 9) 10 TOKEN_TREE@5..9
11 L_PAREN@[5; 6) "(" 11 L_PAREN@5..6 "("
12 IDENT@[6; 7) "a" 12 IDENT@6..7 "a"
13 COMMA@[7; 8) "," 13 COMMA@7..8 ","
14 R_PAREN@[8; 9) ")" 14 R_PAREN@8..9 ")"
15 R_BRACK@[9; 10) "]" 15 R_BRACK@9..10 "]"
16 WHITESPACE@[10; 11) "\n" 16 WHITESPACE@10..11 "\n"
17 FN_KW@[11; 13) "fn" 17 FN_KW@11..13 "fn"
18 WHITESPACE@[13; 14) " " 18 WHITESPACE@13..14 " "
19 NAME@[14; 17) 19 NAME@14..17
20 IDENT@[14; 17) "foo" 20 IDENT@14..17 "foo"
21 PARAM_LIST@[17; 19) 21 PARAM_LIST@17..19
22 L_PAREN@[17; 18) "(" 22 L_PAREN@17..18 "("
23 R_PAREN@[18; 19) ")" 23 R_PAREN@18..19 ")"
24 WHITESPACE@[19; 20) " " 24 WHITESPACE@19..20 " "
25 BLOCK_EXPR@[20; 22) 25 BLOCK_EXPR@20..22
26 BLOCK@[20; 22) 26 BLOCK@20..22
27 L_CURLY@[20; 21) "{" 27 L_CURLY@20..21 "{"
28 R_CURLY@[21; 22) "}" 28 R_CURLY@21..22 "}"
29 WHITESPACE@[22; 23) "\n" 29 WHITESPACE@22..23 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0018_struct_type_params.rast b/crates/ra_syntax/test_data/parser/ok/0018_struct_type_params.rast
index 5e859ef29..451634e3f 100644
--- a/crates/ra_syntax/test_data/parser/ok/0018_struct_type_params.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0018_struct_type_params.rast
@@ -1,257 +1,257 @@
1SOURCE_FILE@[0; 290) 1SOURCE_FILE@0..290
2 STRUCT_DEF@[0; 13) 2 STRUCT_DEF@0..13
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 9) 5 NAME@7..9
6 IDENT@[7; 9) "S1" 6 IDENT@7..9 "S1"
7 TYPE_PARAM_LIST@[9; 12) 7 TYPE_PARAM_LIST@9..12
8 L_ANGLE@[9; 10) "<" 8 L_ANGLE@9..10 "<"
9 TYPE_PARAM@[10; 11) 9 TYPE_PARAM@10..11
10 NAME@[10; 11) 10 NAME@10..11
11 IDENT@[10; 11) "T" 11 IDENT@10..11 "T"
12 R_ANGLE@[11; 12) ">" 12 R_ANGLE@11..12 ">"
13 SEMICOLON@[12; 13) ";" 13 SEMICOLON@12..13 ";"
14 WHITESPACE@[13; 14) "\n" 14 WHITESPACE@13..14 "\n"
15 STRUCT_DEF@[14; 32) 15 STRUCT_DEF@14..32
16 STRUCT_KW@[14; 20) "struct" 16 STRUCT_KW@14..20 "struct"
17 WHITESPACE@[20; 21) " " 17 WHITESPACE@20..21 " "
18 NAME@[21; 23) 18 NAME@21..23
19 IDENT@[21; 23) "S2" 19 IDENT@21..23 "S2"
20 TYPE_PARAM_LIST@[23; 26) 20 TYPE_PARAM_LIST@23..26
21 L_ANGLE@[23; 24) "<" 21 L_ANGLE@23..24 "<"
22 TYPE_PARAM@[24; 25) 22 TYPE_PARAM@24..25
23 NAME@[24; 25) 23 NAME@24..25
24 IDENT@[24; 25) "T" 24 IDENT@24..25 "T"
25 R_ANGLE@[25; 26) ">" 25 R_ANGLE@25..26 ">"
26 TUPLE_FIELD_DEF_LIST@[26; 31) 26 TUPLE_FIELD_DEF_LIST@26..31
27 L_PAREN@[26; 27) "(" 27 L_PAREN@26..27 "("
28 TUPLE_FIELD_DEF@[27; 30) 28 TUPLE_FIELD_DEF@27..30
29 PATH_TYPE@[27; 30) 29 PATH_TYPE@27..30
30 PATH@[27; 30) 30 PATH@27..30
31 PATH_SEGMENT@[27; 30) 31 PATH_SEGMENT@27..30
32 NAME_REF@[27; 30) 32 NAME_REF@27..30
33 IDENT@[27; 30) "u32" 33 IDENT@27..30 "u32"
34 R_PAREN@[30; 31) ")" 34 R_PAREN@30..31 ")"
35 SEMICOLON@[31; 32) ";" 35 SEMICOLON@31..32 ";"
36 WHITESPACE@[32; 33) "\n" 36 WHITESPACE@32..33 "\n"
37 STRUCT_DEF@[33; 56) 37 STRUCT_DEF@33..56
38 STRUCT_KW@[33; 39) "struct" 38 STRUCT_KW@33..39 "struct"
39 WHITESPACE@[39; 40) " " 39 WHITESPACE@39..40 " "
40 NAME@[40; 42) 40 NAME@40..42
41 IDENT@[40; 42) "S3" 41 IDENT@40..42 "S3"
42 TYPE_PARAM_LIST@[42; 45) 42 TYPE_PARAM_LIST@42..45
43 L_ANGLE@[42; 43) "<" 43 L_ANGLE@42..43 "<"
44 TYPE_PARAM@[43; 44) 44 TYPE_PARAM@43..44
45 NAME@[43; 44) 45 NAME@43..44
46 IDENT@[43; 44) "T" 46 IDENT@43..44 "T"
47 R_ANGLE@[44; 45) ">" 47 R_ANGLE@44..45 ">"
48 WHITESPACE@[45; 46) " " 48 WHITESPACE@45..46 " "
49 RECORD_FIELD_DEF_LIST@[46; 56) 49 RECORD_FIELD_DEF_LIST@46..56
50 L_CURLY@[46; 47) "{" 50 L_CURLY@46..47 "{"
51 WHITESPACE@[47; 48) " " 51 WHITESPACE@47..48 " "
52 RECORD_FIELD_DEF@[48; 54) 52 RECORD_FIELD_DEF@48..54
53 NAME@[48; 49) 53 NAME@48..49
54 IDENT@[48; 49) "u" 54 IDENT@48..49 "u"
55 COLON@[49; 50) ":" 55 COLON@49..50 ":"
56 WHITESPACE@[50; 51) " " 56 WHITESPACE@50..51 " "
57 PATH_TYPE@[51; 54) 57 PATH_TYPE@51..54
58 PATH@[51; 54) 58 PATH@51..54
59 PATH_SEGMENT@[51; 54) 59 PATH_SEGMENT@51..54
60 NAME_REF@[51; 54) 60 NAME_REF@51..54
61 IDENT@[51; 54) "u32" 61 IDENT@51..54 "u32"
62 WHITESPACE@[54; 55) " " 62 WHITESPACE@54..55 " "
63 R_CURLY@[55; 56) "}" 63 R_CURLY@55..56 "}"
64 WHITESPACE@[56; 58) "\n\n" 64 WHITESPACE@56..58 "\n\n"
65 STRUCT_DEF@[58; 70) 65 STRUCT_DEF@58..70
66 STRUCT_KW@[58; 64) "struct" 66 STRUCT_KW@58..64 "struct"
67 WHITESPACE@[64; 65) " " 67 WHITESPACE@64..65 " "
68 NAME@[65; 67) 68 NAME@65..67
69 IDENT@[65; 67) "S4" 69 IDENT@65..67 "S4"
70 TYPE_PARAM_LIST@[67; 69) 70 TYPE_PARAM_LIST@67..69
71 L_ANGLE@[67; 68) "<" 71 L_ANGLE@67..68 "<"
72 R_ANGLE@[68; 69) ">" 72 R_ANGLE@68..69 ">"
73 SEMICOLON@[69; 70) ";" 73 SEMICOLON@69..70 ";"
74 WHITESPACE@[70; 71) "\n" 74 WHITESPACE@70..71 "\n"
75 STRUCT_DEF@[71; 85) 75 STRUCT_DEF@71..85
76 STRUCT_KW@[71; 77) "struct" 76 STRUCT_KW@71..77 "struct"
77 WHITESPACE@[77; 78) " " 77 WHITESPACE@77..78 " "
78 NAME@[78; 80) 78 NAME@78..80
79 IDENT@[78; 80) "S5" 79 IDENT@78..80 "S5"
80 TYPE_PARAM_LIST@[80; 84) 80 TYPE_PARAM_LIST@80..84
81 L_ANGLE@[80; 81) "<" 81 L_ANGLE@80..81 "<"
82 LIFETIME_PARAM@[81; 83) 82 LIFETIME_PARAM@81..83
83 LIFETIME@[81; 83) "\'a" 83 LIFETIME@81..83 "\'a"
84 R_ANGLE@[83; 84) ">" 84 R_ANGLE@83..84 ">"
85 SEMICOLON@[84; 85) ";" 85 SEMICOLON@84..85 ";"
86 WHITESPACE@[85; 86) "\n" 86 WHITESPACE@85..86 "\n"
87 STRUCT_DEF@[86; 101) 87 STRUCT_DEF@86..101
88 STRUCT_KW@[86; 92) "struct" 88 STRUCT_KW@86..92 "struct"
89 WHITESPACE@[92; 93) " " 89 WHITESPACE@92..93 " "
90 NAME@[93; 95) 90 NAME@93..95
91 IDENT@[93; 95) "S6" 91 IDENT@93..95 "S6"
92 TYPE_PARAM_LIST@[95; 100) 92 TYPE_PARAM_LIST@95..100
93 L_ANGLE@[95; 96) "<" 93 L_ANGLE@95..96 "<"
94 LIFETIME_PARAM@[96; 99) 94 LIFETIME_PARAM@96..99
95 LIFETIME@[96; 98) "\'a" 95 LIFETIME@96..98 "\'a"
96 COLON@[98; 99) ":" 96 COLON@98..99 ":"
97 R_ANGLE@[99; 100) ">" 97 R_ANGLE@99..100 ">"
98 SEMICOLON@[100; 101) ";" 98 SEMICOLON@100..101 ";"
99 WHITESPACE@[101; 102) "\n" 99 WHITESPACE@101..102 "\n"
100 STRUCT_DEF@[102; 120) 100 STRUCT_DEF@102..120
101 STRUCT_KW@[102; 108) "struct" 101 STRUCT_KW@102..108 "struct"
102 WHITESPACE@[108; 109) " " 102 WHITESPACE@108..109 " "
103 NAME@[109; 111) 103 NAME@109..111
104 IDENT@[109; 111) "S7" 104 IDENT@109..111 "S7"
105 TYPE_PARAM_LIST@[111; 119) 105 TYPE_PARAM_LIST@111..119
106 L_ANGLE@[111; 112) "<" 106 L_ANGLE@111..112 "<"
107 LIFETIME_PARAM@[112; 118) 107 LIFETIME_PARAM@112..118
108 LIFETIME@[112; 114) "\'a" 108 LIFETIME@112..114 "\'a"
109 COLON@[114; 115) ":" 109 COLON@114..115 ":"
110 WHITESPACE@[115; 116) " " 110 WHITESPACE@115..116 " "
111 LIFETIME@[116; 118) "\'b" 111 LIFETIME@116..118 "\'b"
112 R_ANGLE@[118; 119) ">" 112 R_ANGLE@118..119 ">"
113 SEMICOLON@[119; 120) ";" 113 SEMICOLON@119..120 ";"
114 WHITESPACE@[120; 121) "\n" 114 WHITESPACE@120..121 "\n"
115 STRUCT_DEF@[121; 142) 115 STRUCT_DEF@121..142
116 STRUCT_KW@[121; 127) "struct" 116 STRUCT_KW@121..127 "struct"
117 WHITESPACE@[127; 128) " " 117 WHITESPACE@127..128 " "
118 NAME@[128; 130) 118 NAME@128..130
119 IDENT@[128; 130) "S8" 119 IDENT@128..130 "S8"
120 TYPE_PARAM_LIST@[130; 141) 120 TYPE_PARAM_LIST@130..141
121 L_ANGLE@[130; 131) "<" 121 L_ANGLE@130..131 "<"
122 LIFETIME_PARAM@[131; 139) 122 LIFETIME_PARAM@131..139
123 LIFETIME@[131; 133) "\'a" 123 LIFETIME@131..133 "\'a"
124 COLON@[133; 134) ":" 124 COLON@133..134 ":"
125 WHITESPACE@[134; 135) " " 125 WHITESPACE@134..135 " "
126 LIFETIME@[135; 137) "\'b" 126 LIFETIME@135..137 "\'b"
127 WHITESPACE@[137; 138) " " 127 WHITESPACE@137..138 " "
128 PLUS@[138; 139) "+" 128 PLUS@138..139 "+"
129 WHITESPACE@[139; 140) " " 129 WHITESPACE@139..140 " "
130 R_ANGLE@[140; 141) ">" 130 R_ANGLE@140..141 ">"
131 SEMICOLON@[141; 142) ";" 131 SEMICOLON@141..142 ";"
132 WHITESPACE@[142; 143) "\n" 132 WHITESPACE@142..143 "\n"
133 STRUCT_DEF@[143; 166) 133 STRUCT_DEF@143..166
134 STRUCT_KW@[143; 149) "struct" 134 STRUCT_KW@143..149 "struct"
135 WHITESPACE@[149; 150) " " 135 WHITESPACE@149..150 " "
136 NAME@[150; 152) 136 NAME@150..152
137 IDENT@[150; 152) "S9" 137 IDENT@150..152 "S9"
138 TYPE_PARAM_LIST@[152; 165) 138 TYPE_PARAM_LIST@152..165
139 L_ANGLE@[152; 153) "<" 139 L_ANGLE@152..153 "<"
140 LIFETIME_PARAM@[153; 164) 140 LIFETIME_PARAM@153..164
141 LIFETIME@[153; 155) "\'a" 141 LIFETIME@153..155 "\'a"
142 COLON@[155; 156) ":" 142 COLON@155..156 ":"
143 WHITESPACE@[156; 157) " " 143 WHITESPACE@156..157 " "
144 LIFETIME@[157; 159) "\'b" 144 LIFETIME@157..159 "\'b"
145 WHITESPACE@[159; 160) " " 145 WHITESPACE@159..160 " "
146 PLUS@[160; 161) "+" 146 PLUS@160..161 "+"
147 WHITESPACE@[161; 162) " " 147 WHITESPACE@161..162 " "
148 LIFETIME@[162; 164) "\'c" 148 LIFETIME@162..164 "\'c"
149 R_ANGLE@[164; 165) ">" 149 R_ANGLE@164..165 ">"
150 SEMICOLON@[165; 166) ";" 150 SEMICOLON@165..166 ";"
151 WHITESPACE@[166; 167) "\n" 151 WHITESPACE@166..167 "\n"
152 STRUCT_DEF@[167; 183) 152 STRUCT_DEF@167..183
153 STRUCT_KW@[167; 173) "struct" 153 STRUCT_KW@167..173 "struct"
154 WHITESPACE@[173; 174) " " 154 WHITESPACE@173..174 " "
155 NAME@[174; 177) 155 NAME@174..177
156 IDENT@[174; 177) "S10" 156 IDENT@174..177 "S10"
157 TYPE_PARAM_LIST@[177; 182) 157 TYPE_PARAM_LIST@177..182
158 L_ANGLE@[177; 178) "<" 158 L_ANGLE@177..178 "<"
159 LIFETIME_PARAM@[178; 180) 159 LIFETIME_PARAM@178..180
160 LIFETIME@[178; 180) "\'a" 160 LIFETIME@178..180 "\'a"
161 COMMA@[180; 181) "," 161 COMMA@180..181 ","
162 R_ANGLE@[181; 182) ">" 162 R_ANGLE@181..182 ">"
163 SEMICOLON@[182; 183) ";" 163 SEMICOLON@182..183 ";"
164 WHITESPACE@[183; 184) "\n" 164 WHITESPACE@183..184 "\n"
165 STRUCT_DEF@[184; 203) 165 STRUCT_DEF@184..203
166 STRUCT_KW@[184; 190) "struct" 166 STRUCT_KW@184..190 "struct"
167 WHITESPACE@[190; 191) " " 167 WHITESPACE@190..191 " "
168 NAME@[191; 194) 168 NAME@191..194
169 IDENT@[191; 194) "S11" 169 IDENT@191..194 "S11"
170 TYPE_PARAM_LIST@[194; 202) 170 TYPE_PARAM_LIST@194..202
171 L_ANGLE@[194; 195) "<" 171 L_ANGLE@194..195 "<"
172 LIFETIME_PARAM@[195; 197) 172 LIFETIME_PARAM@195..197
173 LIFETIME@[195; 197) "\'a" 173 LIFETIME@195..197 "\'a"
174 COMMA@[197; 198) "," 174 COMMA@197..198 ","
175 WHITESPACE@[198; 199) " " 175 WHITESPACE@198..199 " "
176 LIFETIME_PARAM@[199; 201) 176 LIFETIME_PARAM@199..201
177 LIFETIME@[199; 201) "\'b" 177 LIFETIME@199..201 "\'b"
178 R_ANGLE@[201; 202) ">" 178 R_ANGLE@201..202 ">"
179 SEMICOLON@[202; 203) ";" 179 SEMICOLON@202..203 ";"
180 WHITESPACE@[203; 204) "\n" 180 WHITESPACE@203..204 "\n"
181 STRUCT_DEF@[204; 233) 181 STRUCT_DEF@204..233
182 STRUCT_KW@[204; 210) "struct" 182 STRUCT_KW@204..210 "struct"
183 WHITESPACE@[210; 211) " " 183 WHITESPACE@210..211 " "
184 NAME@[211; 214) 184 NAME@211..214
185 IDENT@[211; 214) "S12" 185 IDENT@211..214 "S12"
186 TYPE_PARAM_LIST@[214; 232) 186 TYPE_PARAM_LIST@214..232
187 L_ANGLE@[214; 215) "<" 187 L_ANGLE@214..215 "<"
188 LIFETIME_PARAM@[215; 222) 188 LIFETIME_PARAM@215..222
189 LIFETIME@[215; 217) "\'a" 189 LIFETIME@215..217 "\'a"
190 COLON@[217; 218) ":" 190 COLON@217..218 ":"
191 WHITESPACE@[218; 219) " " 191 WHITESPACE@218..219 " "
192 LIFETIME@[219; 221) "\'b" 192 LIFETIME@219..221 "\'b"
193 PLUS@[221; 222) "+" 193 PLUS@221..222 "+"
194 COMMA@[222; 223) "," 194 COMMA@222..223 ","
195 WHITESPACE@[223; 224) " " 195 WHITESPACE@223..224 " "
196 LIFETIME_PARAM@[224; 230) 196 LIFETIME_PARAM@224..230
197 LIFETIME@[224; 226) "\'b" 197 LIFETIME@224..226 "\'b"
198 COLON@[226; 227) ":" 198 COLON@226..227 ":"
199 WHITESPACE@[227; 228) " " 199 WHITESPACE@227..228 " "
200 LIFETIME@[228; 230) "\'c" 200 LIFETIME@228..230 "\'c"
201 COMMA@[230; 231) "," 201 COMMA@230..231 ","
202 R_ANGLE@[231; 232) ">" 202 R_ANGLE@231..232 ">"
203 SEMICOLON@[232; 233) ";" 203 SEMICOLON@232..233 ";"
204 WHITESPACE@[233; 235) "\n\n" 204 WHITESPACE@233..235 "\n\n"
205 STRUCT_DEF@[235; 249) 205 STRUCT_DEF@235..249
206 STRUCT_KW@[235; 241) "struct" 206 STRUCT_KW@235..241 "struct"
207 WHITESPACE@[241; 242) " " 207 WHITESPACE@241..242 " "
208 NAME@[242; 245) 208 NAME@242..245
209 IDENT@[242; 245) "S13" 209 IDENT@242..245 "S13"
210 TYPE_PARAM_LIST@[245; 248) 210 TYPE_PARAM_LIST@245..248
211 L_ANGLE@[245; 246) "<" 211 L_ANGLE@245..246 "<"
212 TYPE_PARAM@[246; 247) 212 TYPE_PARAM@246..247
213 NAME@[246; 247) 213 NAME@246..247
214 IDENT@[246; 247) "T" 214 IDENT@246..247 "T"
215 R_ANGLE@[247; 248) ">" 215 R_ANGLE@247..248 ">"
216 SEMICOLON@[248; 249) ";" 216 SEMICOLON@248..249 ";"
217 WHITESPACE@[249; 250) "\n" 217 WHITESPACE@249..250 "\n"
218 STRUCT_DEF@[250; 267) 218 STRUCT_DEF@250..267
219 STRUCT_KW@[250; 256) "struct" 219 STRUCT_KW@250..256 "struct"
220 WHITESPACE@[256; 257) " " 220 WHITESPACE@256..257 " "
221 NAME@[257; 260) 221 NAME@257..260
222 IDENT@[257; 260) "S14" 222 IDENT@257..260 "S14"
223 TYPE_PARAM_LIST@[260; 266) 223 TYPE_PARAM_LIST@260..266
224 L_ANGLE@[260; 261) "<" 224 L_ANGLE@260..261 "<"
225 TYPE_PARAM@[261; 262) 225 TYPE_PARAM@261..262
226 NAME@[261; 262) 226 NAME@261..262
227 IDENT@[261; 262) "T" 227 IDENT@261..262 "T"
228 COMMA@[262; 263) "," 228 COMMA@262..263 ","
229 WHITESPACE@[263; 264) " " 229 WHITESPACE@263..264 " "
230 TYPE_PARAM@[264; 265) 230 TYPE_PARAM@264..265
231 NAME@[264; 265) 231 NAME@264..265
232 IDENT@[264; 265) "U" 232 IDENT@264..265 "U"
233 R_ANGLE@[265; 266) ">" 233 R_ANGLE@265..266 ">"
234 SEMICOLON@[266; 267) ";" 234 SEMICOLON@266..267 ";"
235 WHITESPACE@[267; 268) "\n" 235 WHITESPACE@267..268 "\n"
236 STRUCT_DEF@[268; 289) 236 STRUCT_DEF@268..289
237 STRUCT_KW@[268; 274) "struct" 237 STRUCT_KW@268..274 "struct"
238 WHITESPACE@[274; 275) " " 238 WHITESPACE@274..275 " "
239 NAME@[275; 278) 239 NAME@275..278
240 IDENT@[275; 278) "S15" 240 IDENT@275..278 "S15"
241 TYPE_PARAM_LIST@[278; 288) 241 TYPE_PARAM_LIST@278..288
242 L_ANGLE@[278; 279) "<" 242 L_ANGLE@278..279 "<"
243 LIFETIME_PARAM@[279; 281) 243 LIFETIME_PARAM@279..281
244 LIFETIME@[279; 281) "\'a" 244 LIFETIME@279..281 "\'a"
245 COMMA@[281; 282) "," 245 COMMA@281..282 ","
246 WHITESPACE@[282; 283) " " 246 WHITESPACE@282..283 " "
247 TYPE_PARAM@[283; 284) 247 TYPE_PARAM@283..284
248 NAME@[283; 284) 248 NAME@283..284
249 IDENT@[283; 284) "T" 249 IDENT@283..284 "T"
250 COMMA@[284; 285) "," 250 COMMA@284..285 ","
251 WHITESPACE@[285; 286) " " 251 WHITESPACE@285..286 " "
252 TYPE_PARAM@[286; 287) 252 TYPE_PARAM@286..287
253 NAME@[286; 287) 253 NAME@286..287
254 IDENT@[286; 287) "U" 254 IDENT@286..287 "U"
255 R_ANGLE@[287; 288) ">" 255 R_ANGLE@287..288 ">"
256 SEMICOLON@[288; 289) ";" 256 SEMICOLON@288..289 ";"
257 WHITESPACE@[289; 290) "\n" 257 WHITESPACE@289..290 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0019_enums.rast b/crates/ra_syntax/test_data/parser/ok/0019_enums.rast
index 9d4a47a51..f767e9e19 100644
--- a/crates/ra_syntax/test_data/parser/ok/0019_enums.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0019_enums.rast
@@ -1,155 +1,155 @@
1SOURCE_FILE@[0; 182) 1SOURCE_FILE@0..182
2 ENUM_DEF@[0; 11) 2 ENUM_DEF@0..11
3 ENUM_KW@[0; 4) "enum" 3 ENUM_KW@0..4 "enum"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 7) 5 NAME@5..7
6 IDENT@[5; 7) "E1" 6 IDENT@5..7 "E1"
7 WHITESPACE@[7; 8) " " 7 WHITESPACE@7..8 " "
8 ENUM_VARIANT_LIST@[8; 11) 8 ENUM_VARIANT_LIST@8..11
9 L_CURLY@[8; 9) "{" 9 L_CURLY@8..9 "{"
10 WHITESPACE@[9; 10) "\n" 10 WHITESPACE@9..10 "\n"
11 R_CURLY@[10; 11) "}" 11 R_CURLY@10..11 "}"
12 WHITESPACE@[11; 13) "\n\n" 12 WHITESPACE@11..13 "\n\n"
13 ENUM_DEF@[13; 27) 13 ENUM_DEF@13..27
14 ENUM_KW@[13; 17) "enum" 14 ENUM_KW@13..17 "enum"
15 WHITESPACE@[17; 18) " " 15 WHITESPACE@17..18 " "
16 NAME@[18; 20) 16 NAME@18..20
17 IDENT@[18; 20) "E2" 17 IDENT@18..20 "E2"
18 TYPE_PARAM_LIST@[20; 23) 18 TYPE_PARAM_LIST@20..23
19 L_ANGLE@[20; 21) "<" 19 L_ANGLE@20..21 "<"
20 TYPE_PARAM@[21; 22) 20 TYPE_PARAM@21..22
21 NAME@[21; 22) 21 NAME@21..22
22 IDENT@[21; 22) "T" 22 IDENT@21..22 "T"
23 R_ANGLE@[22; 23) ">" 23 R_ANGLE@22..23 ">"
24 WHITESPACE@[23; 24) " " 24 WHITESPACE@23..24 " "
25 ENUM_VARIANT_LIST@[24; 27) 25 ENUM_VARIANT_LIST@24..27
26 L_CURLY@[24; 25) "{" 26 L_CURLY@24..25 "{"
27 WHITESPACE@[25; 26) "\n" 27 WHITESPACE@25..26 "\n"
28 R_CURLY@[26; 27) "}" 28 R_CURLY@26..27 "}"
29 WHITESPACE@[27; 29) "\n\n" 29 WHITESPACE@27..29 "\n\n"
30 ENUM_DEF@[29; 46) 30 ENUM_DEF@29..46
31 ENUM_KW@[29; 33) "enum" 31 ENUM_KW@29..33 "enum"
32 WHITESPACE@[33; 34) " " 32 WHITESPACE@33..34 " "
33 NAME@[34; 36) 33 NAME@34..36
34 IDENT@[34; 36) "E3" 34 IDENT@34..36 "E3"
35 WHITESPACE@[36; 37) " " 35 WHITESPACE@36..37 " "
36 ENUM_VARIANT_LIST@[37; 46) 36 ENUM_VARIANT_LIST@37..46
37 L_CURLY@[37; 38) "{" 37 L_CURLY@37..38 "{"
38 WHITESPACE@[38; 43) "\n " 38 WHITESPACE@38..43 "\n "
39 ENUM_VARIANT@[43; 44) 39 ENUM_VARIANT@43..44
40 NAME@[43; 44) 40 NAME@43..44
41 IDENT@[43; 44) "X" 41 IDENT@43..44 "X"
42 WHITESPACE@[44; 45) "\n" 42 WHITESPACE@44..45 "\n"
43 R_CURLY@[45; 46) "}" 43 R_CURLY@45..46 "}"
44 WHITESPACE@[46; 48) "\n\n" 44 WHITESPACE@46..48 "\n\n"
45 ENUM_DEF@[48; 66) 45 ENUM_DEF@48..66
46 ENUM_KW@[48; 52) "enum" 46 ENUM_KW@48..52 "enum"
47 WHITESPACE@[52; 53) " " 47 WHITESPACE@52..53 " "
48 NAME@[53; 55) 48 NAME@53..55
49 IDENT@[53; 55) "E4" 49 IDENT@53..55 "E4"
50 WHITESPACE@[55; 56) " " 50 WHITESPACE@55..56 " "
51 ENUM_VARIANT_LIST@[56; 66) 51 ENUM_VARIANT_LIST@56..66
52 L_CURLY@[56; 57) "{" 52 L_CURLY@56..57 "{"
53 WHITESPACE@[57; 62) "\n " 53 WHITESPACE@57..62 "\n "
54 ENUM_VARIANT@[62; 63) 54 ENUM_VARIANT@62..63
55 NAME@[62; 63) 55 NAME@62..63
56 IDENT@[62; 63) "X" 56 IDENT@62..63 "X"
57 COMMA@[63; 64) "," 57 COMMA@63..64 ","
58 WHITESPACE@[64; 65) "\n" 58 WHITESPACE@64..65 "\n"
59 R_CURLY@[65; 66) "}" 59 R_CURLY@65..66 "}"
60 WHITESPACE@[66; 68) "\n\n" 60 WHITESPACE@66..68 "\n\n"
61 ENUM_DEF@[68; 181) 61 ENUM_DEF@68..181
62 ENUM_KW@[68; 72) "enum" 62 ENUM_KW@68..72 "enum"
63 WHITESPACE@[72; 73) " " 63 WHITESPACE@72..73 " "
64 NAME@[73; 75) 64 NAME@73..75
65 IDENT@[73; 75) "E5" 65 IDENT@73..75 "E5"
66 WHITESPACE@[75; 76) " " 66 WHITESPACE@75..76 " "
67 ENUM_VARIANT_LIST@[76; 181) 67 ENUM_VARIANT_LIST@76..181
68 L_CURLY@[76; 77) "{" 68 L_CURLY@76..77 "{"
69 WHITESPACE@[77; 82) "\n " 69 WHITESPACE@77..82 "\n "
70 ENUM_VARIANT@[82; 83) 70 ENUM_VARIANT@82..83
71 NAME@[82; 83) 71 NAME@82..83
72 IDENT@[82; 83) "A" 72 IDENT@82..83 "A"
73 COMMA@[83; 84) "," 73 COMMA@83..84 ","
74 WHITESPACE@[84; 89) "\n " 74 WHITESPACE@84..89 "\n "
75 ENUM_VARIANT@[89; 95) 75 ENUM_VARIANT@89..95
76 NAME@[89; 90) 76 NAME@89..90
77 IDENT@[89; 90) "B" 77 IDENT@89..90 "B"
78 WHITESPACE@[90; 91) " " 78 WHITESPACE@90..91 " "
79 EQ@[91; 92) "=" 79 EQ@91..92 "="
80 WHITESPACE@[92; 93) " " 80 WHITESPACE@92..93 " "
81 LITERAL@[93; 95) 81 LITERAL@93..95
82 INT_NUMBER@[93; 95) "92" 82 INT_NUMBER@93..95 "92"
83 COMMA@[95; 96) "," 83 COMMA@95..96 ","
84 WHITESPACE@[96; 101) "\n " 84 WHITESPACE@96..101 "\n "
85 ENUM_VARIANT@[101; 146) 85 ENUM_VARIANT@101..146
86 NAME@[101; 102) 86 NAME@101..102
87 IDENT@[101; 102) "C" 87 IDENT@101..102 "C"
88 WHITESPACE@[102; 103) " " 88 WHITESPACE@102..103 " "
89 RECORD_FIELD_DEF_LIST@[103; 146) 89 RECORD_FIELD_DEF_LIST@103..146
90 L_CURLY@[103; 104) "{" 90 L_CURLY@103..104 "{"
91 WHITESPACE@[104; 113) "\n " 91 WHITESPACE@104..113 "\n "
92 RECORD_FIELD_DEF@[113; 119) 92 RECORD_FIELD_DEF@113..119
93 NAME@[113; 114) 93 NAME@113..114
94 IDENT@[113; 114) "a" 94 IDENT@113..114 "a"
95 COLON@[114; 115) ":" 95 COLON@114..115 ":"
96 WHITESPACE@[115; 116) " " 96 WHITESPACE@115..116 " "
97 PATH_TYPE@[116; 119) 97 PATH_TYPE@116..119
98 PATH@[116; 119) 98 PATH@116..119
99 PATH_SEGMENT@[116; 119) 99 PATH_SEGMENT@116..119
100 NAME_REF@[116; 119) 100 NAME_REF@116..119
101 IDENT@[116; 119) "u32" 101 IDENT@116..119 "u32"
102 COMMA@[119; 120) "," 102 COMMA@119..120 ","
103 WHITESPACE@[120; 129) "\n " 103 WHITESPACE@120..129 "\n "
104 RECORD_FIELD_DEF@[129; 139) 104 RECORD_FIELD_DEF@129..139
105 VISIBILITY@[129; 132) 105 VISIBILITY@129..132
106 PUB_KW@[129; 132) "pub" 106 PUB_KW@129..132 "pub"
107 WHITESPACE@[132; 133) " " 107 WHITESPACE@132..133 " "
108 NAME@[133; 134) 108 NAME@133..134
109 IDENT@[133; 134) "b" 109 IDENT@133..134 "b"
110 COLON@[134; 135) ":" 110 COLON@134..135 ":"
111 WHITESPACE@[135; 136) " " 111 WHITESPACE@135..136 " "
112 PATH_TYPE@[136; 139) 112 PATH_TYPE@136..139
113 PATH@[136; 139) 113 PATH@136..139
114 PATH_SEGMENT@[136; 139) 114 PATH_SEGMENT@136..139
115 NAME_REF@[136; 139) 115 NAME_REF@136..139
116 IDENT@[136; 139) "f64" 116 IDENT@136..139 "f64"
117 COMMA@[139; 140) "," 117 COMMA@139..140 ","
118 WHITESPACE@[140; 145) "\n " 118 WHITESPACE@140..145 "\n "
119 R_CURLY@[145; 146) "}" 119 R_CURLY@145..146 "}"
120 COMMA@[146; 147) "," 120 COMMA@146..147 ","
121 WHITESPACE@[147; 152) "\n " 121 WHITESPACE@147..152 "\n "
122 ENUM_VARIANT@[152; 156) 122 ENUM_VARIANT@152..156
123 NAME@[152; 153) 123 NAME@152..153
124 IDENT@[152; 153) "F" 124 IDENT@152..153 "F"
125 WHITESPACE@[153; 154) " " 125 WHITESPACE@153..154 " "
126 RECORD_FIELD_DEF_LIST@[154; 156) 126 RECORD_FIELD_DEF_LIST@154..156
127 L_CURLY@[154; 155) "{" 127 L_CURLY@154..155 "{"
128 R_CURLY@[155; 156) "}" 128 R_CURLY@155..156 "}"
129 COMMA@[156; 157) "," 129 COMMA@156..157 ","
130 WHITESPACE@[157; 162) "\n " 130 WHITESPACE@157..162 "\n "
131 ENUM_VARIANT@[162; 169) 131 ENUM_VARIANT@162..169
132 NAME@[162; 163) 132 NAME@162..163
133 IDENT@[162; 163) "D" 133 IDENT@162..163 "D"
134 TUPLE_FIELD_DEF_LIST@[163; 169) 134 TUPLE_FIELD_DEF_LIST@163..169
135 L_PAREN@[163; 164) "(" 135 L_PAREN@163..164 "("
136 TUPLE_FIELD_DEF@[164; 167) 136 TUPLE_FIELD_DEF@164..167
137 PATH_TYPE@[164; 167) 137 PATH_TYPE@164..167
138 PATH@[164; 167) 138 PATH@164..167
139 PATH_SEGMENT@[164; 167) 139 PATH_SEGMENT@164..167
140 NAME_REF@[164; 167) 140 NAME_REF@164..167
141 IDENT@[164; 167) "u32" 141 IDENT@164..167 "u32"
142 COMMA@[167; 168) "," 142 COMMA@167..168 ","
143 R_PAREN@[168; 169) ")" 143 R_PAREN@168..169 ")"
144 COMMA@[169; 170) "," 144 COMMA@169..170 ","
145 WHITESPACE@[170; 175) "\n " 145 WHITESPACE@170..175 "\n "
146 ENUM_VARIANT@[175; 178) 146 ENUM_VARIANT@175..178
147 NAME@[175; 176) 147 NAME@175..176
148 IDENT@[175; 176) "E" 148 IDENT@175..176 "E"
149 TUPLE_FIELD_DEF_LIST@[176; 178) 149 TUPLE_FIELD_DEF_LIST@176..178
150 L_PAREN@[176; 177) "(" 150 L_PAREN@176..177 "("
151 R_PAREN@[177; 178) ")" 151 R_PAREN@177..178 ")"
152 COMMA@[178; 179) "," 152 COMMA@178..179 ","
153 WHITESPACE@[179; 180) "\n" 153 WHITESPACE@179..180 "\n"
154 R_CURLY@[180; 181) "}" 154 R_CURLY@180..181 "}"
155 WHITESPACE@[181; 182) "\n" 155 WHITESPACE@181..182 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0020_type_param_bounds.rast b/crates/ra_syntax/test_data/parser/ok/0020_type_param_bounds.rast
index edacc4bd9..4fb4baf56 100644
--- a/crates/ra_syntax/test_data/parser/ok/0020_type_param_bounds.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0020_type_param_bounds.rast
@@ -1,268 +1,268 @@
1SOURCE_FILE@[0; 250) 1SOURCE_FILE@0..250
2 STRUCT_DEF@[0; 12) 2 STRUCT_DEF@0..12
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "A" 6 IDENT@7..8 "A"
7 TYPE_PARAM_LIST@[8; 11) 7 TYPE_PARAM_LIST@8..11
8 L_ANGLE@[8; 9) "<" 8 L_ANGLE@8..9 "<"
9 TYPE_PARAM@[9; 10) 9 TYPE_PARAM@9..10
10 NAME@[9; 10) 10 NAME@9..10
11 IDENT@[9; 10) "T" 11 IDENT@9..10 "T"
12 R_ANGLE@[10; 11) ">" 12 R_ANGLE@10..11 ">"
13 SEMICOLON@[11; 12) ";" 13 SEMICOLON@11..12 ";"
14 WHITESPACE@[12; 13) "\n" 14 WHITESPACE@12..13 "\n"
15 STRUCT_DEF@[13; 26) 15 STRUCT_DEF@13..26
16 STRUCT_KW@[13; 19) "struct" 16 STRUCT_KW@13..19 "struct"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 NAME@[20; 21) 18 NAME@20..21
19 IDENT@[20; 21) "B" 19 IDENT@20..21 "B"
20 TYPE_PARAM_LIST@[21; 25) 20 TYPE_PARAM_LIST@21..25
21 L_ANGLE@[21; 22) "<" 21 L_ANGLE@21..22 "<"
22 TYPE_PARAM@[22; 24) 22 TYPE_PARAM@22..24
23 NAME@[22; 23) 23 NAME@22..23
24 IDENT@[22; 23) "T" 24 IDENT@22..23 "T"
25 COLON@[23; 24) ":" 25 COLON@23..24 ":"
26 TYPE_BOUND_LIST@[24; 24) 26 TYPE_BOUND_LIST@24..24
27 R_ANGLE@[24; 25) ">" 27 R_ANGLE@24..25 ">"
28 SEMICOLON@[25; 26) ";" 28 SEMICOLON@25..26 ";"
29 WHITESPACE@[26; 27) "\n" 29 WHITESPACE@26..27 "\n"
30 STRUCT_DEF@[27; 43) 30 STRUCT_DEF@27..43
31 STRUCT_KW@[27; 33) "struct" 31 STRUCT_KW@27..33 "struct"
32 WHITESPACE@[33; 34) " " 32 WHITESPACE@33..34 " "
33 NAME@[34; 35) 33 NAME@34..35
34 IDENT@[34; 35) "C" 34 IDENT@34..35 "C"
35 TYPE_PARAM_LIST@[35; 42) 35 TYPE_PARAM_LIST@35..42
36 L_ANGLE@[35; 36) "<" 36 L_ANGLE@35..36 "<"
37 TYPE_PARAM@[36; 41) 37 TYPE_PARAM@36..41
38 NAME@[36; 37) 38 NAME@36..37
39 IDENT@[36; 37) "T" 39 IDENT@36..37 "T"
40 COLON@[37; 38) ":" 40 COLON@37..38 ":"
41 WHITESPACE@[38; 39) " " 41 WHITESPACE@38..39 " "
42 TYPE_BOUND_LIST@[39; 41) 42 TYPE_BOUND_LIST@39..41
43 TYPE_BOUND@[39; 41) 43 TYPE_BOUND@39..41
44 LIFETIME@[39; 41) "\'a" 44 LIFETIME@39..41 "\'a"
45 R_ANGLE@[41; 42) ">" 45 R_ANGLE@41..42 ">"
46 SEMICOLON@[42; 43) ";" 46 SEMICOLON@42..43 ";"
47 WHITESPACE@[43; 44) "\n" 47 WHITESPACE@43..44 "\n"
48 STRUCT_DEF@[44; 63) 48 STRUCT_DEF@44..63
49 STRUCT_KW@[44; 50) "struct" 49 STRUCT_KW@44..50 "struct"
50 WHITESPACE@[50; 51) " " 50 WHITESPACE@50..51 " "
51 NAME@[51; 52) 51 NAME@51..52
52 IDENT@[51; 52) "D" 52 IDENT@51..52 "D"
53 TYPE_PARAM_LIST@[52; 62) 53 TYPE_PARAM_LIST@52..62
54 L_ANGLE@[52; 53) "<" 54 L_ANGLE@52..53 "<"
55 TYPE_PARAM@[53; 60) 55 TYPE_PARAM@53..60
56 NAME@[53; 54) 56 NAME@53..54
57 IDENT@[53; 54) "T" 57 IDENT@53..54 "T"
58 COLON@[54; 55) ":" 58 COLON@54..55 ":"
59 WHITESPACE@[55; 56) " " 59 WHITESPACE@55..56 " "
60 TYPE_BOUND_LIST@[56; 60) 60 TYPE_BOUND_LIST@56..60
61 TYPE_BOUND@[56; 58) 61 TYPE_BOUND@56..58
62 LIFETIME@[56; 58) "\'a" 62 LIFETIME@56..58 "\'a"
63 WHITESPACE@[58; 59) " " 63 WHITESPACE@58..59 " "
64 PLUS@[59; 60) "+" 64 PLUS@59..60 "+"
65 WHITESPACE@[60; 61) " " 65 WHITESPACE@60..61 " "
66 R_ANGLE@[61; 62) ">" 66 R_ANGLE@61..62 ">"
67 SEMICOLON@[62; 63) ";" 67 SEMICOLON@62..63 ";"
68 WHITESPACE@[63; 64) "\n" 68 WHITESPACE@63..64 "\n"
69 STRUCT_DEF@[64; 86) 69 STRUCT_DEF@64..86
70 STRUCT_KW@[64; 70) "struct" 70 STRUCT_KW@64..70 "struct"
71 WHITESPACE@[70; 71) " " 71 WHITESPACE@70..71 " "
72 NAME@[71; 72) 72 NAME@71..72
73 IDENT@[71; 72) "E" 73 IDENT@71..72 "E"
74 TYPE_PARAM_LIST@[72; 85) 74 TYPE_PARAM_LIST@72..85
75 L_ANGLE@[72; 73) "<" 75 L_ANGLE@72..73 "<"
76 TYPE_PARAM@[73; 83) 76 TYPE_PARAM@73..83
77 NAME@[73; 74) 77 NAME@73..74
78 IDENT@[73; 74) "T" 78 IDENT@73..74 "T"
79 COLON@[74; 75) ":" 79 COLON@74..75 ":"
80 WHITESPACE@[75; 76) " " 80 WHITESPACE@75..76 " "
81 TYPE_BOUND_LIST@[76; 83) 81 TYPE_BOUND_LIST@76..83
82 TYPE_BOUND@[76; 78) 82 TYPE_BOUND@76..78
83 LIFETIME@[76; 78) "\'a" 83 LIFETIME@76..78 "\'a"
84 WHITESPACE@[78; 79) " " 84 WHITESPACE@78..79 " "
85 PLUS@[79; 80) "+" 85 PLUS@79..80 "+"
86 WHITESPACE@[80; 81) " " 86 WHITESPACE@80..81 " "
87 TYPE_BOUND@[81; 83) 87 TYPE_BOUND@81..83
88 LIFETIME@[81; 83) "\'d" 88 LIFETIME@81..83 "\'d"
89 WHITESPACE@[83; 84) " " 89 WHITESPACE@83..84 " "
90 R_ANGLE@[84; 85) ">" 90 R_ANGLE@84..85 ">"
91 SEMICOLON@[85; 86) ";" 91 SEMICOLON@85..86 ";"
92 WHITESPACE@[86; 87) "\n" 92 WHITESPACE@86..87 "\n"
93 STRUCT_DEF@[87; 116) 93 STRUCT_DEF@87..116
94 STRUCT_KW@[87; 93) "struct" 94 STRUCT_KW@87..93 "struct"
95 WHITESPACE@[93; 94) " " 95 WHITESPACE@93..94 " "
96 NAME@[94; 95) 96 NAME@94..95
97 IDENT@[94; 95) "F" 97 IDENT@94..95 "F"
98 TYPE_PARAM_LIST@[95; 115) 98 TYPE_PARAM_LIST@95..115
99 L_ANGLE@[95; 96) "<" 99 L_ANGLE@95..96 "<"
100 TYPE_PARAM@[96; 114) 100 TYPE_PARAM@96..114
101 NAME@[96; 97) 101 NAME@96..97
102 IDENT@[96; 97) "T" 102 IDENT@96..97 "T"
103 COLON@[97; 98) ":" 103 COLON@97..98 ":"
104 WHITESPACE@[98; 99) " " 104 WHITESPACE@98..99 " "
105 TYPE_BOUND_LIST@[99; 114) 105 TYPE_BOUND_LIST@99..114
106 TYPE_BOUND@[99; 101) 106 TYPE_BOUND@99..101
107 LIFETIME@[99; 101) "\'a" 107 LIFETIME@99..101 "\'a"
108 WHITESPACE@[101; 102) " " 108 WHITESPACE@101..102 " "
109 PLUS@[102; 103) "+" 109 PLUS@102..103 "+"
110 WHITESPACE@[103; 104) " " 110 WHITESPACE@103..104 " "
111 TYPE_BOUND@[104; 106) 111 TYPE_BOUND@104..106
112 LIFETIME@[104; 106) "\'d" 112 LIFETIME@104..106 "\'d"
113 WHITESPACE@[106; 107) " " 113 WHITESPACE@106..107 " "
114 PLUS@[107; 108) "+" 114 PLUS@107..108 "+"
115 WHITESPACE@[108; 109) " " 115 WHITESPACE@108..109 " "
116 TYPE_BOUND@[109; 114) 116 TYPE_BOUND@109..114
117 PATH_TYPE@[109; 114) 117 PATH_TYPE@109..114
118 PATH@[109; 114) 118 PATH@109..114
119 PATH_SEGMENT@[109; 114) 119 PATH_SEGMENT@109..114
120 NAME_REF@[109; 114) 120 NAME_REF@109..114
121 IDENT@[109; 114) "Clone" 121 IDENT@109..114 "Clone"
122 R_ANGLE@[114; 115) ">" 122 R_ANGLE@114..115 ">"
123 SEMICOLON@[115; 116) ";" 123 SEMICOLON@115..116 ";"
124 WHITESPACE@[116; 117) "\n" 124 WHITESPACE@116..117 "\n"
125 STRUCT_DEF@[117; 143) 125 STRUCT_DEF@117..143
126 STRUCT_KW@[117; 123) "struct" 126 STRUCT_KW@117..123 "struct"
127 WHITESPACE@[123; 124) " " 127 WHITESPACE@123..124 " "
128 NAME@[124; 125) 128 NAME@124..125
129 IDENT@[124; 125) "G" 129 IDENT@124..125 "G"
130 TYPE_PARAM_LIST@[125; 142) 130 TYPE_PARAM_LIST@125..142
131 L_ANGLE@[125; 126) "<" 131 L_ANGLE@125..126 "<"
132 TYPE_PARAM@[126; 141) 132 TYPE_PARAM@126..141
133 NAME@[126; 127) 133 NAME@126..127
134 IDENT@[126; 127) "T" 134 IDENT@126..127 "T"
135 COLON@[127; 128) ":" 135 COLON@127..128 ":"
136 WHITESPACE@[128; 129) " " 136 WHITESPACE@128..129 " "
137 TYPE_BOUND_LIST@[129; 141) 137 TYPE_BOUND_LIST@129..141
138 TYPE_BOUND@[129; 134) 138 TYPE_BOUND@129..134
139 PATH_TYPE@[129; 134) 139 PATH_TYPE@129..134
140 PATH@[129; 134) 140 PATH@129..134
141 PATH_SEGMENT@[129; 134) 141 PATH_SEGMENT@129..134
142 NAME_REF@[129; 134) 142 NAME_REF@129..134
143 IDENT@[129; 134) "Clone" 143 IDENT@129..134 "Clone"
144 WHITESPACE@[134; 135) " " 144 WHITESPACE@134..135 " "
145 PLUS@[135; 136) "+" 145 PLUS@135..136 "+"
146 WHITESPACE@[136; 137) " " 146 WHITESPACE@136..137 " "
147 TYPE_BOUND@[137; 141) 147 TYPE_BOUND@137..141
148 PATH_TYPE@[137; 141) 148 PATH_TYPE@137..141
149 PATH@[137; 141) 149 PATH@137..141
150 PATH_SEGMENT@[137; 141) 150 PATH_SEGMENT@137..141
151 NAME_REF@[137; 141) 151 NAME_REF@137..141
152 IDENT@[137; 141) "Copy" 152 IDENT@137..141 "Copy"
153 R_ANGLE@[141; 142) ">" 153 R_ANGLE@141..142 ">"
154 SEMICOLON@[142; 143) ";" 154 SEMICOLON@142..143 ";"
155 WHITESPACE@[143; 144) "\n" 155 WHITESPACE@143..144 "\n"
156 STRUCT_DEF@[144; 180) 156 STRUCT_DEF@144..180
157 STRUCT_KW@[144; 150) "struct" 157 STRUCT_KW@144..150 "struct"
158 WHITESPACE@[150; 151) " " 158 WHITESPACE@150..151 " "
159 NAME@[151; 152) 159 NAME@151..152
160 IDENT@[151; 152) "H" 160 IDENT@151..152 "H"
161 TYPE_PARAM_LIST@[152; 179) 161 TYPE_PARAM_LIST@152..179
162 L_ANGLE@[152; 153) "<" 162 L_ANGLE@152..153 "<"
163 TYPE_PARAM@[153; 178) 163 TYPE_PARAM@153..178
164 NAME@[153; 154) 164 NAME@153..154
165 IDENT@[153; 154) "T" 165 IDENT@153..154 "T"
166 COLON@[154; 155) ":" 166 COLON@154..155 ":"
167 WHITESPACE@[155; 156) " " 167 WHITESPACE@155..156 " "
168 TYPE_BOUND_LIST@[156; 178) 168 TYPE_BOUND_LIST@156..178
169 TYPE_BOUND@[156; 161) 169 TYPE_BOUND@156..161
170 PATH_TYPE@[156; 161) 170 PATH_TYPE@156..161
171 PATH@[156; 161) 171 PATH@156..161
172 PATH_SEGMENT@[156; 161) 172 PATH_SEGMENT@156..161
173 COLON2@[156; 158) "::" 173 COLON2@156..158 "::"
174 NAME_REF@[158; 161) 174 NAME_REF@158..161
175 IDENT@[158; 161) "Foo" 175 IDENT@158..161 "Foo"
176 WHITESPACE@[161; 162) " " 176 WHITESPACE@161..162 " "
177 PLUS@[162; 163) "+" 177 PLUS@162..163 "+"
178 WHITESPACE@[163; 164) " " 178 WHITESPACE@163..164 " "
179 TYPE_BOUND@[164; 173) 179 TYPE_BOUND@164..173
180 PATH_TYPE@[164; 173) 180 PATH_TYPE@164..173
181 PATH@[164; 173) 181 PATH@164..173
182 PATH@[164; 168) 182 PATH@164..168
183 PATH_SEGMENT@[164; 168) 183 PATH_SEGMENT@164..168
184 SELF_KW@[164; 168) "self" 184 SELF_KW@164..168 "self"
185 COLON2@[168; 170) "::" 185 COLON2@168..170 "::"
186 PATH_SEGMENT@[170; 173) 186 PATH_SEGMENT@170..173
187 NAME_REF@[170; 173) 187 NAME_REF@170..173
188 IDENT@[170; 173) "Bar" 188 IDENT@170..173 "Bar"
189 WHITESPACE@[173; 174) " " 189 WHITESPACE@173..174 " "
190 PLUS@[174; 175) "+" 190 PLUS@174..175 "+"
191 WHITESPACE@[175; 176) " " 191 WHITESPACE@175..176 " "
192 TYPE_BOUND@[176; 178) 192 TYPE_BOUND@176..178
193 LIFETIME@[176; 178) "\'a" 193 LIFETIME@176..178 "\'a"
194 R_ANGLE@[178; 179) ">" 194 R_ANGLE@178..179 ">"
195 SEMICOLON@[179; 180) ";" 195 SEMICOLON@179..180 ";"
196 WHITESPACE@[180; 181) "\n" 196 WHITESPACE@180..181 "\n"
197 STRUCT_DEF@[181; 199) 197 STRUCT_DEF@181..199
198 STRUCT_KW@[181; 187) "struct" 198 STRUCT_KW@181..187 "struct"
199 WHITESPACE@[187; 188) " " 199 WHITESPACE@187..188 " "
200 NAME@[188; 189) 200 NAME@188..189
201 IDENT@[188; 189) "I" 201 IDENT@188..189 "I"
202 TYPE_PARAM_LIST@[189; 198) 202 TYPE_PARAM_LIST@189..198
203 L_ANGLE@[189; 190) "<" 203 L_ANGLE@189..190 "<"
204 TYPE_PARAM@[190; 192) 204 TYPE_PARAM@190..192
205 NAME@[190; 191) 205 NAME@190..191
206 IDENT@[190; 191) "T" 206 IDENT@190..191 "T"
207 COLON@[191; 192) ":" 207 COLON@191..192 ":"
208 TYPE_BOUND_LIST@[192; 192) 208 TYPE_BOUND_LIST@192..192
209 COMMA@[192; 193) "," 209 COMMA@192..193 ","
210 WHITESPACE@[193; 194) " " 210 WHITESPACE@193..194 " "
211 TYPE_PARAM@[194; 196) 211 TYPE_PARAM@194..196
212 NAME@[194; 195) 212 NAME@194..195
213 IDENT@[194; 195) "U" 213 IDENT@194..195 "U"
214 COLON@[195; 196) ":" 214 COLON@195..196 ":"
215 TYPE_BOUND_LIST@[196; 196) 215 TYPE_BOUND_LIST@196..196
216 COMMA@[196; 197) "," 216 COMMA@196..197 ","
217 R_ANGLE@[197; 198) ">" 217 R_ANGLE@197..198 ">"
218 SEMICOLON@[198; 199) ";" 218 SEMICOLON@198..199 ";"
219 WHITESPACE@[199; 200) "\n" 219 WHITESPACE@199..200 "\n"
220 STRUCT_DEF@[200; 250) 220 STRUCT_DEF@200..250
221 STRUCT_KW@[200; 206) "struct" 221 STRUCT_KW@200..206 "struct"
222 WHITESPACE@[206; 207) " " 222 WHITESPACE@206..207 " "
223 NAME@[207; 208) 223 NAME@207..208
224 IDENT@[207; 208) "K" 224 IDENT@207..208 "K"
225 TYPE_PARAM_LIST@[208; 249) 225 TYPE_PARAM_LIST@208..249
226 L_ANGLE@[208; 209) "<" 226 L_ANGLE@208..209 "<"
227 LIFETIME_PARAM@[209; 215) 227 LIFETIME_PARAM@209..215
228 LIFETIME@[209; 211) "\'a" 228 LIFETIME@209..211 "\'a"
229 COLON@[211; 212) ":" 229 COLON@211..212 ":"
230 WHITESPACE@[212; 213) " " 230 WHITESPACE@212..213 " "
231 LIFETIME@[213; 215) "\'d" 231 LIFETIME@213..215 "\'d"
232 COMMA@[215; 216) "," 232 COMMA@215..216 ","
233 WHITESPACE@[216; 217) " " 233 WHITESPACE@216..217 " "
234 LIFETIME_PARAM@[217; 228) 234 LIFETIME_PARAM@217..228
235 LIFETIME@[217; 219) "\'d" 235 LIFETIME@217..219 "\'d"
236 COLON@[219; 220) ":" 236 COLON@219..220 ":"
237 WHITESPACE@[220; 221) " " 237 WHITESPACE@220..221 " "
238 LIFETIME@[221; 223) "\'a" 238 LIFETIME@221..223 "\'a"
239 WHITESPACE@[223; 224) " " 239 WHITESPACE@223..224 " "
240 PLUS@[224; 225) "+" 240 PLUS@224..225 "+"
241 WHITESPACE@[225; 226) " " 241 WHITESPACE@225..226 " "
242 LIFETIME@[226; 228) "\'b" 242 LIFETIME@226..228 "\'b"
243 COMMA@[228; 229) "," 243 COMMA@228..229 ","
244 WHITESPACE@[229; 230) " " 244 WHITESPACE@229..230 " "
245 TYPE_PARAM@[230; 248) 245 TYPE_PARAM@230..248
246 NAME@[230; 231) 246 NAME@230..231
247 IDENT@[230; 231) "T" 247 IDENT@230..231 "T"
248 COLON@[231; 232) ":" 248 COLON@231..232 ":"
249 WHITESPACE@[232; 233) " " 249 WHITESPACE@232..233 " "
250 TYPE_BOUND_LIST@[233; 248) 250 TYPE_BOUND_LIST@233..248
251 TYPE_BOUND@[233; 235) 251 TYPE_BOUND@233..235
252 LIFETIME@[233; 235) "\'a" 252 LIFETIME@233..235 "\'a"
253 WHITESPACE@[235; 236) " " 253 WHITESPACE@235..236 " "
254 PLUS@[236; 237) "+" 254 PLUS@236..237 "+"
255 WHITESPACE@[237; 238) " " 255 WHITESPACE@237..238 " "
256 TYPE_BOUND@[238; 240) 256 TYPE_BOUND@238..240
257 LIFETIME@[238; 240) "\'d" 257 LIFETIME@238..240 "\'d"
258 WHITESPACE@[240; 241) " " 258 WHITESPACE@240..241 " "
259 PLUS@[241; 242) "+" 259 PLUS@241..242 "+"
260 WHITESPACE@[242; 243) " " 260 WHITESPACE@242..243 " "
261 TYPE_BOUND@[243; 248) 261 TYPE_BOUND@243..248
262 PATH_TYPE@[243; 248) 262 PATH_TYPE@243..248
263 PATH@[243; 248) 263 PATH@243..248
264 PATH_SEGMENT@[243; 248) 264 PATH_SEGMENT@243..248
265 NAME_REF@[243; 248) 265 NAME_REF@243..248
266 IDENT@[243; 248) "Clone" 266 IDENT@243..248 "Clone"
267 R_ANGLE@[248; 249) ">" 267 R_ANGLE@248..249 ">"
268 SEMICOLON@[249; 250) ";" 268 SEMICOLON@249..250 ";"
diff --git a/crates/ra_syntax/test_data/parser/ok/0021_extern_fn.rast b/crates/ra_syntax/test_data/parser/ok/0021_extern_fn.rast
index 974fb9c44..643a1d16c 100644
--- a/crates/ra_syntax/test_data/parser/ok/0021_extern_fn.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0021_extern_fn.rast
@@ -1,59 +1,59 @@
1SOURCE_FILE@[0; 71) 1SOURCE_FILE@0..71
2 FN_DEF@[0; 19) 2 FN_DEF@0..19
3 ABI@[0; 6) 3 ABI@0..6
4 EXTERN_KW@[0; 6) "extern" 4 EXTERN_KW@0..6 "extern"
5 WHITESPACE@[6; 7) " " 5 WHITESPACE@6..7 " "
6 FN_KW@[7; 9) "fn" 6 FN_KW@7..9 "fn"
7 WHITESPACE@[9; 10) " " 7 WHITESPACE@9..10 " "
8 NAME@[10; 13) 8 NAME@10..13
9 IDENT@[10; 13) "foo" 9 IDENT@10..13 "foo"
10 PARAM_LIST@[13; 15) 10 PARAM_LIST@13..15
11 L_PAREN@[13; 14) "(" 11 L_PAREN@13..14 "("
12 R_PAREN@[14; 15) ")" 12 R_PAREN@14..15 ")"
13 WHITESPACE@[15; 16) " " 13 WHITESPACE@15..16 " "
14 BLOCK_EXPR@[16; 19) 14 BLOCK_EXPR@16..19
15 BLOCK@[16; 19) 15 BLOCK@16..19
16 L_CURLY@[16; 17) "{" 16 L_CURLY@16..17 "{"
17 WHITESPACE@[17; 18) "\n" 17 WHITESPACE@17..18 "\n"
18 R_CURLY@[18; 19) "}" 18 R_CURLY@18..19 "}"
19 WHITESPACE@[19; 21) "\n\n" 19 WHITESPACE@19..21 "\n\n"
20 FN_DEF@[21; 44) 20 FN_DEF@21..44
21 ABI@[21; 31) 21 ABI@21..31
22 EXTERN_KW@[21; 27) "extern" 22 EXTERN_KW@21..27 "extern"
23 WHITESPACE@[27; 28) " " 23 WHITESPACE@27..28 " "
24 STRING@[28; 31) "\"C\"" 24 STRING@28..31 "\"C\""
25 WHITESPACE@[31; 32) " " 25 WHITESPACE@31..32 " "
26 FN_KW@[32; 34) "fn" 26 FN_KW@32..34 "fn"
27 WHITESPACE@[34; 35) " " 27 WHITESPACE@34..35 " "
28 NAME@[35; 38) 28 NAME@35..38
29 IDENT@[35; 38) "bar" 29 IDENT@35..38 "bar"
30 PARAM_LIST@[38; 40) 30 PARAM_LIST@38..40
31 L_PAREN@[38; 39) "(" 31 L_PAREN@38..39 "("
32 R_PAREN@[39; 40) ")" 32 R_PAREN@39..40 ")"
33 WHITESPACE@[40; 41) " " 33 WHITESPACE@40..41 " "
34 BLOCK_EXPR@[41; 44) 34 BLOCK_EXPR@41..44
35 BLOCK@[41; 44) 35 BLOCK@41..44
36 L_CURLY@[41; 42) "{" 36 L_CURLY@41..42 "{"
37 WHITESPACE@[42; 43) "\n" 37 WHITESPACE@42..43 "\n"
38 R_CURLY@[43; 44) "}" 38 R_CURLY@43..44 "}"
39 WHITESPACE@[44; 46) "\n\n" 39 WHITESPACE@44..46 "\n\n"
40 FN_DEF@[46; 70) 40 FN_DEF@46..70
41 ABI@[46; 57) 41 ABI@46..57
42 EXTERN_KW@[46; 52) "extern" 42 EXTERN_KW@46..52 "extern"
43 WHITESPACE@[52; 53) " " 43 WHITESPACE@52..53 " "
44 RAW_STRING@[53; 57) "r\"D\"" 44 RAW_STRING@53..57 "r\"D\""
45 WHITESPACE@[57; 58) " " 45 WHITESPACE@57..58 " "
46 FN_KW@[58; 60) "fn" 46 FN_KW@58..60 "fn"
47 WHITESPACE@[60; 61) " " 47 WHITESPACE@60..61 " "
48 NAME@[61; 64) 48 NAME@61..64
49 IDENT@[61; 64) "baz" 49 IDENT@61..64 "baz"
50 PARAM_LIST@[64; 66) 50 PARAM_LIST@64..66
51 L_PAREN@[64; 65) "(" 51 L_PAREN@64..65 "("
52 R_PAREN@[65; 66) ")" 52 R_PAREN@65..66 ")"
53 WHITESPACE@[66; 67) " " 53 WHITESPACE@66..67 " "
54 BLOCK_EXPR@[67; 70) 54 BLOCK_EXPR@67..70
55 BLOCK@[67; 70) 55 BLOCK@67..70
56 L_CURLY@[67; 68) "{" 56 L_CURLY@67..68 "{"
57 WHITESPACE@[68; 69) "\n" 57 WHITESPACE@68..69 "\n"
58 R_CURLY@[69; 70) "}" 58 R_CURLY@69..70 "}"
59 WHITESPACE@[70; 71) "\n" 59 WHITESPACE@70..71 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0022_empty_extern_block.rast b/crates/ra_syntax/test_data/parser/ok/0022_empty_extern_block.rast
index bbbd95fd9..26abae3b2 100644
--- a/crates/ra_syntax/test_data/parser/ok/0022_empty_extern_block.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0022_empty_extern_block.rast
@@ -1,21 +1,21 @@
1SOURCE_FILE@[0; 27) 1SOURCE_FILE@0..27
2 EXTERN_BLOCK@[0; 10) 2 EXTERN_BLOCK@0..10
3 ABI@[0; 6) 3 ABI@0..6
4 EXTERN_KW@[0; 6) "extern" 4 EXTERN_KW@0..6 "extern"
5 WHITESPACE@[6; 7) " " 5 WHITESPACE@6..7 " "
6 EXTERN_ITEM_LIST@[7; 10) 6 EXTERN_ITEM_LIST@7..10
7 L_CURLY@[7; 8) "{" 7 L_CURLY@7..8 "{"
8 WHITESPACE@[8; 9) "\n" 8 WHITESPACE@8..9 "\n"
9 R_CURLY@[9; 10) "}" 9 R_CURLY@9..10 "}"
10 WHITESPACE@[10; 12) "\n\n" 10 WHITESPACE@10..12 "\n\n"
11 EXTERN_BLOCK@[12; 26) 11 EXTERN_BLOCK@12..26
12 ABI@[12; 22) 12 ABI@12..22
13 EXTERN_KW@[12; 18) "extern" 13 EXTERN_KW@12..18 "extern"
14 WHITESPACE@[18; 19) " " 14 WHITESPACE@18..19 " "
15 STRING@[19; 22) "\"C\"" 15 STRING@19..22 "\"C\""
16 WHITESPACE@[22; 23) " " 16 WHITESPACE@22..23 " "
17 EXTERN_ITEM_LIST@[23; 26) 17 EXTERN_ITEM_LIST@23..26
18 L_CURLY@[23; 24) "{" 18 L_CURLY@23..24 "{"
19 WHITESPACE@[24; 25) "\n" 19 WHITESPACE@24..25 "\n"
20 R_CURLY@[25; 26) "}" 20 R_CURLY@25..26 "}"
21 WHITESPACE@[26; 27) "\n" 21 WHITESPACE@26..27 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0023_static_items.rast b/crates/ra_syntax/test_data/parser/ok/0023_static_items.rast
index dadf24fa6..97d90dc75 100644
--- a/crates/ra_syntax/test_data/parser/ok/0023_static_items.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0023_static_items.rast
@@ -1,41 +1,41 @@
1SOURCE_FILE@[0; 47) 1SOURCE_FILE@0..47
2 STATIC_DEF@[0; 20) 2 STATIC_DEF@0..20
3 STATIC_KW@[0; 6) "static" 3 STATIC_KW@0..6 "static"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 10) 5 NAME@7..10
6 IDENT@[7; 10) "FOO" 6 IDENT@7..10 "FOO"
7 COLON@[10; 11) ":" 7 COLON@10..11 ":"
8 WHITESPACE@[11; 12) " " 8 WHITESPACE@11..12 " "
9 PATH_TYPE@[12; 15) 9 PATH_TYPE@12..15
10 PATH@[12; 15) 10 PATH@12..15
11 PATH_SEGMENT@[12; 15) 11 PATH_SEGMENT@12..15
12 NAME_REF@[12; 15) 12 NAME_REF@12..15
13 IDENT@[12; 15) "u32" 13 IDENT@12..15 "u32"
14 WHITESPACE@[15; 16) " " 14 WHITESPACE@15..16 " "
15 EQ@[16; 17) "=" 15 EQ@16..17 "="
16 WHITESPACE@[17; 18) " " 16 WHITESPACE@17..18 " "
17 LITERAL@[18; 19) 17 LITERAL@18..19
18 INT_NUMBER@[18; 19) "1" 18 INT_NUMBER@18..19 "1"
19 SEMICOLON@[19; 20) ";" 19 SEMICOLON@19..20 ";"
20 WHITESPACE@[20; 21) "\n" 20 WHITESPACE@20..21 "\n"
21 STATIC_DEF@[21; 46) 21 STATIC_DEF@21..46
22 STATIC_KW@[21; 27) "static" 22 STATIC_KW@21..27 "static"
23 WHITESPACE@[27; 28) " " 23 WHITESPACE@27..28 " "
24 MUT_KW@[28; 31) "mut" 24 MUT_KW@28..31 "mut"
25 WHITESPACE@[31; 32) " " 25 WHITESPACE@31..32 " "
26 NAME@[32; 35) 26 NAME@32..35
27 IDENT@[32; 35) "BAR" 27 IDENT@32..35 "BAR"
28 COLON@[35; 36) ":" 28 COLON@35..36 ":"
29 WHITESPACE@[36; 37) " " 29 WHITESPACE@36..37 " "
30 PATH_TYPE@[37; 40) 30 PATH_TYPE@37..40
31 PATH@[37; 40) 31 PATH@37..40
32 PATH_SEGMENT@[37; 40) 32 PATH_SEGMENT@37..40
33 NAME_REF@[37; 40) 33 NAME_REF@37..40
34 IDENT@[37; 40) "i32" 34 IDENT@37..40 "i32"
35 WHITESPACE@[40; 41) " " 35 WHITESPACE@40..41 " "
36 EQ@[41; 42) "=" 36 EQ@41..42 "="
37 WHITESPACE@[42; 43) " " 37 WHITESPACE@42..43 " "
38 LITERAL@[43; 45) 38 LITERAL@43..45
39 INT_NUMBER@[43; 45) "92" 39 INT_NUMBER@43..45 "92"
40 SEMICOLON@[45; 46) ";" 40 SEMICOLON@45..46 ";"
41 WHITESPACE@[46; 47) "\n" 41 WHITESPACE@46..47 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0024_const_item.rast b/crates/ra_syntax/test_data/parser/ok/0024_const_item.rast
index 262e31f7f..d241f034c 100644
--- a/crates/ra_syntax/test_data/parser/ok/0024_const_item.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0024_const_item.rast
@@ -1,59 +1,59 @@
1SOURCE_FILE@[0; 64) 1SOURCE_FILE@0..64
2 CONST_DEF@[0; 17) 2 CONST_DEF@0..17
3 CONST_KW@[0; 5) "const" 3 CONST_KW@0..5 "const"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 UNDERSCORE@[6; 7) "_" 5 UNDERSCORE@6..7 "_"
6 COLON@[7; 8) ":" 6 COLON@7..8 ":"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 PATH_TYPE@[9; 12) 8 PATH_TYPE@9..12
9 PATH@[9; 12) 9 PATH@9..12
10 PATH_SEGMENT@[9; 12) 10 PATH_SEGMENT@9..12
11 NAME_REF@[9; 12) 11 NAME_REF@9..12
12 IDENT@[9; 12) "u32" 12 IDENT@9..12 "u32"
13 WHITESPACE@[12; 13) " " 13 WHITESPACE@12..13 " "
14 EQ@[13; 14) "=" 14 EQ@13..14 "="
15 WHITESPACE@[14; 15) " " 15 WHITESPACE@14..15 " "
16 LITERAL@[15; 16) 16 LITERAL@15..16
17 INT_NUMBER@[15; 16) "0" 17 INT_NUMBER@15..16 "0"
18 SEMICOLON@[16; 17) ";" 18 SEMICOLON@16..17 ";"
19 WHITESPACE@[17; 18) "\n" 19 WHITESPACE@17..18 "\n"
20 CONST_DEF@[18; 38) 20 CONST_DEF@18..38
21 CONST_KW@[18; 23) "const" 21 CONST_KW@18..23 "const"
22 WHITESPACE@[23; 24) " " 22 WHITESPACE@23..24 " "
23 NAME@[24; 27) 23 NAME@24..27
24 IDENT@[24; 27) "FOO" 24 IDENT@24..27 "FOO"
25 COLON@[27; 28) ":" 25 COLON@27..28 ":"
26 WHITESPACE@[28; 29) " " 26 WHITESPACE@28..29 " "
27 PATH_TYPE@[29; 32) 27 PATH_TYPE@29..32
28 PATH@[29; 32) 28 PATH@29..32
29 PATH_SEGMENT@[29; 32) 29 PATH_SEGMENT@29..32
30 NAME_REF@[29; 32) 30 NAME_REF@29..32
31 IDENT@[29; 32) "u32" 31 IDENT@29..32 "u32"
32 WHITESPACE@[32; 33) " " 32 WHITESPACE@32..33 " "
33 EQ@[33; 34) "=" 33 EQ@33..34 "="
34 WHITESPACE@[34; 35) " " 34 WHITESPACE@34..35 " "
35 LITERAL@[35; 37) 35 LITERAL@35..37
36 INT_NUMBER@[35; 37) "92" 36 INT_NUMBER@35..37 "92"
37 SEMICOLON@[37; 38) ";" 37 SEMICOLON@37..38 ";"
38 WHITESPACE@[38; 39) "\n" 38 WHITESPACE@38..39 "\n"
39 CONST_DEF@[39; 63) 39 CONST_DEF@39..63
40 CONST_KW@[39; 44) "const" 40 CONST_KW@39..44 "const"
41 WHITESPACE@[44; 45) " " 41 WHITESPACE@44..45 " "
42 MUT_KW@[45; 48) "mut" 42 MUT_KW@45..48 "mut"
43 WHITESPACE@[48; 49) " " 43 WHITESPACE@48..49 " "
44 NAME@[49; 52) 44 NAME@49..52
45 IDENT@[49; 52) "BAR" 45 IDENT@49..52 "BAR"
46 COLON@[52; 53) ":" 46 COLON@52..53 ":"
47 WHITESPACE@[53; 54) " " 47 WHITESPACE@53..54 " "
48 PATH_TYPE@[54; 57) 48 PATH_TYPE@54..57
49 PATH@[54; 57) 49 PATH@54..57
50 PATH_SEGMENT@[54; 57) 50 PATH_SEGMENT@54..57
51 NAME_REF@[54; 57) 51 NAME_REF@54..57
52 IDENT@[54; 57) "u32" 52 IDENT@54..57 "u32"
53 WHITESPACE@[57; 58) " " 53 WHITESPACE@57..58 " "
54 EQ@[58; 59) "=" 54 EQ@58..59 "="
55 WHITESPACE@[59; 60) " " 55 WHITESPACE@59..60 " "
56 LITERAL@[60; 62) 56 LITERAL@60..62
57 INT_NUMBER@[60; 62) "62" 57 INT_NUMBER@60..62 "62"
58 SEMICOLON@[62; 63) ";" 58 SEMICOLON@62..63 ";"
59 WHITESPACE@[63; 64) "\n" 59 WHITESPACE@63..64 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0025_extern_fn_in_block.rast b/crates/ra_syntax/test_data/parser/ok/0025_extern_fn_in_block.rast
index f5a7a1a5a..60af55837 100644
--- a/crates/ra_syntax/test_data/parser/ok/0025_extern_fn_in_block.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0025_extern_fn_in_block.rast
@@ -1,33 +1,33 @@
1SOURCE_FILE@[0; 35) 1SOURCE_FILE@0..35
2 FN_DEF@[0; 34) 2 FN_DEF@0..34
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 34) 11 BLOCK_EXPR@10..34
12 BLOCK@[10; 34) 12 BLOCK@10..34
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 FN_DEF@[16; 32) 15 FN_DEF@16..32
16 ABI@[16; 22) 16 ABI@16..22
17 EXTERN_KW@[16; 22) "extern" 17 EXTERN_KW@16..22 "extern"
18 WHITESPACE@[22; 23) " " 18 WHITESPACE@22..23 " "
19 FN_KW@[23; 25) "fn" 19 FN_KW@23..25 "fn"
20 WHITESPACE@[25; 26) " " 20 WHITESPACE@25..26 " "
21 NAME@[26; 27) 21 NAME@26..27
22 IDENT@[26; 27) "f" 22 IDENT@26..27 "f"
23 PARAM_LIST@[27; 29) 23 PARAM_LIST@27..29
24 L_PAREN@[27; 28) "(" 24 L_PAREN@27..28 "("
25 R_PAREN@[28; 29) ")" 25 R_PAREN@28..29 ")"
26 WHITESPACE@[29; 30) " " 26 WHITESPACE@29..30 " "
27 BLOCK_EXPR@[30; 32) 27 BLOCK_EXPR@30..32
28 BLOCK@[30; 32) 28 BLOCK@30..32
29 L_CURLY@[30; 31) "{" 29 L_CURLY@30..31 "{"
30 R_CURLY@[31; 32) "}" 30 R_CURLY@31..32 "}"
31 WHITESPACE@[32; 33) "\n" 31 WHITESPACE@32..33 "\n"
32 R_CURLY@[33; 34) "}" 32 R_CURLY@33..34 "}"
33 WHITESPACE@[34; 35) "\n" 33 WHITESPACE@34..35 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0026_const_fn_in_block.rast b/crates/ra_syntax/test_data/parser/ok/0026_const_fn_in_block.rast
index f9b1dcf1a..4432c0163 100644
--- a/crates/ra_syntax/test_data/parser/ok/0026_const_fn_in_block.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0026_const_fn_in_block.rast
@@ -1,32 +1,32 @@
1SOURCE_FILE@[0; 34) 1SOURCE_FILE@0..34
2 FN_DEF@[0; 33) 2 FN_DEF@0..33
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 33) 11 BLOCK_EXPR@10..33
12 BLOCK@[10; 33) 12 BLOCK@10..33
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 FN_DEF@[16; 31) 15 FN_DEF@16..31
16 CONST_KW@[16; 21) "const" 16 CONST_KW@16..21 "const"
17 WHITESPACE@[21; 22) " " 17 WHITESPACE@21..22 " "
18 FN_KW@[22; 24) "fn" 18 FN_KW@22..24 "fn"
19 WHITESPACE@[24; 25) " " 19 WHITESPACE@24..25 " "
20 NAME@[25; 26) 20 NAME@25..26
21 IDENT@[25; 26) "f" 21 IDENT@25..26 "f"
22 PARAM_LIST@[26; 28) 22 PARAM_LIST@26..28
23 L_PAREN@[26; 27) "(" 23 L_PAREN@26..27 "("
24 R_PAREN@[27; 28) ")" 24 R_PAREN@27..28 ")"
25 WHITESPACE@[28; 29) " " 25 WHITESPACE@28..29 " "
26 BLOCK_EXPR@[29; 31) 26 BLOCK_EXPR@29..31
27 BLOCK@[29; 31) 27 BLOCK@29..31
28 L_CURLY@[29; 30) "{" 28 L_CURLY@29..30 "{"
29 R_CURLY@[30; 31) "}" 29 R_CURLY@30..31 "}"
30 WHITESPACE@[31; 32) "\n" 30 WHITESPACE@31..32 "\n"
31 R_CURLY@[32; 33) "}" 31 R_CURLY@32..33 "}"
32 WHITESPACE@[33; 34) "\n" 32 WHITESPACE@33..34 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0027_unsafe_fn_in_block.rast b/crates/ra_syntax/test_data/parser/ok/0027_unsafe_fn_in_block.rast
index 9fb7b70a0..c0162c609 100644
--- a/crates/ra_syntax/test_data/parser/ok/0027_unsafe_fn_in_block.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0027_unsafe_fn_in_block.rast
@@ -1,43 +1,43 @@
1SOURCE_FILE@[0; 53) 1SOURCE_FILE@0..53
2 FN_DEF@[0; 52) 2 FN_DEF@0..52
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 52) 11 BLOCK_EXPR@10..52
12 BLOCK@[10; 52) 12 BLOCK@10..52
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 FN_DEF@[16; 32) 15 FN_DEF@16..32
16 UNSAFE_KW@[16; 22) "unsafe" 16 UNSAFE_KW@16..22 "unsafe"
17 WHITESPACE@[22; 23) " " 17 WHITESPACE@22..23 " "
18 FN_KW@[23; 25) "fn" 18 FN_KW@23..25 "fn"
19 WHITESPACE@[25; 26) " " 19 WHITESPACE@25..26 " "
20 NAME@[26; 27) 20 NAME@26..27
21 IDENT@[26; 27) "f" 21 IDENT@26..27 "f"
22 PARAM_LIST@[27; 29) 22 PARAM_LIST@27..29
23 L_PAREN@[27; 28) "(" 23 L_PAREN@27..28 "("
24 R_PAREN@[28; 29) ")" 24 R_PAREN@28..29 ")"
25 WHITESPACE@[29; 30) " " 25 WHITESPACE@29..30 " "
26 BLOCK_EXPR@[30; 32) 26 BLOCK_EXPR@30..32
27 BLOCK@[30; 32) 27 BLOCK@30..32
28 L_CURLY@[30; 31) "{" 28 L_CURLY@30..31 "{"
29 R_CURLY@[31; 32) "}" 29 R_CURLY@31..32 "}"
30 WHITESPACE@[32; 37) "\n " 30 WHITESPACE@32..37 "\n "
31 BLOCK_EXPR@[37; 50) 31 BLOCK_EXPR@37..50
32 UNSAFE_KW@[37; 43) "unsafe" 32 UNSAFE_KW@37..43 "unsafe"
33 WHITESPACE@[43; 44) " " 33 WHITESPACE@43..44 " "
34 BLOCK@[44; 50) 34 BLOCK@44..50
35 L_CURLY@[44; 45) "{" 35 L_CURLY@44..45 "{"
36 WHITESPACE@[45; 46) " " 36 WHITESPACE@45..46 " "
37 LITERAL@[46; 48) 37 LITERAL@46..48
38 INT_NUMBER@[46; 48) "92" 38 INT_NUMBER@46..48 "92"
39 WHITESPACE@[48; 49) " " 39 WHITESPACE@48..49 " "
40 R_CURLY@[49; 50) "}" 40 R_CURLY@49..50 "}"
41 WHITESPACE@[50; 51) "\n" 41 WHITESPACE@50..51 "\n"
42 R_CURLY@[51; 52) "}" 42 R_CURLY@51..52 "}"
43 WHITESPACE@[52; 53) "\n" 43 WHITESPACE@52..53 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0028_operator_binding_power.rast b/crates/ra_syntax/test_data/parser/ok/0028_operator_binding_power.rast
index 5542f7701..6c0daef52 100644
--- a/crates/ra_syntax/test_data/parser/ok/0028_operator_binding_power.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0028_operator_binding_power.rast
@@ -1,186 +1,186 @@
1SOURCE_FILE@[0; 248) 1SOURCE_FILE@0..248
2 FN_DEF@[0; 247) 2 FN_DEF@0..247
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 16) 5 NAME@3..16
6 IDENT@[3; 16) "binding_power" 6 IDENT@3..16 "binding_power"
7 PARAM_LIST@[16; 18) 7 PARAM_LIST@16..18
8 L_PAREN@[16; 17) "(" 8 L_PAREN@16..17 "("
9 R_PAREN@[17; 18) ")" 9 R_PAREN@17..18 ")"
10 WHITESPACE@[18; 19) " " 10 WHITESPACE@18..19 " "
11 BLOCK_EXPR@[19; 247) 11 BLOCK_EXPR@19..247
12 BLOCK@[19; 247) 12 BLOCK@19..247
13 L_CURLY@[19; 20) "{" 13 L_CURLY@19..20 "{"
14 WHITESPACE@[20; 25) "\n " 14 WHITESPACE@20..25 "\n "
15 LET_STMT@[25; 55) 15 LET_STMT@25..55
16 LET_KW@[25; 28) "let" 16 LET_KW@25..28 "let"
17 WHITESPACE@[28; 29) " " 17 WHITESPACE@28..29 " "
18 BIND_PAT@[29; 30) 18 BIND_PAT@29..30
19 NAME@[29; 30) 19 NAME@29..30
20 IDENT@[29; 30) "x" 20 IDENT@29..30 "x"
21 WHITESPACE@[30; 31) " " 21 WHITESPACE@30..31 " "
22 EQ@[31; 32) "=" 22 EQ@31..32 "="
23 WHITESPACE@[32; 33) " " 23 WHITESPACE@32..33 " "
24 BIN_EXPR@[33; 54) 24 BIN_EXPR@33..54
25 BIN_EXPR@[33; 46) 25 BIN_EXPR@33..46
26 LITERAL@[33; 34) 26 LITERAL@33..34
27 INT_NUMBER@[33; 34) "1" 27 INT_NUMBER@33..34 "1"
28 WHITESPACE@[34; 35) " " 28 WHITESPACE@34..35 " "
29 PLUS@[35; 36) "+" 29 PLUS@35..36 "+"
30 WHITESPACE@[36; 37) " " 30 WHITESPACE@36..37 " "
31 BIN_EXPR@[37; 46) 31 BIN_EXPR@37..46
32 BIN_EXPR@[37; 42) 32 BIN_EXPR@37..42
33 LITERAL@[37; 38) 33 LITERAL@37..38
34 INT_NUMBER@[37; 38) "2" 34 INT_NUMBER@37..38 "2"
35 WHITESPACE@[38; 39) " " 35 WHITESPACE@38..39 " "
36 STAR@[39; 40) "*" 36 STAR@39..40 "*"
37 WHITESPACE@[40; 41) " " 37 WHITESPACE@40..41 " "
38 LITERAL@[41; 42) 38 LITERAL@41..42
39 INT_NUMBER@[41; 42) "3" 39 INT_NUMBER@41..42 "3"
40 WHITESPACE@[42; 43) " " 40 WHITESPACE@42..43 " "
41 PERCENT@[43; 44) "%" 41 PERCENT@43..44 "%"
42 WHITESPACE@[44; 45) " " 42 WHITESPACE@44..45 " "
43 LITERAL@[45; 46) 43 LITERAL@45..46
44 INT_NUMBER@[45; 46) "4" 44 INT_NUMBER@45..46 "4"
45 WHITESPACE@[46; 47) " " 45 WHITESPACE@46..47 " "
46 MINUS@[47; 48) "-" 46 MINUS@47..48 "-"
47 WHITESPACE@[48; 49) " " 47 WHITESPACE@48..49 " "
48 BIN_EXPR@[49; 54) 48 BIN_EXPR@49..54
49 LITERAL@[49; 50) 49 LITERAL@49..50
50 INT_NUMBER@[49; 50) "5" 50 INT_NUMBER@49..50 "5"
51 WHITESPACE@[50; 51) " " 51 WHITESPACE@50..51 " "
52 SLASH@[51; 52) "/" 52 SLASH@51..52 "/"
53 WHITESPACE@[52; 53) " " 53 WHITESPACE@52..53 " "
54 LITERAL@[53; 54) 54 LITERAL@53..54
55 INT_NUMBER@[53; 54) "6" 55 INT_NUMBER@53..54 "6"
56 SEMICOLON@[54; 55) ";" 56 SEMICOLON@54..55 ";"
57 WHITESPACE@[55; 60) "\n " 57 WHITESPACE@55..60 "\n "
58 EXPR_STMT@[60; 70) 58 EXPR_STMT@60..70
59 BIN_EXPR@[60; 69) 59 BIN_EXPR@60..69
60 LITERAL@[60; 61) 60 LITERAL@60..61
61 INT_NUMBER@[60; 61) "1" 61 INT_NUMBER@60..61 "1"
62 WHITESPACE@[61; 62) " " 62 WHITESPACE@61..62 " "
63 PLUS@[62; 63) "+" 63 PLUS@62..63 "+"
64 WHITESPACE@[63; 64) " " 64 WHITESPACE@63..64 " "
65 BIN_EXPR@[64; 69) 65 BIN_EXPR@64..69
66 LITERAL@[64; 65) 66 LITERAL@64..65
67 INT_NUMBER@[64; 65) "2" 67 INT_NUMBER@64..65 "2"
68 WHITESPACE@[65; 66) " " 68 WHITESPACE@65..66 " "
69 STAR@[66; 67) "*" 69 STAR@66..67 "*"
70 WHITESPACE@[67; 68) " " 70 WHITESPACE@67..68 " "
71 LITERAL@[68; 69) 71 LITERAL@68..69
72 INT_NUMBER@[68; 69) "3" 72 INT_NUMBER@68..69 "3"
73 SEMICOLON@[69; 70) ";" 73 SEMICOLON@69..70 ";"
74 WHITESPACE@[70; 75) "\n " 74 WHITESPACE@70..75 "\n "
75 EXPR_STMT@[75; 86) 75 EXPR_STMT@75..86
76 BIN_EXPR@[75; 85) 76 BIN_EXPR@75..85
77 LITERAL@[75; 76) 77 LITERAL@75..76
78 INT_NUMBER@[75; 76) "1" 78 INT_NUMBER@75..76 "1"
79 WHITESPACE@[76; 77) " " 79 WHITESPACE@76..77 " "
80 SHL@[77; 79) "<<" 80 SHL@77..79 "<<"
81 WHITESPACE@[79; 80) " " 81 WHITESPACE@79..80 " "
82 BIN_EXPR@[80; 85) 82 BIN_EXPR@80..85
83 LITERAL@[80; 81) 83 LITERAL@80..81
84 INT_NUMBER@[80; 81) "2" 84 INT_NUMBER@80..81 "2"
85 WHITESPACE@[81; 82) " " 85 WHITESPACE@81..82 " "
86 PLUS@[82; 83) "+" 86 PLUS@82..83 "+"
87 WHITESPACE@[83; 84) " " 87 WHITESPACE@83..84 " "
88 LITERAL@[84; 85) 88 LITERAL@84..85
89 INT_NUMBER@[84; 85) "3" 89 INT_NUMBER@84..85 "3"
90 SEMICOLON@[85; 86) ";" 90 SEMICOLON@85..86 ";"
91 WHITESPACE@[86; 91) "\n " 91 WHITESPACE@86..91 "\n "
92 EXPR_STMT@[91; 102) 92 EXPR_STMT@91..102
93 BIN_EXPR@[91; 101) 93 BIN_EXPR@91..101
94 LITERAL@[91; 92) 94 LITERAL@91..92
95 INT_NUMBER@[91; 92) "1" 95 INT_NUMBER@91..92 "1"
96 WHITESPACE@[92; 93) " " 96 WHITESPACE@92..93 " "
97 AMP@[93; 94) "&" 97 AMP@93..94 "&"
98 WHITESPACE@[94; 95) " " 98 WHITESPACE@94..95 " "
99 BIN_EXPR@[95; 101) 99 BIN_EXPR@95..101
100 LITERAL@[95; 96) 100 LITERAL@95..96
101 INT_NUMBER@[95; 96) "2" 101 INT_NUMBER@95..96 "2"
102 WHITESPACE@[96; 97) " " 102 WHITESPACE@96..97 " "
103 SHR@[97; 99) ">>" 103 SHR@97..99 ">>"
104 WHITESPACE@[99; 100) " " 104 WHITESPACE@99..100 " "
105 LITERAL@[100; 101) 105 LITERAL@100..101
106 INT_NUMBER@[100; 101) "3" 106 INT_NUMBER@100..101 "3"
107 SEMICOLON@[101; 102) ";" 107 SEMICOLON@101..102 ";"
108 WHITESPACE@[102; 107) "\n " 108 WHITESPACE@102..107 "\n "
109 EXPR_STMT@[107; 117) 109 EXPR_STMT@107..117
110 BIN_EXPR@[107; 116) 110 BIN_EXPR@107..116
111 LITERAL@[107; 108) 111 LITERAL@107..108
112 INT_NUMBER@[107; 108) "1" 112 INT_NUMBER@107..108 "1"
113 WHITESPACE@[108; 109) " " 113 WHITESPACE@108..109 " "
114 CARET@[109; 110) "^" 114 CARET@109..110 "^"
115 WHITESPACE@[110; 111) " " 115 WHITESPACE@110..111 " "
116 BIN_EXPR@[111; 116) 116 BIN_EXPR@111..116
117 LITERAL@[111; 112) 117 LITERAL@111..112
118 INT_NUMBER@[111; 112) "2" 118 INT_NUMBER@111..112 "2"
119 WHITESPACE@[112; 113) " " 119 WHITESPACE@112..113 " "
120 AMP@[113; 114) "&" 120 AMP@113..114 "&"
121 WHITESPACE@[114; 115) " " 121 WHITESPACE@114..115 " "
122 LITERAL@[115; 116) 122 LITERAL@115..116
123 INT_NUMBER@[115; 116) "3" 123 INT_NUMBER@115..116 "3"
124 SEMICOLON@[116; 117) ";" 124 SEMICOLON@116..117 ";"
125 WHITESPACE@[117; 122) "\n " 125 WHITESPACE@117..122 "\n "
126 EXPR_STMT@[122; 132) 126 EXPR_STMT@122..132
127 BIN_EXPR@[122; 131) 127 BIN_EXPR@122..131
128 LITERAL@[122; 123) 128 LITERAL@122..123
129 INT_NUMBER@[122; 123) "1" 129 INT_NUMBER@122..123 "1"
130 WHITESPACE@[123; 124) " " 130 WHITESPACE@123..124 " "
131 PIPE@[124; 125) "|" 131 PIPE@124..125 "|"
132 WHITESPACE@[125; 126) " " 132 WHITESPACE@125..126 " "
133 BIN_EXPR@[126; 131) 133 BIN_EXPR@126..131
134 LITERAL@[126; 127) 134 LITERAL@126..127
135 INT_NUMBER@[126; 127) "2" 135 INT_NUMBER@126..127 "2"
136 WHITESPACE@[127; 128) " " 136 WHITESPACE@127..128 " "
137 CARET@[128; 129) "^" 137 CARET@128..129 "^"
138 WHITESPACE@[129; 130) " " 138 WHITESPACE@129..130 " "
139 LITERAL@[130; 131) 139 LITERAL@130..131
140 INT_NUMBER@[130; 131) "3" 140 INT_NUMBER@130..131 "3"
141 SEMICOLON@[131; 132) ";" 141 SEMICOLON@131..132 ";"
142 WHITESPACE@[132; 137) "\n " 142 WHITESPACE@132..137 "\n "
143 EXPR_STMT@[137; 148) 143 EXPR_STMT@137..148
144 BIN_EXPR@[137; 147) 144 BIN_EXPR@137..147
145 LITERAL@[137; 138) 145 LITERAL@137..138
146 INT_NUMBER@[137; 138) "1" 146 INT_NUMBER@137..138 "1"
147 WHITESPACE@[138; 139) " " 147 WHITESPACE@138..139 " "
148 EQ2@[139; 141) "==" 148 EQ2@139..141 "=="
149 WHITESPACE@[141; 142) " " 149 WHITESPACE@141..142 " "
150 BIN_EXPR@[142; 147) 150 BIN_EXPR@142..147
151 LITERAL@[142; 143) 151 LITERAL@142..143
152 INT_NUMBER@[142; 143) "2" 152 INT_NUMBER@142..143 "2"
153 WHITESPACE@[143; 144) " " 153 WHITESPACE@143..144 " "
154 PIPE@[144; 145) "|" 154 PIPE@144..145 "|"
155 WHITESPACE@[145; 146) " " 155 WHITESPACE@145..146 " "
156 LITERAL@[146; 147) 156 LITERAL@146..147
157 INT_NUMBER@[146; 147) "3" 157 INT_NUMBER@146..147 "3"
158 SEMICOLON@[147; 148) ";" 158 SEMICOLON@147..148 ";"
159 WHITESPACE@[148; 153) "\n " 159 WHITESPACE@148..153 "\n "
160 EXPR_STMT@[153; 165) 160 EXPR_STMT@153..165
161 BIN_EXPR@[153; 164) 161 BIN_EXPR@153..164
162 LITERAL@[153; 154) 162 LITERAL@153..154
163 INT_NUMBER@[153; 154) "1" 163 INT_NUMBER@153..154 "1"
164 WHITESPACE@[154; 155) " " 164 WHITESPACE@154..155 " "
165 AMP2@[155; 157) "&&" 165 AMP2@155..157 "&&"
166 WHITESPACE@[157; 158) " " 166 WHITESPACE@157..158 " "
167 BIN_EXPR@[158; 164) 167 BIN_EXPR@158..164
168 LITERAL@[158; 159) 168 LITERAL@158..159
169 INT_NUMBER@[158; 159) "2" 169 INT_NUMBER@158..159 "2"
170 WHITESPACE@[159; 160) " " 170 WHITESPACE@159..160 " "
171 EQ2@[160; 162) "==" 171 EQ2@160..162 "=="
172 WHITESPACE@[162; 163) " " 172 WHITESPACE@162..163 " "
173 LITERAL@[163; 164) 173 LITERAL@163..164
174 INT_NUMBER@[163; 164) "3" 174 INT_NUMBER@163..164 "3"
175 SEMICOLON@[164; 165) ";" 175 SEMICOLON@164..165 ";"
176 WHITESPACE@[165; 170) "\n " 176 WHITESPACE@165..170 "\n "
177 COMMENT@[170; 184) "//1 || 2 && 2;" 177 COMMENT@170..184 "//1 || 2 && 2;"
178 WHITESPACE@[184; 189) "\n " 178 WHITESPACE@184..189 "\n "
179 COMMENT@[189; 203) "//1 .. 2 || 3;" 179 COMMENT@189..203 "//1 .. 2 || 3;"
180 WHITESPACE@[203; 208) "\n " 180 WHITESPACE@203..208 "\n "
181 COMMENT@[208; 221) "//1 = 2 .. 3;" 181 COMMENT@208..221 "//1 = 2 .. 3;"
182 WHITESPACE@[221; 226) "\n " 182 WHITESPACE@221..226 "\n "
183 COMMENT@[226; 245) "//---&*1 - --2 * 9;" 183 COMMENT@226..245 "//---&*1 - --2 * 9;"
184 WHITESPACE@[245; 246) "\n" 184 WHITESPACE@245..246 "\n"
185 R_CURLY@[246; 247) "}" 185 R_CURLY@246..247 "}"
186 WHITESPACE@[247; 248) "\n" 186 WHITESPACE@247..248 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0029_range_forms.rast b/crates/ra_syntax/test_data/parser/ok/0029_range_forms.rast
index 78056aa95..8177bd89b 100644
--- a/crates/ra_syntax/test_data/parser/ok/0029_range_forms.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0029_range_forms.rast
@@ -1,152 +1,152 @@
1SOURCE_FILE@[0; 153) 1SOURCE_FILE@0..153
2 FN_DEF@[0; 152) 2 FN_DEF@0..152
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 152) 11 BLOCK_EXPR@9..152
12 BLOCK@[9; 152) 12 BLOCK@9..152
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 23) 15 EXPR_STMT@15..23
16 RANGE_EXPR@[15; 22) 16 RANGE_EXPR@15..22
17 DOT2@[15; 17) ".." 17 DOT2@15..17 ".."
18 BIN_EXPR@[17; 22) 18 BIN_EXPR@17..22
19 LITERAL@[17; 18) 19 LITERAL@17..18
20 INT_NUMBER@[17; 18) "1" 20 INT_NUMBER@17..18 "1"
21 WHITESPACE@[18; 19) " " 21 WHITESPACE@18..19 " "
22 PLUS@[19; 20) "+" 22 PLUS@19..20 "+"
23 WHITESPACE@[20; 21) " " 23 WHITESPACE@20..21 " "
24 LITERAL@[21; 22) 24 LITERAL@21..22
25 INT_NUMBER@[21; 22) "1" 25 INT_NUMBER@21..22 "1"
26 SEMICOLON@[22; 23) ";" 26 SEMICOLON@22..23 ";"
27 WHITESPACE@[23; 28) "\n " 27 WHITESPACE@23..28 "\n "
28 EXPR_STMT@[28; 36) 28 EXPR_STMT@28..36
29 BIN_EXPR@[28; 35) 29 BIN_EXPR@28..35
30 RANGE_EXPR@[28; 31) 30 RANGE_EXPR@28..31
31 DOT2@[28; 30) ".." 31 DOT2@28..30 ".."
32 PATH_EXPR@[30; 31) 32 PATH_EXPR@30..31
33 PATH@[30; 31) 33 PATH@30..31
34 PATH_SEGMENT@[30; 31) 34 PATH_SEGMENT@30..31
35 NAME_REF@[30; 31) 35 NAME_REF@30..31
36 IDENT@[30; 31) "z" 36 IDENT@30..31 "z"
37 WHITESPACE@[31; 32) " " 37 WHITESPACE@31..32 " "
38 EQ@[32; 33) "=" 38 EQ@32..33 "="
39 WHITESPACE@[33; 34) " " 39 WHITESPACE@33..34 " "
40 LITERAL@[34; 35) 40 LITERAL@34..35
41 INT_NUMBER@[34; 35) "2" 41 INT_NUMBER@34..35 "2"
42 SEMICOLON@[35; 36) ";" 42 SEMICOLON@35..36 ";"
43 WHITESPACE@[36; 41) "\n " 43 WHITESPACE@36..41 "\n "
44 EXPR_STMT@[41; 59) 44 EXPR_STMT@41..59
45 BIN_EXPR@[41; 58) 45 BIN_EXPR@41..58
46 PATH_EXPR@[41; 42) 46 PATH_EXPR@41..42
47 PATH@[41; 42) 47 PATH@41..42
48 PATH_SEGMENT@[41; 42) 48 PATH_SEGMENT@41..42
49 NAME_REF@[41; 42) 49 NAME_REF@41..42
50 IDENT@[41; 42) "x" 50 IDENT@41..42 "x"
51 WHITESPACE@[42; 43) " " 51 WHITESPACE@42..43 " "
52 EQ@[43; 44) "=" 52 EQ@43..44 "="
53 WHITESPACE@[44; 45) " " 53 WHITESPACE@44..45 " "
54 RANGE_EXPR@[45; 58) 54 RANGE_EXPR@45..58
55 LITERAL@[45; 50) 55 LITERAL@45..50
56 FALSE_KW@[45; 50) "false" 56 FALSE_KW@45..50 "false"
57 DOT2@[50; 52) ".." 57 DOT2@50..52 ".."
58 BIN_EXPR@[52; 58) 58 BIN_EXPR@52..58
59 LITERAL@[52; 53) 59 LITERAL@52..53
60 INT_NUMBER@[52; 53) "1" 60 INT_NUMBER@52..53 "1"
61 WHITESPACE@[53; 54) " " 61 WHITESPACE@53..54 " "
62 EQ2@[54; 56) "==" 62 EQ2@54..56 "=="
63 WHITESPACE@[56; 57) " " 63 WHITESPACE@56..57 " "
64 LITERAL@[57; 58) 64 LITERAL@57..58
65 INT_NUMBER@[57; 58) "1" 65 INT_NUMBER@57..58 "1"
66 SEMICOLON@[58; 59) ";" 66 SEMICOLON@58..59 ";"
67 WHITESPACE@[59; 64) "\n " 67 WHITESPACE@59..64 "\n "
68 LET_STMT@[64; 76) 68 LET_STMT@64..76
69 LET_KW@[64; 67) "let" 69 LET_KW@64..67 "let"
70 WHITESPACE@[67; 68) " " 70 WHITESPACE@67..68 " "
71 BIND_PAT@[68; 69) 71 BIND_PAT@68..69
72 NAME@[68; 69) 72 NAME@68..69
73 IDENT@[68; 69) "x" 73 IDENT@68..69 "x"
74 WHITESPACE@[69; 70) " " 74 WHITESPACE@69..70 " "
75 EQ@[70; 71) "=" 75 EQ@70..71 "="
76 WHITESPACE@[71; 72) " " 76 WHITESPACE@71..72 " "
77 RANGE_EXPR@[72; 75) 77 RANGE_EXPR@72..75
78 LITERAL@[72; 73) 78 LITERAL@72..73
79 INT_NUMBER@[72; 73) "1" 79 INT_NUMBER@72..73 "1"
80 DOT2@[73; 75) ".." 80 DOT2@73..75 ".."
81 SEMICOLON@[75; 76) ";" 81 SEMICOLON@75..76 ";"
82 WHITESPACE@[76; 86) "\n \n " 82 WHITESPACE@76..86 "\n \n "
83 EXPR_STMT@[86; 95) 83 EXPR_STMT@86..95
84 RANGE_EXPR@[86; 94) 84 RANGE_EXPR@86..94
85 DOT2EQ@[86; 89) "..=" 85 DOT2EQ@86..89 "..="
86 BIN_EXPR@[89; 94) 86 BIN_EXPR@89..94
87 LITERAL@[89; 90) 87 LITERAL@89..90
88 INT_NUMBER@[89; 90) "1" 88 INT_NUMBER@89..90 "1"
89 WHITESPACE@[90; 91) " " 89 WHITESPACE@90..91 " "
90 PLUS@[91; 92) "+" 90 PLUS@91..92 "+"
91 WHITESPACE@[92; 93) " " 91 WHITESPACE@92..93 " "
92 LITERAL@[93; 94) 92 LITERAL@93..94
93 INT_NUMBER@[93; 94) "1" 93 INT_NUMBER@93..94 "1"
94 SEMICOLON@[94; 95) ";" 94 SEMICOLON@94..95 ";"
95 WHITESPACE@[95; 100) "\n " 95 WHITESPACE@95..100 "\n "
96 EXPR_STMT@[100; 109) 96 EXPR_STMT@100..109
97 BIN_EXPR@[100; 108) 97 BIN_EXPR@100..108
98 RANGE_EXPR@[100; 104) 98 RANGE_EXPR@100..104
99 DOT2EQ@[100; 103) "..=" 99 DOT2EQ@100..103 "..="
100 PATH_EXPR@[103; 104) 100 PATH_EXPR@103..104
101 PATH@[103; 104) 101 PATH@103..104
102 PATH_SEGMENT@[103; 104) 102 PATH_SEGMENT@103..104
103 NAME_REF@[103; 104) 103 NAME_REF@103..104
104 IDENT@[103; 104) "z" 104 IDENT@103..104 "z"
105 WHITESPACE@[104; 105) " " 105 WHITESPACE@104..105 " "
106 EQ@[105; 106) "=" 106 EQ@105..106 "="
107 WHITESPACE@[106; 107) " " 107 WHITESPACE@106..107 " "
108 LITERAL@[107; 108) 108 LITERAL@107..108
109 INT_NUMBER@[107; 108) "2" 109 INT_NUMBER@107..108 "2"
110 SEMICOLON@[108; 109) ";" 110 SEMICOLON@108..109 ";"
111 WHITESPACE@[109; 114) "\n " 111 WHITESPACE@109..114 "\n "
112 EXPR_STMT@[114; 133) 112 EXPR_STMT@114..133
113 BIN_EXPR@[114; 132) 113 BIN_EXPR@114..132
114 PATH_EXPR@[114; 115) 114 PATH_EXPR@114..115
115 PATH@[114; 115) 115 PATH@114..115
116 PATH_SEGMENT@[114; 115) 116 PATH_SEGMENT@114..115
117 NAME_REF@[114; 115) 117 NAME_REF@114..115
118 IDENT@[114; 115) "x" 118 IDENT@114..115 "x"
119 WHITESPACE@[115; 116) " " 119 WHITESPACE@115..116 " "
120 EQ@[116; 117) "=" 120 EQ@116..117 "="
121 WHITESPACE@[117; 118) " " 121 WHITESPACE@117..118 " "
122 RANGE_EXPR@[118; 132) 122 RANGE_EXPR@118..132
123 LITERAL@[118; 123) 123 LITERAL@118..123
124 FALSE_KW@[118; 123) "false" 124 FALSE_KW@118..123 "false"
125 DOT2EQ@[123; 126) "..=" 125 DOT2EQ@123..126 "..="
126 BIN_EXPR@[126; 132) 126 BIN_EXPR@126..132
127 LITERAL@[126; 127) 127 LITERAL@126..127
128 INT_NUMBER@[126; 127) "1" 128 INT_NUMBER@126..127 "1"
129 WHITESPACE@[127; 128) " " 129 WHITESPACE@127..128 " "
130 EQ2@[128; 130) "==" 130 EQ2@128..130 "=="
131 WHITESPACE@[130; 131) " " 131 WHITESPACE@130..131 " "
132 LITERAL@[131; 132) 132 LITERAL@131..132
133 INT_NUMBER@[131; 132) "1" 133 INT_NUMBER@131..132 "1"
134 SEMICOLON@[132; 133) ";" 134 SEMICOLON@132..133 ";"
135 WHITESPACE@[133; 138) "\n " 135 WHITESPACE@133..138 "\n "
136 LET_STMT@[138; 150) 136 LET_STMT@138..150
137 LET_KW@[138; 141) "let" 137 LET_KW@138..141 "let"
138 WHITESPACE@[141; 142) " " 138 WHITESPACE@141..142 " "
139 BIND_PAT@[142; 143) 139 BIND_PAT@142..143
140 NAME@[142; 143) 140 NAME@142..143
141 IDENT@[142; 143) "x" 141 IDENT@142..143 "x"
142 WHITESPACE@[143; 144) " " 142 WHITESPACE@143..144 " "
143 EQ@[144; 145) "=" 143 EQ@144..145 "="
144 WHITESPACE@[145; 146) " " 144 WHITESPACE@145..146 " "
145 RANGE_EXPR@[146; 149) 145 RANGE_EXPR@146..149
146 LITERAL@[146; 147) 146 LITERAL@146..147
147 INT_NUMBER@[146; 147) "1" 147 INT_NUMBER@146..147 "1"
148 DOT2@[147; 149) ".." 148 DOT2@147..149 ".."
149 SEMICOLON@[149; 150) ";" 149 SEMICOLON@149..150 ";"
150 WHITESPACE@[150; 151) "\n" 150 WHITESPACE@150..151 "\n"
151 R_CURLY@[151; 152) "}" 151 R_CURLY@151..152 "}"
152 WHITESPACE@[152; 153) "\n" 152 WHITESPACE@152..153 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0030_string_suffixes.rast b/crates/ra_syntax/test_data/parser/ok/0030_string_suffixes.rast
index 4e583c6e8..953930f6c 100644
--- a/crates/ra_syntax/test_data/parser/ok/0030_string_suffixes.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0030_string_suffixes.rast
@@ -1,64 +1,64 @@
1SOURCE_FILE@[0; 112) 1SOURCE_FILE@0..112
2 FN_DEF@[0; 111) 2 FN_DEF@0..111
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 111) 11 BLOCK_EXPR@10..111
12 BLOCK@[10; 111) 12 BLOCK@10..111
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 LET_STMT@[16; 31) 15 LET_STMT@16..31
16 LET_KW@[16; 19) "let" 16 LET_KW@16..19 "let"
17 WHITESPACE@[19; 20) " " 17 WHITESPACE@19..20 " "
18 PLACEHOLDER_PAT@[20; 21) 18 PLACEHOLDER_PAT@20..21
19 UNDERSCORE@[20; 21) "_" 19 UNDERSCORE@20..21 "_"
20 WHITESPACE@[21; 22) " " 20 WHITESPACE@21..22 " "
21 EQ@[22; 23) "=" 21 EQ@22..23 "="
22 WHITESPACE@[23; 24) " " 22 WHITESPACE@23..24 " "
23 LITERAL@[24; 30) 23 LITERAL@24..30
24 CHAR@[24; 30) "\'c\'u32" 24 CHAR@24..30 "\'c\'u32"
25 SEMICOLON@[30; 31) ";" 25 SEMICOLON@30..31 ";"
26 WHITESPACE@[31; 36) "\n " 26 WHITESPACE@31..36 "\n "
27 LET_STMT@[36; 60) 27 LET_STMT@36..60
28 LET_KW@[36; 39) "let" 28 LET_KW@36..39 "let"
29 WHITESPACE@[39; 40) " " 29 WHITESPACE@39..40 " "
30 PLACEHOLDER_PAT@[40; 41) 30 PLACEHOLDER_PAT@40..41
31 UNDERSCORE@[40; 41) "_" 31 UNDERSCORE@40..41 "_"
32 WHITESPACE@[41; 42) " " 32 WHITESPACE@41..42 " "
33 EQ@[42; 43) "=" 33 EQ@42..43 "="
34 WHITESPACE@[43; 44) " " 34 WHITESPACE@43..44 " "
35 LITERAL@[44; 59) 35 LITERAL@44..59
36 STRING@[44; 59) "\"string\"invalid" 36 STRING@44..59 "\"string\"invalid"
37 SEMICOLON@[59; 60) ";" 37 SEMICOLON@59..60 ";"
38 WHITESPACE@[60; 65) "\n " 38 WHITESPACE@60..65 "\n "
39 LET_STMT@[65; 83) 39 LET_STMT@65..83
40 LET_KW@[65; 68) "let" 40 LET_KW@65..68 "let"
41 WHITESPACE@[68; 69) " " 41 WHITESPACE@68..69 " "
42 PLACEHOLDER_PAT@[69; 70) 42 PLACEHOLDER_PAT@69..70
43 UNDERSCORE@[69; 70) "_" 43 UNDERSCORE@69..70 "_"
44 WHITESPACE@[70; 71) " " 44 WHITESPACE@70..71 " "
45 EQ@[71; 72) "=" 45 EQ@71..72 "="
46 WHITESPACE@[72; 73) " " 46 WHITESPACE@72..73 " "
47 LITERAL@[73; 82) 47 LITERAL@73..82
48 BYTE@[73; 82) "b\'b\'_suff" 48 BYTE@73..82 "b\'b\'_suff"
49 SEMICOLON@[82; 83) ";" 49 SEMICOLON@82..83 ";"
50 WHITESPACE@[83; 88) "\n " 50 WHITESPACE@83..88 "\n "
51 LET_STMT@[88; 109) 51 LET_STMT@88..109
52 LET_KW@[88; 91) "let" 52 LET_KW@88..91 "let"
53 WHITESPACE@[91; 92) " " 53 WHITESPACE@91..92 " "
54 PLACEHOLDER_PAT@[92; 93) 54 PLACEHOLDER_PAT@92..93
55 UNDERSCORE@[92; 93) "_" 55 UNDERSCORE@92..93 "_"
56 WHITESPACE@[93; 94) " " 56 WHITESPACE@93..94 " "
57 EQ@[94; 95) "=" 57 EQ@94..95 "="
58 WHITESPACE@[95; 96) " " 58 WHITESPACE@95..96 " "
59 LITERAL@[96; 108) 59 LITERAL@96..108
60 BYTE_STRING@[96; 108) "b\"bs\"invalid" 60 BYTE_STRING@96..108 "b\"bs\"invalid"
61 SEMICOLON@[108; 109) ";" 61 SEMICOLON@108..109 ";"
62 WHITESPACE@[109; 110) "\n" 62 WHITESPACE@109..110 "\n"
63 R_CURLY@[110; 111) "}" 63 R_CURLY@110..111 "}"
64 WHITESPACE@[111; 112) "\n" 64 WHITESPACE@111..112 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0030_traits.rast b/crates/ra_syntax/test_data/parser/ok/0030_traits.rast
index 4131cd81a..0aadc11a4 100644
--- a/crates/ra_syntax/test_data/parser/ok/0030_traits.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0030_traits.rast
@@ -1,61 +1,61 @@
1SOURCE_FILE@[0; 96) 1SOURCE_FILE@0..96
2 TRAIT_DEF@[0; 36) 2 TRAIT_DEF@0..36
3 TRAIT_KW@[0; 5) "trait" 3 TRAIT_KW@0..5 "trait"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 14) 5 NAME@6..14
6 IDENT@[6; 14) "Runnable" 6 IDENT@6..14 "Runnable"
7 WHITESPACE@[14; 15) " " 7 WHITESPACE@14..15 " "
8 ITEM_LIST@[15; 36) 8 ITEM_LIST@15..36
9 L_CURLY@[15; 16) "{" 9 L_CURLY@15..16 "{"
10 WHITESPACE@[16; 21) "\n " 10 WHITESPACE@16..21 "\n "
11 FN_DEF@[21; 34) 11 FN_DEF@21..34
12 FN_KW@[21; 23) "fn" 12 FN_KW@21..23 "fn"
13 WHITESPACE@[23; 24) " " 13 WHITESPACE@23..24 " "
14 NAME@[24; 31) 14 NAME@24..31
15 IDENT@[24; 31) "handler" 15 IDENT@24..31 "handler"
16 PARAM_LIST@[31; 33) 16 PARAM_LIST@31..33
17 L_PAREN@[31; 32) "(" 17 L_PAREN@31..32 "("
18 R_PAREN@[32; 33) ")" 18 R_PAREN@32..33 ")"
19 SEMICOLON@[33; 34) ";" 19 SEMICOLON@33..34 ";"
20 WHITESPACE@[34; 35) "\n" 20 WHITESPACE@34..35 "\n"
21 R_CURLY@[35; 36) "}" 21 R_CURLY@35..36 "}"
22 WHITESPACE@[36; 38) "\n\n" 22 WHITESPACE@36..38 "\n\n"
23 TRAIT_DEF@[38; 95) 23 TRAIT_DEF@38..95
24 TRAIT_KW@[38; 43) "trait" 24 TRAIT_KW@38..43 "trait"
25 WHITESPACE@[43; 44) " " 25 WHITESPACE@43..44 " "
26 NAME@[44; 57) 26 NAME@44..57
27 IDENT@[44; 57) "TraitWithExpr" 27 IDENT@44..57 "TraitWithExpr"
28 WHITESPACE@[57; 58) " " 28 WHITESPACE@57..58 " "
29 ITEM_LIST@[58; 95) 29 ITEM_LIST@58..95
30 L_CURLY@[58; 59) "{" 30 L_CURLY@58..59 "{"
31 WHITESPACE@[59; 64) "\n " 31 WHITESPACE@59..64 "\n "
32 FN_DEF@[64; 93) 32 FN_DEF@64..93
33 FN_KW@[64; 66) "fn" 33 FN_KW@64..66 "fn"
34 WHITESPACE@[66; 67) " " 34 WHITESPACE@66..67 " "
35 NAME@[67; 79) 35 NAME@67..79
36 IDENT@[67; 79) "fn_with_expr" 36 IDENT@67..79 "fn_with_expr"
37 PARAM_LIST@[79; 92) 37 PARAM_LIST@79..92
38 L_PAREN@[79; 80) "(" 38 L_PAREN@79..80 "("
39 PARAM@[80; 91) 39 PARAM@80..91
40 BIND_PAT@[80; 81) 40 BIND_PAT@80..81
41 NAME@[80; 81) 41 NAME@80..81
42 IDENT@[80; 81) "x" 42 IDENT@80..81 "x"
43 COLON@[81; 82) ":" 43 COLON@81..82 ":"
44 WHITESPACE@[82; 83) " " 44 WHITESPACE@82..83 " "
45 ARRAY_TYPE@[83; 91) 45 ARRAY_TYPE@83..91
46 L_BRACK@[83; 84) "[" 46 L_BRACK@83..84 "["
47 PATH_TYPE@[84; 87) 47 PATH_TYPE@84..87
48 PATH@[84; 87) 48 PATH@84..87
49 PATH_SEGMENT@[84; 87) 49 PATH_SEGMENT@84..87
50 NAME_REF@[84; 87) 50 NAME_REF@84..87
51 IDENT@[84; 87) "i32" 51 IDENT@84..87 "i32"
52 SEMICOLON@[87; 88) ";" 52 SEMICOLON@87..88 ";"
53 WHITESPACE@[88; 89) " " 53 WHITESPACE@88..89 " "
54 LITERAL@[89; 90) 54 LITERAL@89..90
55 INT_NUMBER@[89; 90) "1" 55 INT_NUMBER@89..90 "1"
56 R_BRACK@[90; 91) "]" 56 R_BRACK@90..91 "]"
57 R_PAREN@[91; 92) ")" 57 R_PAREN@91..92 ")"
58 SEMICOLON@[92; 93) ";" 58 SEMICOLON@92..93 ";"
59 WHITESPACE@[93; 94) "\n" 59 WHITESPACE@93..94 "\n"
60 R_CURLY@[94; 95) "}" 60 R_CURLY@94..95 "}"
61 WHITESPACE@[95; 96) "\n" 61 WHITESPACE@95..96 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0031_extern.rast b/crates/ra_syntax/test_data/parser/ok/0031_extern.rast
index 23757df52..ea285f52f 100644
--- a/crates/ra_syntax/test_data/parser/ok/0031_extern.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0031_extern.rast
@@ -1,973 +1,973 @@
1SOURCE_FILE@[0; 1598) 1SOURCE_FILE@0..1598
2 EXTERN_BLOCK@[0; 1597) 2 EXTERN_BLOCK@0..1597
3 ABI@[0; 6) 3 ABI@0..6
4 EXTERN_KW@[0; 6) "extern" 4 EXTERN_KW@0..6 "extern"
5 WHITESPACE@[6; 7) " " 5 WHITESPACE@6..7 " "
6 EXTERN_ITEM_LIST@[7; 1597) 6 EXTERN_ITEM_LIST@7..1597
7 L_CURLY@[7; 8) "{" 7 L_CURLY@7..8 "{"
8 WHITESPACE@[8; 13) "\n " 8 WHITESPACE@8..13 "\n "
9 FN_DEF@[13; 87) 9 FN_DEF@13..87
10 VISIBILITY@[13; 16) 10 VISIBILITY@13..16
11 PUB_KW@[13; 16) "pub" 11 PUB_KW@13..16 "pub"
12 WHITESPACE@[16; 17) " " 12 WHITESPACE@16..17 " "
13 FN_KW@[17; 19) "fn" 13 FN_KW@17..19 "fn"
14 WHITESPACE@[19; 20) " " 14 WHITESPACE@19..20 " "
15 NAME@[20; 26) 15 NAME@20..26
16 IDENT@[20; 26) "socket" 16 IDENT@20..26 "socket"
17 PARAM_LIST@[26; 75) 17 PARAM_LIST@26..75
18 L_PAREN@[26; 27) "(" 18 L_PAREN@26..27 "("
19 PARAM@[27; 42) 19 PARAM@27..42
20 BIND_PAT@[27; 33) 20 BIND_PAT@27..33
21 NAME@[27; 33) 21 NAME@27..33
22 IDENT@[27; 33) "domain" 22 IDENT@27..33 "domain"
23 COLON@[33; 34) ":" 23 COLON@33..34 ":"
24 WHITESPACE@[34; 35) " " 24 WHITESPACE@34..35 " "
25 PATH_TYPE@[35; 42) 25 PATH_TYPE@35..42
26 PATH@[35; 42) 26 PATH@35..42
27 PATH_SEGMENT@[35; 42) 27 PATH_SEGMENT@35..42
28 COLON2@[35; 37) "::" 28 COLON2@35..37 "::"
29 NAME_REF@[37; 42) 29 NAME_REF@37..42
30 IDENT@[37; 42) "c_int" 30 IDENT@37..42 "c_int"
31 COMMA@[42; 43) "," 31 COMMA@42..43 ","
32 WHITESPACE@[43; 44) " " 32 WHITESPACE@43..44 " "
33 PARAM@[44; 55) 33 PARAM@44..55
34 BIND_PAT@[44; 46) 34 BIND_PAT@44..46
35 NAME@[44; 46) 35 NAME@44..46
36 IDENT@[44; 46) "ty" 36 IDENT@44..46 "ty"
37 COLON@[46; 47) ":" 37 COLON@46..47 ":"
38 WHITESPACE@[47; 48) " " 38 WHITESPACE@47..48 " "
39 PATH_TYPE@[48; 55) 39 PATH_TYPE@48..55
40 PATH@[48; 55) 40 PATH@48..55
41 PATH_SEGMENT@[48; 55) 41 PATH_SEGMENT@48..55
42 COLON2@[48; 50) "::" 42 COLON2@48..50 "::"
43 NAME_REF@[50; 55) 43 NAME_REF@50..55
44 IDENT@[50; 55) "c_int" 44 IDENT@50..55 "c_int"
45 COMMA@[55; 56) "," 45 COMMA@55..56 ","
46 WHITESPACE@[56; 57) " " 46 WHITESPACE@56..57 " "
47 PARAM@[57; 74) 47 PARAM@57..74
48 BIND_PAT@[57; 65) 48 BIND_PAT@57..65
49 NAME@[57; 65) 49 NAME@57..65
50 IDENT@[57; 65) "protocol" 50 IDENT@57..65 "protocol"
51 COLON@[65; 66) ":" 51 COLON@65..66 ":"
52 WHITESPACE@[66; 67) " " 52 WHITESPACE@66..67 " "
53 PATH_TYPE@[67; 74) 53 PATH_TYPE@67..74
54 PATH@[67; 74) 54 PATH@67..74
55 PATH_SEGMENT@[67; 74) 55 PATH_SEGMENT@67..74
56 COLON2@[67; 69) "::" 56 COLON2@67..69 "::"
57 NAME_REF@[69; 74) 57 NAME_REF@69..74
58 IDENT@[69; 74) "c_int" 58 IDENT@69..74 "c_int"
59 R_PAREN@[74; 75) ")" 59 R_PAREN@74..75 ")"
60 WHITESPACE@[75; 76) " " 60 WHITESPACE@75..76 " "
61 RET_TYPE@[76; 86) 61 RET_TYPE@76..86
62 THIN_ARROW@[76; 78) "->" 62 THIN_ARROW@76..78 "->"
63 WHITESPACE@[78; 79) " " 63 WHITESPACE@78..79 " "
64 PATH_TYPE@[79; 86) 64 PATH_TYPE@79..86
65 PATH@[79; 86) 65 PATH@79..86
66 PATH_SEGMENT@[79; 86) 66 PATH_SEGMENT@79..86
67 COLON2@[79; 81) "::" 67 COLON2@79..81 "::"
68 NAME_REF@[81; 86) 68 NAME_REF@81..86
69 IDENT@[81; 86) "c_int" 69 IDENT@81..86 "c_int"
70 SEMICOLON@[86; 87) ";" 70 SEMICOLON@86..87 ";"
71 WHITESPACE@[87; 92) "\n " 71 WHITESPACE@87..92 "\n "
72 FN_DEF@[92; 167) 72 FN_DEF@92..167
73 VISIBILITY@[92; 95) 73 VISIBILITY@92..95
74 PUB_KW@[92; 95) "pub" 74 PUB_KW@92..95 "pub"
75 WHITESPACE@[95; 96) " " 75 WHITESPACE@95..96 " "
76 FN_KW@[96; 98) "fn" 76 FN_KW@96..98 "fn"
77 WHITESPACE@[98; 99) " " 77 WHITESPACE@98..99 " "
78 NAME@[99; 103) 78 NAME@99..103
79 IDENT@[99; 103) "bind" 79 IDENT@99..103 "bind"
80 PARAM_LIST@[103; 155) 80 PARAM_LIST@103..155
81 L_PAREN@[103; 104) "(" 81 L_PAREN@103..104 "("
82 PARAM@[104; 115) 82 PARAM@104..115
83 BIND_PAT@[104; 106) 83 BIND_PAT@104..106
84 NAME@[104; 106) 84 NAME@104..106
85 IDENT@[104; 106) "fd" 85 IDENT@104..106 "fd"
86 COLON@[106; 107) ":" 86 COLON@106..107 ":"
87 WHITESPACE@[107; 108) " " 87 WHITESPACE@107..108 " "
88 PATH_TYPE@[108; 115) 88 PATH_TYPE@108..115
89 PATH@[108; 115) 89 PATH@108..115
90 PATH_SEGMENT@[108; 115) 90 PATH_SEGMENT@108..115
91 COLON2@[108; 110) "::" 91 COLON2@108..110 "::"
92 NAME_REF@[110; 115) 92 NAME_REF@110..115
93 IDENT@[110; 115) "c_int" 93 IDENT@110..115 "c_int"
94 COMMA@[115; 116) "," 94 COMMA@115..116 ","
95 WHITESPACE@[116; 117) " " 95 WHITESPACE@116..117 " "
96 PARAM@[117; 138) 96 PARAM@117..138
97 BIND_PAT@[117; 121) 97 BIND_PAT@117..121
98 NAME@[117; 121) 98 NAME@117..121
99 IDENT@[117; 121) "addr" 99 IDENT@117..121 "addr"
100 COLON@[121; 122) ":" 100 COLON@121..122 ":"
101 WHITESPACE@[122; 123) " " 101 WHITESPACE@122..123 " "
102 POINTER_TYPE@[123; 138) 102 POINTER_TYPE@123..138
103 STAR@[123; 124) "*" 103 STAR@123..124 "*"
104 CONST_KW@[124; 129) "const" 104 CONST_KW@124..129 "const"
105 WHITESPACE@[129; 130) " " 105 WHITESPACE@129..130 " "
106 PATH_TYPE@[130; 138) 106 PATH_TYPE@130..138
107 PATH@[130; 138) 107 PATH@130..138
108 PATH_SEGMENT@[130; 138) 108 PATH_SEGMENT@130..138
109 NAME_REF@[130; 138) 109 NAME_REF@130..138
110 IDENT@[130; 138) "sockaddr" 110 IDENT@130..138 "sockaddr"
111 COMMA@[138; 139) "," 111 COMMA@138..139 ","
112 WHITESPACE@[139; 140) " " 112 WHITESPACE@139..140 " "
113 PARAM@[140; 154) 113 PARAM@140..154
114 BIND_PAT@[140; 143) 114 BIND_PAT@140..143
115 NAME@[140; 143) 115 NAME@140..143
116 IDENT@[140; 143) "len" 116 IDENT@140..143 "len"
117 COLON@[143; 144) ":" 117 COLON@143..144 ":"
118 WHITESPACE@[144; 145) " " 118 WHITESPACE@144..145 " "
119 PATH_TYPE@[145; 154) 119 PATH_TYPE@145..154
120 PATH@[145; 154) 120 PATH@145..154
121 PATH_SEGMENT@[145; 154) 121 PATH_SEGMENT@145..154
122 NAME_REF@[145; 154) 122 NAME_REF@145..154
123 IDENT@[145; 154) "socklen_t" 123 IDENT@145..154 "socklen_t"
124 R_PAREN@[154; 155) ")" 124 R_PAREN@154..155 ")"
125 WHITESPACE@[155; 156) " " 125 WHITESPACE@155..156 " "
126 RET_TYPE@[156; 166) 126 RET_TYPE@156..166
127 THIN_ARROW@[156; 158) "->" 127 THIN_ARROW@156..158 "->"
128 WHITESPACE@[158; 159) " " 128 WHITESPACE@158..159 " "
129 PATH_TYPE@[159; 166) 129 PATH_TYPE@159..166
130 PATH@[159; 166) 130 PATH@159..166
131 PATH_SEGMENT@[159; 166) 131 PATH_SEGMENT@159..166
132 COLON2@[159; 161) "::" 132 COLON2@159..161 "::"
133 NAME_REF@[161; 166) 133 NAME_REF@161..166
134 IDENT@[161; 166) "c_int" 134 IDENT@161..166 "c_int"
135 SEMICOLON@[166; 167) ";" 135 SEMICOLON@166..167 ";"
136 WHITESPACE@[167; 172) "\n " 136 WHITESPACE@167..172 "\n "
137 FN_DEF@[172; 276) 137 FN_DEF@172..276
138 VISIBILITY@[172; 175) 138 VISIBILITY@172..175
139 PUB_KW@[172; 175) "pub" 139 PUB_KW@172..175 "pub"
140 WHITESPACE@[175; 176) " " 140 WHITESPACE@175..176 " "
141 FN_KW@[176; 178) "fn" 141 FN_KW@176..178 "fn"
142 WHITESPACE@[178; 179) " " 142 WHITESPACE@178..179 " "
143 NAME@[179; 186) 143 NAME@179..186
144 IDENT@[179; 186) "connect" 144 IDENT@179..186 "connect"
145 PARAM_LIST@[186; 264) 145 PARAM_LIST@186..264
146 L_PAREN@[186; 187) "(" 146 L_PAREN@186..187 "("
147 PARAM@[187; 202) 147 PARAM@187..202
148 BIND_PAT@[187; 193) 148 BIND_PAT@187..193
149 NAME@[187; 193) 149 NAME@187..193
150 IDENT@[187; 193) "socket" 150 IDENT@187..193 "socket"
151 COLON@[193; 194) ":" 151 COLON@193..194 ":"
152 WHITESPACE@[194; 195) " " 152 WHITESPACE@194..195 " "
153 PATH_TYPE@[195; 202) 153 PATH_TYPE@195..202
154 PATH@[195; 202) 154 PATH@195..202
155 PATH_SEGMENT@[195; 202) 155 PATH_SEGMENT@195..202
156 COLON2@[195; 197) "::" 156 COLON2@195..197 "::"
157 NAME_REF@[197; 202) 157 NAME_REF@197..202
158 IDENT@[197; 202) "c_int" 158 IDENT@197..202 "c_int"
159 COMMA@[202; 203) "," 159 COMMA@202..203 ","
160 WHITESPACE@[203; 204) " " 160 WHITESPACE@203..204 " "
161 PARAM@[204; 228) 161 PARAM@204..228
162 BIND_PAT@[204; 211) 162 BIND_PAT@204..211
163 NAME@[204; 211) 163 NAME@204..211
164 IDENT@[204; 211) "address" 164 IDENT@204..211 "address"
165 COLON@[211; 212) ":" 165 COLON@211..212 ":"
166 WHITESPACE@[212; 213) " " 166 WHITESPACE@212..213 " "
167 POINTER_TYPE@[213; 228) 167 POINTER_TYPE@213..228
168 STAR@[213; 214) "*" 168 STAR@213..214 "*"
169 CONST_KW@[214; 219) "const" 169 CONST_KW@214..219 "const"
170 WHITESPACE@[219; 220) " " 170 WHITESPACE@219..220 " "
171 PATH_TYPE@[220; 228) 171 PATH_TYPE@220..228
172 PATH@[220; 228) 172 PATH@220..228
173 PATH_SEGMENT@[220; 228) 173 PATH_SEGMENT@220..228
174 NAME_REF@[220; 228) 174 NAME_REF@220..228
175 IDENT@[220; 228) "sockaddr" 175 IDENT@220..228 "sockaddr"
176 COMMA@[228; 229) "," 176 COMMA@228..229 ","
177 WHITESPACE@[229; 249) "\n " 177 WHITESPACE@229..249 "\n "
178 PARAM@[249; 263) 178 PARAM@249..263
179 BIND_PAT@[249; 252) 179 BIND_PAT@249..252
180 NAME@[249; 252) 180 NAME@249..252
181 IDENT@[249; 252) "len" 181 IDENT@249..252 "len"
182 COLON@[252; 253) ":" 182 COLON@252..253 ":"
183 WHITESPACE@[253; 254) " " 183 WHITESPACE@253..254 " "
184 PATH_TYPE@[254; 263) 184 PATH_TYPE@254..263
185 PATH@[254; 263) 185 PATH@254..263
186 PATH_SEGMENT@[254; 263) 186 PATH_SEGMENT@254..263
187 NAME_REF@[254; 263) 187 NAME_REF@254..263
188 IDENT@[254; 263) "socklen_t" 188 IDENT@254..263 "socklen_t"
189 R_PAREN@[263; 264) ")" 189 R_PAREN@263..264 ")"
190 WHITESPACE@[264; 265) " " 190 WHITESPACE@264..265 " "
191 RET_TYPE@[265; 275) 191 RET_TYPE@265..275
192 THIN_ARROW@[265; 267) "->" 192 THIN_ARROW@265..267 "->"
193 WHITESPACE@[267; 268) " " 193 WHITESPACE@267..268 " "
194 PATH_TYPE@[268; 275) 194 PATH_TYPE@268..275
195 PATH@[268; 275) 195 PATH@268..275
196 PATH_SEGMENT@[268; 275) 196 PATH_SEGMENT@268..275
197 COLON2@[268; 270) "::" 197 COLON2@268..270 "::"
198 NAME_REF@[270; 275) 198 NAME_REF@270..275
199 IDENT@[270; 275) "c_int" 199 IDENT@270..275 "c_int"
200 SEMICOLON@[275; 276) ";" 200 SEMICOLON@275..276 ";"
201 WHITESPACE@[276; 281) "\n " 201 WHITESPACE@276..281 "\n "
202 FN_DEF@[281; 341) 202 FN_DEF@281..341
203 VISIBILITY@[281; 284) 203 VISIBILITY@281..284
204 PUB_KW@[281; 284) "pub" 204 PUB_KW@281..284 "pub"
205 WHITESPACE@[284; 285) " " 205 WHITESPACE@284..285 " "
206 FN_KW@[285; 287) "fn" 206 FN_KW@285..287 "fn"
207 WHITESPACE@[287; 288) " " 207 WHITESPACE@287..288 " "
208 NAME@[288; 294) 208 NAME@288..294
209 IDENT@[288; 294) "listen" 209 IDENT@288..294 "listen"
210 PARAM_LIST@[294; 329) 210 PARAM_LIST@294..329
211 L_PAREN@[294; 295) "(" 211 L_PAREN@294..295 "("
212 PARAM@[295; 310) 212 PARAM@295..310
213 BIND_PAT@[295; 301) 213 BIND_PAT@295..301
214 NAME@[295; 301) 214 NAME@295..301
215 IDENT@[295; 301) "socket" 215 IDENT@295..301 "socket"
216 COLON@[301; 302) ":" 216 COLON@301..302 ":"
217 WHITESPACE@[302; 303) " " 217 WHITESPACE@302..303 " "
218 PATH_TYPE@[303; 310) 218 PATH_TYPE@303..310
219 PATH@[303; 310) 219 PATH@303..310
220 PATH_SEGMENT@[303; 310) 220 PATH_SEGMENT@303..310
221 COLON2@[303; 305) "::" 221 COLON2@303..305 "::"
222 NAME_REF@[305; 310) 222 NAME_REF@305..310
223 IDENT@[305; 310) "c_int" 223 IDENT@305..310 "c_int"
224 COMMA@[310; 311) "," 224 COMMA@310..311 ","
225 WHITESPACE@[311; 312) " " 225 WHITESPACE@311..312 " "
226 PARAM@[312; 328) 226 PARAM@312..328
227 BIND_PAT@[312; 319) 227 BIND_PAT@312..319
228 NAME@[312; 319) 228 NAME@312..319
229 IDENT@[312; 319) "backlog" 229 IDENT@312..319 "backlog"
230 COLON@[319; 320) ":" 230 COLON@319..320 ":"
231 WHITESPACE@[320; 321) " " 231 WHITESPACE@320..321 " "
232 PATH_TYPE@[321; 328) 232 PATH_TYPE@321..328
233 PATH@[321; 328) 233 PATH@321..328
234 PATH_SEGMENT@[321; 328) 234 PATH_SEGMENT@321..328
235 COLON2@[321; 323) "::" 235 COLON2@321..323 "::"
236 NAME_REF@[323; 328) 236 NAME_REF@323..328
237 IDENT@[323; 328) "c_int" 237 IDENT@323..328 "c_int"
238 R_PAREN@[328; 329) ")" 238 R_PAREN@328..329 ")"
239 WHITESPACE@[329; 330) " " 239 WHITESPACE@329..330 " "
240 RET_TYPE@[330; 340) 240 RET_TYPE@330..340
241 THIN_ARROW@[330; 332) "->" 241 THIN_ARROW@330..332 "->"
242 WHITESPACE@[332; 333) " " 242 WHITESPACE@332..333 " "
243 PATH_TYPE@[333; 340) 243 PATH_TYPE@333..340
244 PATH@[333; 340) 244 PATH@333..340
245 PATH_SEGMENT@[333; 340) 245 PATH_SEGMENT@333..340
246 COLON2@[333; 335) "::" 246 COLON2@333..335 "::"
247 NAME_REF@[335; 340) 247 NAME_REF@335..340
248 IDENT@[335; 340) "c_int" 248 IDENT@335..340 "c_int"
249 SEMICOLON@[340; 341) ";" 249 SEMICOLON@340..341 ";"
250 WHITESPACE@[341; 346) "\n " 250 WHITESPACE@341..346 "\n "
251 FN_DEF@[346; 469) 251 FN_DEF@346..469
252 VISIBILITY@[346; 349) 252 VISIBILITY@346..349
253 PUB_KW@[346; 349) "pub" 253 PUB_KW@346..349 "pub"
254 WHITESPACE@[349; 350) " " 254 WHITESPACE@349..350 " "
255 FN_KW@[350; 352) "fn" 255 FN_KW@350..352 "fn"
256 WHITESPACE@[352; 353) " " 256 WHITESPACE@352..353 " "
257 NAME@[353; 364) 257 NAME@353..364
258 IDENT@[353; 364) "getsockname" 258 IDENT@353..364 "getsockname"
259 PARAM_LIST@[364; 457) 259 PARAM_LIST@364..457
260 L_PAREN@[364; 365) "(" 260 L_PAREN@364..365 "("
261 PARAM@[365; 380) 261 PARAM@365..380
262 BIND_PAT@[365; 371) 262 BIND_PAT@365..371
263 NAME@[365; 371) 263 NAME@365..371
264 IDENT@[365; 371) "socket" 264 IDENT@365..371 "socket"
265 COLON@[371; 372) ":" 265 COLON@371..372 ":"
266 WHITESPACE@[372; 373) " " 266 WHITESPACE@372..373 " "
267 PATH_TYPE@[373; 380) 267 PATH_TYPE@373..380
268 PATH@[373; 380) 268 PATH@373..380
269 PATH_SEGMENT@[373; 380) 269 PATH_SEGMENT@373..380
270 COLON2@[373; 375) "::" 270 COLON2@373..375 "::"
271 NAME_REF@[375; 380) 271 NAME_REF@375..380
272 IDENT@[375; 380) "c_int" 272 IDENT@375..380 "c_int"
273 COMMA@[380; 381) "," 273 COMMA@380..381 ","
274 WHITESPACE@[381; 382) " " 274 WHITESPACE@381..382 " "
275 PARAM@[382; 404) 275 PARAM@382..404
276 BIND_PAT@[382; 389) 276 BIND_PAT@382..389
277 NAME@[382; 389) 277 NAME@382..389
278 IDENT@[382; 389) "address" 278 IDENT@382..389 "address"
279 COLON@[389; 390) ":" 279 COLON@389..390 ":"
280 WHITESPACE@[390; 391) " " 280 WHITESPACE@390..391 " "
281 POINTER_TYPE@[391; 404) 281 POINTER_TYPE@391..404
282 STAR@[391; 392) "*" 282 STAR@391..392 "*"
283 MUT_KW@[392; 395) "mut" 283 MUT_KW@392..395 "mut"
284 WHITESPACE@[395; 396) " " 284 WHITESPACE@395..396 " "
285 PATH_TYPE@[396; 404) 285 PATH_TYPE@396..404
286 PATH@[396; 404) 286 PATH@396..404
287 PATH_SEGMENT@[396; 404) 287 PATH_SEGMENT@396..404
288 NAME_REF@[396; 404) 288 NAME_REF@396..404
289 IDENT@[396; 404) "sockaddr" 289 IDENT@396..404 "sockaddr"
290 COMMA@[404; 405) "," 290 COMMA@404..405 ","
291 WHITESPACE@[405; 429) "\n " 291 WHITESPACE@405..429 "\n "
292 PARAM@[429; 456) 292 PARAM@429..456
293 BIND_PAT@[429; 440) 293 BIND_PAT@429..440
294 NAME@[429; 440) 294 NAME@429..440
295 IDENT@[429; 440) "address_len" 295 IDENT@429..440 "address_len"
296 COLON@[440; 441) ":" 296 COLON@440..441 ":"
297 WHITESPACE@[441; 442) " " 297 WHITESPACE@441..442 " "
298 POINTER_TYPE@[442; 456) 298 POINTER_TYPE@442..456
299 STAR@[442; 443) "*" 299 STAR@442..443 "*"
300 MUT_KW@[443; 446) "mut" 300 MUT_KW@443..446 "mut"
301 WHITESPACE@[446; 447) " " 301 WHITESPACE@446..447 " "
302 PATH_TYPE@[447; 456) 302 PATH_TYPE@447..456
303 PATH@[447; 456) 303 PATH@447..456
304 PATH_SEGMENT@[447; 456) 304 PATH_SEGMENT@447..456
305 NAME_REF@[447; 456) 305 NAME_REF@447..456
306 IDENT@[447; 456) "socklen_t" 306 IDENT@447..456 "socklen_t"
307 R_PAREN@[456; 457) ")" 307 R_PAREN@456..457 ")"
308 WHITESPACE@[457; 458) " " 308 WHITESPACE@457..458 " "
309 RET_TYPE@[458; 468) 309 RET_TYPE@458..468
310 THIN_ARROW@[458; 460) "->" 310 THIN_ARROW@458..460 "->"
311 WHITESPACE@[460; 461) " " 311 WHITESPACE@460..461 " "
312 PATH_TYPE@[461; 468) 312 PATH_TYPE@461..468
313 PATH@[461; 468) 313 PATH@461..468
314 PATH_SEGMENT@[461; 468) 314 PATH_SEGMENT@461..468
315 COLON2@[461; 463) "::" 315 COLON2@461..463 "::"
316 NAME_REF@[463; 468) 316 NAME_REF@463..468
317 IDENT@[463; 468) "c_int" 317 IDENT@463..468 "c_int"
318 SEMICOLON@[468; 469) ";" 318 SEMICOLON@468..469 ";"
319 WHITESPACE@[469; 474) "\n " 319 WHITESPACE@469..474 "\n "
320 FN_DEF@[474; 691) 320 FN_DEF@474..691
321 VISIBILITY@[474; 477) 321 VISIBILITY@474..477
322 PUB_KW@[474; 477) "pub" 322 PUB_KW@474..477 "pub"
323 WHITESPACE@[477; 478) " " 323 WHITESPACE@477..478 " "
324 FN_KW@[478; 480) "fn" 324 FN_KW@478..480 "fn"
325 WHITESPACE@[480; 481) " " 325 WHITESPACE@480..481 " "
326 NAME@[481; 491) 326 NAME@481..491
327 IDENT@[481; 491) "getsockopt" 327 IDENT@481..491 "getsockopt"
328 PARAM_LIST@[491; 679) 328 PARAM_LIST@491..679
329 L_PAREN@[491; 492) "(" 329 L_PAREN@491..492 "("
330 PARAM@[492; 507) 330 PARAM@492..507
331 BIND_PAT@[492; 498) 331 BIND_PAT@492..498
332 NAME@[492; 498) 332 NAME@492..498
333 IDENT@[492; 498) "sockfd" 333 IDENT@492..498 "sockfd"
334 COLON@[498; 499) ":" 334 COLON@498..499 ":"
335 WHITESPACE@[499; 500) " " 335 WHITESPACE@499..500 " "
336 PATH_TYPE@[500; 507) 336 PATH_TYPE@500..507
337 PATH@[500; 507) 337 PATH@500..507
338 PATH_SEGMENT@[500; 507) 338 PATH_SEGMENT@500..507
339 COLON2@[500; 502) "::" 339 COLON2@500..502 "::"
340 NAME_REF@[502; 507) 340 NAME_REF@502..507
341 IDENT@[502; 507) "c_int" 341 IDENT@502..507 "c_int"
342 COMMA@[507; 508) "," 342 COMMA@507..508 ","
343 WHITESPACE@[508; 531) "\n " 343 WHITESPACE@508..531 "\n "
344 PARAM@[531; 545) 344 PARAM@531..545
345 BIND_PAT@[531; 536) 345 BIND_PAT@531..536
346 NAME@[531; 536) 346 NAME@531..536
347 IDENT@[531; 536) "level" 347 IDENT@531..536 "level"
348 COLON@[536; 537) ":" 348 COLON@536..537 ":"
349 WHITESPACE@[537; 538) " " 349 WHITESPACE@537..538 " "
350 PATH_TYPE@[538; 545) 350 PATH_TYPE@538..545
351 PATH@[538; 545) 351 PATH@538..545
352 PATH_SEGMENT@[538; 545) 352 PATH_SEGMENT@538..545
353 COLON2@[538; 540) "::" 353 COLON2@538..540 "::"
354 NAME_REF@[540; 545) 354 NAME_REF@540..545
355 IDENT@[540; 545) "c_int" 355 IDENT@540..545 "c_int"
356 COMMA@[545; 546) "," 356 COMMA@545..546 ","
357 WHITESPACE@[546; 569) "\n " 357 WHITESPACE@546..569 "\n "
358 PARAM@[569; 585) 358 PARAM@569..585
359 BIND_PAT@[569; 576) 359 BIND_PAT@569..576
360 NAME@[569; 576) 360 NAME@569..576
361 IDENT@[569; 576) "optname" 361 IDENT@569..576 "optname"
362 COLON@[576; 577) ":" 362 COLON@576..577 ":"
363 WHITESPACE@[577; 578) " " 363 WHITESPACE@577..578 " "
364 PATH_TYPE@[578; 585) 364 PATH_TYPE@578..585
365 PATH@[578; 585) 365 PATH@578..585
366 PATH_SEGMENT@[578; 585) 366 PATH_SEGMENT@578..585
367 COLON2@[578; 580) "::" 367 COLON2@578..580 "::"
368 NAME_REF@[580; 585) 368 NAME_REF@580..585
369 IDENT@[580; 585) "c_int" 369 IDENT@580..585 "c_int"
370 COMMA@[585; 586) "," 370 COMMA@585..586 ","
371 WHITESPACE@[586; 609) "\n " 371 WHITESPACE@586..609 "\n "
372 PARAM@[609; 630) 372 PARAM@609..630
373 BIND_PAT@[609; 615) 373 BIND_PAT@609..615
374 NAME@[609; 615) 374 NAME@609..615
375 IDENT@[609; 615) "optval" 375 IDENT@609..615 "optval"
376 COLON@[615; 616) ":" 376 COLON@615..616 ":"
377 WHITESPACE@[616; 617) " " 377 WHITESPACE@616..617 " "
378 POINTER_TYPE@[617; 630) 378 POINTER_TYPE@617..630
379 STAR@[617; 618) "*" 379 STAR@617..618 "*"
380 MUT_KW@[618; 621) "mut" 380 MUT_KW@618..621 "mut"
381 WHITESPACE@[621; 622) " " 381 WHITESPACE@621..622 " "
382 PATH_TYPE@[622; 630) 382 PATH_TYPE@622..630
383 PATH@[622; 630) 383 PATH@622..630
384 PATH_SEGMENT@[622; 630) 384 PATH_SEGMENT@622..630
385 COLON2@[622; 624) "::" 385 COLON2@622..624 "::"
386 NAME_REF@[624; 630) 386 NAME_REF@624..630
387 IDENT@[624; 630) "c_void" 387 IDENT@624..630 "c_void"
388 COMMA@[630; 631) "," 388 COMMA@630..631 ","
389 WHITESPACE@[631; 654) "\n " 389 WHITESPACE@631..654 "\n "
390 PARAM@[654; 678) 390 PARAM@654..678
391 BIND_PAT@[654; 660) 391 BIND_PAT@654..660
392 NAME@[654; 660) 392 NAME@654..660
393 IDENT@[654; 660) "optlen" 393 IDENT@654..660 "optlen"
394 COLON@[660; 661) ":" 394 COLON@660..661 ":"
395 WHITESPACE@[661; 662) " " 395 WHITESPACE@661..662 " "
396 POINTER_TYPE@[662; 678) 396 POINTER_TYPE@662..678
397 STAR@[662; 663) "*" 397 STAR@662..663 "*"
398 MUT_KW@[663; 666) "mut" 398 MUT_KW@663..666 "mut"
399 WHITESPACE@[666; 667) " " 399 WHITESPACE@666..667 " "
400 PATH_TYPE@[667; 678) 400 PATH_TYPE@667..678
401 PATH@[667; 678) 401 PATH@667..678
402 PATH_SEGMENT@[667; 678) 402 PATH_SEGMENT@667..678
403 COLON2@[667; 669) "::" 403 COLON2@667..669 "::"
404 NAME_REF@[669; 678) 404 NAME_REF@669..678
405 IDENT@[669; 678) "socklen_t" 405 IDENT@669..678 "socklen_t"
406 R_PAREN@[678; 679) ")" 406 R_PAREN@678..679 ")"
407 WHITESPACE@[679; 680) " " 407 WHITESPACE@679..680 " "
408 RET_TYPE@[680; 690) 408 RET_TYPE@680..690
409 THIN_ARROW@[680; 682) "->" 409 THIN_ARROW@680..682 "->"
410 WHITESPACE@[682; 683) " " 410 WHITESPACE@682..683 " "
411 PATH_TYPE@[683; 690) 411 PATH_TYPE@683..690
412 PATH@[683; 690) 412 PATH@683..690
413 PATH_SEGMENT@[683; 690) 413 PATH_SEGMENT@683..690
414 COLON2@[683; 685) "::" 414 COLON2@683..685 "::"
415 NAME_REF@[685; 690) 415 NAME_REF@685..690
416 IDENT@[685; 690) "c_int" 416 IDENT@685..690 "c_int"
417 SEMICOLON@[690; 691) ";" 417 SEMICOLON@690..691 ";"
418 WHITESPACE@[691; 696) "\n " 418 WHITESPACE@691..696 "\n "
419 FN_DEF@[696; 864) 419 FN_DEF@696..864
420 VISIBILITY@[696; 699) 420 VISIBILITY@696..699
421 PUB_KW@[696; 699) "pub" 421 PUB_KW@696..699 "pub"
422 WHITESPACE@[699; 700) " " 422 WHITESPACE@699..700 " "
423 FN_KW@[700; 702) "fn" 423 FN_KW@700..702 "fn"
424 WHITESPACE@[702; 703) " " 424 WHITESPACE@702..703 " "
425 NAME@[703; 713) 425 NAME@703..713
426 IDENT@[703; 713) "setsockopt" 426 IDENT@703..713 "setsockopt"
427 PARAM_LIST@[713; 852) 427 PARAM_LIST@713..852
428 L_PAREN@[713; 714) "(" 428 L_PAREN@713..714 "("
429 PARAM@[714; 729) 429 PARAM@714..729
430 BIND_PAT@[714; 720) 430 BIND_PAT@714..720
431 NAME@[714; 720) 431 NAME@714..720
432 IDENT@[714; 720) "socket" 432 IDENT@714..720 "socket"
433 COLON@[720; 721) ":" 433 COLON@720..721 ":"
434 WHITESPACE@[721; 722) " " 434 WHITESPACE@721..722 " "
435 PATH_TYPE@[722; 729) 435 PATH_TYPE@722..729
436 PATH@[722; 729) 436 PATH@722..729
437 PATH_SEGMENT@[722; 729) 437 PATH_SEGMENT@722..729
438 COLON2@[722; 724) "::" 438 COLON2@722..724 "::"
439 NAME_REF@[724; 729) 439 NAME_REF@724..729
440 IDENT@[724; 729) "c_int" 440 IDENT@724..729 "c_int"
441 COMMA@[729; 730) "," 441 COMMA@729..730 ","
442 WHITESPACE@[730; 731) " " 442 WHITESPACE@730..731 " "
443 PARAM@[731; 745) 443 PARAM@731..745
444 BIND_PAT@[731; 736) 444 BIND_PAT@731..736
445 NAME@[731; 736) 445 NAME@731..736
446 IDENT@[731; 736) "level" 446 IDENT@731..736 "level"
447 COLON@[736; 737) ":" 447 COLON@736..737 ":"
448 WHITESPACE@[737; 738) " " 448 WHITESPACE@737..738 " "
449 PATH_TYPE@[738; 745) 449 PATH_TYPE@738..745
450 PATH@[738; 745) 450 PATH@738..745
451 PATH_SEGMENT@[738; 745) 451 PATH_SEGMENT@738..745
452 COLON2@[738; 740) "::" 452 COLON2@738..740 "::"
453 NAME_REF@[740; 745) 453 NAME_REF@740..745
454 IDENT@[740; 745) "c_int" 454 IDENT@740..745 "c_int"
455 COMMA@[745; 746) "," 455 COMMA@745..746 ","
456 WHITESPACE@[746; 747) " " 456 WHITESPACE@746..747 " "
457 PARAM@[747; 760) 457 PARAM@747..760
458 BIND_PAT@[747; 751) 458 BIND_PAT@747..751
459 NAME@[747; 751) 459 NAME@747..751
460 IDENT@[747; 751) "name" 460 IDENT@747..751 "name"
461 COLON@[751; 752) ":" 461 COLON@751..752 ":"
462 WHITESPACE@[752; 753) " " 462 WHITESPACE@752..753 " "
463 PATH_TYPE@[753; 760) 463 PATH_TYPE@753..760
464 PATH@[753; 760) 464 PATH@753..760
465 PATH_SEGMENT@[753; 760) 465 PATH_SEGMENT@753..760
466 COLON2@[753; 755) "::" 466 COLON2@753..755 "::"
467 NAME_REF@[755; 760) 467 NAME_REF@755..760
468 IDENT@[755; 760) "c_int" 468 IDENT@755..760 "c_int"
469 COMMA@[760; 761) "," 469 COMMA@760..761 ","
470 WHITESPACE@[761; 784) "\n " 470 WHITESPACE@761..784 "\n "
471 PARAM@[784; 806) 471 PARAM@784..806
472 BIND_PAT@[784; 789) 472 BIND_PAT@784..789
473 NAME@[784; 789) 473 NAME@784..789
474 IDENT@[784; 789) "value" 474 IDENT@784..789 "value"
475 COLON@[789; 790) ":" 475 COLON@789..790 ":"
476 WHITESPACE@[790; 791) " " 476 WHITESPACE@790..791 " "
477 POINTER_TYPE@[791; 806) 477 POINTER_TYPE@791..806
478 STAR@[791; 792) "*" 478 STAR@791..792 "*"
479 CONST_KW@[792; 797) "const" 479 CONST_KW@792..797 "const"
480 WHITESPACE@[797; 798) " " 480 WHITESPACE@797..798 " "
481 PATH_TYPE@[798; 806) 481 PATH_TYPE@798..806
482 PATH@[798; 806) 482 PATH@798..806
483 PATH_SEGMENT@[798; 806) 483 PATH_SEGMENT@798..806
484 COLON2@[798; 800) "::" 484 COLON2@798..800 "::"
485 NAME_REF@[800; 806) 485 NAME_REF@800..806
486 IDENT@[800; 806) "c_void" 486 IDENT@800..806 "c_void"
487 COMMA@[806; 807) "," 487 COMMA@806..807 ","
488 WHITESPACE@[807; 830) "\n " 488 WHITESPACE@807..830 "\n "
489 PARAM@[830; 851) 489 PARAM@830..851
490 BIND_PAT@[830; 840) 490 BIND_PAT@830..840
491 NAME@[830; 840) 491 NAME@830..840
492 IDENT@[830; 840) "option_len" 492 IDENT@830..840 "option_len"
493 COLON@[840; 841) ":" 493 COLON@840..841 ":"
494 WHITESPACE@[841; 842) " " 494 WHITESPACE@841..842 " "
495 PATH_TYPE@[842; 851) 495 PATH_TYPE@842..851
496 PATH@[842; 851) 496 PATH@842..851
497 PATH_SEGMENT@[842; 851) 497 PATH_SEGMENT@842..851
498 NAME_REF@[842; 851) 498 NAME_REF@842..851
499 IDENT@[842; 851) "socklen_t" 499 IDENT@842..851 "socklen_t"
500 R_PAREN@[851; 852) ")" 500 R_PAREN@851..852 ")"
501 WHITESPACE@[852; 853) " " 501 WHITESPACE@852..853 " "
502 RET_TYPE@[853; 863) 502 RET_TYPE@853..863
503 THIN_ARROW@[853; 855) "->" 503 THIN_ARROW@853..855 "->"
504 WHITESPACE@[855; 856) " " 504 WHITESPACE@855..856 " "
505 PATH_TYPE@[856; 863) 505 PATH_TYPE@856..863
506 PATH@[856; 863) 506 PATH@856..863
507 PATH_SEGMENT@[856; 863) 507 PATH_SEGMENT@856..863
508 COLON2@[856; 858) "::" 508 COLON2@856..858 "::"
509 NAME_REF@[858; 863) 509 NAME_REF@858..863
510 IDENT@[858; 863) "c_int" 510 IDENT@858..863 "c_int"
511 SEMICOLON@[863; 864) ";" 511 SEMICOLON@863..864 ";"
512 WHITESPACE@[864; 869) "\n " 512 WHITESPACE@864..869 "\n "
513 FN_DEF@[869; 992) 513 FN_DEF@869..992
514 VISIBILITY@[869; 872) 514 VISIBILITY@869..872
515 PUB_KW@[869; 872) "pub" 515 PUB_KW@869..872 "pub"
516 WHITESPACE@[872; 873) " " 516 WHITESPACE@872..873 " "
517 FN_KW@[873; 875) "fn" 517 FN_KW@873..875 "fn"
518 WHITESPACE@[875; 876) " " 518 WHITESPACE@875..876 " "
519 NAME@[876; 887) 519 NAME@876..887
520 IDENT@[876; 887) "getpeername" 520 IDENT@876..887 "getpeername"
521 PARAM_LIST@[887; 980) 521 PARAM_LIST@887..980
522 L_PAREN@[887; 888) "(" 522 L_PAREN@887..888 "("
523 PARAM@[888; 903) 523 PARAM@888..903
524 BIND_PAT@[888; 894) 524 BIND_PAT@888..894
525 NAME@[888; 894) 525 NAME@888..894
526 IDENT@[888; 894) "socket" 526 IDENT@888..894 "socket"
527 COLON@[894; 895) ":" 527 COLON@894..895 ":"
528 WHITESPACE@[895; 896) " " 528 WHITESPACE@895..896 " "
529 PATH_TYPE@[896; 903) 529 PATH_TYPE@896..903
530 PATH@[896; 903) 530 PATH@896..903
531 PATH_SEGMENT@[896; 903) 531 PATH_SEGMENT@896..903
532 COLON2@[896; 898) "::" 532 COLON2@896..898 "::"
533 NAME_REF@[898; 903) 533 NAME_REF@898..903
534 IDENT@[898; 903) "c_int" 534 IDENT@898..903 "c_int"
535 COMMA@[903; 904) "," 535 COMMA@903..904 ","
536 WHITESPACE@[904; 905) " " 536 WHITESPACE@904..905 " "
537 PARAM@[905; 927) 537 PARAM@905..927
538 BIND_PAT@[905; 912) 538 BIND_PAT@905..912
539 NAME@[905; 912) 539 NAME@905..912
540 IDENT@[905; 912) "address" 540 IDENT@905..912 "address"
541 COLON@[912; 913) ":" 541 COLON@912..913 ":"
542 WHITESPACE@[913; 914) " " 542 WHITESPACE@913..914 " "
543 POINTER_TYPE@[914; 927) 543 POINTER_TYPE@914..927
544 STAR@[914; 915) "*" 544 STAR@914..915 "*"
545 MUT_KW@[915; 918) "mut" 545 MUT_KW@915..918 "mut"
546 WHITESPACE@[918; 919) " " 546 WHITESPACE@918..919 " "
547 PATH_TYPE@[919; 927) 547 PATH_TYPE@919..927
548 PATH@[919; 927) 548 PATH@919..927
549 PATH_SEGMENT@[919; 927) 549 PATH_SEGMENT@919..927
550 NAME_REF@[919; 927) 550 NAME_REF@919..927
551 IDENT@[919; 927) "sockaddr" 551 IDENT@919..927 "sockaddr"
552 COMMA@[927; 928) "," 552 COMMA@927..928 ","
553 WHITESPACE@[928; 952) "\n " 553 WHITESPACE@928..952 "\n "
554 PARAM@[952; 979) 554 PARAM@952..979
555 BIND_PAT@[952; 963) 555 BIND_PAT@952..963
556 NAME@[952; 963) 556 NAME@952..963
557 IDENT@[952; 963) "address_len" 557 IDENT@952..963 "address_len"
558 COLON@[963; 964) ":" 558 COLON@963..964 ":"
559 WHITESPACE@[964; 965) " " 559 WHITESPACE@964..965 " "
560 POINTER_TYPE@[965; 979) 560 POINTER_TYPE@965..979
561 STAR@[965; 966) "*" 561 STAR@965..966 "*"
562 MUT_KW@[966; 969) "mut" 562 MUT_KW@966..969 "mut"
563 WHITESPACE@[969; 970) " " 563 WHITESPACE@969..970 " "
564 PATH_TYPE@[970; 979) 564 PATH_TYPE@970..979
565 PATH@[970; 979) 565 PATH@970..979
566 PATH_SEGMENT@[970; 979) 566 PATH_SEGMENT@970..979
567 NAME_REF@[970; 979) 567 NAME_REF@970..979
568 IDENT@[970; 979) "socklen_t" 568 IDENT@970..979 "socklen_t"
569 R_PAREN@[979; 980) ")" 569 R_PAREN@979..980 ")"
570 WHITESPACE@[980; 981) " " 570 WHITESPACE@980..981 " "
571 RET_TYPE@[981; 991) 571 RET_TYPE@981..991
572 THIN_ARROW@[981; 983) "->" 572 THIN_ARROW@981..983 "->"
573 WHITESPACE@[983; 984) " " 573 WHITESPACE@983..984 " "
574 PATH_TYPE@[984; 991) 574 PATH_TYPE@984..991
575 PATH@[984; 991) 575 PATH@984..991
576 PATH_SEGMENT@[984; 991) 576 PATH_SEGMENT@984..991
577 COLON2@[984; 986) "::" 577 COLON2@984..986 "::"
578 NAME_REF@[986; 991) 578 NAME_REF@986..991
579 IDENT@[986; 991) "c_int" 579 IDENT@986..991 "c_int"
580 SEMICOLON@[991; 992) ";" 580 SEMICOLON@991..992 ";"
581 WHITESPACE@[992; 997) "\n " 581 WHITESPACE@992..997 "\n "
582 FN_DEF@[997; 1173) 582 FN_DEF@997..1173
583 VISIBILITY@[997; 1000) 583 VISIBILITY@997..1000
584 PUB_KW@[997; 1000) "pub" 584 PUB_KW@997..1000 "pub"
585 WHITESPACE@[1000; 1001) " " 585 WHITESPACE@1000..1001 " "
586 FN_KW@[1001; 1003) "fn" 586 FN_KW@1001..1003 "fn"
587 WHITESPACE@[1003; 1004) " " 587 WHITESPACE@1003..1004 " "
588 NAME@[1004; 1010) 588 NAME@1004..1010
589 IDENT@[1004; 1010) "sendto" 589 IDENT@1004..1010 "sendto"
590 PARAM_LIST@[1010; 1159) 590 PARAM_LIST@1010..1159
591 L_PAREN@[1010; 1011) "(" 591 L_PAREN@1010..1011 "("
592 PARAM@[1011; 1026) 592 PARAM@1011..1026
593 BIND_PAT@[1011; 1017) 593 BIND_PAT@1011..1017
594 NAME@[1011; 1017) 594 NAME@1011..1017
595 IDENT@[1011; 1017) "socket" 595 IDENT@1011..1017 "socket"
596 COLON@[1017; 1018) ":" 596 COLON@1017..1018 ":"
597 WHITESPACE@[1018; 1019) " " 597 WHITESPACE@1018..1019 " "
598 PATH_TYPE@[1019; 1026) 598 PATH_TYPE@1019..1026
599 PATH@[1019; 1026) 599 PATH@1019..1026
600 PATH_SEGMENT@[1019; 1026) 600 PATH_SEGMENT@1019..1026
601 COLON2@[1019; 1021) "::" 601 COLON2@1019..1021 "::"
602 NAME_REF@[1021; 1026) 602 NAME_REF@1021..1026
603 IDENT@[1021; 1026) "c_int" 603 IDENT@1021..1026 "c_int"
604 COMMA@[1026; 1027) "," 604 COMMA@1026..1027 ","
605 WHITESPACE@[1027; 1028) " " 605 WHITESPACE@1027..1028 " "
606 PARAM@[1028; 1048) 606 PARAM@1028..1048
607 BIND_PAT@[1028; 1031) 607 BIND_PAT@1028..1031
608 NAME@[1028; 1031) 608 NAME@1028..1031
609 IDENT@[1028; 1031) "buf" 609 IDENT@1028..1031 "buf"
610 COLON@[1031; 1032) ":" 610 COLON@1031..1032 ":"
611 WHITESPACE@[1032; 1033) " " 611 WHITESPACE@1032..1033 " "
612 POINTER_TYPE@[1033; 1048) 612 POINTER_TYPE@1033..1048
613 STAR@[1033; 1034) "*" 613 STAR@1033..1034 "*"
614 CONST_KW@[1034; 1039) "const" 614 CONST_KW@1034..1039 "const"
615 WHITESPACE@[1039; 1040) " " 615 WHITESPACE@1039..1040 " "
616 PATH_TYPE@[1040; 1048) 616 PATH_TYPE@1040..1048
617 PATH@[1040; 1048) 617 PATH@1040..1048
618 PATH_SEGMENT@[1040; 1048) 618 PATH_SEGMENT@1040..1048
619 COLON2@[1040; 1042) "::" 619 COLON2@1040..1042 "::"
620 NAME_REF@[1042; 1048) 620 NAME_REF@1042..1048
621 IDENT@[1042; 1048) "c_void" 621 IDENT@1042..1048 "c_void"
622 COMMA@[1048; 1049) "," 622 COMMA@1048..1049 ","
623 WHITESPACE@[1049; 1050) " " 623 WHITESPACE@1049..1050 " "
624 PARAM@[1050; 1063) 624 PARAM@1050..1063
625 BIND_PAT@[1050; 1053) 625 BIND_PAT@1050..1053
626 NAME@[1050; 1053) 626 NAME@1050..1053
627 IDENT@[1050; 1053) "len" 627 IDENT@1050..1053 "len"
628 COLON@[1053; 1054) ":" 628 COLON@1053..1054 ":"
629 WHITESPACE@[1054; 1055) " " 629 WHITESPACE@1054..1055 " "
630 PATH_TYPE@[1055; 1063) 630 PATH_TYPE@1055..1063
631 PATH@[1055; 1063) 631 PATH@1055..1063
632 PATH_SEGMENT@[1055; 1063) 632 PATH_SEGMENT@1055..1063
633 COLON2@[1055; 1057) "::" 633 COLON2@1055..1057 "::"
634 NAME_REF@[1057; 1063) 634 NAME_REF@1057..1063
635 IDENT@[1057; 1063) "size_t" 635 IDENT@1057..1063 "size_t"
636 COMMA@[1063; 1064) "," 636 COMMA@1063..1064 ","
637 WHITESPACE@[1064; 1083) "\n " 637 WHITESPACE@1064..1083 "\n "
638 PARAM@[1083; 1097) 638 PARAM@1083..1097
639 BIND_PAT@[1083; 1088) 639 BIND_PAT@1083..1088
640 NAME@[1083; 1088) 640 NAME@1083..1088
641 IDENT@[1083; 1088) "flags" 641 IDENT@1083..1088 "flags"
642 COLON@[1088; 1089) ":" 642 COLON@1088..1089 ":"
643 WHITESPACE@[1089; 1090) " " 643 WHITESPACE@1089..1090 " "
644 PATH_TYPE@[1090; 1097) 644 PATH_TYPE@1090..1097
645 PATH@[1090; 1097) 645 PATH@1090..1097
646 PATH_SEGMENT@[1090; 1097) 646 PATH_SEGMENT@1090..1097
647 COLON2@[1090; 1092) "::" 647 COLON2@1090..1092 "::"
648 NAME_REF@[1092; 1097) 648 NAME_REF@1092..1097
649 IDENT@[1092; 1097) "c_int" 649 IDENT@1092..1097 "c_int"
650 COMMA@[1097; 1098) "," 650 COMMA@1097..1098 ","
651 WHITESPACE@[1098; 1099) " " 651 WHITESPACE@1098..1099 " "
652 PARAM@[1099; 1120) 652 PARAM@1099..1120
653 BIND_PAT@[1099; 1103) 653 BIND_PAT@1099..1103
654 NAME@[1099; 1103) 654 NAME@1099..1103
655 IDENT@[1099; 1103) "addr" 655 IDENT@1099..1103 "addr"
656 COLON@[1103; 1104) ":" 656 COLON@1103..1104 ":"
657 WHITESPACE@[1104; 1105) " " 657 WHITESPACE@1104..1105 " "
658 POINTER_TYPE@[1105; 1120) 658 POINTER_TYPE@1105..1120
659 STAR@[1105; 1106) "*" 659 STAR@1105..1106 "*"
660 CONST_KW@[1106; 1111) "const" 660 CONST_KW@1106..1111 "const"
661 WHITESPACE@[1111; 1112) " " 661 WHITESPACE@1111..1112 " "
662 PATH_TYPE@[1112; 1120) 662 PATH_TYPE@1112..1120
663 PATH@[1112; 1120) 663 PATH@1112..1120
664 PATH_SEGMENT@[1112; 1120) 664 PATH_SEGMENT@1112..1120
665 NAME_REF@[1112; 1120) 665 NAME_REF@1112..1120
666 IDENT@[1112; 1120) "sockaddr" 666 IDENT@1112..1120 "sockaddr"
667 COMMA@[1120; 1121) "," 667 COMMA@1120..1121 ","
668 WHITESPACE@[1121; 1140) "\n " 668 WHITESPACE@1121..1140 "\n "
669 PARAM@[1140; 1158) 669 PARAM@1140..1158
670 BIND_PAT@[1140; 1147) 670 BIND_PAT@1140..1147
671 NAME@[1140; 1147) 671 NAME@1140..1147
672 IDENT@[1140; 1147) "addrlen" 672 IDENT@1140..1147 "addrlen"
673 COLON@[1147; 1148) ":" 673 COLON@1147..1148 ":"
674 WHITESPACE@[1148; 1149) " " 674 WHITESPACE@1148..1149 " "
675 PATH_TYPE@[1149; 1158) 675 PATH_TYPE@1149..1158
676 PATH@[1149; 1158) 676 PATH@1149..1158
677 PATH_SEGMENT@[1149; 1158) 677 PATH_SEGMENT@1149..1158
678 NAME_REF@[1149; 1158) 678 NAME_REF@1149..1158
679 IDENT@[1149; 1158) "socklen_t" 679 IDENT@1149..1158 "socklen_t"
680 R_PAREN@[1158; 1159) ")" 680 R_PAREN@1158..1159 ")"
681 WHITESPACE@[1159; 1160) " " 681 WHITESPACE@1159..1160 " "
682 RET_TYPE@[1160; 1172) 682 RET_TYPE@1160..1172
683 THIN_ARROW@[1160; 1162) "->" 683 THIN_ARROW@1160..1162 "->"
684 WHITESPACE@[1162; 1163) " " 684 WHITESPACE@1162..1163 " "
685 PATH_TYPE@[1163; 1172) 685 PATH_TYPE@1163..1172
686 PATH@[1163; 1172) 686 PATH@1163..1172
687 PATH_SEGMENT@[1163; 1172) 687 PATH_SEGMENT@1163..1172
688 COLON2@[1163; 1165) "::" 688 COLON2@1163..1165 "::"
689 NAME_REF@[1165; 1172) 689 NAME_REF@1165..1172
690 IDENT@[1165; 1172) "ssize_t" 690 IDENT@1165..1172 "ssize_t"
691 SEMICOLON@[1172; 1173) ";" 691 SEMICOLON@1172..1173 ";"
692 WHITESPACE@[1173; 1178) "\n " 692 WHITESPACE@1173..1178 "\n "
693 FN_DEF@[1178; 1289) 693 FN_DEF@1178..1289
694 VISIBILITY@[1178; 1181) 694 VISIBILITY@1178..1181
695 PUB_KW@[1178; 1181) "pub" 695 PUB_KW@1178..1181 "pub"
696 WHITESPACE@[1181; 1182) " " 696 WHITESPACE@1181..1182 " "
697 FN_KW@[1182; 1184) "fn" 697 FN_KW@1182..1184 "fn"
698 WHITESPACE@[1184; 1185) " " 698 WHITESPACE@1184..1185 " "
699 NAME@[1185; 1189) 699 NAME@1185..1189
700 IDENT@[1185; 1189) "send" 700 IDENT@1185..1189 "send"
701 PARAM_LIST@[1189; 1275) 701 PARAM_LIST@1189..1275
702 L_PAREN@[1189; 1190) "(" 702 L_PAREN@1189..1190 "("
703 PARAM@[1190; 1205) 703 PARAM@1190..1205
704 BIND_PAT@[1190; 1196) 704 BIND_PAT@1190..1196
705 NAME@[1190; 1196) 705 NAME@1190..1196
706 IDENT@[1190; 1196) "socket" 706 IDENT@1190..1196 "socket"
707 COLON@[1196; 1197) ":" 707 COLON@1196..1197 ":"
708 WHITESPACE@[1197; 1198) " " 708 WHITESPACE@1197..1198 " "
709 PATH_TYPE@[1198; 1205) 709 PATH_TYPE@1198..1205
710 PATH@[1198; 1205) 710 PATH@1198..1205
711 PATH_SEGMENT@[1198; 1205) 711 PATH_SEGMENT@1198..1205
712 COLON2@[1198; 1200) "::" 712 COLON2@1198..1200 "::"
713 NAME_REF@[1200; 1205) 713 NAME_REF@1200..1205
714 IDENT@[1200; 1205) "c_int" 714 IDENT@1200..1205 "c_int"
715 COMMA@[1205; 1206) "," 715 COMMA@1205..1206 ","
716 WHITESPACE@[1206; 1207) " " 716 WHITESPACE@1206..1207 " "
717 PARAM@[1207; 1227) 717 PARAM@1207..1227
718 BIND_PAT@[1207; 1210) 718 BIND_PAT@1207..1210
719 NAME@[1207; 1210) 719 NAME@1207..1210
720 IDENT@[1207; 1210) "buf" 720 IDENT@1207..1210 "buf"
721 COLON@[1210; 1211) ":" 721 COLON@1210..1211 ":"
722 WHITESPACE@[1211; 1212) " " 722 WHITESPACE@1211..1212 " "
723 POINTER_TYPE@[1212; 1227) 723 POINTER_TYPE@1212..1227
724 STAR@[1212; 1213) "*" 724 STAR@1212..1213 "*"
725 CONST_KW@[1213; 1218) "const" 725 CONST_KW@1213..1218 "const"
726 WHITESPACE@[1218; 1219) " " 726 WHITESPACE@1218..1219 " "
727 PATH_TYPE@[1219; 1227) 727 PATH_TYPE@1219..1227
728 PATH@[1219; 1227) 728 PATH@1219..1227
729 PATH_SEGMENT@[1219; 1227) 729 PATH_SEGMENT@1219..1227
730 COLON2@[1219; 1221) "::" 730 COLON2@1219..1221 "::"
731 NAME_REF@[1221; 1227) 731 NAME_REF@1221..1227
732 IDENT@[1221; 1227) "c_void" 732 IDENT@1221..1227 "c_void"
733 COMMA@[1227; 1228) "," 733 COMMA@1227..1228 ","
734 WHITESPACE@[1228; 1229) " " 734 WHITESPACE@1228..1229 " "
735 PARAM@[1229; 1242) 735 PARAM@1229..1242
736 BIND_PAT@[1229; 1232) 736 BIND_PAT@1229..1232
737 NAME@[1229; 1232) 737 NAME@1229..1232
738 IDENT@[1229; 1232) "len" 738 IDENT@1229..1232 "len"
739 COLON@[1232; 1233) ":" 739 COLON@1232..1233 ":"
740 WHITESPACE@[1233; 1234) " " 740 WHITESPACE@1233..1234 " "
741 PATH_TYPE@[1234; 1242) 741 PATH_TYPE@1234..1242
742 PATH@[1234; 1242) 742 PATH@1234..1242
743 PATH_SEGMENT@[1234; 1242) 743 PATH_SEGMENT@1234..1242
744 COLON2@[1234; 1236) "::" 744 COLON2@1234..1236 "::"
745 NAME_REF@[1236; 1242) 745 NAME_REF@1236..1242
746 IDENT@[1236; 1242) "size_t" 746 IDENT@1236..1242 "size_t"
747 COMMA@[1242; 1243) "," 747 COMMA@1242..1243 ","
748 WHITESPACE@[1243; 1260) "\n " 748 WHITESPACE@1243..1260 "\n "
749 PARAM@[1260; 1274) 749 PARAM@1260..1274
750 BIND_PAT@[1260; 1265) 750 BIND_PAT@1260..1265
751 NAME@[1260; 1265) 751 NAME@1260..1265
752 IDENT@[1260; 1265) "flags" 752 IDENT@1260..1265 "flags"
753 COLON@[1265; 1266) ":" 753 COLON@1265..1266 ":"
754 WHITESPACE@[1266; 1267) " " 754 WHITESPACE@1266..1267 " "
755 PATH_TYPE@[1267; 1274) 755 PATH_TYPE@1267..1274
756 PATH@[1267; 1274) 756 PATH@1267..1274
757 PATH_SEGMENT@[1267; 1274) 757 PATH_SEGMENT@1267..1274
758 COLON2@[1267; 1269) "::" 758 COLON2@1267..1269 "::"
759 NAME_REF@[1269; 1274) 759 NAME_REF@1269..1274
760 IDENT@[1269; 1274) "c_int" 760 IDENT@1269..1274 "c_int"
761 R_PAREN@[1274; 1275) ")" 761 R_PAREN@1274..1275 ")"
762 WHITESPACE@[1275; 1276) " " 762 WHITESPACE@1275..1276 " "
763 RET_TYPE@[1276; 1288) 763 RET_TYPE@1276..1288
764 THIN_ARROW@[1276; 1278) "->" 764 THIN_ARROW@1276..1278 "->"
765 WHITESPACE@[1278; 1279) " " 765 WHITESPACE@1278..1279 " "
766 PATH_TYPE@[1279; 1288) 766 PATH_TYPE@1279..1288
767 PATH@[1279; 1288) 767 PATH@1279..1288
768 PATH_SEGMENT@[1279; 1288) 768 PATH_SEGMENT@1279..1288
769 COLON2@[1279; 1281) "::" 769 COLON2@1279..1281 "::"
770 NAME_REF@[1281; 1288) 770 NAME_REF@1281..1288
771 IDENT@[1281; 1288) "ssize_t" 771 IDENT@1281..1288 "ssize_t"
772 SEMICOLON@[1288; 1289) ";" 772 SEMICOLON@1288..1289 ";"
773 WHITESPACE@[1289; 1294) "\n " 773 WHITESPACE@1289..1294 "\n "
774 FN_DEF@[1294; 1481) 774 FN_DEF@1294..1481
775 VISIBILITY@[1294; 1297) 775 VISIBILITY@1294..1297
776 PUB_KW@[1294; 1297) "pub" 776 PUB_KW@1294..1297 "pub"
777 WHITESPACE@[1297; 1298) " " 777 WHITESPACE@1297..1298 " "
778 FN_KW@[1298; 1300) "fn" 778 FN_KW@1298..1300 "fn"
779 WHITESPACE@[1300; 1301) " " 779 WHITESPACE@1300..1301 " "
780 NAME@[1301; 1309) 780 NAME@1301..1309
781 IDENT@[1301; 1309) "recvfrom" 781 IDENT@1301..1309 "recvfrom"
782 PARAM_LIST@[1309; 1467) 782 PARAM_LIST@1309..1467
783 L_PAREN@[1309; 1310) "(" 783 L_PAREN@1309..1310 "("
784 PARAM@[1310; 1325) 784 PARAM@1310..1325
785 BIND_PAT@[1310; 1316) 785 BIND_PAT@1310..1316
786 NAME@[1310; 1316) 786 NAME@1310..1316
787 IDENT@[1310; 1316) "socket" 787 IDENT@1310..1316 "socket"
788 COLON@[1316; 1317) ":" 788 COLON@1316..1317 ":"
789 WHITESPACE@[1317; 1318) " " 789 WHITESPACE@1317..1318 " "
790 PATH_TYPE@[1318; 1325) 790 PATH_TYPE@1318..1325
791 PATH@[1318; 1325) 791 PATH@1318..1325
792 PATH_SEGMENT@[1318; 1325) 792 PATH_SEGMENT@1318..1325
793 COLON2@[1318; 1320) "::" 793 COLON2@1318..1320 "::"
794 NAME_REF@[1320; 1325) 794 NAME_REF@1320..1325
795 IDENT@[1320; 1325) "c_int" 795 IDENT@1320..1325 "c_int"
796 COMMA@[1325; 1326) "," 796 COMMA@1325..1326 ","
797 WHITESPACE@[1326; 1327) " " 797 WHITESPACE@1326..1327 " "
798 PARAM@[1327; 1345) 798 PARAM@1327..1345
799 BIND_PAT@[1327; 1330) 799 BIND_PAT@1327..1330
800 NAME@[1327; 1330) 800 NAME@1327..1330
801 IDENT@[1327; 1330) "buf" 801 IDENT@1327..1330 "buf"
802 COLON@[1330; 1331) ":" 802 COLON@1330..1331 ":"
803 WHITESPACE@[1331; 1332) " " 803 WHITESPACE@1331..1332 " "
804 POINTER_TYPE@[1332; 1345) 804 POINTER_TYPE@1332..1345
805 STAR@[1332; 1333) "*" 805 STAR@1332..1333 "*"
806 MUT_KW@[1333; 1336) "mut" 806 MUT_KW@1333..1336 "mut"
807 WHITESPACE@[1336; 1337) " " 807 WHITESPACE@1336..1337 " "
808 PATH_TYPE@[1337; 1345) 808 PATH_TYPE@1337..1345
809 PATH@[1337; 1345) 809 PATH@1337..1345
810 PATH_SEGMENT@[1337; 1345) 810 PATH_SEGMENT@1337..1345
811 COLON2@[1337; 1339) "::" 811 COLON2@1337..1339 "::"
812 NAME_REF@[1339; 1345) 812 NAME_REF@1339..1345
813 IDENT@[1339; 1345) "c_void" 813 IDENT@1339..1345 "c_void"
814 COMMA@[1345; 1346) "," 814 COMMA@1345..1346 ","
815 WHITESPACE@[1346; 1347) " " 815 WHITESPACE@1346..1347 " "
816 PARAM@[1347; 1360) 816 PARAM@1347..1360
817 BIND_PAT@[1347; 1350) 817 BIND_PAT@1347..1350
818 NAME@[1347; 1350) 818 NAME@1347..1350
819 IDENT@[1347; 1350) "len" 819 IDENT@1347..1350 "len"
820 COLON@[1350; 1351) ":" 820 COLON@1350..1351 ":"
821 WHITESPACE@[1351; 1352) " " 821 WHITESPACE@1351..1352 " "
822 PATH_TYPE@[1352; 1360) 822 PATH_TYPE@1352..1360
823 PATH@[1352; 1360) 823 PATH@1352..1360
824 PATH_SEGMENT@[1352; 1360) 824 PATH_SEGMENT@1352..1360
825 COLON2@[1352; 1354) "::" 825 COLON2@1352..1354 "::"
826 NAME_REF@[1354; 1360) 826 NAME_REF@1354..1360
827 IDENT@[1354; 1360) "size_t" 827 IDENT@1354..1360 "size_t"
828 COMMA@[1360; 1361) "," 828 COMMA@1360..1361 ","
829 WHITESPACE@[1361; 1382) "\n " 829 WHITESPACE@1361..1382 "\n "
830 PARAM@[1382; 1396) 830 PARAM@1382..1396
831 BIND_PAT@[1382; 1387) 831 BIND_PAT@1382..1387
832 NAME@[1382; 1387) 832 NAME@1382..1387
833 IDENT@[1382; 1387) "flags" 833 IDENT@1382..1387 "flags"
834 COLON@[1387; 1388) ":" 834 COLON@1387..1388 ":"
835 WHITESPACE@[1388; 1389) " " 835 WHITESPACE@1388..1389 " "
836 PATH_TYPE@[1389; 1396) 836 PATH_TYPE@1389..1396
837 PATH@[1389; 1396) 837 PATH@1389..1396
838 PATH_SEGMENT@[1389; 1396) 838 PATH_SEGMENT@1389..1396
839 COLON2@[1389; 1391) "::" 839 COLON2@1389..1391 "::"
840 NAME_REF@[1391; 1396) 840 NAME_REF@1391..1396
841 IDENT@[1391; 1396) "c_int" 841 IDENT@1391..1396 "c_int"
842 COMMA@[1396; 1397) "," 842 COMMA@1396..1397 ","
843 WHITESPACE@[1397; 1398) " " 843 WHITESPACE@1397..1398 " "
844 PARAM@[1398; 1419) 844 PARAM@1398..1419
845 BIND_PAT@[1398; 1402) 845 BIND_PAT@1398..1402
846 NAME@[1398; 1402) 846 NAME@1398..1402
847 IDENT@[1398; 1402) "addr" 847 IDENT@1398..1402 "addr"
848 COLON@[1402; 1403) ":" 848 COLON@1402..1403 ":"
849 WHITESPACE@[1403; 1404) " " 849 WHITESPACE@1403..1404 " "
850 POINTER_TYPE@[1404; 1419) 850 POINTER_TYPE@1404..1419
851 STAR@[1404; 1405) "*" 851 STAR@1404..1405 "*"
852 MUT_KW@[1405; 1408) "mut" 852 MUT_KW@1405..1408 "mut"
853 WHITESPACE@[1408; 1409) " " 853 WHITESPACE@1408..1409 " "
854 PATH_TYPE@[1409; 1419) 854 PATH_TYPE@1409..1419
855 PATH@[1409; 1419) 855 PATH@1409..1419
856 PATH_SEGMENT@[1409; 1419) 856 PATH_SEGMENT@1409..1419
857 COLON2@[1409; 1411) "::" 857 COLON2@1409..1411 "::"
858 NAME_REF@[1411; 1419) 858 NAME_REF@1411..1419
859 IDENT@[1411; 1419) "sockaddr" 859 IDENT@1411..1419 "sockaddr"
860 COMMA@[1419; 1420) "," 860 COMMA@1419..1420 ","
861 WHITESPACE@[1420; 1441) "\n " 861 WHITESPACE@1420..1441 "\n "
862 PARAM@[1441; 1466) 862 PARAM@1441..1466
863 BIND_PAT@[1441; 1448) 863 BIND_PAT@1441..1448
864 NAME@[1441; 1448) 864 NAME@1441..1448
865 IDENT@[1441; 1448) "addrlen" 865 IDENT@1441..1448 "addrlen"
866 COLON@[1448; 1449) ":" 866 COLON@1448..1449 ":"
867 WHITESPACE@[1449; 1450) " " 867 WHITESPACE@1449..1450 " "
868 POINTER_TYPE@[1450; 1466) 868 POINTER_TYPE@1450..1466
869 STAR@[1450; 1451) "*" 869 STAR@1450..1451 "*"
870 MUT_KW@[1451; 1454) "mut" 870 MUT_KW@1451..1454 "mut"
871 WHITESPACE@[1454; 1455) " " 871 WHITESPACE@1454..1455 " "
872 PATH_TYPE@[1455; 1466) 872 PATH_TYPE@1455..1466
873 PATH@[1455; 1466) 873 PATH@1455..1466
874 PATH_SEGMENT@[1455; 1466) 874 PATH_SEGMENT@1455..1466
875 COLON2@[1455; 1457) "::" 875 COLON2@1455..1457 "::"
876 NAME_REF@[1457; 1466) 876 NAME_REF@1457..1466
877 IDENT@[1457; 1466) "socklen_t" 877 IDENT@1457..1466 "socklen_t"
878 R_PAREN@[1466; 1467) ")" 878 R_PAREN@1466..1467 ")"
879 WHITESPACE@[1467; 1468) " " 879 WHITESPACE@1467..1468 " "
880 RET_TYPE@[1468; 1480) 880 RET_TYPE@1468..1480
881 THIN_ARROW@[1468; 1470) "->" 881 THIN_ARROW@1468..1470 "->"
882 WHITESPACE@[1470; 1471) " " 882 WHITESPACE@1470..1471 " "
883 PATH_TYPE@[1471; 1480) 883 PATH_TYPE@1471..1480
884 PATH@[1471; 1480) 884 PATH@1471..1480
885 PATH_SEGMENT@[1471; 1480) 885 PATH_SEGMENT@1471..1480
886 COLON2@[1471; 1473) "::" 886 COLON2@1471..1473 "::"
887 NAME_REF@[1473; 1480) 887 NAME_REF@1473..1480
888 IDENT@[1473; 1480) "ssize_t" 888 IDENT@1473..1480 "ssize_t"
889 SEMICOLON@[1480; 1481) ";" 889 SEMICOLON@1480..1481 ";"
890 WHITESPACE@[1481; 1486) "\n " 890 WHITESPACE@1481..1486 "\n "
891 FN_DEF@[1486; 1595) 891 FN_DEF@1486..1595
892 VISIBILITY@[1486; 1489) 892 VISIBILITY@1486..1489
893 PUB_KW@[1486; 1489) "pub" 893 PUB_KW@1486..1489 "pub"
894 WHITESPACE@[1489; 1490) " " 894 WHITESPACE@1489..1490 " "
895 FN_KW@[1490; 1492) "fn" 895 FN_KW@1490..1492 "fn"
896 WHITESPACE@[1492; 1493) " " 896 WHITESPACE@1492..1493 " "
897 NAME@[1493; 1497) 897 NAME@1493..1497
898 IDENT@[1493; 1497) "recv" 898 IDENT@1493..1497 "recv"
899 PARAM_LIST@[1497; 1581) 899 PARAM_LIST@1497..1581
900 L_PAREN@[1497; 1498) "(" 900 L_PAREN@1497..1498 "("
901 PARAM@[1498; 1513) 901 PARAM@1498..1513
902 BIND_PAT@[1498; 1504) 902 BIND_PAT@1498..1504
903 NAME@[1498; 1504) 903 NAME@1498..1504
904 IDENT@[1498; 1504) "socket" 904 IDENT@1498..1504 "socket"
905 COLON@[1504; 1505) ":" 905 COLON@1504..1505 ":"
906 WHITESPACE@[1505; 1506) " " 906 WHITESPACE@1505..1506 " "
907 PATH_TYPE@[1506; 1513) 907 PATH_TYPE@1506..1513
908 PATH@[1506; 1513) 908 PATH@1506..1513
909 PATH_SEGMENT@[1506; 1513) 909 PATH_SEGMENT@1506..1513
910 COLON2@[1506; 1508) "::" 910 COLON2@1506..1508 "::"
911 NAME_REF@[1508; 1513) 911 NAME_REF@1508..1513
912 IDENT@[1508; 1513) "c_int" 912 IDENT@1508..1513 "c_int"
913 COMMA@[1513; 1514) "," 913 COMMA@1513..1514 ","
914 WHITESPACE@[1514; 1515) " " 914 WHITESPACE@1514..1515 " "
915 PARAM@[1515; 1533) 915 PARAM@1515..1533
916 BIND_PAT@[1515; 1518) 916 BIND_PAT@1515..1518
917 NAME@[1515; 1518) 917 NAME@1515..1518
918 IDENT@[1515; 1518) "buf" 918 IDENT@1515..1518 "buf"
919 COLON@[1518; 1519) ":" 919 COLON@1518..1519 ":"
920 WHITESPACE@[1519; 1520) " " 920 WHITESPACE@1519..1520 " "
921 POINTER_TYPE@[1520; 1533) 921 POINTER_TYPE@1520..1533
922 STAR@[1520; 1521) "*" 922 STAR@1520..1521 "*"
923 MUT_KW@[1521; 1524) "mut" 923 MUT_KW@1521..1524 "mut"
924 WHITESPACE@[1524; 1525) " " 924 WHITESPACE@1524..1525 " "
925 PATH_TYPE@[1525; 1533) 925 PATH_TYPE@1525..1533
926 PATH@[1525; 1533) 926 PATH@1525..1533
927 PATH_SEGMENT@[1525; 1533) 927 PATH_SEGMENT@1525..1533
928 COLON2@[1525; 1527) "::" 928 COLON2@1525..1527 "::"
929 NAME_REF@[1527; 1533) 929 NAME_REF@1527..1533
930 IDENT@[1527; 1533) "c_void" 930 IDENT@1527..1533 "c_void"
931 COMMA@[1533; 1534) "," 931 COMMA@1533..1534 ","
932 WHITESPACE@[1534; 1535) " " 932 WHITESPACE@1534..1535 " "
933 PARAM@[1535; 1548) 933 PARAM@1535..1548
934 BIND_PAT@[1535; 1538) 934 BIND_PAT@1535..1538
935 NAME@[1535; 1538) 935 NAME@1535..1538
936 IDENT@[1535; 1538) "len" 936 IDENT@1535..1538 "len"
937 COLON@[1538; 1539) ":" 937 COLON@1538..1539 ":"
938 WHITESPACE@[1539; 1540) " " 938 WHITESPACE@1539..1540 " "
939 PATH_TYPE@[1540; 1548) 939 PATH_TYPE@1540..1548
940 PATH@[1540; 1548) 940 PATH@1540..1548
941 PATH_SEGMENT@[1540; 1548) 941 PATH_SEGMENT@1540..1548
942 COLON2@[1540; 1542) "::" 942 COLON2@1540..1542 "::"
943 NAME_REF@[1542; 1548) 943 NAME_REF@1542..1548
944 IDENT@[1542; 1548) "size_t" 944 IDENT@1542..1548 "size_t"
945 COMMA@[1548; 1549) "," 945 COMMA@1548..1549 ","
946 WHITESPACE@[1549; 1566) "\n " 946 WHITESPACE@1549..1566 "\n "
947 PARAM@[1566; 1580) 947 PARAM@1566..1580
948 BIND_PAT@[1566; 1571) 948 BIND_PAT@1566..1571
949 NAME@[1566; 1571) 949 NAME@1566..1571
950 IDENT@[1566; 1571) "flags" 950 IDENT@1566..1571 "flags"
951 COLON@[1571; 1572) ":" 951 COLON@1571..1572 ":"
952 WHITESPACE@[1572; 1573) " " 952 WHITESPACE@1572..1573 " "
953 PATH_TYPE@[1573; 1580) 953 PATH_TYPE@1573..1580
954 PATH@[1573; 1580) 954 PATH@1573..1580
955 PATH_SEGMENT@[1573; 1580) 955 PATH_SEGMENT@1573..1580
956 COLON2@[1573; 1575) "::" 956 COLON2@1573..1575 "::"
957 NAME_REF@[1575; 1580) 957 NAME_REF@1575..1580
958 IDENT@[1575; 1580) "c_int" 958 IDENT@1575..1580 "c_int"
959 R_PAREN@[1580; 1581) ")" 959 R_PAREN@1580..1581 ")"
960 WHITESPACE@[1581; 1582) " " 960 WHITESPACE@1581..1582 " "
961 RET_TYPE@[1582; 1594) 961 RET_TYPE@1582..1594
962 THIN_ARROW@[1582; 1584) "->" 962 THIN_ARROW@1582..1584 "->"
963 WHITESPACE@[1584; 1585) " " 963 WHITESPACE@1584..1585 " "
964 PATH_TYPE@[1585; 1594) 964 PATH_TYPE@1585..1594
965 PATH@[1585; 1594) 965 PATH@1585..1594
966 PATH_SEGMENT@[1585; 1594) 966 PATH_SEGMENT@1585..1594
967 COLON2@[1585; 1587) "::" 967 COLON2@1585..1587 "::"
968 NAME_REF@[1587; 1594) 968 NAME_REF@1587..1594
969 IDENT@[1587; 1594) "ssize_t" 969 IDENT@1587..1594 "ssize_t"
970 SEMICOLON@[1594; 1595) ";" 970 SEMICOLON@1594..1595 ";"
971 WHITESPACE@[1595; 1596) "\n" 971 WHITESPACE@1595..1596 "\n"
972 R_CURLY@[1596; 1597) "}" 972 R_CURLY@1596..1597 "}"
973 WHITESPACE@[1597; 1598) "\n" 973 WHITESPACE@1597..1598 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0032_where_for.rast b/crates/ra_syntax/test_data/parser/ok/0032_where_for.rast
index f71cf5b6c..68eb16bbd 100644
--- a/crates/ra_syntax/test_data/parser/ok/0032_where_for.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0032_where_for.rast
@@ -1,91 +1,91 @@
1SOURCE_FILE@[0; 116) 1SOURCE_FILE@0..116
2 FN_DEF@[0; 115) 2 FN_DEF@0..115
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 21) 5 NAME@3..21
6 IDENT@[3; 21) "test_serialization" 6 IDENT@3..21 "test_serialization"
7 TYPE_PARAM_LIST@[21; 26) 7 TYPE_PARAM_LIST@21..26
8 L_ANGLE@[21; 22) "<" 8 L_ANGLE@21..22 "<"
9 TYPE_PARAM@[22; 25) 9 TYPE_PARAM@22..25
10 NAME@[22; 25) 10 NAME@22..25
11 IDENT@[22; 25) "SER" 11 IDENT@22..25 "SER"
12 R_ANGLE@[25; 26) ">" 12 R_ANGLE@25..26 ">"
13 PARAM_LIST@[26; 28) 13 PARAM_LIST@26..28
14 L_PAREN@[26; 27) "(" 14 L_PAREN@26..27 "("
15 R_PAREN@[27; 28) ")" 15 R_PAREN@27..28 ")"
16 WHITESPACE@[28; 29) "\n" 16 WHITESPACE@28..29 "\n"
17 WHERE_CLAUSE@[29; 112) 17 WHERE_CLAUSE@29..112
18 WHERE_KW@[29; 34) "where" 18 WHERE_KW@29..34 "where"
19 WHITESPACE@[34; 39) "\n " 19 WHITESPACE@34..39 "\n "
20 WHERE_PRED@[39; 111) 20 WHERE_PRED@39..111
21 PATH_TYPE@[39; 42) 21 PATH_TYPE@39..42
22 PATH@[39; 42) 22 PATH@39..42
23 PATH_SEGMENT@[39; 42) 23 PATH_SEGMENT@39..42
24 NAME_REF@[39; 42) 24 NAME_REF@39..42
25 IDENT@[39; 42) "SER" 25 IDENT@39..42 "SER"
26 COLON@[42; 43) ":" 26 COLON@42..43 ":"
27 WHITESPACE@[43; 44) " " 27 WHITESPACE@43..44 " "
28 TYPE_BOUND_LIST@[44; 111) 28 TYPE_BOUND_LIST@44..111
29 TYPE_BOUND@[44; 53) 29 TYPE_BOUND@44..53
30 PATH_TYPE@[44; 53) 30 PATH_TYPE@44..53
31 PATH@[44; 53) 31 PATH@44..53
32 PATH_SEGMENT@[44; 53) 32 PATH_SEGMENT@44..53
33 NAME_REF@[44; 53) 33 NAME_REF@44..53
34 IDENT@[44; 53) "Serialize" 34 IDENT@44..53 "Serialize"
35 WHITESPACE@[53; 54) " " 35 WHITESPACE@53..54 " "
36 PLUS@[54; 55) "+" 36 PLUS@54..55 "+"
37 WHITESPACE@[55; 56) " " 37 WHITESPACE@55..56 " "
38 TYPE_BOUND@[56; 81) 38 TYPE_BOUND@56..81
39 FOR_TYPE@[56; 81) 39 FOR_TYPE@56..81
40 FOR_KW@[56; 59) "for" 40 FOR_KW@56..59 "for"
41 TYPE_PARAM_LIST@[59; 64) 41 TYPE_PARAM_LIST@59..64
42 L_ANGLE@[59; 60) "<" 42 L_ANGLE@59..60 "<"
43 LIFETIME_PARAM@[60; 63) 43 LIFETIME_PARAM@60..63
44 LIFETIME@[60; 63) "\'de" 44 LIFETIME@60..63 "\'de"
45 R_ANGLE@[63; 64) ">" 45 R_ANGLE@63..64 ">"
46 WHITESPACE@[64; 65) " " 46 WHITESPACE@64..65 " "
47 PATH_TYPE@[65; 81) 47 PATH_TYPE@65..81
48 PATH@[65; 81) 48 PATH@65..81
49 PATH_SEGMENT@[65; 81) 49 PATH_SEGMENT@65..81
50 NAME_REF@[65; 76) 50 NAME_REF@65..76
51 IDENT@[65; 76) "Deserialize" 51 IDENT@65..76 "Deserialize"
52 TYPE_ARG_LIST@[76; 81) 52 TYPE_ARG_LIST@76..81
53 L_ANGLE@[76; 77) "<" 53 L_ANGLE@76..77 "<"
54 LIFETIME_ARG@[77; 80) 54 LIFETIME_ARG@77..80
55 LIFETIME@[77; 80) "\'de" 55 LIFETIME@77..80 "\'de"
56 R_ANGLE@[80; 81) ">" 56 R_ANGLE@80..81 ">"
57 WHITESPACE@[81; 82) " " 57 WHITESPACE@81..82 " "
58 PLUS@[82; 83) "+" 58 PLUS@82..83 "+"
59 WHITESPACE@[83; 84) " " 59 WHITESPACE@83..84 " "
60 TYPE_BOUND@[84; 93) 60 TYPE_BOUND@84..93
61 PATH_TYPE@[84; 93) 61 PATH_TYPE@84..93
62 PATH@[84; 93) 62 PATH@84..93
63 PATH_SEGMENT@[84; 93) 63 PATH_SEGMENT@84..93
64 NAME_REF@[84; 93) 64 NAME_REF@84..93
65 IDENT@[84; 93) "PartialEq" 65 IDENT@84..93 "PartialEq"
66 WHITESPACE@[93; 94) " " 66 WHITESPACE@93..94 " "
67 PLUS@[94; 95) "+" 67 PLUS@94..95 "+"
68 WHITESPACE@[95; 96) " " 68 WHITESPACE@95..96 " "
69 TYPE_BOUND@[96; 111) 69 TYPE_BOUND@96..111
70 PATH_TYPE@[96; 111) 70 PATH_TYPE@96..111
71 PATH@[96; 111) 71 PATH@96..111
72 PATH@[96; 104) 72 PATH@96..104
73 PATH@[96; 99) 73 PATH@96..99
74 PATH_SEGMENT@[96; 99) 74 PATH_SEGMENT@96..99
75 NAME_REF@[96; 99) 75 NAME_REF@96..99
76 IDENT@[96; 99) "std" 76 IDENT@96..99 "std"
77 COLON2@[99; 101) "::" 77 COLON2@99..101 "::"
78 PATH_SEGMENT@[101; 104) 78 PATH_SEGMENT@101..104
79 NAME_REF@[101; 104) 79 NAME_REF@101..104
80 IDENT@[101; 104) "fmt" 80 IDENT@101..104 "fmt"
81 COLON2@[104; 106) "::" 81 COLON2@104..106 "::"
82 PATH_SEGMENT@[106; 111) 82 PATH_SEGMENT@106..111
83 NAME_REF@[106; 111) 83 NAME_REF@106..111
84 IDENT@[106; 111) "Debug" 84 IDENT@106..111 "Debug"
85 COMMA@[111; 112) "," 85 COMMA@111..112 ","
86 WHITESPACE@[112; 113) "\n" 86 WHITESPACE@112..113 "\n"
87 BLOCK_EXPR@[113; 115) 87 BLOCK_EXPR@113..115
88 BLOCK@[113; 115) 88 BLOCK@113..115
89 L_CURLY@[113; 114) "{" 89 L_CURLY@113..114 "{"
90 R_CURLY@[114; 115) "}" 90 R_CURLY@114..115 "}"
91 WHITESPACE@[115; 116) "\n" 91 WHITESPACE@115..116 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0033_label_break.rast b/crates/ra_syntax/test_data/parser/ok/0033_label_break.rast
index 8af41caa0..3977faa60 100644
--- a/crates/ra_syntax/test_data/parser/ok/0033_label_break.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0033_label_break.rast
@@ -1,220 +1,220 @@
1SOURCE_FILE@[0; 506) 1SOURCE_FILE@0..506
2 FN_DEF@[0; 505) 2 FN_DEF@0..505
3 COMMENT@[0; 33) "// format with label ..." 3 COMMENT@0..33 "// format with label ..."
4 WHITESPACE@[33; 34) "\n" 4 WHITESPACE@33..34 "\n"
5 FN_KW@[34; 36) "fn" 5 FN_KW@34..36 "fn"
6 WHITESPACE@[36; 37) " " 6 WHITESPACE@36..37 " "
7 NAME@[37; 41) 7 NAME@37..41
8 IDENT@[37; 41) "main" 8 IDENT@37..41 "main"
9 PARAM_LIST@[41; 43) 9 PARAM_LIST@41..43
10 L_PAREN@[41; 42) "(" 10 L_PAREN@41..42 "("
11 R_PAREN@[42; 43) ")" 11 R_PAREN@42..43 ")"
12 WHITESPACE@[43; 44) " " 12 WHITESPACE@43..44 " "
13 BLOCK_EXPR@[44; 505) 13 BLOCK_EXPR@44..505
14 BLOCK@[44; 505) 14 BLOCK@44..505
15 L_CURLY@[44; 45) "{" 15 L_CURLY@44..45 "{"
16 WHITESPACE@[45; 50) "\n " 16 WHITESPACE@45..50 "\n "
17 EXPR_STMT@[50; 66) 17 EXPR_STMT@50..66
18 BLOCK_EXPR@[50; 66) 18 BLOCK_EXPR@50..66
19 LABEL@[50; 63) 19 LABEL@50..63
20 LIFETIME@[50; 62) "\'empty_block" 20 LIFETIME@50..62 "\'empty_block"
21 COLON@[62; 63) ":" 21 COLON@62..63 ":"
22 WHITESPACE@[63; 64) " " 22 WHITESPACE@63..64 " "
23 BLOCK@[64; 66) 23 BLOCK@64..66
24 L_CURLY@[64; 65) "{" 24 L_CURLY@64..65 "{"
25 R_CURLY@[65; 66) "}" 25 R_CURLY@65..66 "}"
26 WHITESPACE@[66; 72) "\n\n " 26 WHITESPACE@66..72 "\n\n "
27 EXPR_STMT@[72; 295) 27 EXPR_STMT@72..295
28 BLOCK_EXPR@[72; 295) 28 BLOCK_EXPR@72..295
29 LABEL@[72; 79) 29 LABEL@72..79
30 LIFETIME@[72; 78) "\'block" 30 LIFETIME@72..78 "\'block"
31 COLON@[78; 79) ":" 31 COLON@78..79 ":"
32 WHITESPACE@[79; 80) " " 32 WHITESPACE@79..80 " "
33 BLOCK@[80; 295) 33 BLOCK@80..295
34 L_CURLY@[80; 81) "{" 34 L_CURLY@80..81 "{"
35 WHITESPACE@[81; 90) "\n " 35 WHITESPACE@81..90 "\n "
36 EXPR_STMT@[90; 101) 36 EXPR_STMT@90..101
37 CALL_EXPR@[90; 100) 37 CALL_EXPR@90..100
38 PATH_EXPR@[90; 98) 38 PATH_EXPR@90..98
39 PATH@[90; 98) 39 PATH@90..98
40 PATH_SEGMENT@[90; 98) 40 PATH_SEGMENT@90..98
41 NAME_REF@[90; 98) 41 NAME_REF@90..98
42 IDENT@[90; 98) "do_thing" 42 IDENT@90..98 "do_thing"
43 ARG_LIST@[98; 100) 43 ARG_LIST@98..100
44 L_PAREN@[98; 99) "(" 44 L_PAREN@98..99 "("
45 R_PAREN@[99; 100) ")" 45 R_PAREN@99..100 ")"
46 SEMICOLON@[100; 101) ";" 46 SEMICOLON@100..101 ";"
47 WHITESPACE@[101; 110) "\n " 47 WHITESPACE@101..110 "\n "
48 EXPR_STMT@[110; 170) 48 EXPR_STMT@110..170
49 IF_EXPR@[110; 170) 49 IF_EXPR@110..170
50 IF_KW@[110; 112) "if" 50 IF_KW@110..112 "if"
51 WHITESPACE@[112; 113) " " 51 WHITESPACE@112..113 " "
52 CONDITION@[113; 132) 52 CONDITION@113..132
53 CALL_EXPR@[113; 132) 53 CALL_EXPR@113..132
54 PATH_EXPR@[113; 130) 54 PATH_EXPR@113..130
55 PATH@[113; 130) 55 PATH@113..130
56 PATH_SEGMENT@[113; 130) 56 PATH_SEGMENT@113..130
57 NAME_REF@[113; 130) 57 NAME_REF@113..130
58 IDENT@[113; 130) "condition_not_met" 58 IDENT@113..130 "condition_not_met"
59 ARG_LIST@[130; 132) 59 ARG_LIST@130..132
60 L_PAREN@[130; 131) "(" 60 L_PAREN@130..131 "("
61 R_PAREN@[131; 132) ")" 61 R_PAREN@131..132 ")"
62 WHITESPACE@[132; 133) " " 62 WHITESPACE@132..133 " "
63 BLOCK_EXPR@[133; 170) 63 BLOCK_EXPR@133..170
64 BLOCK@[133; 170) 64 BLOCK@133..170
65 L_CURLY@[133; 134) "{" 65 L_CURLY@133..134 "{"
66 WHITESPACE@[134; 147) "\n " 66 WHITESPACE@134..147 "\n "
67 EXPR_STMT@[147; 160) 67 EXPR_STMT@147..160
68 BREAK_EXPR@[147; 159) 68 BREAK_EXPR@147..159
69 BREAK_KW@[147; 152) "break" 69 BREAK_KW@147..152 "break"
70 WHITESPACE@[152; 153) " " 70 WHITESPACE@152..153 " "
71 LIFETIME@[153; 159) "\'block" 71 LIFETIME@153..159 "\'block"
72 SEMICOLON@[159; 160) ";" 72 SEMICOLON@159..160 ";"
73 WHITESPACE@[160; 169) "\n " 73 WHITESPACE@160..169 "\n "
74 R_CURLY@[169; 170) "}" 74 R_CURLY@169..170 "}"
75 WHITESPACE@[170; 179) "\n " 75 WHITESPACE@170..179 "\n "
76 EXPR_STMT@[179; 195) 76 EXPR_STMT@179..195
77 CALL_EXPR@[179; 194) 77 CALL_EXPR@179..194
78 PATH_EXPR@[179; 192) 78 PATH_EXPR@179..192
79 PATH@[179; 192) 79 PATH@179..192
80 PATH_SEGMENT@[179; 192) 80 PATH_SEGMENT@179..192
81 NAME_REF@[179; 192) 81 NAME_REF@179..192
82 IDENT@[179; 192) "do_next_thing" 82 IDENT@179..192 "do_next_thing"
83 ARG_LIST@[192; 194) 83 ARG_LIST@192..194
84 L_PAREN@[192; 193) "(" 84 L_PAREN@192..193 "("
85 R_PAREN@[193; 194) ")" 85 R_PAREN@193..194 ")"
86 SEMICOLON@[194; 195) ";" 86 SEMICOLON@194..195 ";"
87 WHITESPACE@[195; 204) "\n " 87 WHITESPACE@195..204 "\n "
88 EXPR_STMT@[204; 264) 88 EXPR_STMT@204..264
89 IF_EXPR@[204; 264) 89 IF_EXPR@204..264
90 IF_KW@[204; 206) "if" 90 IF_KW@204..206 "if"
91 WHITESPACE@[206; 207) " " 91 WHITESPACE@206..207 " "
92 CONDITION@[207; 226) 92 CONDITION@207..226
93 CALL_EXPR@[207; 226) 93 CALL_EXPR@207..226
94 PATH_EXPR@[207; 224) 94 PATH_EXPR@207..224
95 PATH@[207; 224) 95 PATH@207..224
96 PATH_SEGMENT@[207; 224) 96 PATH_SEGMENT@207..224
97 NAME_REF@[207; 224) 97 NAME_REF@207..224
98 IDENT@[207; 224) "condition_not_met" 98 IDENT@207..224 "condition_not_met"
99 ARG_LIST@[224; 226) 99 ARG_LIST@224..226
100 L_PAREN@[224; 225) "(" 100 L_PAREN@224..225 "("
101 R_PAREN@[225; 226) ")" 101 R_PAREN@225..226 ")"
102 WHITESPACE@[226; 227) " " 102 WHITESPACE@226..227 " "
103 BLOCK_EXPR@[227; 264) 103 BLOCK_EXPR@227..264
104 BLOCK@[227; 264) 104 BLOCK@227..264
105 L_CURLY@[227; 228) "{" 105 L_CURLY@227..228 "{"
106 WHITESPACE@[228; 241) "\n " 106 WHITESPACE@228..241 "\n "
107 EXPR_STMT@[241; 254) 107 EXPR_STMT@241..254
108 BREAK_EXPR@[241; 253) 108 BREAK_EXPR@241..253
109 BREAK_KW@[241; 246) "break" 109 BREAK_KW@241..246 "break"
110 WHITESPACE@[246; 247) " " 110 WHITESPACE@246..247 " "
111 LIFETIME@[247; 253) "\'block" 111 LIFETIME@247..253 "\'block"
112 SEMICOLON@[253; 254) ";" 112 SEMICOLON@253..254 ";"
113 WHITESPACE@[254; 263) "\n " 113 WHITESPACE@254..263 "\n "
114 R_CURLY@[263; 264) "}" 114 R_CURLY@263..264 "}"
115 WHITESPACE@[264; 273) "\n " 115 WHITESPACE@264..273 "\n "
116 EXPR_STMT@[273; 289) 116 EXPR_STMT@273..289
117 CALL_EXPR@[273; 288) 117 CALL_EXPR@273..288
118 PATH_EXPR@[273; 286) 118 PATH_EXPR@273..286
119 PATH@[273; 286) 119 PATH@273..286
120 PATH_SEGMENT@[273; 286) 120 PATH_SEGMENT@273..286
121 NAME_REF@[273; 286) 121 NAME_REF@273..286
122 IDENT@[273; 286) "do_last_thing" 122 IDENT@273..286 "do_last_thing"
123 ARG_LIST@[286; 288) 123 ARG_LIST@286..288
124 L_PAREN@[286; 287) "(" 124 L_PAREN@286..287 "("
125 R_PAREN@[287; 288) ")" 125 R_PAREN@287..288 ")"
126 SEMICOLON@[288; 289) ";" 126 SEMICOLON@288..289 ";"
127 WHITESPACE@[289; 294) "\n " 127 WHITESPACE@289..294 "\n "
128 R_CURLY@[294; 295) "}" 128 R_CURLY@294..295 "}"
129 WHITESPACE@[295; 301) "\n\n " 129 WHITESPACE@295..301 "\n\n "
130 LET_STMT@[301; 503) 130 LET_STMT@301..503
131 LET_KW@[301; 304) "let" 131 LET_KW@301..304 "let"
132 WHITESPACE@[304; 305) " " 132 WHITESPACE@304..305 " "
133 BIND_PAT@[305; 311) 133 BIND_PAT@305..311
134 NAME@[305; 311) 134 NAME@305..311
135 IDENT@[305; 311) "result" 135 IDENT@305..311 "result"
136 WHITESPACE@[311; 312) " " 136 WHITESPACE@311..312 " "
137 EQ@[312; 313) "=" 137 EQ@312..313 "="
138 WHITESPACE@[313; 314) " " 138 WHITESPACE@313..314 " "
139 BLOCK_EXPR@[314; 502) 139 BLOCK_EXPR@314..502
140 LABEL@[314; 321) 140 LABEL@314..321
141 LIFETIME@[314; 320) "\'block" 141 LIFETIME@314..320 "\'block"
142 COLON@[320; 321) ":" 142 COLON@320..321 ":"
143 WHITESPACE@[321; 322) " " 143 WHITESPACE@321..322 " "
144 BLOCK@[322; 502) 144 BLOCK@322..502
145 L_CURLY@[322; 323) "{" 145 L_CURLY@322..323 "{"
146 WHITESPACE@[323; 332) "\n " 146 WHITESPACE@323..332 "\n "
147 EXPR_STMT@[332; 403) 147 EXPR_STMT@332..403
148 IF_EXPR@[332; 403) 148 IF_EXPR@332..403
149 IF_KW@[332; 334) "if" 149 IF_KW@332..334 "if"
150 WHITESPACE@[334; 335) " " 150 WHITESPACE@334..335 " "
151 CONDITION@[335; 340) 151 CONDITION@335..340
152 CALL_EXPR@[335; 340) 152 CALL_EXPR@335..340
153 PATH_EXPR@[335; 338) 153 PATH_EXPR@335..338
154 PATH@[335; 338) 154 PATH@335..338
155 PATH_SEGMENT@[335; 338) 155 PATH_SEGMENT@335..338
156 NAME_REF@[335; 338) 156 NAME_REF@335..338
157 IDENT@[335; 338) "foo" 157 IDENT@335..338 "foo"
158 ARG_LIST@[338; 340) 158 ARG_LIST@338..340
159 L_PAREN@[338; 339) "(" 159 L_PAREN@338..339 "("
160 R_PAREN@[339; 340) ")" 160 R_PAREN@339..340 ")"
161 WHITESPACE@[340; 341) " " 161 WHITESPACE@340..341 " "
162 BLOCK_EXPR@[341; 403) 162 BLOCK_EXPR@341..403
163 BLOCK@[341; 403) 163 BLOCK@341..403
164 L_CURLY@[341; 342) "{" 164 L_CURLY@341..342 "{"
165 WHITESPACE@[342; 355) "\n " 165 WHITESPACE@342..355 "\n "
166 COMMENT@[355; 365) "// comment" 166 COMMENT@355..365 "// comment"
167 WHITESPACE@[365; 378) "\n " 167 WHITESPACE@365..378 "\n "
168 EXPR_STMT@[378; 393) 168 EXPR_STMT@378..393
169 BREAK_EXPR@[378; 392) 169 BREAK_EXPR@378..392
170 BREAK_KW@[378; 383) "break" 170 BREAK_KW@378..383 "break"
171 WHITESPACE@[383; 384) " " 171 WHITESPACE@383..384 " "
172 LIFETIME@[384; 390) "\'block" 172 LIFETIME@384..390 "\'block"
173 WHITESPACE@[390; 391) " " 173 WHITESPACE@390..391 " "
174 LITERAL@[391; 392) 174 LITERAL@391..392
175 INT_NUMBER@[391; 392) "1" 175 INT_NUMBER@391..392 "1"
176 SEMICOLON@[392; 393) ";" 176 SEMICOLON@392..393 ";"
177 WHITESPACE@[393; 402) "\n " 177 WHITESPACE@393..402 "\n "
178 R_CURLY@[402; 403) "}" 178 R_CURLY@402..403 "}"
179 WHITESPACE@[403; 412) "\n " 179 WHITESPACE@403..412 "\n "
180 EXPR_STMT@[412; 486) 180 EXPR_STMT@412..486
181 IF_EXPR@[412; 486) 181 IF_EXPR@412..486
182 IF_KW@[412; 414) "if" 182 IF_KW@412..414 "if"
183 WHITESPACE@[414; 415) " " 183 WHITESPACE@414..415 " "
184 CONDITION@[415; 420) 184 CONDITION@415..420
185 CALL_EXPR@[415; 420) 185 CALL_EXPR@415..420
186 PATH_EXPR@[415; 418) 186 PATH_EXPR@415..418
187 PATH@[415; 418) 187 PATH@415..418
188 PATH_SEGMENT@[415; 418) 188 PATH_SEGMENT@415..418
189 NAME_REF@[415; 418) 189 NAME_REF@415..418
190 IDENT@[415; 418) "bar" 190 IDENT@415..418 "bar"
191 ARG_LIST@[418; 420) 191 ARG_LIST@418..420
192 L_PAREN@[418; 419) "(" 192 L_PAREN@418..419 "("
193 R_PAREN@[419; 420) ")" 193 R_PAREN@419..420 ")"
194 WHITESPACE@[420; 421) " " 194 WHITESPACE@420..421 " "
195 BLOCK_EXPR@[421; 486) 195 BLOCK_EXPR@421..486
196 BLOCK@[421; 486) 196 BLOCK@421..486
197 L_CURLY@[421; 422) "{" 197 L_CURLY@421..422 "{"
198 WHITESPACE@[422; 435) "\n " 198 WHITESPACE@422..435 "\n "
199 COMMENT@[435; 448) "/* comment */" 199 COMMENT@435..448 "/* comment */"
200 WHITESPACE@[448; 461) "\n " 200 WHITESPACE@448..461 "\n "
201 EXPR_STMT@[461; 476) 201 EXPR_STMT@461..476
202 BREAK_EXPR@[461; 475) 202 BREAK_EXPR@461..475
203 BREAK_KW@[461; 466) "break" 203 BREAK_KW@461..466 "break"
204 WHITESPACE@[466; 467) " " 204 WHITESPACE@466..467 " "
205 LIFETIME@[467; 473) "\'block" 205 LIFETIME@467..473 "\'block"
206 WHITESPACE@[473; 474) " " 206 WHITESPACE@473..474 " "
207 LITERAL@[474; 475) 207 LITERAL@474..475
208 INT_NUMBER@[474; 475) "2" 208 INT_NUMBER@474..475 "2"
209 SEMICOLON@[475; 476) ";" 209 SEMICOLON@475..476 ";"
210 WHITESPACE@[476; 485) "\n " 210 WHITESPACE@476..485 "\n "
211 R_CURLY@[485; 486) "}" 211 R_CURLY@485..486 "}"
212 WHITESPACE@[486; 495) "\n " 212 WHITESPACE@486..495 "\n "
213 LITERAL@[495; 496) 213 LITERAL@495..496
214 INT_NUMBER@[495; 496) "3" 214 INT_NUMBER@495..496 "3"
215 WHITESPACE@[496; 501) "\n " 215 WHITESPACE@496..501 "\n "
216 R_CURLY@[501; 502) "}" 216 R_CURLY@501..502 "}"
217 SEMICOLON@[502; 503) ";" 217 SEMICOLON@502..503 ";"
218 WHITESPACE@[503; 504) "\n" 218 WHITESPACE@503..504 "\n"
219 R_CURLY@[504; 505) "}" 219 R_CURLY@504..505 "}"
220 WHITESPACE@[505; 506) "\n" 220 WHITESPACE@505..506 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0034_crate_path_in_call.rast b/crates/ra_syntax/test_data/parser/ok/0034_crate_path_in_call.rast
index beaa96388..3b9e8c71c 100644
--- a/crates/ra_syntax/test_data/parser/ok/0034_crate_path_in_call.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0034_crate_path_in_call.rast
@@ -1,42 +1,42 @@
1SOURCE_FILE@[0; 62) 1SOURCE_FILE@0..62
2 FN_DEF@[0; 61) 2 FN_DEF@0..61
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 61) 11 BLOCK_EXPR@10..61
12 BLOCK@[10; 61) 12 BLOCK@10..61
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 EXPR_STMT@[16; 59) 15 EXPR_STMT@16..59
16 CALL_EXPR@[16; 58) 16 CALL_EXPR@16..58
17 PATH_EXPR@[16; 26) 17 PATH_EXPR@16..26
18 PATH@[16; 26) 18 PATH@16..26
19 PATH_SEGMENT@[16; 26) 19 PATH_SEGMENT@16..26
20 NAME_REF@[16; 26) 20 NAME_REF@16..26
21 IDENT@[16; 26) "make_query" 21 IDENT@16..26 "make_query"
22 ARG_LIST@[26; 58) 22 ARG_LIST@26..58
23 L_PAREN@[26; 27) "(" 23 L_PAREN@26..27 "("
24 PATH_EXPR@[27; 57) 24 PATH_EXPR@27..57
25 PATH@[27; 57) 25 PATH@27..57
26 PATH@[27; 44) 26 PATH@27..44
27 PATH@[27; 32) 27 PATH@27..32
28 PATH_SEGMENT@[27; 32) 28 PATH_SEGMENT@27..32
29 CRATE_KW@[27; 32) "crate" 29 CRATE_KW@27..32 "crate"
30 COLON2@[32; 34) "::" 30 COLON2@32..34 "::"
31 PATH_SEGMENT@[34; 44) 31 PATH_SEGMENT@34..44
32 NAME_REF@[34; 44) 32 NAME_REF@34..44
33 IDENT@[34; 44) "module_map" 33 IDENT@34..44 "module_map"
34 COLON2@[44; 46) "::" 34 COLON2@44..46 "::"
35 PATH_SEGMENT@[46; 57) 35 PATH_SEGMENT@46..57
36 NAME_REF@[46; 57) 36 NAME_REF@46..57
37 IDENT@[46; 57) "module_tree" 37 IDENT@46..57 "module_tree"
38 R_PAREN@[57; 58) ")" 38 R_PAREN@57..58 ")"
39 SEMICOLON@[58; 59) ";" 39 SEMICOLON@58..59 ";"
40 WHITESPACE@[59; 60) "\n" 40 WHITESPACE@59..60 "\n"
41 R_CURLY@[60; 61) "}" 41 R_CURLY@60..61 "}"
42 WHITESPACE@[61; 62) "\n" 42 WHITESPACE@61..62 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast b/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast
index 7143a31a5..9af689635 100644
--- a/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast
@@ -1,2329 +1,2329 @@
1SOURCE_FILE@[0; 3813) 1SOURCE_FILE@0..3813
2 COMMENT@[0; 55) "//! Adapted from a `r ..." 2 COMMENT@0..55 "//! Adapted from a `r ..."
3 WHITESPACE@[55; 56) "\n" 3 WHITESPACE@55..56 "\n"
4 COMMENT@[56; 173) "//! https://github.co ..." 4 COMMENT@56..173 "//! https://github.co ..."
5 WHITESPACE@[173; 174) "\n" 5 WHITESPACE@173..174 "\n"
6 COMMENT@[174; 178) "//! " 6 COMMENT@174..178 "//! "
7 WHITESPACE@[178; 179) "\n" 7 WHITESPACE@178..179 "\n"
8 COMMENT@[179; 269) "//! Reported to rust- ..." 8 COMMENT@179..269 "//! Reported to rust- ..."
9 WHITESPACE@[269; 271) "\n\n" 9 WHITESPACE@269..271 "\n\n"
10 ATTR@[271; 302) 10 ATTR@271..302
11 POUND@[271; 272) "#" 11 POUND@271..272 "#"
12 BANG@[272; 273) "!" 12 BANG@272..273 "!"
13 L_BRACK@[273; 274) "[" 13 L_BRACK@273..274 "["
14 PATH@[274; 279) 14 PATH@274..279
15 PATH_SEGMENT@[274; 279) 15 PATH_SEGMENT@274..279
16 NAME_REF@[274; 279) 16 NAME_REF@274..279
17 IDENT@[274; 279) "allow" 17 IDENT@274..279 "allow"
18 TOKEN_TREE@[279; 301) 18 TOKEN_TREE@279..301
19 L_PAREN@[279; 280) "(" 19 L_PAREN@279..280 "("
20 IDENT@[280; 300) "non_camel_case_types" 20 IDENT@280..300 "non_camel_case_types"
21 R_PAREN@[300; 301) ")" 21 R_PAREN@300..301 ")"
22 R_BRACK@[301; 302) "]" 22 R_BRACK@301..302 "]"
23 WHITESPACE@[302; 303) "\n" 23 WHITESPACE@302..303 "\n"
24 ATTR@[303; 323) 24 ATTR@303..323
25 POUND@[303; 304) "#" 25 POUND@303..304 "#"
26 BANG@[304; 305) "!" 26 BANG@304..305 "!"
27 L_BRACK@[305; 306) "[" 27 L_BRACK@305..306 "["
28 PATH@[306; 311) 28 PATH@306..311
29 PATH_SEGMENT@[306; 311) 29 PATH_SEGMENT@306..311
30 NAME_REF@[306; 311) 30 NAME_REF@306..311
31 IDENT@[306; 311) "allow" 31 IDENT@306..311 "allow"
32 TOKEN_TREE@[311; 322) 32 TOKEN_TREE@311..322
33 L_PAREN@[311; 312) "(" 33 L_PAREN@311..312 "("
34 IDENT@[312; 321) "dead_code" 34 IDENT@312..321 "dead_code"
35 R_PAREN@[321; 322) ")" 35 R_PAREN@321..322 ")"
36 R_BRACK@[322; 323) "]" 36 R_BRACK@322..323 "]"
37 WHITESPACE@[323; 324) "\n" 37 WHITESPACE@323..324 "\n"
38 ATTR@[324; 351) 38 ATTR@324..351
39 POUND@[324; 325) "#" 39 POUND@324..325 "#"
40 BANG@[325; 326) "!" 40 BANG@325..326 "!"
41 L_BRACK@[326; 327) "[" 41 L_BRACK@326..327 "["
42 PATH@[327; 332) 42 PATH@327..332
43 PATH_SEGMENT@[327; 332) 43 PATH_SEGMENT@327..332
44 NAME_REF@[327; 332) 44 NAME_REF@327..332
45 IDENT@[327; 332) "allow" 45 IDENT@327..332 "allow"
46 TOKEN_TREE@[332; 350) 46 TOKEN_TREE@332..350
47 L_PAREN@[332; 333) "(" 47 L_PAREN@332..333 "("
48 IDENT@[333; 349) "unreachable_code" 48 IDENT@333..349 "unreachable_code"
49 R_PAREN@[349; 350) ")" 49 R_PAREN@349..350 ")"
50 R_BRACK@[350; 351) "]" 50 R_BRACK@350..351 "]"
51 WHITESPACE@[351; 352) "\n" 51 WHITESPACE@351..352 "\n"
52 ATTR@[352; 376) 52 ATTR@352..376
53 POUND@[352; 353) "#" 53 POUND@352..353 "#"
54 BANG@[353; 354) "!" 54 BANG@353..354 "!"
55 L_BRACK@[354; 355) "[" 55 L_BRACK@354..355 "["
56 PATH@[355; 360) 56 PATH@355..360
57 PATH_SEGMENT@[355; 360) 57 PATH_SEGMENT@355..360
58 NAME_REF@[355; 360) 58 NAME_REF@355..360
59 IDENT@[355; 360) "allow" 59 IDENT@355..360 "allow"
60 TOKEN_TREE@[360; 375) 60 TOKEN_TREE@360..375
61 L_PAREN@[360; 361) "(" 61 L_PAREN@360..361 "("
62 IDENT@[361; 374) "unused_parens" 62 IDENT@361..374 "unused_parens"
63 R_PAREN@[374; 375) ")" 63 R_PAREN@374..375 ")"
64 R_BRACK@[375; 376) "]" 64 R_BRACK@375..376 "]"
65 WHITESPACE@[376; 378) "\n\n" 65 WHITESPACE@376..378 "\n\n"
66 ATTR@[378; 405) 66 ATTR@378..405
67 POUND@[378; 379) "#" 67 POUND@378..379 "#"
68 BANG@[379; 380) "!" 68 BANG@379..380 "!"
69 L_BRACK@[380; 381) "[" 69 L_BRACK@380..381 "["
70 PATH@[381; 396) 70 PATH@381..396
71 PATH_SEGMENT@[381; 396) 71 PATH_SEGMENT@381..396
72 NAME_REF@[381; 396) 72 NAME_REF@381..396
73 IDENT@[381; 396) "recursion_limit" 73 IDENT@381..396 "recursion_limit"
74 WHITESPACE@[396; 397) " " 74 WHITESPACE@396..397 " "
75 EQ@[397; 398) "=" 75 EQ@397..398 "="
76 WHITESPACE@[398; 399) " " 76 WHITESPACE@398..399 " "
77 LITERAL@[399; 404) 77 LITERAL@399..404
78 STRING@[399; 404) "\"128\"" 78 STRING@399..404 "\"128\""
79 R_BRACK@[404; 405) "]" 79 R_BRACK@404..405 "]"
80 WHITESPACE@[405; 407) "\n\n" 80 WHITESPACE@405..407 "\n\n"
81 USE_ITEM@[407; 427) 81 USE_ITEM@407..427
82 USE_KW@[407; 410) "use" 82 USE_KW@407..410 "use"
83 WHITESPACE@[410; 411) " " 83 WHITESPACE@410..411 " "
84 USE_TREE@[411; 426) 84 USE_TREE@411..426
85 PATH@[411; 426) 85 PATH@411..426
86 PATH@[411; 420) 86 PATH@411..420
87 PATH@[411; 414) 87 PATH@411..414
88 PATH_SEGMENT@[411; 414) 88 PATH_SEGMENT@411..414
89 NAME_REF@[411; 414) 89 NAME_REF@411..414
90 IDENT@[411; 414) "std" 90 IDENT@411..414 "std"
91 COLON2@[414; 416) "::" 91 COLON2@414..416 "::"
92 PATH_SEGMENT@[416; 420) 92 PATH_SEGMENT@416..420
93 NAME_REF@[416; 420) 93 NAME_REF@416..420
94 IDENT@[416; 420) "cell" 94 IDENT@416..420 "cell"
95 COLON2@[420; 422) "::" 95 COLON2@420..422 "::"
96 PATH_SEGMENT@[422; 426) 96 PATH_SEGMENT@422..426
97 NAME_REF@[422; 426) 97 NAME_REF@422..426
98 IDENT@[422; 426) "Cell" 98 IDENT@422..426 "Cell"
99 SEMICOLON@[426; 427) ";" 99 SEMICOLON@426..427 ";"
100 WHITESPACE@[427; 428) "\n" 100 WHITESPACE@427..428 "\n"
101 USE_ITEM@[428; 447) 101 USE_ITEM@428..447
102 USE_KW@[428; 431) "use" 102 USE_KW@428..431 "use"
103 WHITESPACE@[431; 432) " " 103 WHITESPACE@431..432 " "
104 USE_TREE@[432; 446) 104 USE_TREE@432..446
105 PATH@[432; 446) 105 PATH@432..446
106 PATH@[432; 440) 106 PATH@432..440
107 PATH@[432; 435) 107 PATH@432..435
108 PATH_SEGMENT@[432; 435) 108 PATH_SEGMENT@432..435
109 NAME_REF@[432; 435) 109 NAME_REF@432..435
110 IDENT@[432; 435) "std" 110 IDENT@432..435 "std"
111 COLON2@[435; 437) "::" 111 COLON2@435..437 "::"
112 PATH_SEGMENT@[437; 440) 112 PATH_SEGMENT@437..440
113 NAME_REF@[437; 440) 113 NAME_REF@437..440
114 IDENT@[437; 440) "mem" 114 IDENT@437..440 "mem"
115 COLON2@[440; 442) "::" 115 COLON2@440..442 "::"
116 PATH_SEGMENT@[442; 446) 116 PATH_SEGMENT@442..446
117 NAME_REF@[442; 446) 117 NAME_REF@442..446
118 IDENT@[442; 446) "swap" 118 IDENT@442..446 "swap"
119 SEMICOLON@[446; 447) ";" 119 SEMICOLON@446..447 ";"
120 WHITESPACE@[447; 449) "\n\n" 120 WHITESPACE@447..449 "\n\n"
121 COMMENT@[449; 518) "// Just a grab bag of ..." 121 COMMENT@449..518 "// Just a grab bag of ..."
122 WHITESPACE@[518; 520) "\n\n" 122 WHITESPACE@518..520 "\n\n"
123 FN_DEF@[520; 572) 123 FN_DEF@520..572
124 FN_KW@[520; 522) "fn" 124 FN_KW@520..522 "fn"
125 WHITESPACE@[522; 523) " " 125 WHITESPACE@522..523 " "
126 NAME@[523; 530) 126 NAME@523..530
127 IDENT@[523; 530) "strange" 127 IDENT@523..530 "strange"
128 PARAM_LIST@[530; 532) 128 PARAM_LIST@530..532
129 L_PAREN@[530; 531) "(" 129 L_PAREN@530..531 "("
130 R_PAREN@[531; 532) ")" 130 R_PAREN@531..532 ")"
131 WHITESPACE@[532; 533) " " 131 WHITESPACE@532..533 " "
132 RET_TYPE@[533; 540) 132 RET_TYPE@533..540
133 THIN_ARROW@[533; 535) "->" 133 THIN_ARROW@533..535 "->"
134 WHITESPACE@[535; 536) " " 134 WHITESPACE@535..536 " "
135 PATH_TYPE@[536; 540) 135 PATH_TYPE@536..540
136 PATH@[536; 540) 136 PATH@536..540
137 PATH_SEGMENT@[536; 540) 137 PATH_SEGMENT@536..540
138 NAME_REF@[536; 540) 138 NAME_REF@536..540
139 IDENT@[536; 540) "bool" 139 IDENT@536..540 "bool"
140 WHITESPACE@[540; 541) " " 140 WHITESPACE@540..541 " "
141 BLOCK_EXPR@[541; 572) 141 BLOCK_EXPR@541..572
142 BLOCK@[541; 572) 142 BLOCK@541..572
143 L_CURLY@[541; 542) "{" 143 L_CURLY@541..542 "{"
144 WHITESPACE@[542; 543) " " 144 WHITESPACE@542..543 " "
145 LET_STMT@[543; 570) 145 LET_STMT@543..570
146 LET_KW@[543; 546) "let" 146 LET_KW@543..546 "let"
147 WHITESPACE@[546; 547) " " 147 WHITESPACE@546..547 " "
148 BIND_PAT@[547; 549) 148 BIND_PAT@547..549
149 NAME@[547; 549) 149 NAME@547..549
150 IDENT@[547; 549) "_x" 150 IDENT@547..549 "_x"
151 COLON@[549; 550) ":" 151 COLON@549..550 ":"
152 WHITESPACE@[550; 551) " " 152 WHITESPACE@550..551 " "
153 PATH_TYPE@[551; 555) 153 PATH_TYPE@551..555
154 PATH@[551; 555) 154 PATH@551..555
155 PATH_SEGMENT@[551; 555) 155 PATH_SEGMENT@551..555
156 NAME_REF@[551; 555) 156 NAME_REF@551..555
157 IDENT@[551; 555) "bool" 157 IDENT@551..555 "bool"
158 WHITESPACE@[555; 556) " " 158 WHITESPACE@555..556 " "
159 EQ@[556; 557) "=" 159 EQ@556..557 "="
160 WHITESPACE@[557; 558) " " 160 WHITESPACE@557..558 " "
161 RETURN_EXPR@[558; 569) 161 RETURN_EXPR@558..569
162 RETURN_KW@[558; 564) "return" 162 RETURN_KW@558..564 "return"
163 WHITESPACE@[564; 565) " " 163 WHITESPACE@564..565 " "
164 LITERAL@[565; 569) 164 LITERAL@565..569
165 TRUE_KW@[565; 569) "true" 165 TRUE_KW@565..569 "true"
166 SEMICOLON@[569; 570) ";" 166 SEMICOLON@569..570 ";"
167 WHITESPACE@[570; 571) " " 167 WHITESPACE@570..571 " "
168 R_CURLY@[571; 572) "}" 168 R_CURLY@571..572 "}"
169 WHITESPACE@[572; 574) "\n\n" 169 WHITESPACE@572..574 "\n\n"
170 FN_DEF@[574; 624) 170 FN_DEF@574..624
171 FN_KW@[574; 576) "fn" 171 FN_KW@574..576 "fn"
172 WHITESPACE@[576; 577) " " 172 WHITESPACE@576..577 " "
173 NAME@[577; 582) 173 NAME@577..582
174 IDENT@[577; 582) "funny" 174 IDENT@577..582 "funny"
175 PARAM_LIST@[582; 584) 175 PARAM_LIST@582..584
176 L_PAREN@[582; 583) "(" 176 L_PAREN@582..583 "("
177 R_PAREN@[583; 584) ")" 177 R_PAREN@583..584 ")"
178 WHITESPACE@[584; 585) " " 178 WHITESPACE@584..585 " "
179 BLOCK_EXPR@[585; 624) 179 BLOCK_EXPR@585..624
180 BLOCK@[585; 624) 180 BLOCK@585..624
181 L_CURLY@[585; 586) "{" 181 L_CURLY@585..586 "{"
182 WHITESPACE@[586; 591) "\n " 182 WHITESPACE@586..591 "\n "
183 FN_DEF@[591; 607) 183 FN_DEF@591..607
184 FN_KW@[591; 593) "fn" 184 FN_KW@591..593 "fn"
185 WHITESPACE@[593; 594) " " 185 WHITESPACE@593..594 " "
186 NAME@[594; 595) 186 NAME@594..595
187 IDENT@[594; 595) "f" 187 IDENT@594..595 "f"
188 PARAM_LIST@[595; 603) 188 PARAM_LIST@595..603
189 L_PAREN@[595; 596) "(" 189 L_PAREN@595..596 "("
190 PARAM@[596; 602) 190 PARAM@596..602
191 BIND_PAT@[596; 598) 191 BIND_PAT@596..598
192 NAME@[596; 598) 192 NAME@596..598
193 IDENT@[596; 598) "_x" 193 IDENT@596..598 "_x"
194 COLON@[598; 599) ":" 194 COLON@598..599 ":"
195 WHITESPACE@[599; 600) " " 195 WHITESPACE@599..600 " "
196 TUPLE_TYPE@[600; 602) 196 TUPLE_TYPE@600..602
197 L_PAREN@[600; 601) "(" 197 L_PAREN@600..601 "("
198 R_PAREN@[601; 602) ")" 198 R_PAREN@601..602 ")"
199 R_PAREN@[602; 603) ")" 199 R_PAREN@602..603 ")"
200 WHITESPACE@[603; 604) " " 200 WHITESPACE@603..604 " "
201 BLOCK_EXPR@[604; 607) 201 BLOCK_EXPR@604..607
202 BLOCK@[604; 607) 202 BLOCK@604..607
203 L_CURLY@[604; 605) "{" 203 L_CURLY@604..605 "{"
204 WHITESPACE@[605; 606) " " 204 WHITESPACE@605..606 " "
205 R_CURLY@[606; 607) "}" 205 R_CURLY@606..607 "}"
206 WHITESPACE@[607; 612) "\n " 206 WHITESPACE@607..612 "\n "
207 EXPR_STMT@[612; 622) 207 EXPR_STMT@612..622
208 CALL_EXPR@[612; 621) 208 CALL_EXPR@612..621
209 PATH_EXPR@[612; 613) 209 PATH_EXPR@612..613
210 PATH@[612; 613) 210 PATH@612..613
211 PATH_SEGMENT@[612; 613) 211 PATH_SEGMENT@612..613
212 NAME_REF@[612; 613) 212 NAME_REF@612..613
213 IDENT@[612; 613) "f" 213 IDENT@612..613 "f"
214 ARG_LIST@[613; 621) 214 ARG_LIST@613..621
215 L_PAREN@[613; 614) "(" 215 L_PAREN@613..614 "("
216 RETURN_EXPR@[614; 620) 216 RETURN_EXPR@614..620
217 RETURN_KW@[614; 620) "return" 217 RETURN_KW@614..620 "return"
218 R_PAREN@[620; 621) ")" 218 R_PAREN@620..621 ")"
219 SEMICOLON@[621; 622) ";" 219 SEMICOLON@621..622 ";"
220 WHITESPACE@[622; 623) "\n" 220 WHITESPACE@622..623 "\n"
221 R_CURLY@[623; 624) "}" 221 R_CURLY@623..624 "}"
222 WHITESPACE@[624; 626) "\n\n" 222 WHITESPACE@624..626 "\n\n"
223 FN_DEF@[626; 816) 223 FN_DEF@626..816
224 FN_KW@[626; 628) "fn" 224 FN_KW@626..628 "fn"
225 WHITESPACE@[628; 629) " " 225 WHITESPACE@628..629 " "
226 NAME@[629; 633) 226 NAME@629..633
227 IDENT@[629; 633) "what" 227 IDENT@629..633 "what"
228 PARAM_LIST@[633; 635) 228 PARAM_LIST@633..635
229 L_PAREN@[633; 634) "(" 229 L_PAREN@633..634 "("
230 R_PAREN@[634; 635) ")" 230 R_PAREN@634..635 ")"
231 WHITESPACE@[635; 636) " " 231 WHITESPACE@635..636 " "
232 BLOCK_EXPR@[636; 816) 232 BLOCK_EXPR@636..816
233 BLOCK@[636; 816) 233 BLOCK@636..816
234 L_CURLY@[636; 637) "{" 234 L_CURLY@636..637 "{"
235 WHITESPACE@[637; 642) "\n " 235 WHITESPACE@637..642 "\n "
236 FN_DEF@[642; 720) 236 FN_DEF@642..720
237 FN_KW@[642; 644) "fn" 237 FN_KW@642..644 "fn"
238 WHITESPACE@[644; 645) " " 238 WHITESPACE@644..645 " "
239 NAME@[645; 648) 239 NAME@645..648
240 IDENT@[645; 648) "the" 240 IDENT@645..648 "the"
241 PARAM_LIST@[648; 664) 241 PARAM_LIST@648..664
242 L_PAREN@[648; 649) "(" 242 L_PAREN@648..649 "("
243 PARAM@[649; 663) 243 PARAM@649..663
244 BIND_PAT@[649; 650) 244 BIND_PAT@649..650
245 NAME@[649; 650) 245 NAME@649..650
246 IDENT@[649; 650) "x" 246 IDENT@649..650 "x"
247 COLON@[650; 651) ":" 247 COLON@650..651 ":"
248 WHITESPACE@[651; 652) " " 248 WHITESPACE@651..652 " "
249 REFERENCE_TYPE@[652; 663) 249 REFERENCE_TYPE@652..663
250 AMP@[652; 653) "&" 250 AMP@652..653 "&"
251 PATH_TYPE@[653; 663) 251 PATH_TYPE@653..663
252 PATH@[653; 663) 252 PATH@653..663
253 PATH_SEGMENT@[653; 663) 253 PATH_SEGMENT@653..663
254 NAME_REF@[653; 657) 254 NAME_REF@653..657
255 IDENT@[653; 657) "Cell" 255 IDENT@653..657 "Cell"
256 TYPE_ARG_LIST@[657; 663) 256 TYPE_ARG_LIST@657..663
257 L_ANGLE@[657; 658) "<" 257 L_ANGLE@657..658 "<"
258 TYPE_ARG@[658; 662) 258 TYPE_ARG@658..662
259 PATH_TYPE@[658; 662) 259 PATH_TYPE@658..662
260 PATH@[658; 662) 260 PATH@658..662
261 PATH_SEGMENT@[658; 662) 261 PATH_SEGMENT@658..662
262 NAME_REF@[658; 662) 262 NAME_REF@658..662
263 IDENT@[658; 662) "bool" 263 IDENT@658..662 "bool"
264 R_ANGLE@[662; 663) ">" 264 R_ANGLE@662..663 ">"
265 R_PAREN@[663; 664) ")" 265 R_PAREN@663..664 ")"
266 WHITESPACE@[664; 665) " " 266 WHITESPACE@664..665 " "
267 BLOCK_EXPR@[665; 720) 267 BLOCK_EXPR@665..720
268 BLOCK@[665; 720) 268 BLOCK@665..720
269 L_CURLY@[665; 666) "{" 269 L_CURLY@665..666 "{"
270 WHITESPACE@[666; 675) "\n " 270 WHITESPACE@666..675 "\n "
271 EXPR_STMT@[675; 714) 271 EXPR_STMT@675..714
272 RETURN_EXPR@[675; 713) 272 RETURN_EXPR@675..713
273 RETURN_KW@[675; 681) "return" 273 RETURN_KW@675..681 "return"
274 WHITESPACE@[681; 682) " " 274 WHITESPACE@681..682 " "
275 WHILE_EXPR@[682; 713) 275 WHILE_EXPR@682..713
276 WHILE_KW@[682; 687) "while" 276 WHILE_KW@682..687 "while"
277 WHITESPACE@[687; 688) " " 277 WHITESPACE@687..688 " "
278 CONDITION@[688; 696) 278 CONDITION@688..696
279 PREFIX_EXPR@[688; 696) 279 PREFIX_EXPR@688..696
280 BANG@[688; 689) "!" 280 BANG@688..689 "!"
281 METHOD_CALL_EXPR@[689; 696) 281 METHOD_CALL_EXPR@689..696
282 PATH_EXPR@[689; 690) 282 PATH_EXPR@689..690
283 PATH@[689; 690) 283 PATH@689..690
284 PATH_SEGMENT@[689; 690) 284 PATH_SEGMENT@689..690
285 NAME_REF@[689; 690) 285 NAME_REF@689..690
286 IDENT@[689; 690) "x" 286 IDENT@689..690 "x"
287 DOT@[690; 691) "." 287 DOT@690..691 "."
288 NAME_REF@[691; 694) 288 NAME_REF@691..694
289 IDENT@[691; 694) "get" 289 IDENT@691..694 "get"
290 ARG_LIST@[694; 696) 290 ARG_LIST@694..696
291 L_PAREN@[694; 695) "(" 291 L_PAREN@694..695 "("
292 R_PAREN@[695; 696) ")" 292 R_PAREN@695..696 ")"
293 WHITESPACE@[696; 697) " " 293 WHITESPACE@696..697 " "
294 BLOCK_EXPR@[697; 713) 294 BLOCK_EXPR@697..713
295 BLOCK@[697; 713) 295 BLOCK@697..713
296 L_CURLY@[697; 698) "{" 296 L_CURLY@697..698 "{"
297 WHITESPACE@[698; 699) " " 297 WHITESPACE@698..699 " "
298 EXPR_STMT@[699; 711) 298 EXPR_STMT@699..711
299 METHOD_CALL_EXPR@[699; 710) 299 METHOD_CALL_EXPR@699..710
300 PATH_EXPR@[699; 700) 300 PATH_EXPR@699..700
301 PATH@[699; 700) 301 PATH@699..700
302 PATH_SEGMENT@[699; 700) 302 PATH_SEGMENT@699..700
303 NAME_REF@[699; 700) 303 NAME_REF@699..700
304 IDENT@[699; 700) "x" 304 IDENT@699..700 "x"
305 DOT@[700; 701) "." 305 DOT@700..701 "."
306 NAME_REF@[701; 704) 306 NAME_REF@701..704
307 IDENT@[701; 704) "set" 307 IDENT@701..704 "set"
308 ARG_LIST@[704; 710) 308 ARG_LIST@704..710
309 L_PAREN@[704; 705) "(" 309 L_PAREN@704..705 "("
310 LITERAL@[705; 709) 310 LITERAL@705..709
311 TRUE_KW@[705; 709) "true" 311 TRUE_KW@705..709 "true"
312 R_PAREN@[709; 710) ")" 312 R_PAREN@709..710 ")"
313 SEMICOLON@[710; 711) ";" 313 SEMICOLON@710..711 ";"
314 WHITESPACE@[711; 712) " " 314 WHITESPACE@711..712 " "
315 R_CURLY@[712; 713) "}" 315 R_CURLY@712..713 "}"
316 SEMICOLON@[713; 714) ";" 316 SEMICOLON@713..714 ";"
317 WHITESPACE@[714; 719) "\n " 317 WHITESPACE@714..719 "\n "
318 R_CURLY@[719; 720) "}" 318 R_CURLY@719..720 "}"
319 WHITESPACE@[720; 725) "\n " 319 WHITESPACE@720..725 "\n "
320 LET_STMT@[725; 751) 320 LET_STMT@725..751
321 LET_KW@[725; 728) "let" 321 LET_KW@725..728 "let"
322 WHITESPACE@[728; 729) " " 322 WHITESPACE@728..729 " "
323 BIND_PAT@[729; 730) 323 BIND_PAT@729..730
324 NAME@[729; 730) 324 NAME@729..730
325 IDENT@[729; 730) "i" 325 IDENT@729..730 "i"
326 WHITESPACE@[730; 731) " " 326 WHITESPACE@730..731 " "
327 EQ@[731; 732) "=" 327 EQ@731..732 "="
328 WHITESPACE@[732; 733) " " 328 WHITESPACE@732..733 " "
329 REF_EXPR@[733; 750) 329 REF_EXPR@733..750
330 AMP@[733; 734) "&" 330 AMP@733..734 "&"
331 CALL_EXPR@[734; 750) 331 CALL_EXPR@734..750
332 PATH_EXPR@[734; 743) 332 PATH_EXPR@734..743
333 PATH@[734; 743) 333 PATH@734..743
334 PATH@[734; 738) 334 PATH@734..738
335 PATH_SEGMENT@[734; 738) 335 PATH_SEGMENT@734..738
336 NAME_REF@[734; 738) 336 NAME_REF@734..738
337 IDENT@[734; 738) "Cell" 337 IDENT@734..738 "Cell"
338 COLON2@[738; 740) "::" 338 COLON2@738..740 "::"
339 PATH_SEGMENT@[740; 743) 339 PATH_SEGMENT@740..743
340 NAME_REF@[740; 743) 340 NAME_REF@740..743
341 IDENT@[740; 743) "new" 341 IDENT@740..743 "new"
342 ARG_LIST@[743; 750) 342 ARG_LIST@743..750
343 L_PAREN@[743; 744) "(" 343 L_PAREN@743..744 "("
344 LITERAL@[744; 749) 344 LITERAL@744..749
345 FALSE_KW@[744; 749) "false" 345 FALSE_KW@744..749 "false"
346 R_PAREN@[749; 750) ")" 346 R_PAREN@749..750 ")"
347 SEMICOLON@[750; 751) ";" 347 SEMICOLON@750..751 ";"
348 WHITESPACE@[751; 756) "\n " 348 WHITESPACE@751..756 "\n "
349 LET_STMT@[756; 778) 349 LET_STMT@756..778
350 LET_KW@[756; 759) "let" 350 LET_KW@756..759 "let"
351 WHITESPACE@[759; 760) " " 351 WHITESPACE@759..760 " "
352 BIND_PAT@[760; 764) 352 BIND_PAT@760..764
353 NAME@[760; 764) 353 NAME@760..764
354 IDENT@[760; 764) "dont" 354 IDENT@760..764 "dont"
355 WHITESPACE@[764; 765) " " 355 WHITESPACE@764..765 " "
356 EQ@[765; 766) "=" 356 EQ@765..766 "="
357 WHITESPACE@[766; 767) " " 357 WHITESPACE@766..767 " "
358 BLOCK_EXPR@[767; 777) 358 BLOCK_EXPR@767..777
359 BLOCK@[767; 777) 359 BLOCK@767..777
360 L_CURLY@[767; 768) "{" 360 L_CURLY@767..768 "{"
361 LAMBDA_EXPR@[768; 776) 361 LAMBDA_EXPR@768..776
362 PARAM_LIST@[768; 770) 362 PARAM_LIST@768..770
363 PIPE@[768; 769) "|" 363 PIPE@768..769 "|"
364 PIPE@[769; 770) "|" 364 PIPE@769..770 "|"
365 CALL_EXPR@[770; 776) 365 CALL_EXPR@770..776
366 PATH_EXPR@[770; 773) 366 PATH_EXPR@770..773
367 PATH@[770; 773) 367 PATH@770..773
368 PATH_SEGMENT@[770; 773) 368 PATH_SEGMENT@770..773
369 NAME_REF@[770; 773) 369 NAME_REF@770..773
370 IDENT@[770; 773) "the" 370 IDENT@770..773 "the"
371 ARG_LIST@[773; 776) 371 ARG_LIST@773..776
372 L_PAREN@[773; 774) "(" 372 L_PAREN@773..774 "("
373 PATH_EXPR@[774; 775) 373 PATH_EXPR@774..775
374 PATH@[774; 775) 374 PATH@774..775
375 PATH_SEGMENT@[774; 775) 375 PATH_SEGMENT@774..775
376 NAME_REF@[774; 775) 376 NAME_REF@774..775
377 IDENT@[774; 775) "i" 377 IDENT@774..775 "i"
378 R_PAREN@[775; 776) ")" 378 R_PAREN@775..776 ")"
379 R_CURLY@[776; 777) "}" 379 R_CURLY@776..777 "}"
380 SEMICOLON@[777; 778) ";" 380 SEMICOLON@777..778 ";"
381 WHITESPACE@[778; 783) "\n " 381 WHITESPACE@778..783 "\n "
382 EXPR_STMT@[783; 790) 382 EXPR_STMT@783..790
383 CALL_EXPR@[783; 789) 383 CALL_EXPR@783..789
384 PATH_EXPR@[783; 787) 384 PATH_EXPR@783..787
385 PATH@[783; 787) 385 PATH@783..787
386 PATH_SEGMENT@[783; 787) 386 PATH_SEGMENT@783..787
387 NAME_REF@[783; 787) 387 NAME_REF@783..787
388 IDENT@[783; 787) "dont" 388 IDENT@783..787 "dont"
389 ARG_LIST@[787; 789) 389 ARG_LIST@787..789
390 L_PAREN@[787; 788) "(" 390 L_PAREN@787..788 "("
391 R_PAREN@[788; 789) ")" 391 R_PAREN@788..789 ")"
392 SEMICOLON@[789; 790) ";" 392 SEMICOLON@789..790 ";"
393 WHITESPACE@[790; 795) "\n " 393 WHITESPACE@790..795 "\n "
394 EXPR_STMT@[795; 814) 394 EXPR_STMT@795..814
395 MACRO_CALL@[795; 813) 395 MACRO_CALL@795..813
396 PATH@[795; 801) 396 PATH@795..801
397 PATH_SEGMENT@[795; 801) 397 PATH_SEGMENT@795..801
398 NAME_REF@[795; 801) 398 NAME_REF@795..801
399 IDENT@[795; 801) "assert" 399 IDENT@795..801 "assert"
400 BANG@[801; 802) "!" 400 BANG@801..802 "!"
401 TOKEN_TREE@[802; 813) 401 TOKEN_TREE@802..813
402 L_PAREN@[802; 803) "(" 402 L_PAREN@802..803 "("
403 TOKEN_TREE@[803; 812) 403 TOKEN_TREE@803..812
404 L_PAREN@[803; 804) "(" 404 L_PAREN@803..804 "("
405 IDENT@[804; 805) "i" 405 IDENT@804..805 "i"
406 DOT@[805; 806) "." 406 DOT@805..806 "."
407 IDENT@[806; 809) "get" 407 IDENT@806..809 "get"
408 TOKEN_TREE@[809; 811) 408 TOKEN_TREE@809..811
409 L_PAREN@[809; 810) "(" 409 L_PAREN@809..810 "("
410 R_PAREN@[810; 811) ")" 410 R_PAREN@810..811 ")"
411 R_PAREN@[811; 812) ")" 411 R_PAREN@811..812 ")"
412 R_PAREN@[812; 813) ")" 412 R_PAREN@812..813 ")"
413 SEMICOLON@[813; 814) ";" 413 SEMICOLON@813..814 ";"
414 WHITESPACE@[814; 815) "\n" 414 WHITESPACE@814..815 "\n"
415 R_CURLY@[815; 816) "}" 415 R_CURLY@815..816 "}"
416 WHITESPACE@[816; 818) "\n\n" 416 WHITESPACE@816..818 "\n\n"
417 FN_DEF@[818; 1322) 417 FN_DEF@818..1322
418 FN_KW@[818; 820) "fn" 418 FN_KW@818..820 "fn"
419 WHITESPACE@[820; 821) " " 419 WHITESPACE@820..821 " "
420 NAME@[821; 832) 420 NAME@821..832
421 IDENT@[821; 832) "zombiejesus" 421 IDENT@821..832 "zombiejesus"
422 PARAM_LIST@[832; 834) 422 PARAM_LIST@832..834
423 L_PAREN@[832; 833) "(" 423 L_PAREN@832..833 "("
424 R_PAREN@[833; 834) ")" 424 R_PAREN@833..834 ")"
425 WHITESPACE@[834; 835) " " 425 WHITESPACE@834..835 " "
426 BLOCK_EXPR@[835; 1322) 426 BLOCK_EXPR@835..1322
427 BLOCK@[835; 1322) 427 BLOCK@835..1322
428 L_CURLY@[835; 836) "{" 428 L_CURLY@835..836 "{"
429 WHITESPACE@[836; 841) "\n " 429 WHITESPACE@836..841 "\n "
430 LOOP_EXPR@[841; 1320) 430 LOOP_EXPR@841..1320
431 LOOP_KW@[841; 845) "loop" 431 LOOP_KW@841..845 "loop"
432 WHITESPACE@[845; 846) " " 432 WHITESPACE@845..846 " "
433 BLOCK_EXPR@[846; 1320) 433 BLOCK_EXPR@846..1320
434 BLOCK@[846; 1320) 434 BLOCK@846..1320
435 L_CURLY@[846; 847) "{" 435 L_CURLY@846..847 "{"
436 WHITESPACE@[847; 856) "\n " 436 WHITESPACE@847..856 "\n "
437 EXPR_STMT@[856; 1283) 437 EXPR_STMT@856..1283
438 WHILE_EXPR@[856; 1283) 438 WHILE_EXPR@856..1283
439 WHILE_KW@[856; 861) "while" 439 WHILE_KW@856..861 "while"
440 WHITESPACE@[861; 862) " " 440 WHITESPACE@861..862 " "
441 CONDITION@[862; 870) 441 CONDITION@862..870
442 PAREN_EXPR@[862; 870) 442 PAREN_EXPR@862..870
443 L_PAREN@[862; 863) "(" 443 L_PAREN@862..863 "("
444 RETURN_EXPR@[863; 869) 444 RETURN_EXPR@863..869
445 RETURN_KW@[863; 869) "return" 445 RETURN_KW@863..869 "return"
446 R_PAREN@[869; 870) ")" 446 R_PAREN@869..870 ")"
447 WHITESPACE@[870; 871) " " 447 WHITESPACE@870..871 " "
448 BLOCK_EXPR@[871; 1283) 448 BLOCK_EXPR@871..1283
449 BLOCK@[871; 1283) 449 BLOCK@871..1283
450 L_CURLY@[871; 872) "{" 450 L_CURLY@871..872 "{"
451 WHITESPACE@[872; 885) "\n " 451 WHITESPACE@872..885 "\n "
452 IF_EXPR@[885; 1273) 452 IF_EXPR@885..1273
453 IF_KW@[885; 887) "if" 453 IF_KW@885..887 "if"
454 WHITESPACE@[887; 888) " " 454 WHITESPACE@887..888 " "
455 CONDITION@[888; 896) 455 CONDITION@888..896
456 PAREN_EXPR@[888; 896) 456 PAREN_EXPR@888..896
457 L_PAREN@[888; 889) "(" 457 L_PAREN@888..889 "("
458 RETURN_EXPR@[889; 895) 458 RETURN_EXPR@889..895
459 RETURN_KW@[889; 895) "return" 459 RETURN_KW@889..895 "return"
460 R_PAREN@[895; 896) ")" 460 R_PAREN@895..896 ")"
461 WHITESPACE@[896; 897) " " 461 WHITESPACE@896..897 " "
462 BLOCK_EXPR@[897; 1216) 462 BLOCK_EXPR@897..1216
463 BLOCK@[897; 1216) 463 BLOCK@897..1216
464 L_CURLY@[897; 898) "{" 464 L_CURLY@897..898 "{"
465 WHITESPACE@[898; 915) "\n " 465 WHITESPACE@898..915 "\n "
466 EXPR_STMT@[915; 1202) 466 EXPR_STMT@915..1202
467 MATCH_EXPR@[915; 1201) 467 MATCH_EXPR@915..1201
468 MATCH_KW@[915; 920) "match" 468 MATCH_KW@915..920 "match"
469 WHITESPACE@[920; 921) " " 469 WHITESPACE@920..921 " "
470 PAREN_EXPR@[921; 929) 470 PAREN_EXPR@921..929
471 L_PAREN@[921; 922) "(" 471 L_PAREN@921..922 "("
472 RETURN_EXPR@[922; 928) 472 RETURN_EXPR@922..928
473 RETURN_KW@[922; 928) "return" 473 RETURN_KW@922..928 "return"
474 R_PAREN@[928; 929) ")" 474 R_PAREN@928..929 ")"
475 WHITESPACE@[929; 930) " " 475 WHITESPACE@929..930 " "
476 MATCH_ARM_LIST@[930; 1201) 476 MATCH_ARM_LIST@930..1201
477 L_CURLY@[930; 931) "{" 477 L_CURLY@930..931 "{"
478 WHITESPACE@[931; 952) "\n " 478 WHITESPACE@931..952 "\n "
479 MATCH_ARM@[952; 1147) 479 MATCH_ARM@952..1147
480 LITERAL_PAT@[952; 953) 480 LITERAL_PAT@952..953
481 LITERAL@[952; 953) 481 LITERAL@952..953
482 INT_NUMBER@[952; 953) "1" 482 INT_NUMBER@952..953 "1"
483 WHITESPACE@[953; 954) " " 483 WHITESPACE@953..954 " "
484 FAT_ARROW@[954; 956) "=>" 484 FAT_ARROW@954..956 "=>"
485 WHITESPACE@[956; 957) " " 485 WHITESPACE@956..957 " "
486 BLOCK_EXPR@[957; 1147) 486 BLOCK_EXPR@957..1147
487 BLOCK@[957; 1147) 487 BLOCK@957..1147
488 L_CURLY@[957; 958) "{" 488 L_CURLY@957..958 "{"
489 WHITESPACE@[958; 983) "\n ..." 489 WHITESPACE@958..983 "\n ..."
490 IF_EXPR@[983; 1125) 490 IF_EXPR@983..1125
491 IF_KW@[983; 985) "if" 491 IF_KW@983..985 "if"
492 WHITESPACE@[985; 986) " " 492 WHITESPACE@985..986 " "
493 CONDITION@[986; 994) 493 CONDITION@986..994
494 PAREN_EXPR@[986; 994) 494 PAREN_EXPR@986..994
495 L_PAREN@[986; 987) "(" 495 L_PAREN@986..987 "("
496 RETURN_EXPR@[987; 993) 496 RETURN_EXPR@987..993
497 RETURN_KW@[987; 993) "return" 497 RETURN_KW@987..993 "return"
498 R_PAREN@[993; 994) ")" 498 R_PAREN@993..994 ")"
499 WHITESPACE@[994; 995) " " 499 WHITESPACE@994..995 " "
500 BLOCK_EXPR@[995; 1057) 500 BLOCK_EXPR@995..1057
501 BLOCK@[995; 1057) 501 BLOCK@995..1057
502 L_CURLY@[995; 996) "{" 502 L_CURLY@995..996 "{"
503 WHITESPACE@[996; 1025) "\n ..." 503 WHITESPACE@996..1025 "\n ..."
504 RETURN_EXPR@[1025; 1031) 504 RETURN_EXPR@1025..1031
505 RETURN_KW@[1025; 1031) "return" 505 RETURN_KW@1025..1031 "return"
506 WHITESPACE@[1031; 1056) "\n ..." 506 WHITESPACE@1031..1056 "\n ..."
507 R_CURLY@[1056; 1057) "}" 507 R_CURLY@1056..1057 "}"
508 WHITESPACE@[1057; 1058) " " 508 WHITESPACE@1057..1058 " "
509 ELSE_KW@[1058; 1062) "else" 509 ELSE_KW@1058..1062 "else"
510 WHITESPACE@[1062; 1063) " " 510 WHITESPACE@1062..1063 " "
511 BLOCK_EXPR@[1063; 1125) 511 BLOCK_EXPR@1063..1125
512 BLOCK@[1063; 1125) 512 BLOCK@1063..1125
513 L_CURLY@[1063; 1064) "{" 513 L_CURLY@1063..1064 "{"
514 WHITESPACE@[1064; 1093) "\n ..." 514 WHITESPACE@1064..1093 "\n ..."
515 RETURN_EXPR@[1093; 1099) 515 RETURN_EXPR@1093..1099
516 RETURN_KW@[1093; 1099) "return" 516 RETURN_KW@1093..1099 "return"
517 WHITESPACE@[1099; 1124) "\n ..." 517 WHITESPACE@1099..1124 "\n ..."
518 R_CURLY@[1124; 1125) "}" 518 R_CURLY@1124..1125 "}"
519 WHITESPACE@[1125; 1146) "\n " 519 WHITESPACE@1125..1146 "\n "
520 R_CURLY@[1146; 1147) "}" 520 R_CURLY@1146..1147 "}"
521 WHITESPACE@[1147; 1168) "\n " 521 WHITESPACE@1147..1168 "\n "
522 MATCH_ARM@[1168; 1183) 522 MATCH_ARM@1168..1183
523 PLACEHOLDER_PAT@[1168; 1169) 523 PLACEHOLDER_PAT@1168..1169
524 UNDERSCORE@[1168; 1169) "_" 524 UNDERSCORE@1168..1169 "_"
525 WHITESPACE@[1169; 1170) " " 525 WHITESPACE@1169..1170 " "
526 FAT_ARROW@[1170; 1172) "=>" 526 FAT_ARROW@1170..1172 "=>"
527 WHITESPACE@[1172; 1173) " " 527 WHITESPACE@1172..1173 " "
528 BLOCK_EXPR@[1173; 1183) 528 BLOCK_EXPR@1173..1183
529 BLOCK@[1173; 1183) 529 BLOCK@1173..1183
530 L_CURLY@[1173; 1174) "{" 530 L_CURLY@1173..1174 "{"
531 WHITESPACE@[1174; 1175) " " 531 WHITESPACE@1174..1175 " "
532 RETURN_EXPR@[1175; 1181) 532 RETURN_EXPR@1175..1181
533 RETURN_KW@[1175; 1181) "return" 533 RETURN_KW@1175..1181 "return"
534 WHITESPACE@[1181; 1182) " " 534 WHITESPACE@1181..1182 " "
535 R_CURLY@[1182; 1183) "}" 535 R_CURLY@1182..1183 "}"
536 WHITESPACE@[1183; 1200) "\n " 536 WHITESPACE@1183..1200 "\n "
537 R_CURLY@[1200; 1201) "}" 537 R_CURLY@1200..1201 "}"
538 SEMICOLON@[1201; 1202) ";" 538 SEMICOLON@1201..1202 ";"
539 WHITESPACE@[1202; 1215) "\n " 539 WHITESPACE@1202..1215 "\n "
540 R_CURLY@[1215; 1216) "}" 540 R_CURLY@1215..1216 "}"
541 WHITESPACE@[1216; 1217) " " 541 WHITESPACE@1216..1217 " "
542 ELSE_KW@[1217; 1221) "else" 542 ELSE_KW@1217..1221 "else"
543 WHITESPACE@[1221; 1222) " " 543 WHITESPACE@1221..1222 " "
544 IF_EXPR@[1222; 1273) 544 IF_EXPR@1222..1273
545 IF_KW@[1222; 1224) "if" 545 IF_KW@1222..1224 "if"
546 WHITESPACE@[1224; 1225) " " 546 WHITESPACE@1224..1225 " "
547 CONDITION@[1225; 1233) 547 CONDITION@1225..1233
548 PAREN_EXPR@[1225; 1233) 548 PAREN_EXPR@1225..1233
549 L_PAREN@[1225; 1226) "(" 549 L_PAREN@1225..1226 "("
550 RETURN_EXPR@[1226; 1232) 550 RETURN_EXPR@1226..1232
551 RETURN_KW@[1226; 1232) "return" 551 RETURN_KW@1226..1232 "return"
552 R_PAREN@[1232; 1233) ")" 552 R_PAREN@1232..1233 ")"
553 WHITESPACE@[1233; 1234) " " 553 WHITESPACE@1233..1234 " "
554 BLOCK_EXPR@[1234; 1273) 554 BLOCK_EXPR@1234..1273
555 BLOCK@[1234; 1273) 555 BLOCK@1234..1273
556 L_CURLY@[1234; 1235) "{" 556 L_CURLY@1234..1235 "{"
557 WHITESPACE@[1235; 1252) "\n " 557 WHITESPACE@1235..1252 "\n "
558 EXPR_STMT@[1252; 1259) 558 EXPR_STMT@1252..1259
559 RETURN_EXPR@[1252; 1258) 559 RETURN_EXPR@1252..1258
560 RETURN_KW@[1252; 1258) "return" 560 RETURN_KW@1252..1258 "return"
561 SEMICOLON@[1258; 1259) ";" 561 SEMICOLON@1258..1259 ";"
562 WHITESPACE@[1259; 1272) "\n " 562 WHITESPACE@1259..1272 "\n "
563 R_CURLY@[1272; 1273) "}" 563 R_CURLY@1272..1273 "}"
564 WHITESPACE@[1273; 1282) "\n " 564 WHITESPACE@1273..1282 "\n "
565 R_CURLY@[1282; 1283) "}" 565 R_CURLY@1282..1283 "}"
566 WHITESPACE@[1283; 1292) "\n " 566 WHITESPACE@1283..1292 "\n "
567 IF_EXPR@[1292; 1314) 567 IF_EXPR@1292..1314
568 IF_KW@[1292; 1294) "if" 568 IF_KW@1292..1294 "if"
569 WHITESPACE@[1294; 1295) " " 569 WHITESPACE@1294..1295 " "
570 CONDITION@[1295; 1303) 570 CONDITION@1295..1303
571 PAREN_EXPR@[1295; 1303) 571 PAREN_EXPR@1295..1303
572 L_PAREN@[1295; 1296) "(" 572 L_PAREN@1295..1296 "("
573 RETURN_EXPR@[1296; 1302) 573 RETURN_EXPR@1296..1302
574 RETURN_KW@[1296; 1302) "return" 574 RETURN_KW@1296..1302 "return"
575 R_PAREN@[1302; 1303) ")" 575 R_PAREN@1302..1303 ")"
576 WHITESPACE@[1303; 1304) " " 576 WHITESPACE@1303..1304 " "
577 BLOCK_EXPR@[1304; 1314) 577 BLOCK_EXPR@1304..1314
578 BLOCK@[1304; 1314) 578 BLOCK@1304..1314
579 L_CURLY@[1304; 1305) "{" 579 L_CURLY@1304..1305 "{"
580 WHITESPACE@[1305; 1306) " " 580 WHITESPACE@1305..1306 " "
581 EXPR_STMT@[1306; 1312) 581 EXPR_STMT@1306..1312
582 BREAK_EXPR@[1306; 1311) 582 BREAK_EXPR@1306..1311
583 BREAK_KW@[1306; 1311) "break" 583 BREAK_KW@1306..1311 "break"
584 SEMICOLON@[1311; 1312) ";" 584 SEMICOLON@1311..1312 ";"
585 WHITESPACE@[1312; 1313) " " 585 WHITESPACE@1312..1313 " "
586 R_CURLY@[1313; 1314) "}" 586 R_CURLY@1313..1314 "}"
587 WHITESPACE@[1314; 1319) "\n " 587 WHITESPACE@1314..1319 "\n "
588 R_CURLY@[1319; 1320) "}" 588 R_CURLY@1319..1320 "}"
589 WHITESPACE@[1320; 1321) "\n" 589 WHITESPACE@1320..1321 "\n"
590 R_CURLY@[1321; 1322) "}" 590 R_CURLY@1321..1322 "}"
591 WHITESPACE@[1322; 1324) "\n\n" 591 WHITESPACE@1322..1324 "\n\n"
592 FN_DEF@[1324; 1539) 592 FN_DEF@1324..1539
593 FN_KW@[1324; 1326) "fn" 593 FN_KW@1324..1326 "fn"
594 WHITESPACE@[1326; 1327) " " 594 WHITESPACE@1326..1327 " "
595 NAME@[1327; 1334) 595 NAME@1327..1334
596 IDENT@[1327; 1334) "notsure" 596 IDENT@1327..1334 "notsure"
597 PARAM_LIST@[1334; 1336) 597 PARAM_LIST@1334..1336
598 L_PAREN@[1334; 1335) "(" 598 L_PAREN@1334..1335 "("
599 R_PAREN@[1335; 1336) ")" 599 R_PAREN@1335..1336 ")"
600 WHITESPACE@[1336; 1337) " " 600 WHITESPACE@1336..1337 " "
601 BLOCK_EXPR@[1337; 1539) 601 BLOCK_EXPR@1337..1539
602 BLOCK@[1337; 1539) 602 BLOCK@1337..1539
603 L_CURLY@[1337; 1338) "{" 603 L_CURLY@1337..1338 "{"
604 WHITESPACE@[1338; 1343) "\n " 604 WHITESPACE@1338..1343 "\n "
605 LET_STMT@[1343; 1361) 605 LET_STMT@1343..1361
606 LET_KW@[1343; 1346) "let" 606 LET_KW@1343..1346 "let"
607 WHITESPACE@[1346; 1347) " " 607 WHITESPACE@1346..1347 " "
608 BIND_PAT@[1347; 1353) 608 BIND_PAT@1347..1353
609 MUT_KW@[1347; 1350) "mut" 609 MUT_KW@1347..1350 "mut"
610 WHITESPACE@[1350; 1351) " " 610 WHITESPACE@1350..1351 " "
611 NAME@[1351; 1353) 611 NAME@1351..1353
612 IDENT@[1351; 1353) "_x" 612 IDENT@1351..1353 "_x"
613 COLON@[1353; 1354) ":" 613 COLON@1353..1354 ":"
614 WHITESPACE@[1354; 1355) " " 614 WHITESPACE@1354..1355 " "
615 PATH_TYPE@[1355; 1360) 615 PATH_TYPE@1355..1360
616 PATH@[1355; 1360) 616 PATH@1355..1360
617 PATH_SEGMENT@[1355; 1360) 617 PATH_SEGMENT@1355..1360
618 NAME_REF@[1355; 1360) 618 NAME_REF@1355..1360
619 IDENT@[1355; 1360) "isize" 619 IDENT@1355..1360 "isize"
620 SEMICOLON@[1360; 1361) ";" 620 SEMICOLON@1360..1361 ";"
621 WHITESPACE@[1361; 1366) "\n " 621 WHITESPACE@1361..1366 "\n "
622 LET_STMT@[1366; 1400) 622 LET_STMT@1366..1400
623 LET_KW@[1366; 1369) "let" 623 LET_KW@1366..1369 "let"
624 WHITESPACE@[1369; 1370) " " 624 WHITESPACE@1369..1370 " "
625 BIND_PAT@[1370; 1376) 625 BIND_PAT@1370..1376
626 MUT_KW@[1370; 1373) "mut" 626 MUT_KW@1370..1373 "mut"
627 WHITESPACE@[1373; 1374) " " 627 WHITESPACE@1373..1374 " "
628 NAME@[1374; 1376) 628 NAME@1374..1376
629 IDENT@[1374; 1376) "_y" 629 IDENT@1374..1376 "_y"
630 WHITESPACE@[1376; 1377) " " 630 WHITESPACE@1376..1377 " "
631 EQ@[1377; 1378) "=" 631 EQ@1377..1378 "="
632 WHITESPACE@[1378; 1379) " " 632 WHITESPACE@1378..1379 " "
633 BIN_EXPR@[1379; 1399) 633 BIN_EXPR@1379..1399
634 PAREN_EXPR@[1379; 1387) 634 PAREN_EXPR@1379..1387
635 L_PAREN@[1379; 1380) "(" 635 L_PAREN@1379..1380 "("
636 BIN_EXPR@[1380; 1386) 636 BIN_EXPR@1380..1386
637 PATH_EXPR@[1380; 1382) 637 PATH_EXPR@1380..1382
638 PATH@[1380; 1382) 638 PATH@1380..1382
639 PATH_SEGMENT@[1380; 1382) 639 PATH_SEGMENT@1380..1382
640 NAME_REF@[1380; 1382) 640 NAME_REF@1380..1382
641 IDENT@[1380; 1382) "_x" 641 IDENT@1380..1382 "_x"
642 WHITESPACE@[1382; 1383) " " 642 WHITESPACE@1382..1383 " "
643 EQ@[1383; 1384) "=" 643 EQ@1383..1384 "="
644 WHITESPACE@[1384; 1385) " " 644 WHITESPACE@1384..1385 " "
645 LITERAL@[1385; 1386) 645 LITERAL@1385..1386
646 INT_NUMBER@[1385; 1386) "0" 646 INT_NUMBER@1385..1386 "0"
647 R_PAREN@[1386; 1387) ")" 647 R_PAREN@1386..1387 ")"
648 WHITESPACE@[1387; 1388) " " 648 WHITESPACE@1387..1388 " "
649 EQ2@[1388; 1390) "==" 649 EQ2@1388..1390 "=="
650 WHITESPACE@[1390; 1391) " " 650 WHITESPACE@1390..1391 " "
651 PAREN_EXPR@[1391; 1399) 651 PAREN_EXPR@1391..1399
652 L_PAREN@[1391; 1392) "(" 652 L_PAREN@1391..1392 "("
653 BIN_EXPR@[1392; 1398) 653 BIN_EXPR@1392..1398
654 PATH_EXPR@[1392; 1394) 654 PATH_EXPR@1392..1394
655 PATH@[1392; 1394) 655 PATH@1392..1394
656 PATH_SEGMENT@[1392; 1394) 656 PATH_SEGMENT@1392..1394
657 NAME_REF@[1392; 1394) 657 NAME_REF@1392..1394
658 IDENT@[1392; 1394) "_x" 658 IDENT@1392..1394 "_x"
659 WHITESPACE@[1394; 1395) " " 659 WHITESPACE@1394..1395 " "
660 EQ@[1395; 1396) "=" 660 EQ@1395..1396 "="
661 WHITESPACE@[1396; 1397) " " 661 WHITESPACE@1396..1397 " "
662 LITERAL@[1397; 1398) 662 LITERAL@1397..1398
663 INT_NUMBER@[1397; 1398) "0" 663 INT_NUMBER@1397..1398 "0"
664 R_PAREN@[1398; 1399) ")" 664 R_PAREN@1398..1399 ")"
665 SEMICOLON@[1399; 1400) ";" 665 SEMICOLON@1399..1400 ";"
666 WHITESPACE@[1400; 1405) "\n " 666 WHITESPACE@1400..1405 "\n "
667 LET_STMT@[1405; 1438) 667 LET_STMT@1405..1438
668 LET_KW@[1405; 1408) "let" 668 LET_KW@1405..1408 "let"
669 WHITESPACE@[1408; 1409) " " 669 WHITESPACE@1408..1409 " "
670 BIND_PAT@[1409; 1415) 670 BIND_PAT@1409..1415
671 MUT_KW@[1409; 1412) "mut" 671 MUT_KW@1409..1412 "mut"
672 WHITESPACE@[1412; 1413) " " 672 WHITESPACE@1412..1413 " "
673 NAME@[1413; 1415) 673 NAME@1413..1415
674 IDENT@[1413; 1415) "_z" 674 IDENT@1413..1415 "_z"
675 WHITESPACE@[1415; 1416) " " 675 WHITESPACE@1415..1416 " "
676 EQ@[1416; 1417) "=" 676 EQ@1416..1417 "="
677 WHITESPACE@[1417; 1418) " " 677 WHITESPACE@1417..1418 " "
678 BIN_EXPR@[1418; 1437) 678 BIN_EXPR@1418..1437
679 PAREN_EXPR@[1418; 1426) 679 PAREN_EXPR@1418..1426
680 L_PAREN@[1418; 1419) "(" 680 L_PAREN@1418..1419 "("
681 BIN_EXPR@[1419; 1425) 681 BIN_EXPR@1419..1425
682 PATH_EXPR@[1419; 1421) 682 PATH_EXPR@1419..1421
683 PATH@[1419; 1421) 683 PATH@1419..1421
684 PATH_SEGMENT@[1419; 1421) 684 PATH_SEGMENT@1419..1421
685 NAME_REF@[1419; 1421) 685 NAME_REF@1419..1421
686 IDENT@[1419; 1421) "_x" 686 IDENT@1419..1421 "_x"
687 WHITESPACE@[1421; 1422) " " 687 WHITESPACE@1421..1422 " "
688 EQ@[1422; 1423) "=" 688 EQ@1422..1423 "="
689 WHITESPACE@[1423; 1424) " " 689 WHITESPACE@1423..1424 " "
690 LITERAL@[1424; 1425) 690 LITERAL@1424..1425
691 INT_NUMBER@[1424; 1425) "0" 691 INT_NUMBER@1424..1425 "0"
692 R_PAREN@[1425; 1426) ")" 692 R_PAREN@1425..1426 ")"
693 WHITESPACE@[1426; 1427) " " 693 WHITESPACE@1426..1427 " "
694 L_ANGLE@[1427; 1428) "<" 694 L_ANGLE@1427..1428 "<"
695 WHITESPACE@[1428; 1429) " " 695 WHITESPACE@1428..1429 " "
696 PAREN_EXPR@[1429; 1437) 696 PAREN_EXPR@1429..1437
697 L_PAREN@[1429; 1430) "(" 697 L_PAREN@1429..1430 "("
698 BIN_EXPR@[1430; 1436) 698 BIN_EXPR@1430..1436
699 PATH_EXPR@[1430; 1432) 699 PATH_EXPR@1430..1432
700 PATH@[1430; 1432) 700 PATH@1430..1432
701 PATH_SEGMENT@[1430; 1432) 701 PATH_SEGMENT@1430..1432
702 NAME_REF@[1430; 1432) 702 NAME_REF@1430..1432
703 IDENT@[1430; 1432) "_x" 703 IDENT@1430..1432 "_x"
704 WHITESPACE@[1432; 1433) " " 704 WHITESPACE@1432..1433 " "
705 EQ@[1433; 1434) "=" 705 EQ@1433..1434 "="
706 WHITESPACE@[1434; 1435) " " 706 WHITESPACE@1434..1435 " "
707 LITERAL@[1435; 1436) 707 LITERAL@1435..1436
708 INT_NUMBER@[1435; 1436) "0" 708 INT_NUMBER@1435..1436 "0"
709 R_PAREN@[1436; 1437) ")" 709 R_PAREN@1436..1437 ")"
710 SEMICOLON@[1437; 1438) ";" 710 SEMICOLON@1437..1438 ";"
711 WHITESPACE@[1438; 1443) "\n " 711 WHITESPACE@1438..1443 "\n "
712 LET_STMT@[1443; 1474) 712 LET_STMT@1443..1474
713 LET_KW@[1443; 1446) "let" 713 LET_KW@1443..1446 "let"
714 WHITESPACE@[1446; 1447) " " 714 WHITESPACE@1446..1447 " "
715 BIND_PAT@[1447; 1449) 715 BIND_PAT@1447..1449
716 NAME@[1447; 1449) 716 NAME@1447..1449
717 IDENT@[1447; 1449) "_a" 717 IDENT@1447..1449 "_a"
718 WHITESPACE@[1449; 1450) " " 718 WHITESPACE@1449..1450 " "
719 EQ@[1450; 1451) "=" 719 EQ@1450..1451 "="
720 WHITESPACE@[1451; 1452) " " 720 WHITESPACE@1451..1452 " "
721 BIN_EXPR@[1452; 1473) 721 BIN_EXPR@1452..1473
722 PAREN_EXPR@[1452; 1461) 722 PAREN_EXPR@1452..1461
723 L_PAREN@[1452; 1453) "(" 723 L_PAREN@1452..1453 "("
724 BIN_EXPR@[1453; 1460) 724 BIN_EXPR@1453..1460
725 PATH_EXPR@[1453; 1455) 725 PATH_EXPR@1453..1455
726 PATH@[1453; 1455) 726 PATH@1453..1455
727 PATH_SEGMENT@[1453; 1455) 727 PATH_SEGMENT@1453..1455
728 NAME_REF@[1453; 1455) 728 NAME_REF@1453..1455
729 IDENT@[1453; 1455) "_x" 729 IDENT@1453..1455 "_x"
730 WHITESPACE@[1455; 1456) " " 730 WHITESPACE@1455..1456 " "
731 PLUSEQ@[1456; 1458) "+=" 731 PLUSEQ@1456..1458 "+="
732 WHITESPACE@[1458; 1459) " " 732 WHITESPACE@1458..1459 " "
733 LITERAL@[1459; 1460) 733 LITERAL@1459..1460
734 INT_NUMBER@[1459; 1460) "0" 734 INT_NUMBER@1459..1460 "0"
735 R_PAREN@[1460; 1461) ")" 735 R_PAREN@1460..1461 ")"
736 WHITESPACE@[1461; 1462) " " 736 WHITESPACE@1461..1462 " "
737 EQ2@[1462; 1464) "==" 737 EQ2@1462..1464 "=="
738 WHITESPACE@[1464; 1465) " " 738 WHITESPACE@1464..1465 " "
739 PAREN_EXPR@[1465; 1473) 739 PAREN_EXPR@1465..1473
740 L_PAREN@[1465; 1466) "(" 740 L_PAREN@1465..1466 "("
741 BIN_EXPR@[1466; 1472) 741 BIN_EXPR@1466..1472
742 PATH_EXPR@[1466; 1468) 742 PATH_EXPR@1466..1468
743 PATH@[1466; 1468) 743 PATH@1466..1468
744 PATH_SEGMENT@[1466; 1468) 744 PATH_SEGMENT@1466..1468
745 NAME_REF@[1466; 1468) 745 NAME_REF@1466..1468
746 IDENT@[1466; 1468) "_x" 746 IDENT@1466..1468 "_x"
747 WHITESPACE@[1468; 1469) " " 747 WHITESPACE@1468..1469 " "
748 EQ@[1469; 1470) "=" 748 EQ@1469..1470 "="
749 WHITESPACE@[1470; 1471) " " 749 WHITESPACE@1470..1471 " "
750 LITERAL@[1471; 1472) 750 LITERAL@1471..1472
751 INT_NUMBER@[1471; 1472) "0" 751 INT_NUMBER@1471..1472 "0"
752 R_PAREN@[1472; 1473) ")" 752 R_PAREN@1472..1473 ")"
753 SEMICOLON@[1473; 1474) ";" 753 SEMICOLON@1473..1474 ";"
754 WHITESPACE@[1474; 1479) "\n " 754 WHITESPACE@1474..1479 "\n "
755 LET_STMT@[1479; 1537) 755 LET_STMT@1479..1537
756 LET_KW@[1479; 1482) "let" 756 LET_KW@1479..1482 "let"
757 WHITESPACE@[1482; 1483) " " 757 WHITESPACE@1482..1483 " "
758 BIND_PAT@[1483; 1485) 758 BIND_PAT@1483..1485
759 NAME@[1483; 1485) 759 NAME@1483..1485
760 IDENT@[1483; 1485) "_b" 760 IDENT@1483..1485 "_b"
761 WHITESPACE@[1485; 1486) " " 761 WHITESPACE@1485..1486 " "
762 EQ@[1486; 1487) "=" 762 EQ@1486..1487 "="
763 WHITESPACE@[1487; 1488) " " 763 WHITESPACE@1487..1488 " "
764 BIN_EXPR@[1488; 1536) 764 BIN_EXPR@1488..1536
765 CALL_EXPR@[1488; 1510) 765 CALL_EXPR@1488..1510
766 PATH_EXPR@[1488; 1492) 766 PATH_EXPR@1488..1492
767 PATH@[1488; 1492) 767 PATH@1488..1492
768 PATH_SEGMENT@[1488; 1492) 768 PATH_SEGMENT@1488..1492
769 NAME_REF@[1488; 1492) 769 NAME_REF@1488..1492
770 IDENT@[1488; 1492) "swap" 770 IDENT@1488..1492 "swap"
771 ARG_LIST@[1492; 1510) 771 ARG_LIST@1492..1510
772 L_PAREN@[1492; 1493) "(" 772 L_PAREN@1492..1493 "("
773 REF_EXPR@[1493; 1500) 773 REF_EXPR@1493..1500
774 AMP@[1493; 1494) "&" 774 AMP@1493..1494 "&"
775 MUT_KW@[1494; 1497) "mut" 775 MUT_KW@1494..1497 "mut"
776 WHITESPACE@[1497; 1498) " " 776 WHITESPACE@1497..1498 " "
777 PATH_EXPR@[1498; 1500) 777 PATH_EXPR@1498..1500
778 PATH@[1498; 1500) 778 PATH@1498..1500
779 PATH_SEGMENT@[1498; 1500) 779 PATH_SEGMENT@1498..1500
780 NAME_REF@[1498; 1500) 780 NAME_REF@1498..1500
781 IDENT@[1498; 1500) "_y" 781 IDENT@1498..1500 "_y"
782 COMMA@[1500; 1501) "," 782 COMMA@1500..1501 ","
783 WHITESPACE@[1501; 1502) " " 783 WHITESPACE@1501..1502 " "
784 REF_EXPR@[1502; 1509) 784 REF_EXPR@1502..1509
785 AMP@[1502; 1503) "&" 785 AMP@1502..1503 "&"
786 MUT_KW@[1503; 1506) "mut" 786 MUT_KW@1503..1506 "mut"
787 WHITESPACE@[1506; 1507) " " 787 WHITESPACE@1506..1507 " "
788 PATH_EXPR@[1507; 1509) 788 PATH_EXPR@1507..1509
789 PATH@[1507; 1509) 789 PATH@1507..1509
790 PATH_SEGMENT@[1507; 1509) 790 PATH_SEGMENT@1507..1509
791 NAME_REF@[1507; 1509) 791 NAME_REF@1507..1509
792 IDENT@[1507; 1509) "_z" 792 IDENT@1507..1509 "_z"
793 R_PAREN@[1509; 1510) ")" 793 R_PAREN@1509..1510 ")"
794 WHITESPACE@[1510; 1511) " " 794 WHITESPACE@1510..1511 " "
795 EQ2@[1511; 1513) "==" 795 EQ2@1511..1513 "=="
796 WHITESPACE@[1513; 1514) " " 796 WHITESPACE@1513..1514 " "
797 CALL_EXPR@[1514; 1536) 797 CALL_EXPR@1514..1536
798 PATH_EXPR@[1514; 1518) 798 PATH_EXPR@1514..1518
799 PATH@[1514; 1518) 799 PATH@1514..1518
800 PATH_SEGMENT@[1514; 1518) 800 PATH_SEGMENT@1514..1518
801 NAME_REF@[1514; 1518) 801 NAME_REF@1514..1518
802 IDENT@[1514; 1518) "swap" 802 IDENT@1514..1518 "swap"
803 ARG_LIST@[1518; 1536) 803 ARG_LIST@1518..1536
804 L_PAREN@[1518; 1519) "(" 804 L_PAREN@1518..1519 "("
805 REF_EXPR@[1519; 1526) 805 REF_EXPR@1519..1526
806 AMP@[1519; 1520) "&" 806 AMP@1519..1520 "&"
807 MUT_KW@[1520; 1523) "mut" 807 MUT_KW@1520..1523 "mut"
808 WHITESPACE@[1523; 1524) " " 808 WHITESPACE@1523..1524 " "
809 PATH_EXPR@[1524; 1526) 809 PATH_EXPR@1524..1526
810 PATH@[1524; 1526) 810 PATH@1524..1526
811 PATH_SEGMENT@[1524; 1526) 811 PATH_SEGMENT@1524..1526
812 NAME_REF@[1524; 1526) 812 NAME_REF@1524..1526
813 IDENT@[1524; 1526) "_y" 813 IDENT@1524..1526 "_y"
814 COMMA@[1526; 1527) "," 814 COMMA@1526..1527 ","
815 WHITESPACE@[1527; 1528) " " 815 WHITESPACE@1527..1528 " "
816 REF_EXPR@[1528; 1535) 816 REF_EXPR@1528..1535
817 AMP@[1528; 1529) "&" 817 AMP@1528..1529 "&"
818 MUT_KW@[1529; 1532) "mut" 818 MUT_KW@1529..1532 "mut"
819 WHITESPACE@[1532; 1533) " " 819 WHITESPACE@1532..1533 " "
820 PATH_EXPR@[1533; 1535) 820 PATH_EXPR@1533..1535
821 PATH@[1533; 1535) 821 PATH@1533..1535
822 PATH_SEGMENT@[1533; 1535) 822 PATH_SEGMENT@1533..1535
823 NAME_REF@[1533; 1535) 823 NAME_REF@1533..1535
824 IDENT@[1533; 1535) "_z" 824 IDENT@1533..1535 "_z"
825 R_PAREN@[1535; 1536) ")" 825 R_PAREN@1535..1536 ")"
826 SEMICOLON@[1536; 1537) ";" 826 SEMICOLON@1536..1537 ";"
827 WHITESPACE@[1537; 1538) "\n" 827 WHITESPACE@1537..1538 "\n"
828 R_CURLY@[1538; 1539) "}" 828 R_CURLY@1538..1539 "}"
829 WHITESPACE@[1539; 1541) "\n\n" 829 WHITESPACE@1539..1541 "\n\n"
830 FN_DEF@[1541; 1741) 830 FN_DEF@1541..1741
831 FN_KW@[1541; 1543) "fn" 831 FN_KW@1541..1543 "fn"
832 WHITESPACE@[1543; 1544) " " 832 WHITESPACE@1543..1544 " "
833 NAME@[1544; 1557) 833 NAME@1544..1557
834 IDENT@[1544; 1557) "canttouchthis" 834 IDENT@1544..1557 "canttouchthis"
835 PARAM_LIST@[1557; 1559) 835 PARAM_LIST@1557..1559
836 L_PAREN@[1557; 1558) "(" 836 L_PAREN@1557..1558 "("
837 R_PAREN@[1558; 1559) ")" 837 R_PAREN@1558..1559 ")"
838 WHITESPACE@[1559; 1560) " " 838 WHITESPACE@1559..1560 " "
839 RET_TYPE@[1560; 1568) 839 RET_TYPE@1560..1568
840 THIN_ARROW@[1560; 1562) "->" 840 THIN_ARROW@1560..1562 "->"
841 WHITESPACE@[1562; 1563) " " 841 WHITESPACE@1562..1563 " "
842 PATH_TYPE@[1563; 1568) 842 PATH_TYPE@1563..1568
843 PATH@[1563; 1568) 843 PATH@1563..1568
844 PATH_SEGMENT@[1563; 1568) 844 PATH_SEGMENT@1563..1568
845 NAME_REF@[1563; 1568) 845 NAME_REF@1563..1568
846 IDENT@[1563; 1568) "usize" 846 IDENT@1563..1568 "usize"
847 WHITESPACE@[1568; 1569) " " 847 WHITESPACE@1568..1569 " "
848 BLOCK_EXPR@[1569; 1741) 848 BLOCK_EXPR@1569..1741
849 BLOCK@[1569; 1741) 849 BLOCK@1569..1741
850 L_CURLY@[1569; 1570) "{" 850 L_CURLY@1569..1570 "{"
851 WHITESPACE@[1570; 1575) "\n " 851 WHITESPACE@1570..1575 "\n "
852 FN_DEF@[1575; 1598) 852 FN_DEF@1575..1598
853 FN_KW@[1575; 1577) "fn" 853 FN_KW@1575..1577 "fn"
854 WHITESPACE@[1577; 1578) " " 854 WHITESPACE@1577..1578 " "
855 NAME@[1578; 1579) 855 NAME@1578..1579
856 IDENT@[1578; 1579) "p" 856 IDENT@1578..1579 "p"
857 PARAM_LIST@[1579; 1581) 857 PARAM_LIST@1579..1581
858 L_PAREN@[1579; 1580) "(" 858 L_PAREN@1579..1580 "("
859 R_PAREN@[1580; 1581) ")" 859 R_PAREN@1580..1581 ")"
860 WHITESPACE@[1581; 1582) " " 860 WHITESPACE@1581..1582 " "
861 RET_TYPE@[1582; 1589) 861 RET_TYPE@1582..1589
862 THIN_ARROW@[1582; 1584) "->" 862 THIN_ARROW@1582..1584 "->"
863 WHITESPACE@[1584; 1585) " " 863 WHITESPACE@1584..1585 " "
864 PATH_TYPE@[1585; 1589) 864 PATH_TYPE@1585..1589
865 PATH@[1585; 1589) 865 PATH@1585..1589
866 PATH_SEGMENT@[1585; 1589) 866 PATH_SEGMENT@1585..1589
867 NAME_REF@[1585; 1589) 867 NAME_REF@1585..1589
868 IDENT@[1585; 1589) "bool" 868 IDENT@1585..1589 "bool"
869 WHITESPACE@[1589; 1590) " " 869 WHITESPACE@1589..1590 " "
870 BLOCK_EXPR@[1590; 1598) 870 BLOCK_EXPR@1590..1598
871 BLOCK@[1590; 1598) 871 BLOCK@1590..1598
872 L_CURLY@[1590; 1591) "{" 872 L_CURLY@1590..1591 "{"
873 WHITESPACE@[1591; 1592) " " 873 WHITESPACE@1591..1592 " "
874 LITERAL@[1592; 1596) 874 LITERAL@1592..1596
875 TRUE_KW@[1592; 1596) "true" 875 TRUE_KW@1592..1596 "true"
876 WHITESPACE@[1596; 1597) " " 876 WHITESPACE@1596..1597 " "
877 R_CURLY@[1597; 1598) "}" 877 R_CURLY@1597..1598 "}"
878 WHITESPACE@[1598; 1603) "\n " 878 WHITESPACE@1598..1603 "\n "
879 LET_STMT@[1603; 1648) 879 LET_STMT@1603..1648
880 LET_KW@[1603; 1606) "let" 880 LET_KW@1603..1606 "let"
881 WHITESPACE@[1606; 1607) " " 881 WHITESPACE@1606..1607 " "
882 BIND_PAT@[1607; 1609) 882 BIND_PAT@1607..1609
883 NAME@[1607; 1609) 883 NAME@1607..1609
884 IDENT@[1607; 1609) "_a" 884 IDENT@1607..1609 "_a"
885 WHITESPACE@[1609; 1610) " " 885 WHITESPACE@1609..1610 " "
886 EQ@[1610; 1611) "=" 886 EQ@1610..1611 "="
887 WHITESPACE@[1611; 1612) " " 887 WHITESPACE@1611..1612 " "
888 PAREN_EXPR@[1612; 1647) 888 PAREN_EXPR@1612..1647
889 L_PAREN@[1612; 1613) "(" 889 L_PAREN@1612..1613 "("
890 BIN_EXPR@[1613; 1646) 890 BIN_EXPR@1613..1646
891 MACRO_CALL@[1613; 1628) 891 MACRO_CALL@1613..1628
892 PATH@[1613; 1619) 892 PATH@1613..1619
893 PATH_SEGMENT@[1613; 1619) 893 PATH_SEGMENT@1613..1619
894 NAME_REF@[1613; 1619) 894 NAME_REF@1613..1619
895 IDENT@[1613; 1619) "assert" 895 IDENT@1613..1619 "assert"
896 BANG@[1619; 1620) "!" 896 BANG@1619..1620 "!"
897 TOKEN_TREE@[1620; 1628) 897 TOKEN_TREE@1620..1628
898 L_PAREN@[1620; 1621) "(" 898 L_PAREN@1620..1621 "("
899 TOKEN_TREE@[1621; 1627) 899 TOKEN_TREE@1621..1627
900 L_PAREN@[1621; 1622) "(" 900 L_PAREN@1621..1622 "("
901 TRUE_KW@[1622; 1626) "true" 901 TRUE_KW@1622..1626 "true"
902 R_PAREN@[1626; 1627) ")" 902 R_PAREN@1626..1627 ")"
903 R_PAREN@[1627; 1628) ")" 903 R_PAREN@1627..1628 ")"
904 WHITESPACE@[1628; 1629) " " 904 WHITESPACE@1628..1629 " "
905 EQ2@[1629; 1631) "==" 905 EQ2@1629..1631 "=="
906 WHITESPACE@[1631; 1632) " " 906 WHITESPACE@1631..1632 " "
907 PAREN_EXPR@[1632; 1646) 907 PAREN_EXPR@1632..1646
908 L_PAREN@[1632; 1633) "(" 908 L_PAREN@1632..1633 "("
909 MACRO_CALL@[1633; 1645) 909 MACRO_CALL@1633..1645
910 PATH@[1633; 1639) 910 PATH@1633..1639
911 PATH_SEGMENT@[1633; 1639) 911 PATH_SEGMENT@1633..1639
912 NAME_REF@[1633; 1639) 912 NAME_REF@1633..1639
913 IDENT@[1633; 1639) "assert" 913 IDENT@1633..1639 "assert"
914 BANG@[1639; 1640) "!" 914 BANG@1639..1640 "!"
915 TOKEN_TREE@[1640; 1645) 915 TOKEN_TREE@1640..1645
916 L_PAREN@[1640; 1641) "(" 916 L_PAREN@1640..1641 "("
917 IDENT@[1641; 1642) "p" 917 IDENT@1641..1642 "p"
918 TOKEN_TREE@[1642; 1644) 918 TOKEN_TREE@1642..1644
919 L_PAREN@[1642; 1643) "(" 919 L_PAREN@1642..1643 "("
920 R_PAREN@[1643; 1644) ")" 920 R_PAREN@1643..1644 ")"
921 R_PAREN@[1644; 1645) ")" 921 R_PAREN@1644..1645 ")"
922 R_PAREN@[1645; 1646) ")" 922 R_PAREN@1645..1646 ")"
923 R_PAREN@[1646; 1647) ")" 923 R_PAREN@1646..1647 ")"
924 SEMICOLON@[1647; 1648) ";" 924 SEMICOLON@1647..1648 ";"
925 WHITESPACE@[1648; 1653) "\n " 925 WHITESPACE@1648..1653 "\n "
926 LET_STMT@[1653; 1685) 926 LET_STMT@1653..1685
927 LET_KW@[1653; 1656) "let" 927 LET_KW@1653..1656 "let"
928 WHITESPACE@[1656; 1657) " " 928 WHITESPACE@1656..1657 " "
929 BIND_PAT@[1657; 1659) 929 BIND_PAT@1657..1659
930 NAME@[1657; 1659) 930 NAME@1657..1659
931 IDENT@[1657; 1659) "_c" 931 IDENT@1657..1659 "_c"
932 WHITESPACE@[1659; 1660) " " 932 WHITESPACE@1659..1660 " "
933 EQ@[1660; 1661) "=" 933 EQ@1660..1661 "="
934 WHITESPACE@[1661; 1662) " " 934 WHITESPACE@1661..1662 " "
935 PAREN_EXPR@[1662; 1684) 935 PAREN_EXPR@1662..1684
936 L_PAREN@[1662; 1663) "(" 936 L_PAREN@1662..1663 "("
937 BIN_EXPR@[1663; 1683) 937 BIN_EXPR@1663..1683
938 MACRO_CALL@[1663; 1677) 938 MACRO_CALL@1663..1677
939 PATH@[1663; 1669) 939 PATH@1663..1669
940 PATH_SEGMENT@[1663; 1669) 940 PATH_SEGMENT@1663..1669
941 NAME_REF@[1663; 1669) 941 NAME_REF@1663..1669
942 IDENT@[1663; 1669) "assert" 942 IDENT@1663..1669 "assert"
943 BANG@[1669; 1670) "!" 943 BANG@1669..1670 "!"
944 TOKEN_TREE@[1670; 1677) 944 TOKEN_TREE@1670..1677
945 L_PAREN@[1670; 1671) "(" 945 L_PAREN@1670..1671 "("
946 TOKEN_TREE@[1671; 1676) 946 TOKEN_TREE@1671..1676
947 L_PAREN@[1671; 1672) "(" 947 L_PAREN@1671..1672 "("
948 IDENT@[1672; 1673) "p" 948 IDENT@1672..1673 "p"
949 TOKEN_TREE@[1673; 1675) 949 TOKEN_TREE@1673..1675
950 L_PAREN@[1673; 1674) "(" 950 L_PAREN@1673..1674 "("
951 R_PAREN@[1674; 1675) ")" 951 R_PAREN@1674..1675 ")"
952 R_PAREN@[1675; 1676) ")" 952 R_PAREN@1675..1676 ")"
953 R_PAREN@[1676; 1677) ")" 953 R_PAREN@1676..1677 ")"
954 WHITESPACE@[1677; 1678) " " 954 WHITESPACE@1677..1678 " "
955 EQ2@[1678; 1680) "==" 955 EQ2@1678..1680 "=="
956 WHITESPACE@[1680; 1681) " " 956 WHITESPACE@1680..1681 " "
957 TUPLE_EXPR@[1681; 1683) 957 TUPLE_EXPR@1681..1683
958 L_PAREN@[1681; 1682) "(" 958 L_PAREN@1681..1682 "("
959 R_PAREN@[1682; 1683) ")" 959 R_PAREN@1682..1683 ")"
960 R_PAREN@[1683; 1684) ")" 960 R_PAREN@1683..1684 ")"
961 SEMICOLON@[1684; 1685) ";" 961 SEMICOLON@1684..1685 ";"
962 WHITESPACE@[1685; 1690) "\n " 962 WHITESPACE@1685..1690 "\n "
963 LET_STMT@[1690; 1739) 963 LET_STMT@1690..1739
964 LET_KW@[1690; 1693) "let" 964 LET_KW@1690..1693 "let"
965 WHITESPACE@[1693; 1694) " " 965 WHITESPACE@1693..1694 " "
966 BIND_PAT@[1694; 1696) 966 BIND_PAT@1694..1696
967 NAME@[1694; 1696) 967 NAME@1694..1696
968 IDENT@[1694; 1696) "_b" 968 IDENT@1694..1696 "_b"
969 COLON@[1696; 1697) ":" 969 COLON@1696..1697 ":"
970 WHITESPACE@[1697; 1698) " " 970 WHITESPACE@1697..1698 " "
971 PATH_TYPE@[1698; 1702) 971 PATH_TYPE@1698..1702
972 PATH@[1698; 1702) 972 PATH@1698..1702
973 PATH_SEGMENT@[1698; 1702) 973 PATH_SEGMENT@1698..1702
974 NAME_REF@[1698; 1702) 974 NAME_REF@1698..1702
975 IDENT@[1698; 1702) "bool" 975 IDENT@1698..1702 "bool"
976 WHITESPACE@[1702; 1703) " " 976 WHITESPACE@1702..1703 " "
977 EQ@[1703; 1704) "=" 977 EQ@1703..1704 "="
978 WHITESPACE@[1704; 1705) " " 978 WHITESPACE@1704..1705 " "
979 PAREN_EXPR@[1705; 1738) 979 PAREN_EXPR@1705..1738
980 L_PAREN@[1705; 1706) "(" 980 L_PAREN@1705..1706 "("
981 BIN_EXPR@[1706; 1737) 981 BIN_EXPR@1706..1737
982 MACRO_CALL@[1706; 1723) 982 MACRO_CALL@1706..1723
983 PATH@[1706; 1713) 983 PATH@1706..1713
984 PATH_SEGMENT@[1706; 1713) 984 PATH_SEGMENT@1706..1713
985 NAME_REF@[1706; 1713) 985 NAME_REF@1706..1713
986 IDENT@[1706; 1713) "println" 986 IDENT@1706..1713 "println"
987 BANG@[1713; 1714) "!" 987 BANG@1713..1714 "!"
988 TOKEN_TREE@[1714; 1723) 988 TOKEN_TREE@1714..1723
989 L_PAREN@[1714; 1715) "(" 989 L_PAREN@1714..1715 "("
990 STRING@[1715; 1719) "\"{}\"" 990 STRING@1715..1719 "\"{}\""
991 COMMA@[1719; 1720) "," 991 COMMA@1719..1720 ","
992 WHITESPACE@[1720; 1721) " " 992 WHITESPACE@1720..1721 " "
993 INT_NUMBER@[1721; 1722) "0" 993 INT_NUMBER@1721..1722 "0"
994 R_PAREN@[1722; 1723) ")" 994 R_PAREN@1722..1723 ")"
995 WHITESPACE@[1723; 1724) " " 995 WHITESPACE@1723..1724 " "
996 EQ2@[1724; 1726) "==" 996 EQ2@1724..1726 "=="
997 WHITESPACE@[1726; 1727) " " 997 WHITESPACE@1726..1727 " "
998 PAREN_EXPR@[1727; 1737) 998 PAREN_EXPR@1727..1737
999 L_PAREN@[1727; 1728) "(" 999 L_PAREN@1727..1728 "("
1000 RETURN_EXPR@[1728; 1736) 1000 RETURN_EXPR@1728..1736
1001 RETURN_KW@[1728; 1734) "return" 1001 RETURN_KW@1728..1734 "return"
1002 WHITESPACE@[1734; 1735) " " 1002 WHITESPACE@1734..1735 " "
1003 LITERAL@[1735; 1736) 1003 LITERAL@1735..1736
1004 INT_NUMBER@[1735; 1736) "0" 1004 INT_NUMBER@1735..1736 "0"
1005 R_PAREN@[1736; 1737) ")" 1005 R_PAREN@1736..1737 ")"
1006 R_PAREN@[1737; 1738) ")" 1006 R_PAREN@1737..1738 ")"
1007 SEMICOLON@[1738; 1739) ";" 1007 SEMICOLON@1738..1739 ";"
1008 WHITESPACE@[1739; 1740) "\n" 1008 WHITESPACE@1739..1740 "\n"
1009 R_CURLY@[1740; 1741) "}" 1009 R_CURLY@1740..1741 "}"
1010 WHITESPACE@[1741; 1743) "\n\n" 1010 WHITESPACE@1741..1743 "\n\n"
1011 FN_DEF@[1743; 1904) 1011 FN_DEF@1743..1904
1012 FN_KW@[1743; 1745) "fn" 1012 FN_KW@1743..1745 "fn"
1013 WHITESPACE@[1745; 1746) " " 1013 WHITESPACE@1745..1746 " "
1014 NAME@[1746; 1755) 1014 NAME@1746..1755
1015 IDENT@[1746; 1755) "angrydome" 1015 IDENT@1746..1755 "angrydome"
1016 PARAM_LIST@[1755; 1757) 1016 PARAM_LIST@1755..1757
1017 L_PAREN@[1755; 1756) "(" 1017 L_PAREN@1755..1756 "("
1018 R_PAREN@[1756; 1757) ")" 1018 R_PAREN@1756..1757 ")"
1019 WHITESPACE@[1757; 1758) " " 1019 WHITESPACE@1757..1758 " "
1020 BLOCK_EXPR@[1758; 1904) 1020 BLOCK_EXPR@1758..1904
1021 BLOCK@[1758; 1904) 1021 BLOCK@1758..1904
1022 L_CURLY@[1758; 1759) "{" 1022 L_CURLY@1758..1759 "{"
1023 WHITESPACE@[1759; 1764) "\n " 1023 WHITESPACE@1759..1764 "\n "
1024 EXPR_STMT@[1764; 1785) 1024 EXPR_STMT@1764..1785
1025 LOOP_EXPR@[1764; 1785) 1025 LOOP_EXPR@1764..1785
1026 LOOP_KW@[1764; 1768) "loop" 1026 LOOP_KW@1764..1768 "loop"
1027 WHITESPACE@[1768; 1769) " " 1027 WHITESPACE@1768..1769 " "
1028 BLOCK_EXPR@[1769; 1785) 1028 BLOCK_EXPR@1769..1785
1029 BLOCK@[1769; 1785) 1029 BLOCK@1769..1785
1030 L_CURLY@[1769; 1770) "{" 1030 L_CURLY@1769..1770 "{"
1031 WHITESPACE@[1770; 1771) " " 1031 WHITESPACE@1770..1771 " "
1032 IF_EXPR@[1771; 1783) 1032 IF_EXPR@1771..1783
1033 IF_KW@[1771; 1773) "if" 1033 IF_KW@1771..1773 "if"
1034 WHITESPACE@[1773; 1774) " " 1034 WHITESPACE@1773..1774 " "
1035 CONDITION@[1774; 1779) 1035 CONDITION@1774..1779
1036 BREAK_EXPR@[1774; 1779) 1036 BREAK_EXPR@1774..1779
1037 BREAK_KW@[1774; 1779) "break" 1037 BREAK_KW@1774..1779 "break"
1038 WHITESPACE@[1779; 1780) " " 1038 WHITESPACE@1779..1780 " "
1039 BLOCK_EXPR@[1780; 1783) 1039 BLOCK_EXPR@1780..1783
1040 BLOCK@[1780; 1783) 1040 BLOCK@1780..1783
1041 L_CURLY@[1780; 1781) "{" 1041 L_CURLY@1780..1781 "{"
1042 WHITESPACE@[1781; 1782) " " 1042 WHITESPACE@1781..1782 " "
1043 R_CURLY@[1782; 1783) "}" 1043 R_CURLY@1782..1783 "}"
1044 WHITESPACE@[1783; 1784) " " 1044 WHITESPACE@1783..1784 " "
1045 R_CURLY@[1784; 1785) "}" 1045 R_CURLY@1784..1785 "}"
1046 WHITESPACE@[1785; 1790) "\n " 1046 WHITESPACE@1785..1790 "\n "
1047 LET_STMT@[1790; 1804) 1047 LET_STMT@1790..1804
1048 LET_KW@[1790; 1793) "let" 1048 LET_KW@1790..1793 "let"
1049 WHITESPACE@[1793; 1794) " " 1049 WHITESPACE@1793..1794 " "
1050 BIND_PAT@[1794; 1799) 1050 BIND_PAT@1794..1799
1051 MUT_KW@[1794; 1797) "mut" 1051 MUT_KW@1794..1797 "mut"
1052 WHITESPACE@[1797; 1798) " " 1052 WHITESPACE@1797..1798 " "
1053 NAME@[1798; 1799) 1053 NAME@1798..1799
1054 IDENT@[1798; 1799) "i" 1054 IDENT@1798..1799 "i"
1055 WHITESPACE@[1799; 1800) " " 1055 WHITESPACE@1799..1800 " "
1056 EQ@[1800; 1801) "=" 1056 EQ@1800..1801 "="
1057 WHITESPACE@[1801; 1802) " " 1057 WHITESPACE@1801..1802 " "
1058 LITERAL@[1802; 1803) 1058 LITERAL@1802..1803
1059 INT_NUMBER@[1802; 1803) "0" 1059 INT_NUMBER@1802..1803 "0"
1060 SEMICOLON@[1803; 1804) ";" 1060 SEMICOLON@1803..1804 ";"
1061 WHITESPACE@[1804; 1809) "\n " 1061 WHITESPACE@1804..1809 "\n "
1062 LOOP_EXPR@[1809; 1902) 1062 LOOP_EXPR@1809..1902
1063 LOOP_KW@[1809; 1813) "loop" 1063 LOOP_KW@1809..1813 "loop"
1064 WHITESPACE@[1813; 1814) " " 1064 WHITESPACE@1813..1814 " "
1065 BLOCK_EXPR@[1814; 1902) 1065 BLOCK_EXPR@1814..1902
1066 BLOCK@[1814; 1902) 1066 BLOCK@1814..1902
1067 L_CURLY@[1814; 1815) "{" 1067 L_CURLY@1814..1815 "{"
1068 WHITESPACE@[1815; 1816) " " 1068 WHITESPACE@1815..1816 " "
1069 EXPR_STMT@[1816; 1823) 1069 EXPR_STMT@1816..1823
1070 BIN_EXPR@[1816; 1822) 1070 BIN_EXPR@1816..1822
1071 PATH_EXPR@[1816; 1817) 1071 PATH_EXPR@1816..1817
1072 PATH@[1816; 1817) 1072 PATH@1816..1817
1073 PATH_SEGMENT@[1816; 1817) 1073 PATH_SEGMENT@1816..1817
1074 NAME_REF@[1816; 1817) 1074 NAME_REF@1816..1817
1075 IDENT@[1816; 1817) "i" 1075 IDENT@1816..1817 "i"
1076 WHITESPACE@[1817; 1818) " " 1076 WHITESPACE@1817..1818 " "
1077 PLUSEQ@[1818; 1820) "+=" 1077 PLUSEQ@1818..1820 "+="
1078 WHITESPACE@[1820; 1821) " " 1078 WHITESPACE@1820..1821 " "
1079 LITERAL@[1821; 1822) 1079 LITERAL@1821..1822
1080 INT_NUMBER@[1821; 1822) "1" 1080 INT_NUMBER@1821..1822 "1"
1081 SEMICOLON@[1822; 1823) ";" 1081 SEMICOLON@1822..1823 ";"
1082 WHITESPACE@[1823; 1824) " " 1082 WHITESPACE@1823..1824 " "
1083 EXPR_STMT@[1824; 1887) 1083 EXPR_STMT@1824..1887
1084 IF_EXPR@[1824; 1887) 1084 IF_EXPR@1824..1887
1085 IF_KW@[1824; 1826) "if" 1085 IF_KW@1824..1826 "if"
1086 WHITESPACE@[1826; 1827) " " 1086 WHITESPACE@1826..1827 " "
1087 CONDITION@[1827; 1833) 1087 CONDITION@1827..1833
1088 BIN_EXPR@[1827; 1833) 1088 BIN_EXPR@1827..1833
1089 PATH_EXPR@[1827; 1828) 1089 PATH_EXPR@1827..1828
1090 PATH@[1827; 1828) 1090 PATH@1827..1828
1091 PATH_SEGMENT@[1827; 1828) 1091 PATH_SEGMENT@1827..1828
1092 NAME_REF@[1827; 1828) 1092 NAME_REF@1827..1828
1093 IDENT@[1827; 1828) "i" 1093 IDENT@1827..1828 "i"
1094 WHITESPACE@[1828; 1829) " " 1094 WHITESPACE@1828..1829 " "
1095 EQ2@[1829; 1831) "==" 1095 EQ2@1829..1831 "=="
1096 WHITESPACE@[1831; 1832) " " 1096 WHITESPACE@1831..1832 " "
1097 LITERAL@[1832; 1833) 1097 LITERAL@1832..1833
1098 INT_NUMBER@[1832; 1833) "1" 1098 INT_NUMBER@1832..1833 "1"
1099 WHITESPACE@[1833; 1834) " " 1099 WHITESPACE@1833..1834 " "
1100 BLOCK_EXPR@[1834; 1887) 1100 BLOCK_EXPR@1834..1887
1101 BLOCK@[1834; 1887) 1101 BLOCK@1834..1887
1102 L_CURLY@[1834; 1835) "{" 1102 L_CURLY@1834..1835 "{"
1103 WHITESPACE@[1835; 1836) " " 1103 WHITESPACE@1835..1836 " "
1104 MATCH_EXPR@[1836; 1885) 1104 MATCH_EXPR@1836..1885
1105 MATCH_KW@[1836; 1841) "match" 1105 MATCH_KW@1836..1841 "match"
1106 WHITESPACE@[1841; 1842) " " 1106 WHITESPACE@1841..1842 " "
1107 PAREN_EXPR@[1842; 1852) 1107 PAREN_EXPR@1842..1852
1108 L_PAREN@[1842; 1843) "(" 1108 L_PAREN@1842..1843 "("
1109 CONTINUE_EXPR@[1843; 1851) 1109 CONTINUE_EXPR@1843..1851
1110 CONTINUE_KW@[1843; 1851) "continue" 1110 CONTINUE_KW@1843..1851 "continue"
1111 R_PAREN@[1851; 1852) ")" 1111 R_PAREN@1851..1852 ")"
1112 WHITESPACE@[1852; 1853) " " 1112 WHITESPACE@1852..1853 " "
1113 MATCH_ARM_LIST@[1853; 1885) 1113 MATCH_ARM_LIST@1853..1885
1114 L_CURLY@[1853; 1854) "{" 1114 L_CURLY@1853..1854 "{"
1115 WHITESPACE@[1854; 1855) " " 1115 WHITESPACE@1854..1855 " "
1116 MATCH_ARM@[1855; 1863) 1116 MATCH_ARM@1855..1863
1117 LITERAL_PAT@[1855; 1856) 1117 LITERAL_PAT@1855..1856
1118 LITERAL@[1855; 1856) 1118 LITERAL@1855..1856
1119 INT_NUMBER@[1855; 1856) "1" 1119 INT_NUMBER@1855..1856 "1"
1120 WHITESPACE@[1856; 1857) " " 1120 WHITESPACE@1856..1857 " "
1121 FAT_ARROW@[1857; 1859) "=>" 1121 FAT_ARROW@1857..1859 "=>"
1122 WHITESPACE@[1859; 1860) " " 1122 WHITESPACE@1859..1860 " "
1123 BLOCK_EXPR@[1860; 1863) 1123 BLOCK_EXPR@1860..1863
1124 BLOCK@[1860; 1863) 1124 BLOCK@1860..1863
1125 L_CURLY@[1860; 1861) "{" 1125 L_CURLY@1860..1861 "{"
1126 WHITESPACE@[1861; 1862) " " 1126 WHITESPACE@1861..1862 " "
1127 R_CURLY@[1862; 1863) "}" 1127 R_CURLY@1862..1863 "}"
1128 COMMA@[1863; 1864) "," 1128 COMMA@1863..1864 ","
1129 WHITESPACE@[1864; 1865) " " 1129 WHITESPACE@1864..1865 " "
1130 MATCH_ARM@[1865; 1883) 1130 MATCH_ARM@1865..1883
1131 PLACEHOLDER_PAT@[1865; 1866) 1131 PLACEHOLDER_PAT@1865..1866
1132 UNDERSCORE@[1865; 1866) "_" 1132 UNDERSCORE@1865..1866 "_"
1133 WHITESPACE@[1866; 1867) " " 1133 WHITESPACE@1866..1867 " "
1134 FAT_ARROW@[1867; 1869) "=>" 1134 FAT_ARROW@1867..1869 "=>"
1135 WHITESPACE@[1869; 1870) " " 1135 WHITESPACE@1869..1870 " "
1136 MACRO_CALL@[1870; 1883) 1136 MACRO_CALL@1870..1883
1137 PATH@[1870; 1875) 1137 PATH@1870..1875
1138 PATH_SEGMENT@[1870; 1875) 1138 PATH_SEGMENT@1870..1875
1139 NAME_REF@[1870; 1875) 1139 NAME_REF@1870..1875
1140 IDENT@[1870; 1875) "panic" 1140 IDENT@1870..1875 "panic"
1141 BANG@[1875; 1876) "!" 1141 BANG@1875..1876 "!"
1142 TOKEN_TREE@[1876; 1883) 1142 TOKEN_TREE@1876..1883
1143 L_PAREN@[1876; 1877) "(" 1143 L_PAREN@1876..1877 "("
1144 STRING@[1877; 1882) "\"wat\"" 1144 STRING@1877..1882 "\"wat\""
1145 R_PAREN@[1882; 1883) ")" 1145 R_PAREN@1882..1883 ")"
1146 WHITESPACE@[1883; 1884) " " 1146 WHITESPACE@1883..1884 " "
1147 R_CURLY@[1884; 1885) "}" 1147 R_CURLY@1884..1885 "}"
1148 WHITESPACE@[1885; 1886) " " 1148 WHITESPACE@1885..1886 " "
1149 R_CURLY@[1886; 1887) "}" 1149 R_CURLY@1886..1887 "}"
1150 WHITESPACE@[1887; 1894) "\n " 1150 WHITESPACE@1887..1894 "\n "
1151 EXPR_STMT@[1894; 1900) 1151 EXPR_STMT@1894..1900
1152 BREAK_EXPR@[1894; 1899) 1152 BREAK_EXPR@1894..1899
1153 BREAK_KW@[1894; 1899) "break" 1153 BREAK_KW@1894..1899 "break"
1154 SEMICOLON@[1899; 1900) ";" 1154 SEMICOLON@1899..1900 ";"
1155 WHITESPACE@[1900; 1901) " " 1155 WHITESPACE@1900..1901 " "
1156 R_CURLY@[1901; 1902) "}" 1156 R_CURLY@1901..1902 "}"
1157 WHITESPACE@[1902; 1903) "\n" 1157 WHITESPACE@1902..1903 "\n"
1158 R_CURLY@[1903; 1904) "}" 1158 R_CURLY@1903..1904 "}"
1159 WHITESPACE@[1904; 1906) "\n\n" 1159 WHITESPACE@1904..1906 "\n\n"
1160 FN_DEF@[1906; 1960) 1160 FN_DEF@1906..1960
1161 FN_KW@[1906; 1908) "fn" 1161 FN_KW@1906..1908 "fn"
1162 WHITESPACE@[1908; 1909) " " 1162 WHITESPACE@1908..1909 " "
1163 NAME@[1909; 1921) 1163 NAME@1909..1921
1164 IDENT@[1909; 1921) "evil_lincoln" 1164 IDENT@1909..1921 "evil_lincoln"
1165 PARAM_LIST@[1921; 1923) 1165 PARAM_LIST@1921..1923
1166 L_PAREN@[1921; 1922) "(" 1166 L_PAREN@1921..1922 "("
1167 R_PAREN@[1922; 1923) ")" 1167 R_PAREN@1922..1923 ")"
1168 WHITESPACE@[1923; 1924) " " 1168 WHITESPACE@1923..1924 " "
1169 BLOCK_EXPR@[1924; 1960) 1169 BLOCK_EXPR@1924..1960
1170 BLOCK@[1924; 1960) 1170 BLOCK@1924..1960
1171 L_CURLY@[1924; 1925) "{" 1171 L_CURLY@1924..1925 "{"
1172 WHITESPACE@[1925; 1926) " " 1172 WHITESPACE@1925..1926 " "
1173 LET_STMT@[1926; 1958) 1173 LET_STMT@1926..1958
1174 LET_KW@[1926; 1929) "let" 1174 LET_KW@1926..1929 "let"
1175 WHITESPACE@[1929; 1930) " " 1175 WHITESPACE@1929..1930 " "
1176 BIND_PAT@[1930; 1935) 1176 BIND_PAT@1930..1935
1177 NAME@[1930; 1935) 1177 NAME@1930..1935
1178 IDENT@[1930; 1935) "_evil" 1178 IDENT@1930..1935 "_evil"
1179 WHITESPACE@[1935; 1936) " " 1179 WHITESPACE@1935..1936 " "
1180 EQ@[1936; 1937) "=" 1180 EQ@1936..1937 "="
1181 WHITESPACE@[1937; 1938) " " 1181 WHITESPACE@1937..1938 " "
1182 MACRO_CALL@[1938; 1957) 1182 MACRO_CALL@1938..1957
1183 PATH@[1938; 1945) 1183 PATH@1938..1945
1184 PATH_SEGMENT@[1938; 1945) 1184 PATH_SEGMENT@1938..1945
1185 NAME_REF@[1938; 1945) 1185 NAME_REF@1938..1945
1186 IDENT@[1938; 1945) "println" 1186 IDENT@1938..1945 "println"
1187 BANG@[1945; 1946) "!" 1187 BANG@1945..1946 "!"
1188 TOKEN_TREE@[1946; 1957) 1188 TOKEN_TREE@1946..1957
1189 L_PAREN@[1946; 1947) "(" 1189 L_PAREN@1946..1947 "("
1190 STRING@[1947; 1956) "\"lincoln\"" 1190 STRING@1947..1956 "\"lincoln\""
1191 R_PAREN@[1956; 1957) ")" 1191 R_PAREN@1956..1957 ")"
1192 SEMICOLON@[1957; 1958) ";" 1192 SEMICOLON@1957..1958 ";"
1193 WHITESPACE@[1958; 1959) " " 1193 WHITESPACE@1958..1959 " "
1194 R_CURLY@[1959; 1960) "}" 1194 R_CURLY@1959..1960 "}"
1195 WHITESPACE@[1960; 1962) "\n\n" 1195 WHITESPACE@1960..1962 "\n\n"
1196 FN_DEF@[1962; 2198) 1196 FN_DEF@1962..2198
1197 FN_KW@[1962; 1964) "fn" 1197 FN_KW@1962..1964 "fn"
1198 WHITESPACE@[1964; 1965) " " 1198 WHITESPACE@1964..1965 " "
1199 NAME@[1965; 1969) 1199 NAME@1965..1969
1200 IDENT@[1965; 1969) "dots" 1200 IDENT@1965..1969 "dots"
1201 PARAM_LIST@[1969; 1971) 1201 PARAM_LIST@1969..1971
1202 L_PAREN@[1969; 1970) "(" 1202 L_PAREN@1969..1970 "("
1203 R_PAREN@[1970; 1971) ")" 1203 R_PAREN@1970..1971 ")"
1204 WHITESPACE@[1971; 1972) " " 1204 WHITESPACE@1971..1972 " "
1205 BLOCK_EXPR@[1972; 2198) 1205 BLOCK_EXPR@1972..2198
1206 BLOCK@[1972; 2198) 1206 BLOCK@1972..2198
1207 L_CURLY@[1972; 1973) "{" 1207 L_CURLY@1972..1973 "{"
1208 WHITESPACE@[1973; 1978) "\n " 1208 WHITESPACE@1973..1978 "\n "
1209 EXPR_STMT@[1978; 2196) 1209 EXPR_STMT@1978..2196
1210 MACRO_CALL@[1978; 2195) 1210 MACRO_CALL@1978..2195
1211 PATH@[1978; 1987) 1211 PATH@1978..1987
1212 PATH_SEGMENT@[1978; 1987) 1212 PATH_SEGMENT@1978..1987
1213 NAME_REF@[1978; 1987) 1213 NAME_REF@1978..1987
1214 IDENT@[1978; 1987) "assert_eq" 1214 IDENT@1978..1987 "assert_eq"
1215 BANG@[1987; 1988) "!" 1215 BANG@1987..1988 "!"
1216 TOKEN_TREE@[1988; 2195) 1216 TOKEN_TREE@1988..2195
1217 L_PAREN@[1988; 1989) "(" 1217 L_PAREN@1988..1989 "("
1218 IDENT@[1989; 1995) "String" 1218 IDENT@1989..1995 "String"
1219 COLON@[1995; 1996) ":" 1219 COLON@1995..1996 ":"
1220 COLON@[1996; 1997) ":" 1220 COLON@1996..1997 ":"
1221 IDENT@[1997; 2001) "from" 1221 IDENT@1997..2001 "from"
1222 TOKEN_TREE@[2001; 2055) 1222 TOKEN_TREE@2001..2055
1223 L_PAREN@[2001; 2002) "(" 1223 L_PAREN@2001..2002 "("
1224 STRING@[2002; 2054) "\".................... ..." 1224 STRING@2002..2054 "\".................... ..."
1225 R_PAREN@[2054; 2055) ")" 1225 R_PAREN@2054..2055 ")"
1226 COMMA@[2055; 2056) "," 1226 COMMA@2055..2056 ","
1227 WHITESPACE@[2056; 2072) "\n " 1227 WHITESPACE@2056..2072 "\n "
1228 IDENT@[2072; 2078) "format" 1228 IDENT@2072..2078 "format"
1229 BANG@[2078; 2079) "!" 1229 BANG@2078..2079 "!"
1230 TOKEN_TREE@[2079; 2194) 1230 TOKEN_TREE@2079..2194
1231 L_PAREN@[2079; 2080) "(" 1231 L_PAREN@2079..2080 "("
1232 STRING@[2080; 2086) "\"{:?}\"" 1232 STRING@2080..2086 "\"{:?}\""
1233 COMMA@[2086; 2087) "," 1233 COMMA@2086..2087 ","
1234 WHITESPACE@[2087; 2088) " " 1234 WHITESPACE@2087..2088 " "
1235 DOT@[2088; 2089) "." 1235 DOT@2088..2089 "."
1236 DOT@[2089; 2090) "." 1236 DOT@2089..2090 "."
1237 WHITESPACE@[2090; 2091) " " 1237 WHITESPACE@2090..2091 " "
1238 DOT@[2091; 2092) "." 1238 DOT@2091..2092 "."
1239 DOT@[2092; 2093) "." 1239 DOT@2092..2093 "."
1240 WHITESPACE@[2093; 2094) " " 1240 WHITESPACE@2093..2094 " "
1241 DOT@[2094; 2095) "." 1241 DOT@2094..2095 "."
1242 DOT@[2095; 2096) "." 1242 DOT@2095..2096 "."
1243 WHITESPACE@[2096; 2097) " " 1243 WHITESPACE@2096..2097 " "
1244 DOT@[2097; 2098) "." 1244 DOT@2097..2098 "."
1245 DOT@[2098; 2099) "." 1245 DOT@2098..2099 "."
1246 WHITESPACE@[2099; 2100) " " 1246 WHITESPACE@2099..2100 " "
1247 DOT@[2100; 2101) "." 1247 DOT@2100..2101 "."
1248 DOT@[2101; 2102) "." 1248 DOT@2101..2102 "."
1249 WHITESPACE@[2102; 2103) " " 1249 WHITESPACE@2102..2103 " "
1250 DOT@[2103; 2104) "." 1250 DOT@2103..2104 "."
1251 DOT@[2104; 2105) "." 1251 DOT@2104..2105 "."
1252 WHITESPACE@[2105; 2106) " " 1252 WHITESPACE@2105..2106 " "
1253 DOT@[2106; 2107) "." 1253 DOT@2106..2107 "."
1254 DOT@[2107; 2108) "." 1254 DOT@2107..2108 "."
1255 WHITESPACE@[2108; 2109) " " 1255 WHITESPACE@2108..2109 " "
1256 DOT@[2109; 2110) "." 1256 DOT@2109..2110 "."
1257 DOT@[2110; 2111) "." 1257 DOT@2110..2111 "."
1258 WHITESPACE@[2111; 2112) " " 1258 WHITESPACE@2111..2112 " "
1259 DOT@[2112; 2113) "." 1259 DOT@2112..2113 "."
1260 DOT@[2113; 2114) "." 1260 DOT@2113..2114 "."
1261 WHITESPACE@[2114; 2115) " " 1261 WHITESPACE@2114..2115 " "
1262 DOT@[2115; 2116) "." 1262 DOT@2115..2116 "."
1263 DOT@[2116; 2117) "." 1263 DOT@2116..2117 "."
1264 WHITESPACE@[2117; 2118) " " 1264 WHITESPACE@2117..2118 " "
1265 DOT@[2118; 2119) "." 1265 DOT@2118..2119 "."
1266 DOT@[2119; 2120) "." 1266 DOT@2119..2120 "."
1267 WHITESPACE@[2120; 2121) " " 1267 WHITESPACE@2120..2121 " "
1268 DOT@[2121; 2122) "." 1268 DOT@2121..2122 "."
1269 DOT@[2122; 2123) "." 1269 DOT@2122..2123 "."
1270 WHITESPACE@[2123; 2124) " " 1270 WHITESPACE@2123..2124 " "
1271 DOT@[2124; 2125) "." 1271 DOT@2124..2125 "."
1272 DOT@[2125; 2126) "." 1272 DOT@2125..2126 "."
1273 WHITESPACE@[2126; 2158) "\n ..." 1273 WHITESPACE@2126..2158 "\n ..."
1274 DOT@[2158; 2159) "." 1274 DOT@2158..2159 "."
1275 DOT@[2159; 2160) "." 1275 DOT@2159..2160 "."
1276 WHITESPACE@[2160; 2161) " " 1276 WHITESPACE@2160..2161 " "
1277 DOT@[2161; 2162) "." 1277 DOT@2161..2162 "."
1278 DOT@[2162; 2163) "." 1278 DOT@2162..2163 "."
1279 WHITESPACE@[2163; 2164) " " 1279 WHITESPACE@2163..2164 " "
1280 DOT@[2164; 2165) "." 1280 DOT@2164..2165 "."
1281 DOT@[2165; 2166) "." 1281 DOT@2165..2166 "."
1282 WHITESPACE@[2166; 2167) " " 1282 WHITESPACE@2166..2167 " "
1283 DOT@[2167; 2168) "." 1283 DOT@2167..2168 "."
1284 DOT@[2168; 2169) "." 1284 DOT@2168..2169 "."
1285 WHITESPACE@[2169; 2170) " " 1285 WHITESPACE@2169..2170 " "
1286 DOT@[2170; 2171) "." 1286 DOT@2170..2171 "."
1287 DOT@[2171; 2172) "." 1287 DOT@2171..2172 "."
1288 WHITESPACE@[2172; 2173) " " 1288 WHITESPACE@2172..2173 " "
1289 DOT@[2173; 2174) "." 1289 DOT@2173..2174 "."
1290 DOT@[2174; 2175) "." 1290 DOT@2174..2175 "."
1291 WHITESPACE@[2175; 2176) " " 1291 WHITESPACE@2175..2176 " "
1292 DOT@[2176; 2177) "." 1292 DOT@2176..2177 "."
1293 DOT@[2177; 2178) "." 1293 DOT@2177..2178 "."
1294 WHITESPACE@[2178; 2179) " " 1294 WHITESPACE@2178..2179 " "
1295 DOT@[2179; 2180) "." 1295 DOT@2179..2180 "."
1296 DOT@[2180; 2181) "." 1296 DOT@2180..2181 "."
1297 WHITESPACE@[2181; 2182) " " 1297 WHITESPACE@2181..2182 " "
1298 DOT@[2182; 2183) "." 1298 DOT@2182..2183 "."
1299 DOT@[2183; 2184) "." 1299 DOT@2183..2184 "."
1300 WHITESPACE@[2184; 2185) " " 1300 WHITESPACE@2184..2185 " "
1301 DOT@[2185; 2186) "." 1301 DOT@2185..2186 "."
1302 DOT@[2186; 2187) "." 1302 DOT@2186..2187 "."
1303 WHITESPACE@[2187; 2188) " " 1303 WHITESPACE@2187..2188 " "
1304 DOT@[2188; 2189) "." 1304 DOT@2188..2189 "."
1305 DOT@[2189; 2190) "." 1305 DOT@2189..2190 "."
1306 WHITESPACE@[2190; 2191) " " 1306 WHITESPACE@2190..2191 " "
1307 DOT@[2191; 2192) "." 1307 DOT@2191..2192 "."
1308 DOT@[2192; 2193) "." 1308 DOT@2192..2193 "."
1309 R_PAREN@[2193; 2194) ")" 1309 R_PAREN@2193..2194 ")"
1310 R_PAREN@[2194; 2195) ")" 1310 R_PAREN@2194..2195 ")"
1311 SEMICOLON@[2195; 2196) ";" 1311 SEMICOLON@2195..2196 ";"
1312 WHITESPACE@[2196; 2197) "\n" 1312 WHITESPACE@2196..2197 "\n"
1313 R_CURLY@[2197; 2198) "}" 1313 R_CURLY@2197..2198 "}"
1314 WHITESPACE@[2198; 2200) "\n\n" 1314 WHITESPACE@2198..2200 "\n\n"
1315 FN_DEF@[2200; 2693) 1315 FN_DEF@2200..2693
1316 FN_KW@[2200; 2202) "fn" 1316 FN_KW@2200..2202 "fn"
1317 WHITESPACE@[2202; 2203) " " 1317 WHITESPACE@2202..2203 " "
1318 NAME@[2203; 2205) 1318 NAME@2203..2205
1319 IDENT@[2203; 2205) "u8" 1319 IDENT@2203..2205 "u8"
1320 PARAM_LIST@[2205; 2213) 1320 PARAM_LIST@2205..2213
1321 L_PAREN@[2205; 2206) "(" 1321 L_PAREN@2205..2206 "("
1322 PARAM@[2206; 2212) 1322 PARAM@2206..2212
1323 BIND_PAT@[2206; 2208) 1323 BIND_PAT@2206..2208
1324 NAME@[2206; 2208) 1324 NAME@2206..2208
1325 IDENT@[2206; 2208) "u8" 1325 IDENT@2206..2208 "u8"
1326 COLON@[2208; 2209) ":" 1326 COLON@2208..2209 ":"
1327 WHITESPACE@[2209; 2210) " " 1327 WHITESPACE@2209..2210 " "
1328 PATH_TYPE@[2210; 2212) 1328 PATH_TYPE@2210..2212
1329 PATH@[2210; 2212) 1329 PATH@2210..2212
1330 PATH_SEGMENT@[2210; 2212) 1330 PATH_SEGMENT@2210..2212
1331 NAME_REF@[2210; 2212) 1331 NAME_REF@2210..2212
1332 IDENT@[2210; 2212) "u8" 1332 IDENT@2210..2212 "u8"
1333 R_PAREN@[2212; 2213) ")" 1333 R_PAREN@2212..2213 ")"
1334 WHITESPACE@[2213; 2214) " " 1334 WHITESPACE@2213..2214 " "
1335 BLOCK_EXPR@[2214; 2693) 1335 BLOCK_EXPR@2214..2693
1336 BLOCK@[2214; 2693) 1336 BLOCK@2214..2693
1337 L_CURLY@[2214; 2215) "{" 1337 L_CURLY@2214..2215 "{"
1338 WHITESPACE@[2215; 2220) "\n " 1338 WHITESPACE@2215..2220 "\n "
1339 IF_EXPR@[2220; 2691) 1339 IF_EXPR@2220..2691
1340 IF_KW@[2220; 2222) "if" 1340 IF_KW@2220..2222 "if"
1341 WHITESPACE@[2222; 2223) " " 1341 WHITESPACE@2222..2223 " "
1342 CONDITION@[2223; 2232) 1342 CONDITION@2223..2232
1343 BIN_EXPR@[2223; 2232) 1343 BIN_EXPR@2223..2232
1344 PATH_EXPR@[2223; 2225) 1344 PATH_EXPR@2223..2225
1345 PATH@[2223; 2225) 1345 PATH@2223..2225
1346 PATH_SEGMENT@[2223; 2225) 1346 PATH_SEGMENT@2223..2225
1347 NAME_REF@[2223; 2225) 1347 NAME_REF@2223..2225
1348 IDENT@[2223; 2225) "u8" 1348 IDENT@2223..2225 "u8"
1349 WHITESPACE@[2225; 2226) " " 1349 WHITESPACE@2225..2226 " "
1350 NEQ@[2226; 2228) "!=" 1350 NEQ@2226..2228 "!="
1351 WHITESPACE@[2228; 2229) " " 1351 WHITESPACE@2228..2229 " "
1352 LITERAL@[2229; 2232) 1352 LITERAL@2229..2232
1353 INT_NUMBER@[2229; 2232) "0u8" 1353 INT_NUMBER@2229..2232 "0u8"
1354 WHITESPACE@[2232; 2233) " " 1354 WHITESPACE@2232..2233 " "
1355 BLOCK_EXPR@[2233; 2691) 1355 BLOCK_EXPR@2233..2691
1356 BLOCK@[2233; 2691) 1356 BLOCK@2233..2691
1357 L_CURLY@[2233; 2234) "{" 1357 L_CURLY@2233..2234 "{"
1358 WHITESPACE@[2234; 2243) "\n " 1358 WHITESPACE@2234..2243 "\n "
1359 EXPR_STMT@[2243; 2685) 1359 EXPR_STMT@2243..2685
1360 MACRO_CALL@[2243; 2684) 1360 MACRO_CALL@2243..2684
1361 PATH@[2243; 2252) 1361 PATH@2243..2252
1362 PATH_SEGMENT@[2243; 2252) 1362 PATH_SEGMENT@2243..2252
1363 NAME_REF@[2243; 2252) 1363 NAME_REF@2243..2252
1364 IDENT@[2243; 2252) "assert_eq" 1364 IDENT@2243..2252 "assert_eq"
1365 BANG@[2252; 2253) "!" 1365 BANG@2252..2253 "!"
1366 TOKEN_TREE@[2253; 2684) 1366 TOKEN_TREE@2253..2684
1367 L_PAREN@[2253; 2254) "(" 1367 L_PAREN@2253..2254 "("
1368 INT_NUMBER@[2254; 2257) "8u8" 1368 INT_NUMBER@2254..2257 "8u8"
1369 COMMA@[2257; 2258) "," 1369 COMMA@2257..2258 ","
1370 WHITESPACE@[2258; 2259) " " 1370 WHITESPACE@2258..2259 " "
1371 TOKEN_TREE@[2259; 2683) 1371 TOKEN_TREE@2259..2683
1372 L_CURLY@[2259; 2260) "{" 1372 L_CURLY@2259..2260 "{"
1373 WHITESPACE@[2260; 2273) "\n " 1373 WHITESPACE@2260..2273 "\n "
1374 IDENT@[2273; 2284) "macro_rules" 1374 IDENT@2273..2284 "macro_rules"
1375 BANG@[2284; 2285) "!" 1375 BANG@2284..2285 "!"
1376 WHITESPACE@[2285; 2286) " " 1376 WHITESPACE@2285..2286 " "
1377 IDENT@[2286; 2288) "u8" 1377 IDENT@2286..2288 "u8"
1378 WHITESPACE@[2288; 2289) " " 1378 WHITESPACE@2288..2289 " "
1379 TOKEN_TREE@[2289; 2567) 1379 TOKEN_TREE@2289..2567
1380 L_CURLY@[2289; 2290) "{" 1380 L_CURLY@2289..2290 "{"
1381 WHITESPACE@[2290; 2307) "\n " 1381 WHITESPACE@2290..2307 "\n "
1382 TOKEN_TREE@[2307; 2311) 1382 TOKEN_TREE@2307..2311
1383 L_PAREN@[2307; 2308) "(" 1383 L_PAREN@2307..2308 "("
1384 IDENT@[2308; 2310) "u8" 1384 IDENT@2308..2310 "u8"
1385 R_PAREN@[2310; 2311) ")" 1385 R_PAREN@2310..2311 ")"
1386 WHITESPACE@[2311; 2312) " " 1386 WHITESPACE@2311..2312 " "
1387 EQ@[2312; 2313) "=" 1387 EQ@2312..2313 "="
1388 R_ANGLE@[2313; 2314) ">" 1388 R_ANGLE@2313..2314 ">"
1389 WHITESPACE@[2314; 2315) " " 1389 WHITESPACE@2314..2315 " "
1390 TOKEN_TREE@[2315; 2552) 1390 TOKEN_TREE@2315..2552
1391 L_CURLY@[2315; 2316) "{" 1391 L_CURLY@2315..2316 "{"
1392 WHITESPACE@[2316; 2337) "\n " 1392 WHITESPACE@2316..2337 "\n "
1393 MOD_KW@[2337; 2340) "mod" 1393 MOD_KW@2337..2340 "mod"
1394 WHITESPACE@[2340; 2341) " " 1394 WHITESPACE@2340..2341 " "
1395 IDENT@[2341; 2343) "u8" 1395 IDENT@2341..2343 "u8"
1396 WHITESPACE@[2343; 2344) " " 1396 WHITESPACE@2343..2344 " "
1397 TOKEN_TREE@[2344; 2534) 1397 TOKEN_TREE@2344..2534
1398 L_CURLY@[2344; 2345) "{" 1398 L_CURLY@2344..2345 "{"
1399 WHITESPACE@[2345; 2370) "\n ..." 1399 WHITESPACE@2345..2370 "\n ..."
1400 PUB_KW@[2370; 2373) "pub" 1400 PUB_KW@2370..2373 "pub"
1401 WHITESPACE@[2373; 2374) " " 1401 WHITESPACE@2373..2374 " "
1402 FN_KW@[2374; 2376) "fn" 1402 FN_KW@2374..2376 "fn"
1403 WHITESPACE@[2376; 2377) " " 1403 WHITESPACE@2376..2377 " "
1404 IDENT@[2377; 2379) "u8" 1404 IDENT@2377..2379 "u8"
1405 L_ANGLE@[2379; 2380) "<" 1405 L_ANGLE@2379..2380 "<"
1406 LIFETIME@[2380; 2383) "\'u8" 1406 LIFETIME@2380..2383 "\'u8"
1407 COLON@[2383; 2384) ":" 1407 COLON@2383..2384 ":"
1408 WHITESPACE@[2384; 2385) " " 1408 WHITESPACE@2384..2385 " "
1409 LIFETIME@[2385; 2388) "\'u8" 1409 LIFETIME@2385..2388 "\'u8"
1410 WHITESPACE@[2388; 2389) " " 1410 WHITESPACE@2388..2389 " "
1411 PLUS@[2389; 2390) "+" 1411 PLUS@2389..2390 "+"
1412 WHITESPACE@[2390; 2391) " " 1412 WHITESPACE@2390..2391 " "
1413 LIFETIME@[2391; 2394) "\'u8" 1413 LIFETIME@2391..2394 "\'u8"
1414 R_ANGLE@[2394; 2395) ">" 1414 R_ANGLE@2394..2395 ">"
1415 TOKEN_TREE@[2395; 2408) 1415 TOKEN_TREE@2395..2408
1416 L_PAREN@[2395; 2396) "(" 1416 L_PAREN@2395..2396 "("
1417 IDENT@[2396; 2398) "u8" 1417 IDENT@2396..2398 "u8"
1418 COLON@[2398; 2399) ":" 1418 COLON@2398..2399 ":"
1419 WHITESPACE@[2399; 2400) " " 1419 WHITESPACE@2399..2400 " "
1420 AMP@[2400; 2401) "&" 1420 AMP@2400..2401 "&"
1421 LIFETIME@[2401; 2404) "\'u8" 1421 LIFETIME@2401..2404 "\'u8"
1422 WHITESPACE@[2404; 2405) " " 1422 WHITESPACE@2404..2405 " "
1423 IDENT@[2405; 2407) "u8" 1423 IDENT@2405..2407 "u8"
1424 R_PAREN@[2407; 2408) ")" 1424 R_PAREN@2407..2408 ")"
1425 WHITESPACE@[2408; 2409) " " 1425 WHITESPACE@2408..2409 " "
1426 MINUS@[2409; 2410) "-" 1426 MINUS@2409..2410 "-"
1427 R_ANGLE@[2410; 2411) ">" 1427 R_ANGLE@2410..2411 ">"
1428 WHITESPACE@[2411; 2412) " " 1428 WHITESPACE@2411..2412 " "
1429 AMP@[2412; 2413) "&" 1429 AMP@2412..2413 "&"
1430 LIFETIME@[2413; 2416) "\'u8" 1430 LIFETIME@2413..2416 "\'u8"
1431 WHITESPACE@[2416; 2417) " " 1431 WHITESPACE@2416..2417 " "
1432 IDENT@[2417; 2419) "u8" 1432 IDENT@2417..2419 "u8"
1433 WHITESPACE@[2419; 2420) " " 1433 WHITESPACE@2419..2420 " "
1434 TOKEN_TREE@[2420; 2512) 1434 TOKEN_TREE@2420..2512
1435 L_CURLY@[2420; 2421) "{" 1435 L_CURLY@2420..2421 "{"
1436 WHITESPACE@[2421; 2450) "\n ..." 1436 WHITESPACE@2421..2450 "\n ..."
1437 STRING@[2450; 2454) "\"u8\"" 1437 STRING@2450..2454 "\"u8\""
1438 SEMICOLON@[2454; 2455) ";" 1438 SEMICOLON@2454..2455 ";"
1439 WHITESPACE@[2455; 2484) "\n ..." 1439 WHITESPACE@2455..2484 "\n ..."
1440 IDENT@[2484; 2486) "u8" 1440 IDENT@2484..2486 "u8"
1441 WHITESPACE@[2486; 2511) "\n ..." 1441 WHITESPACE@2486..2511 "\n ..."
1442 R_CURLY@[2511; 2512) "}" 1442 R_CURLY@2511..2512 "}"
1443 WHITESPACE@[2512; 2533) "\n " 1443 WHITESPACE@2512..2533 "\n "
1444 R_CURLY@[2533; 2534) "}" 1444 R_CURLY@2533..2534 "}"
1445 WHITESPACE@[2534; 2551) "\n " 1445 WHITESPACE@2534..2551 "\n "
1446 R_CURLY@[2551; 2552) "}" 1446 R_CURLY@2551..2552 "}"
1447 SEMICOLON@[2552; 2553) ";" 1447 SEMICOLON@2552..2553 ";"
1448 WHITESPACE@[2553; 2566) "\n " 1448 WHITESPACE@2553..2566 "\n "
1449 R_CURLY@[2566; 2567) "}" 1449 R_CURLY@2566..2567 "}"
1450 WHITESPACE@[2567; 2581) "\n\n " 1450 WHITESPACE@2567..2581 "\n\n "
1451 IDENT@[2581; 2583) "u8" 1451 IDENT@2581..2583 "u8"
1452 BANG@[2583; 2584) "!" 1452 BANG@2583..2584 "!"
1453 TOKEN_TREE@[2584; 2588) 1453 TOKEN_TREE@2584..2588
1454 L_PAREN@[2584; 2585) "(" 1454 L_PAREN@2584..2585 "("
1455 IDENT@[2585; 2587) "u8" 1455 IDENT@2585..2587 "u8"
1456 R_PAREN@[2587; 2588) ")" 1456 R_PAREN@2587..2588 ")"
1457 SEMICOLON@[2588; 2589) ";" 1457 SEMICOLON@2588..2589 ";"
1458 WHITESPACE@[2589; 2602) "\n " 1458 WHITESPACE@2589..2602 "\n "
1459 LET_KW@[2602; 2605) "let" 1459 LET_KW@2602..2605 "let"
1460 WHITESPACE@[2605; 2606) " " 1460 WHITESPACE@2605..2606 " "
1461 AMP@[2606; 2607) "&" 1461 AMP@2606..2607 "&"
1462 IDENT@[2607; 2609) "u8" 1462 IDENT@2607..2609 "u8"
1463 COLON@[2609; 2610) ":" 1463 COLON@2609..2610 ":"
1464 WHITESPACE@[2610; 2611) " " 1464 WHITESPACE@2610..2611 " "
1465 AMP@[2611; 2612) "&" 1465 AMP@2611..2612 "&"
1466 IDENT@[2612; 2614) "u8" 1466 IDENT@2612..2614 "u8"
1467 WHITESPACE@[2614; 2615) " " 1467 WHITESPACE@2614..2615 " "
1468 EQ@[2615; 2616) "=" 1468 EQ@2615..2616 "="
1469 WHITESPACE@[2616; 2617) " " 1469 WHITESPACE@2616..2617 " "
1470 IDENT@[2617; 2619) "u8" 1470 IDENT@2617..2619 "u8"
1471 COLON@[2619; 2620) ":" 1471 COLON@2619..2620 ":"
1472 COLON@[2620; 2621) ":" 1472 COLON@2620..2621 ":"
1473 IDENT@[2621; 2623) "u8" 1473 IDENT@2621..2623 "u8"
1474 TOKEN_TREE@[2623; 2629) 1474 TOKEN_TREE@2623..2629
1475 L_PAREN@[2623; 2624) "(" 1475 L_PAREN@2623..2624 "("
1476 AMP@[2624; 2625) "&" 1476 AMP@2624..2625 "&"
1477 INT_NUMBER@[2625; 2628) "8u8" 1477 INT_NUMBER@2625..2628 "8u8"
1478 R_PAREN@[2628; 2629) ")" 1478 R_PAREN@2628..2629 ")"
1479 SEMICOLON@[2629; 2630) ";" 1479 SEMICOLON@2629..2630 ";"
1480 WHITESPACE@[2630; 2643) "\n " 1480 WHITESPACE@2630..2643 "\n "
1481 CRATE_KW@[2643; 2648) "crate" 1481 CRATE_KW@2643..2648 "crate"
1482 COLON@[2648; 2649) ":" 1482 COLON@2648..2649 ":"
1483 COLON@[2649; 2650) ":" 1483 COLON@2649..2650 ":"
1484 IDENT@[2650; 2652) "u8" 1484 IDENT@2650..2652 "u8"
1485 TOKEN_TREE@[2652; 2657) 1485 TOKEN_TREE@2652..2657
1486 L_PAREN@[2652; 2653) "(" 1486 L_PAREN@2652..2653 "("
1487 INT_NUMBER@[2653; 2656) "0u8" 1487 INT_NUMBER@2653..2656 "0u8"
1488 R_PAREN@[2656; 2657) ")" 1488 R_PAREN@2656..2657 ")"
1489 SEMICOLON@[2657; 2658) ";" 1489 SEMICOLON@2657..2658 ";"
1490 WHITESPACE@[2658; 2671) "\n " 1490 WHITESPACE@2658..2671 "\n "
1491 IDENT@[2671; 2673) "u8" 1491 IDENT@2671..2673 "u8"
1492 WHITESPACE@[2673; 2682) "\n " 1492 WHITESPACE@2673..2682 "\n "
1493 R_CURLY@[2682; 2683) "}" 1493 R_CURLY@2682..2683 "}"
1494 R_PAREN@[2683; 2684) ")" 1494 R_PAREN@2683..2684 ")"
1495 SEMICOLON@[2684; 2685) ";" 1495 SEMICOLON@2684..2685 ";"
1496 WHITESPACE@[2685; 2690) "\n " 1496 WHITESPACE@2685..2690 "\n "
1497 R_CURLY@[2690; 2691) "}" 1497 R_CURLY@2690..2691 "}"
1498 WHITESPACE@[2691; 2692) "\n" 1498 WHITESPACE@2691..2692 "\n"
1499 R_CURLY@[2692; 2693) "}" 1499 R_CURLY@2692..2693 "}"
1500 WHITESPACE@[2693; 2695) "\n\n" 1500 WHITESPACE@2693..2695 "\n\n"
1501 FN_DEF@[2695; 2832) 1501 FN_DEF@2695..2832
1502 FN_KW@[2695; 2697) "fn" 1502 FN_KW@2695..2697 "fn"
1503 WHITESPACE@[2697; 2698) " " 1503 WHITESPACE@2697..2698 " "
1504 NAME@[2698; 2703) 1504 NAME@2698..2703
1505 IDENT@[2698; 2703) "fishy" 1505 IDENT@2698..2703 "fishy"
1506 PARAM_LIST@[2703; 2705) 1506 PARAM_LIST@2703..2705
1507 L_PAREN@[2703; 2704) "(" 1507 L_PAREN@2703..2704 "("
1508 R_PAREN@[2704; 2705) ")" 1508 R_PAREN@2704..2705 ")"
1509 WHITESPACE@[2705; 2706) " " 1509 WHITESPACE@2705..2706 " "
1510 BLOCK_EXPR@[2706; 2832) 1510 BLOCK_EXPR@2706..2832
1511 BLOCK@[2706; 2832) 1511 BLOCK@2706..2832
1512 L_CURLY@[2706; 2707) "{" 1512 L_CURLY@2706..2707 "{"
1513 WHITESPACE@[2707; 2712) "\n " 1513 WHITESPACE@2707..2712 "\n "
1514 EXPR_STMT@[2712; 2830) 1514 EXPR_STMT@2712..2830
1515 MACRO_CALL@[2712; 2829) 1515 MACRO_CALL@2712..2829
1516 PATH@[2712; 2721) 1516 PATH@2712..2721
1517 PATH_SEGMENT@[2712; 2721) 1517 PATH_SEGMENT@2712..2721
1518 NAME_REF@[2712; 2721) 1518 NAME_REF@2712..2721
1519 IDENT@[2712; 2721) "assert_eq" 1519 IDENT@2712..2721 "assert_eq"
1520 BANG@[2721; 2722) "!" 1520 BANG@2721..2722 "!"
1521 TOKEN_TREE@[2722; 2829) 1521 TOKEN_TREE@2722..2829
1522 L_PAREN@[2722; 2723) "(" 1522 L_PAREN@2722..2723 "("
1523 IDENT@[2723; 2729) "String" 1523 IDENT@2723..2729 "String"
1524 COLON@[2729; 2730) ":" 1524 COLON@2729..2730 ":"
1525 COLON@[2730; 2731) ":" 1525 COLON@2730..2731 ":"
1526 IDENT@[2731; 2735) "from" 1526 IDENT@2731..2735 "from"
1527 TOKEN_TREE@[2735; 2742) 1527 TOKEN_TREE@2735..2742
1528 L_PAREN@[2735; 2736) "(" 1528 L_PAREN@2735..2736 "("
1529 STRING@[2736; 2741) "\"><>\"" 1529 STRING@2736..2741 "\"><>\""
1530 R_PAREN@[2741; 2742) ")" 1530 R_PAREN@2741..2742 ")"
1531 COMMA@[2742; 2743) "," 1531 COMMA@2742..2743 ","
1532 WHITESPACE@[2743; 2759) "\n " 1532 WHITESPACE@2743..2759 "\n "
1533 IDENT@[2759; 2765) "String" 1533 IDENT@2759..2765 "String"
1534 COLON@[2765; 2766) ":" 1534 COLON@2765..2766 ":"
1535 COLON@[2766; 2767) ":" 1535 COLON@2766..2767 ":"
1536 L_ANGLE@[2767; 2768) "<" 1536 L_ANGLE@2767..2768 "<"
1537 R_ANGLE@[2768; 2769) ">" 1537 R_ANGLE@2768..2769 ">"
1538 COLON@[2769; 2770) ":" 1538 COLON@2769..2770 ":"
1539 COLON@[2770; 2771) ":" 1539 COLON@2770..2771 ":"
1540 IDENT@[2771; 2775) "from" 1540 IDENT@2771..2775 "from"
1541 COLON@[2775; 2776) ":" 1541 COLON@2775..2776 ":"
1542 COLON@[2776; 2777) ":" 1542 COLON@2776..2777 ":"
1543 L_ANGLE@[2777; 2778) "<" 1543 L_ANGLE@2777..2778 "<"
1544 R_ANGLE@[2778; 2779) ">" 1544 R_ANGLE@2778..2779 ">"
1545 TOKEN_TREE@[2779; 2786) 1545 TOKEN_TREE@2779..2786
1546 L_PAREN@[2779; 2780) "(" 1546 L_PAREN@2779..2780 "("
1547 STRING@[2780; 2785) "\"><>\"" 1547 STRING@2780..2785 "\"><>\""
1548 R_PAREN@[2785; 2786) ")" 1548 R_PAREN@2785..2786 ")"
1549 DOT@[2786; 2787) "." 1549 DOT@2786..2787 "."
1550 IDENT@[2787; 2792) "chars" 1550 IDENT@2787..2792 "chars"
1551 COLON@[2792; 2793) ":" 1551 COLON@2792..2793 ":"
1552 COLON@[2793; 2794) ":" 1552 COLON@2793..2794 ":"
1553 L_ANGLE@[2794; 2795) "<" 1553 L_ANGLE@2794..2795 "<"
1554 R_ANGLE@[2795; 2796) ">" 1554 R_ANGLE@2795..2796 ">"
1555 TOKEN_TREE@[2796; 2798) 1555 TOKEN_TREE@2796..2798
1556 L_PAREN@[2796; 2797) "(" 1556 L_PAREN@2796..2797 "("
1557 R_PAREN@[2797; 2798) ")" 1557 R_PAREN@2797..2798 ")"
1558 DOT@[2798; 2799) "." 1558 DOT@2798..2799 "."
1559 IDENT@[2799; 2802) "rev" 1559 IDENT@2799..2802 "rev"
1560 COLON@[2802; 2803) ":" 1560 COLON@2802..2803 ":"
1561 COLON@[2803; 2804) ":" 1561 COLON@2803..2804 ":"
1562 L_ANGLE@[2804; 2805) "<" 1562 L_ANGLE@2804..2805 "<"
1563 R_ANGLE@[2805; 2806) ">" 1563 R_ANGLE@2805..2806 ">"
1564 TOKEN_TREE@[2806; 2808) 1564 TOKEN_TREE@2806..2808
1565 L_PAREN@[2806; 2807) "(" 1565 L_PAREN@2806..2807 "("
1566 R_PAREN@[2807; 2808) ")" 1566 R_PAREN@2807..2808 ")"
1567 DOT@[2808; 2809) "." 1567 DOT@2808..2809 "."
1568 IDENT@[2809; 2816) "collect" 1568 IDENT@2809..2816 "collect"
1569 COLON@[2816; 2817) ":" 1569 COLON@2816..2817 ":"
1570 COLON@[2817; 2818) ":" 1570 COLON@2817..2818 ":"
1571 L_ANGLE@[2818; 2819) "<" 1571 L_ANGLE@2818..2819 "<"
1572 IDENT@[2819; 2825) "String" 1572 IDENT@2819..2825 "String"
1573 R_ANGLE@[2825; 2826) ">" 1573 R_ANGLE@2825..2826 ">"
1574 TOKEN_TREE@[2826; 2828) 1574 TOKEN_TREE@2826..2828
1575 L_PAREN@[2826; 2827) "(" 1575 L_PAREN@2826..2827 "("
1576 R_PAREN@[2827; 2828) ")" 1576 R_PAREN@2827..2828 ")"
1577 R_PAREN@[2828; 2829) ")" 1577 R_PAREN@2828..2829 ")"
1578 SEMICOLON@[2829; 2830) ";" 1578 SEMICOLON@2829..2830 ";"
1579 WHITESPACE@[2830; 2831) "\n" 1579 WHITESPACE@2830..2831 "\n"
1580 R_CURLY@[2831; 2832) "}" 1580 R_CURLY@2831..2832 "}"
1581 WHITESPACE@[2832; 2834) "\n\n" 1581 WHITESPACE@2832..2834 "\n\n"
1582 FN_DEF@[2834; 2906) 1582 FN_DEF@2834..2906
1583 FN_KW@[2834; 2836) "fn" 1583 FN_KW@2834..2836 "fn"
1584 WHITESPACE@[2836; 2837) " " 1584 WHITESPACE@2836..2837 " "
1585 NAME@[2837; 2842) 1585 NAME@2837..2842
1586 IDENT@[2837; 2842) "union" 1586 IDENT@2837..2842 "union"
1587 PARAM_LIST@[2842; 2844) 1587 PARAM_LIST@2842..2844
1588 L_PAREN@[2842; 2843) "(" 1588 L_PAREN@2842..2843 "("
1589 R_PAREN@[2843; 2844) ")" 1589 R_PAREN@2843..2844 ")"
1590 WHITESPACE@[2844; 2845) " " 1590 WHITESPACE@2844..2845 " "
1591 BLOCK_EXPR@[2845; 2906) 1591 BLOCK_EXPR@2845..2906
1592 BLOCK@[2845; 2906) 1592 BLOCK@2845..2906
1593 L_CURLY@[2845; 2846) "{" 1593 L_CURLY@2845..2846 "{"
1594 WHITESPACE@[2846; 2851) "\n " 1594 WHITESPACE@2846..2851 "\n "
1595 UNION_DEF@[2851; 2904) 1595 UNION_DEF@2851..2904
1596 UNION_KW@[2851; 2856) "union" 1596 UNION_KW@2851..2856 "union"
1597 WHITESPACE@[2856; 2857) " " 1597 WHITESPACE@2856..2857 " "
1598 NAME@[2857; 2862) 1598 NAME@2857..2862
1599 IDENT@[2857; 2862) "union" 1599 IDENT@2857..2862 "union"
1600 TYPE_PARAM_LIST@[2862; 2870) 1600 TYPE_PARAM_LIST@2862..2870
1601 L_ANGLE@[2862; 2863) "<" 1601 L_ANGLE@2862..2863 "<"
1602 LIFETIME_PARAM@[2863; 2869) 1602 LIFETIME_PARAM@2863..2869
1603 LIFETIME@[2863; 2869) "\'union" 1603 LIFETIME@2863..2869 "\'union"
1604 R_ANGLE@[2869; 2870) ">" 1604 R_ANGLE@2869..2870 ">"
1605 WHITESPACE@[2870; 2871) " " 1605 WHITESPACE@2870..2871 " "
1606 RECORD_FIELD_DEF_LIST@[2871; 2904) 1606 RECORD_FIELD_DEF_LIST@2871..2904
1607 L_CURLY@[2871; 2872) "{" 1607 L_CURLY@2871..2872 "{"
1608 WHITESPACE@[2872; 2873) " " 1608 WHITESPACE@2872..2873 " "
1609 RECORD_FIELD_DEF@[2873; 2901) 1609 RECORD_FIELD_DEF@2873..2901
1610 NAME@[2873; 2878) 1610 NAME@2873..2878
1611 IDENT@[2873; 2878) "union" 1611 IDENT@2873..2878 "union"
1612 COLON@[2878; 2879) ":" 1612 COLON@2878..2879 ":"
1613 WHITESPACE@[2879; 2880) " " 1613 WHITESPACE@2879..2880 " "
1614 REFERENCE_TYPE@[2880; 2901) 1614 REFERENCE_TYPE@2880..2901
1615 AMP@[2880; 2881) "&" 1615 AMP@2880..2881 "&"
1616 LIFETIME@[2881; 2887) "\'union" 1616 LIFETIME@2881..2887 "\'union"
1617 WHITESPACE@[2887; 2888) " " 1617 WHITESPACE@2887..2888 " "
1618 PATH_TYPE@[2888; 2901) 1618 PATH_TYPE@2888..2901
1619 PATH@[2888; 2901) 1619 PATH@2888..2901
1620 PATH_SEGMENT@[2888; 2901) 1620 PATH_SEGMENT@2888..2901
1621 NAME_REF@[2888; 2893) 1621 NAME_REF@2888..2893
1622 IDENT@[2888; 2893) "union" 1622 IDENT@2888..2893 "union"
1623 TYPE_ARG_LIST@[2893; 2901) 1623 TYPE_ARG_LIST@2893..2901
1624 L_ANGLE@[2893; 2894) "<" 1624 L_ANGLE@2893..2894 "<"
1625 LIFETIME_ARG@[2894; 2900) 1625 LIFETIME_ARG@2894..2900
1626 LIFETIME@[2894; 2900) "\'union" 1626 LIFETIME@2894..2900 "\'union"
1627 R_ANGLE@[2900; 2901) ">" 1627 R_ANGLE@2900..2901 ">"
1628 COMMA@[2901; 2902) "," 1628 COMMA@2901..2902 ","
1629 WHITESPACE@[2902; 2903) " " 1629 WHITESPACE@2902..2903 " "
1630 R_CURLY@[2903; 2904) "}" 1630 R_CURLY@2903..2904 "}"
1631 WHITESPACE@[2904; 2905) "\n" 1631 WHITESPACE@2904..2905 "\n"
1632 R_CURLY@[2905; 2906) "}" 1632 R_CURLY@2905..2906 "}"
1633 WHITESPACE@[2906; 2908) "\n\n" 1633 WHITESPACE@2906..2908 "\n\n"
1634 FN_DEF@[2908; 3042) 1634 FN_DEF@2908..3042
1635 FN_KW@[2908; 2910) "fn" 1635 FN_KW@2908..2910 "fn"
1636 WHITESPACE@[2910; 2911) " " 1636 WHITESPACE@2910..2911 " "
1637 NAME@[2911; 2929) 1637 NAME@2911..2929
1638 IDENT@[2911; 2929) "special_characters" 1638 IDENT@2911..2929 "special_characters"
1639 PARAM_LIST@[2929; 2931) 1639 PARAM_LIST@2929..2931
1640 L_PAREN@[2929; 2930) "(" 1640 L_PAREN@2929..2930 "("
1641 R_PAREN@[2930; 2931) ")" 1641 R_PAREN@2930..2931 ")"
1642 WHITESPACE@[2931; 2932) " " 1642 WHITESPACE@2931..2932 " "
1643 BLOCK_EXPR@[2932; 3042) 1643 BLOCK_EXPR@2932..3042
1644 BLOCK@[2932; 3042) 1644 BLOCK@2932..3042
1645 L_CURLY@[2932; 2933) "{" 1645 L_CURLY@2932..2933 "{"
1646 WHITESPACE@[2933; 2938) "\n " 1646 WHITESPACE@2933..2938 "\n "
1647 LET_STMT@[2938; 3021) 1647 LET_STMT@2938..3021
1648 LET_KW@[2938; 2941) "let" 1648 LET_KW@2938..2941 "let"
1649 WHITESPACE@[2941; 2942) " " 1649 WHITESPACE@2941..2942 " "
1650 BIND_PAT@[2942; 2945) 1650 BIND_PAT@2942..2945
1651 NAME@[2942; 2945) 1651 NAME@2942..2945
1652 IDENT@[2942; 2945) "val" 1652 IDENT@2942..2945 "val"
1653 WHITESPACE@[2945; 2946) " " 1653 WHITESPACE@2945..2946 " "
1654 EQ@[2946; 2947) "=" 1654 EQ@2946..2947 "="
1655 WHITESPACE@[2947; 2948) " " 1655 WHITESPACE@2947..2948 " "
1656 PREFIX_EXPR@[2948; 3013) 1656 PREFIX_EXPR@2948..3013
1657 BANG@[2948; 2949) "!" 1657 BANG@2948..2949 "!"
1658 PAREN_EXPR@[2949; 3013) 1658 PAREN_EXPR@2949..3013
1659 L_PAREN@[2949; 2950) "(" 1659 L_PAREN@2949..2950 "("
1660 BIN_EXPR@[2950; 3012) 1660 BIN_EXPR@2950..3012
1661 CALL_EXPR@[2950; 2995) 1661 CALL_EXPR@2950..2995
1662 PAREN_EXPR@[2950; 2971) 1662 PAREN_EXPR@2950..2971
1663 L_PAREN@[2950; 2951) "(" 1663 L_PAREN@2950..2951 "("
1664 LAMBDA_EXPR@[2951; 2970) 1664 LAMBDA_EXPR@2951..2970
1665 PARAM_LIST@[2951; 2968) 1665 PARAM_LIST@2951..2968
1666 PIPE@[2951; 2952) "|" 1666 PIPE@2951..2952 "|"
1667 PARAM@[2952; 2962) 1667 PARAM@2952..2962
1668 TUPLE_PAT@[2952; 2956) 1668 TUPLE_PAT@2952..2956
1669 L_PAREN@[2952; 2953) "(" 1669 L_PAREN@2952..2953 "("
1670 DOT_DOT_PAT@[2953; 2955) 1670 DOT_DOT_PAT@2953..2955
1671 DOT2@[2953; 2955) ".." 1671 DOT2@2953..2955 ".."
1672 R_PAREN@[2955; 2956) ")" 1672 R_PAREN@2955..2956 ")"
1673 COLON@[2956; 2957) ":" 1673 COLON@2956..2957 ":"
1674 TUPLE_TYPE@[2957; 2962) 1674 TUPLE_TYPE@2957..2962
1675 L_PAREN@[2957; 2958) "(" 1675 L_PAREN@2957..2958 "("
1676 PLACEHOLDER_TYPE@[2958; 2959) 1676 PLACEHOLDER_TYPE@2958..2959
1677 UNDERSCORE@[2958; 2959) "_" 1677 UNDERSCORE@2958..2959 "_"
1678 COMMA@[2959; 2960) "," 1678 COMMA@2959..2960 ","
1679 PLACEHOLDER_TYPE@[2960; 2961) 1679 PLACEHOLDER_TYPE@2960..2961
1680 UNDERSCORE@[2960; 2961) "_" 1680 UNDERSCORE@2960..2961 "_"
1681 R_PAREN@[2961; 2962) ")" 1681 R_PAREN@2961..2962 ")"
1682 COMMA@[2962; 2963) "," 1682 COMMA@2962..2963 ","
1683 PARAM@[2963; 2967) 1683 PARAM@2963..2967
1684 BIND_PAT@[2963; 2967) 1684 BIND_PAT@2963..2967
1685 NAME@[2963; 2965) 1685 NAME@2963..2965
1686 IDENT@[2963; 2965) "__" 1686 IDENT@2963..2965 "__"
1687 AT@[2965; 2966) "@" 1687 AT@2965..2966 "@"
1688 PLACEHOLDER_PAT@[2966; 2967) 1688 PLACEHOLDER_PAT@2966..2967
1689 UNDERSCORE@[2966; 2967) "_" 1689 UNDERSCORE@2966..2967 "_"
1690 PIPE@[2967; 2968) "|" 1690 PIPE@2967..2968 "|"
1691 PATH_EXPR@[2968; 2970) 1691 PATH_EXPR@2968..2970
1692 PATH@[2968; 2970) 1692 PATH@2968..2970
1693 PATH_SEGMENT@[2968; 2970) 1693 PATH_SEGMENT@2968..2970
1694 NAME_REF@[2968; 2970) 1694 NAME_REF@2968..2970
1695 IDENT@[2968; 2970) "__" 1695 IDENT@2968..2970 "__"
1696 R_PAREN@[2970; 2971) ")" 1696 R_PAREN@2970..2971 ")"
1697 ARG_LIST@[2971; 2995) 1697 ARG_LIST@2971..2995
1698 L_PAREN@[2971; 2972) "(" 1698 L_PAREN@2971..2972 "("
1699 TUPLE_EXPR@[2972; 2987) 1699 TUPLE_EXPR@2972..2987
1700 L_PAREN@[2972; 2973) "(" 1700 L_PAREN@2972..2973 "("
1701 REF_EXPR@[2973; 2979) 1701 REF_EXPR@2973..2979
1702 AMP@[2973; 2974) "&" 1702 AMP@2973..2974 "&"
1703 PREFIX_EXPR@[2974; 2979) 1703 PREFIX_EXPR@2974..2979
1704 STAR@[2974; 2975) "*" 1704 STAR@2974..2975 "*"
1705 LITERAL@[2975; 2979) 1705 LITERAL@2975..2979
1706 STRING@[2975; 2979) "\"\\\\\"" 1706 STRING@2975..2979 "\"\\\\\""
1707 COMMA@[2979; 2980) "," 1707 COMMA@2979..2980 ","
1708 LITERAL@[2980; 2986) 1708 LITERAL@2980..2986
1709 CHAR@[2980; 2986) "\'🤔\'" 1709 CHAR@2980..2986 "\'🤔\'"
1710 R_PAREN@[2986; 2987) ")" 1710 R_PAREN@2986..2987 ")"
1711 COMMENT@[2987; 2991) "/**/" 1711 COMMENT@2987..2991 "/**/"
1712 COMMA@[2991; 2992) "," 1712 COMMA@2991..2992 ","
1713 BLOCK_EXPR@[2992; 2994) 1713 BLOCK_EXPR@2992..2994
1714 BLOCK@[2992; 2994) 1714 BLOCK@2992..2994
1715 L_CURLY@[2992; 2993) "{" 1715 L_CURLY@2992..2993 "{"
1716 R_CURLY@[2993; 2994) "}" 1716 R_CURLY@2993..2994 "}"
1717 R_PAREN@[2994; 2995) ")" 1717 R_PAREN@2994..2995 ")"
1718 EQ2@[2995; 2997) "==" 1718 EQ2@2995..2997 "=="
1719 BLOCK_EXPR@[2997; 3012) 1719 BLOCK_EXPR@2997..3012
1720 BLOCK@[2997; 3012) 1720 BLOCK@2997..3012
1721 L_CURLY@[2997; 2998) "{" 1721 L_CURLY@2997..2998 "{"
1722 EXPR_STMT@[2998; 3011) 1722 EXPR_STMT@2998..3011
1723 REF_EXPR@[2998; 3010) 1723 REF_EXPR@2998..3010
1724 AMP@[2998; 2999) "&" 1724 AMP@2998..2999 "&"
1725 INDEX_EXPR@[2999; 3010) 1725 INDEX_EXPR@2999..3010
1726 ARRAY_EXPR@[2999; 3006) 1726 ARRAY_EXPR@2999..3006
1727 L_BRACK@[2999; 3000) "[" 1727 L_BRACK@2999..3000 "["
1728 RANGE_EXPR@[3000; 3005) 1728 RANGE_EXPR@3000..3005
1729 DOT2EQ@[3000; 3003) "..=" 1729 DOT2EQ@3000..3003 "..="
1730 RANGE_EXPR@[3003; 3005) 1730 RANGE_EXPR@3003..3005
1731 DOT2@[3003; 3005) ".." 1731 DOT2@3003..3005 ".."
1732 R_BRACK@[3005; 3006) "]" 1732 R_BRACK@3005..3006 "]"
1733 L_BRACK@[3006; 3007) "[" 1733 L_BRACK@3006..3007 "["
1734 RANGE_EXPR@[3007; 3009) 1734 RANGE_EXPR@3007..3009
1735 DOT2@[3007; 3009) ".." 1735 DOT2@3007..3009 ".."
1736 R_BRACK@[3009; 3010) "]" 1736 R_BRACK@3009..3010 "]"
1737 SEMICOLON@[3010; 3011) ";" 1737 SEMICOLON@3010..3011 ";"
1738 R_CURLY@[3011; 3012) "}" 1738 R_CURLY@3011..3012 "}"
1739 R_PAREN@[3012; 3013) ")" 1739 R_PAREN@3012..3013 ")"
1740 COMMENT@[3013; 3015) "//" 1740 COMMENT@3013..3015 "//"
1741 WHITESPACE@[3015; 3020) "\n " 1741 WHITESPACE@3015..3020 "\n "
1742 SEMICOLON@[3020; 3021) ";" 1742 SEMICOLON@3020..3021 ";"
1743 WHITESPACE@[3021; 3026) "\n " 1743 WHITESPACE@3021..3026 "\n "
1744 EXPR_STMT@[3026; 3040) 1744 EXPR_STMT@3026..3040
1745 MACRO_CALL@[3026; 3039) 1745 MACRO_CALL@3026..3039
1746 PATH@[3026; 3032) 1746 PATH@3026..3032
1747 PATH_SEGMENT@[3026; 3032) 1747 PATH_SEGMENT@3026..3032
1748 NAME_REF@[3026; 3032) 1748 NAME_REF@3026..3032
1749 IDENT@[3026; 3032) "assert" 1749 IDENT@3026..3032 "assert"
1750 BANG@[3032; 3033) "!" 1750 BANG@3032..3033 "!"
1751 TOKEN_TREE@[3033; 3039) 1751 TOKEN_TREE@3033..3039
1752 L_PAREN@[3033; 3034) "(" 1752 L_PAREN@3033..3034 "("
1753 BANG@[3034; 3035) "!" 1753 BANG@3034..3035 "!"
1754 IDENT@[3035; 3038) "val" 1754 IDENT@3035..3038 "val"
1755 R_PAREN@[3038; 3039) ")" 1755 R_PAREN@3038..3039 ")"
1756 SEMICOLON@[3039; 3040) ";" 1756 SEMICOLON@3039..3040 ";"
1757 WHITESPACE@[3040; 3041) "\n" 1757 WHITESPACE@3040..3041 "\n"
1758 R_CURLY@[3041; 3042) "}" 1758 R_CURLY@3041..3042 "}"
1759 WHITESPACE@[3042; 3044) "\n\n" 1759 WHITESPACE@3042..3044 "\n\n"
1760 FN_DEF@[3044; 3514) 1760 FN_DEF@3044..3514
1761 FN_KW@[3044; 3046) "fn" 1761 FN_KW@3044..3046 "fn"
1762 WHITESPACE@[3046; 3047) " " 1762 WHITESPACE@3046..3047 " "
1763 NAME@[3047; 3057) 1763 NAME@3047..3057
1764 IDENT@[3047; 3057) "punch_card" 1764 IDENT@3047..3057 "punch_card"
1765 PARAM_LIST@[3057; 3059) 1765 PARAM_LIST@3057..3059
1766 L_PAREN@[3057; 3058) "(" 1766 L_PAREN@3057..3058 "("
1767 R_PAREN@[3058; 3059) ")" 1767 R_PAREN@3058..3059 ")"
1768 WHITESPACE@[3059; 3060) " " 1768 WHITESPACE@3059..3060 " "
1769 RET_TYPE@[3060; 3083) 1769 RET_TYPE@3060..3083
1770 THIN_ARROW@[3060; 3062) "->" 1770 THIN_ARROW@3060..3062 "->"
1771 WHITESPACE@[3062; 3063) " " 1771 WHITESPACE@3062..3063 " "
1772 IMPL_TRAIT_TYPE@[3063; 3083) 1772 IMPL_TRAIT_TYPE@3063..3083
1773 IMPL_KW@[3063; 3067) "impl" 1773 IMPL_KW@3063..3067 "impl"
1774 WHITESPACE@[3067; 3068) " " 1774 WHITESPACE@3067..3068 " "
1775 TYPE_BOUND_LIST@[3068; 3083) 1775 TYPE_BOUND_LIST@3068..3083
1776 TYPE_BOUND@[3068; 3083) 1776 TYPE_BOUND@3068..3083
1777 PATH_TYPE@[3068; 3083) 1777 PATH_TYPE@3068..3083
1778 PATH@[3068; 3083) 1778 PATH@3068..3083
1779 PATH@[3068; 3076) 1779 PATH@3068..3076
1780 PATH@[3068; 3071) 1780 PATH@3068..3071
1781 PATH_SEGMENT@[3068; 3071) 1781 PATH_SEGMENT@3068..3071
1782 NAME_REF@[3068; 3071) 1782 NAME_REF@3068..3071
1783 IDENT@[3068; 3071) "std" 1783 IDENT@3068..3071 "std"
1784 COLON2@[3071; 3073) "::" 1784 COLON2@3071..3073 "::"
1785 PATH_SEGMENT@[3073; 3076) 1785 PATH_SEGMENT@3073..3076
1786 NAME_REF@[3073; 3076) 1786 NAME_REF@3073..3076
1787 IDENT@[3073; 3076) "fmt" 1787 IDENT@3073..3076 "fmt"
1788 COLON2@[3076; 3078) "::" 1788 COLON2@3076..3078 "::"
1789 PATH_SEGMENT@[3078; 3083) 1789 PATH_SEGMENT@3078..3083
1790 NAME_REF@[3078; 3083) 1790 NAME_REF@3078..3083
1791 IDENT@[3078; 3083) "Debug" 1791 IDENT@3078..3083 "Debug"
1792 WHITESPACE@[3083; 3084) " " 1792 WHITESPACE@3083..3084 " "
1793 BLOCK_EXPR@[3084; 3514) 1793 BLOCK_EXPR@3084..3514
1794 BLOCK@[3084; 3514) 1794 BLOCK@3084..3514
1795 L_CURLY@[3084; 3085) "{" 1795 L_CURLY@3084..3085 "{"
1796 WHITESPACE@[3085; 3090) "\n " 1796 WHITESPACE@3085..3090 "\n "
1797 RANGE_EXPR@[3090; 3512) 1797 RANGE_EXPR@3090..3512
1798 DOT2EQ@[3090; 3093) "..=" 1798 DOT2EQ@3090..3093 "..="
1799 RANGE_EXPR@[3093; 3512) 1799 RANGE_EXPR@3093..3512
1800 DOT2EQ@[3093; 3096) "..=" 1800 DOT2EQ@3093..3096 "..="
1801 RANGE_EXPR@[3096; 3512) 1801 RANGE_EXPR@3096..3512
1802 DOT2@[3096; 3098) ".." 1802 DOT2@3096..3098 ".."
1803 WHITESPACE@[3098; 3099) " " 1803 WHITESPACE@3098..3099 " "
1804 RANGE_EXPR@[3099; 3512) 1804 RANGE_EXPR@3099..3512
1805 DOT2@[3099; 3101) ".." 1805 DOT2@3099..3101 ".."
1806 WHITESPACE@[3101; 3105) " " 1806 WHITESPACE@3101..3105 " "
1807 RANGE_EXPR@[3105; 3512) 1807 RANGE_EXPR@3105..3512
1808 DOT2@[3105; 3107) ".." 1808 DOT2@3105..3107 ".."
1809 WHITESPACE@[3107; 3108) " " 1809 WHITESPACE@3107..3108 " "
1810 RANGE_EXPR@[3108; 3512) 1810 RANGE_EXPR@3108..3512
1811 DOT2@[3108; 3110) ".." 1811 DOT2@3108..3110 ".."
1812 WHITESPACE@[3110; 3111) " " 1812 WHITESPACE@3110..3111 " "
1813 RANGE_EXPR@[3111; 3512) 1813 RANGE_EXPR@3111..3512
1814 DOT2@[3111; 3113) ".." 1814 DOT2@3111..3113 ".."
1815 WHITESPACE@[3113; 3114) " " 1815 WHITESPACE@3113..3114 " "
1816 RANGE_EXPR@[3114; 3512) 1816 RANGE_EXPR@3114..3512
1817 DOT2@[3114; 3116) ".." 1817 DOT2@3114..3116 ".."
1818 WHITESPACE@[3116; 3120) " " 1818 WHITESPACE@3116..3120 " "
1819 RANGE_EXPR@[3120; 3512) 1819 RANGE_EXPR@3120..3512
1820 DOT2@[3120; 3122) ".." 1820 DOT2@3120..3122 ".."
1821 WHITESPACE@[3122; 3123) " " 1821 WHITESPACE@3122..3123 " "
1822 RANGE_EXPR@[3123; 3512) 1822 RANGE_EXPR@3123..3512
1823 DOT2@[3123; 3125) ".." 1823 DOT2@3123..3125 ".."
1824 WHITESPACE@[3125; 3126) " " 1824 WHITESPACE@3125..3126 " "
1825 RANGE_EXPR@[3126; 3512) 1825 RANGE_EXPR@3126..3512
1826 DOT2@[3126; 3128) ".." 1826 DOT2@3126..3128 ".."
1827 WHITESPACE@[3128; 3129) " " 1827 WHITESPACE@3128..3129 " "
1828 RANGE_EXPR@[3129; 3512) 1828 RANGE_EXPR@3129..3512
1829 DOT2@[3129; 3131) ".." 1829 DOT2@3129..3131 ".."
1830 WHITESPACE@[3131; 3135) " " 1830 WHITESPACE@3131..3135 " "
1831 RANGE_EXPR@[3135; 3512) 1831 RANGE_EXPR@3135..3512
1832 DOT2@[3135; 3137) ".." 1832 DOT2@3135..3137 ".."
1833 WHITESPACE@[3137; 3138) " " 1833 WHITESPACE@3137..3138 " "
1834 RANGE_EXPR@[3138; 3512) 1834 RANGE_EXPR@3138..3512
1835 DOT2EQ@[3138; 3141) "..=" 1835 DOT2EQ@3138..3141 "..="
1836 RANGE_EXPR@[3141; 3512) 1836 RANGE_EXPR@3141..3512
1837 DOT2@[3141; 3143) ".." 1837 DOT2@3141..3143 ".."
1838 WHITESPACE@[3143; 3144) " " 1838 WHITESPACE@3143..3144 " "
1839 RANGE_EXPR@[3144; 3512) 1839 RANGE_EXPR@3144..3512
1840 DOT2@[3144; 3146) ".." 1840 DOT2@3144..3146 ".."
1841 WHITESPACE@[3146; 3151) "\n " 1841 WHITESPACE@3146..3151 "\n "
1842 RANGE_EXPR@[3151; 3512) 1842 RANGE_EXPR@3151..3512
1843 DOT2EQ@[3151; 3154) "..=" 1843 DOT2EQ@3151..3154 "..="
1844 RANGE_EXPR@[3154; 3512) 1844 RANGE_EXPR@3154..3512
1845 DOT2@[3154; 3156) ".." 1845 DOT2@3154..3156 ".."
1846 WHITESPACE@[3156; 3157) " " 1846 WHITESPACE@3156..3157 " "
1847 RANGE_EXPR@[3157; 3512) 1847 RANGE_EXPR@3157..3512
1848 DOT2EQ@[3157; 3160) "..=" 1848 DOT2EQ@3157..3160 "..="
1849 RANGE_EXPR@[3160; 3512) 1849 RANGE_EXPR@3160..3512
1850 DOT2@[3160; 3162) ".." 1850 DOT2@3160..3162 ".."
1851 WHITESPACE@[3162; 3166) " " 1851 WHITESPACE@3162..3166 " "
1852 RANGE_EXPR@[3166; 3512) 1852 RANGE_EXPR@3166..3512
1853 DOT2@[3166; 3168) ".." 1853 DOT2@3166..3168 ".."
1854 WHITESPACE@[3168; 3169) " " 1854 WHITESPACE@3168..3169 " "
1855 RANGE_EXPR@[3169; 3512) 1855 RANGE_EXPR@3169..3512
1856 DOT2@[3169; 3171) ".." 1856 DOT2@3169..3171 ".."
1857 WHITESPACE@[3171; 3172) " " 1857 WHITESPACE@3171..3172 " "
1858 RANGE_EXPR@[3172; 3512) 1858 RANGE_EXPR@3172..3512
1859 DOT2@[3172; 3174) ".." 1859 DOT2@3172..3174 ".."
1860 WHITESPACE@[3174; 3175) " " 1860 WHITESPACE@3174..3175 " "
1861 RANGE_EXPR@[3175; 3512) 1861 RANGE_EXPR@3175..3512
1862 DOT2@[3175; 3177) ".." 1862 DOT2@3175..3177 ".."
1863 WHITESPACE@[3177; 3181) " " 1863 WHITESPACE@3177..3181 " "
1864 RANGE_EXPR@[3181; 3512) 1864 RANGE_EXPR@3181..3512
1865 DOT2@[3181; 3183) ".." 1865 DOT2@3181..3183 ".."
1866 WHITESPACE@[3183; 3184) " " 1866 WHITESPACE@3183..3184 " "
1867 RANGE_EXPR@[3184; 3512) 1867 RANGE_EXPR@3184..3512
1868 DOT2@[3184; 3186) ".." 1868 DOT2@3184..3186 ".."
1869 WHITESPACE@[3186; 3187) " " 1869 WHITESPACE@3186..3187 " "
1870 RANGE_EXPR@[3187; 3512) 1870 RANGE_EXPR@3187..3512
1871 DOT2@[3187; 3189) ".." 1871 DOT2@3187..3189 ".."
1872 WHITESPACE@[3189; 3190) " " 1872 WHITESPACE@3189..3190 " "
1873 RANGE_EXPR@[3190; 3512) 1873 RANGE_EXPR@3190..3512
1874 DOT2@[3190; 3192) ".." 1874 DOT2@3190..3192 ".."
1875 WHITESPACE@[3192; 3196) " " 1875 WHITESPACE@3192..3196 " "
1876 RANGE_EXPR@[3196; 3512) 1876 RANGE_EXPR@3196..3512
1877 DOT2EQ@[3196; 3199) "..=" 1877 DOT2EQ@3196..3199 "..="
1878 RANGE_EXPR@[3199; 3512) 1878 RANGE_EXPR@3199..3512
1879 DOT2EQ@[3199; 3202) "..=" 1879 DOT2EQ@3199..3202 "..="
1880 RANGE_EXPR@[3202; 3512) 1880 RANGE_EXPR@3202..3512
1881 DOT2EQ@[3202; 3205) "..=" 1881 DOT2EQ@3202..3205 "..="
1882 RANGE_EXPR@[3205; 3512) 1882 RANGE_EXPR@3205..3512
1883 DOT2@[3205; 3207) ".." 1883 DOT2@3205..3207 ".."
1884 WHITESPACE@[3207; 3212) "\n " 1884 WHITESPACE@3207..3212 "\n "
1885 RANGE_EXPR@[3212; 3512) 1885 RANGE_EXPR@3212..3512
1886 DOT2EQ@[3212; 3215) "..=" 1886 DOT2EQ@3212..3215 "..="
1887 RANGE_EXPR@[3215; 3512) 1887 RANGE_EXPR@3215..3512
1888 DOT2@[3215; 3217) ".." 1888 DOT2@3215..3217 ".."
1889 WHITESPACE@[3217; 3218) " " 1889 WHITESPACE@3217..3218 " "
1890 RANGE_EXPR@[3218; 3512) 1890 RANGE_EXPR@3218..3512
1891 DOT2EQ@[3218; 3221) "..=" 1891 DOT2EQ@3218..3221 "..="
1892 RANGE_EXPR@[3221; 3512) 1892 RANGE_EXPR@3221..3512
1893 DOT2@[3221; 3223) ".." 1893 DOT2@3221..3223 ".."
1894 WHITESPACE@[3223; 3227) " " 1894 WHITESPACE@3223..3227 " "
1895 RANGE_EXPR@[3227; 3512) 1895 RANGE_EXPR@3227..3512
1896 DOT2EQ@[3227; 3230) "..=" 1896 DOT2EQ@3227..3230 "..="
1897 RANGE_EXPR@[3230; 3512) 1897 RANGE_EXPR@3230..3512
1898 DOT2@[3230; 3232) ".." 1898 DOT2@3230..3232 ".."
1899 WHITESPACE@[3232; 3233) " " 1899 WHITESPACE@3232..3233 " "
1900 RANGE_EXPR@[3233; 3512) 1900 RANGE_EXPR@3233..3512
1901 DOT2EQ@[3233; 3236) "..=" 1901 DOT2EQ@3233..3236 "..="
1902 RANGE_EXPR@[3236; 3512) 1902 RANGE_EXPR@3236..3512
1903 DOT2@[3236; 3238) ".." 1903 DOT2@3236..3238 ".."
1904 WHITESPACE@[3238; 3242) " " 1904 WHITESPACE@3238..3242 " "
1905 RANGE_EXPR@[3242; 3512) 1905 RANGE_EXPR@3242..3512
1906 DOT2@[3242; 3244) ".." 1906 DOT2@3242..3244 ".."
1907 WHITESPACE@[3244; 3245) " " 1907 WHITESPACE@3244..3245 " "
1908 RANGE_EXPR@[3245; 3512) 1908 RANGE_EXPR@3245..3512
1909 DOT2EQ@[3245; 3248) "..=" 1909 DOT2EQ@3245..3248 "..="
1910 RANGE_EXPR@[3248; 3512) 1910 RANGE_EXPR@3248..3512
1911 DOT2EQ@[3248; 3251) "..=" 1911 DOT2EQ@3248..3251 "..="
1912 RANGE_EXPR@[3251; 3512) 1912 RANGE_EXPR@3251..3512
1913 DOT2@[3251; 3253) ".." 1913 DOT2@3251..3253 ".."
1914 WHITESPACE@[3253; 3257) " " 1914 WHITESPACE@3253..3257 " "
1915 RANGE_EXPR@[3257; 3512) 1915 RANGE_EXPR@3257..3512
1916 DOT2@[3257; 3259) ".." 1916 DOT2@3257..3259 ".."
1917 WHITESPACE@[3259; 3260) " " 1917 WHITESPACE@3259..3260 " "
1918 RANGE_EXPR@[3260; 3512) 1918 RANGE_EXPR@3260..3512
1919 DOT2EQ@[3260; 3263) "..=" 1919 DOT2EQ@3260..3263 "..="
1920 RANGE_EXPR@[3263; 3512) 1920 RANGE_EXPR@3263..3512
1921 DOT2@[3263; 3265) ".." 1921 DOT2@3263..3265 ".."
1922 WHITESPACE@[3265; 3266) " " 1922 [email protected] " "
1923 RANGE_EXPR@[3266; 3512) 1923 RANGE_EXPR@3266..3512
1924 DOT2@[3266; 3268) ".." 1924 DOT2@3266..3268 ".."
1925 WHITESPACE@[3268; 3273) "\n " 1925 [email protected] "\n "
1926 RANGE_EXPR@[3273; 3512) 1926 RANGE_EXPR@3273..3512
1927 DOT2EQ@[3273; 3276) "..=" 1927 [email protected] "..="
1928 RANGE_EXPR@[3276; 3512) 1928 [email protected]
1929 DOT2EQ@[3276; 3279) "..=" 1929 [email protected] "..="
1930 RANGE_EXPR@[3279; 3512) 1930 [email protected]
1931 DOT2@[3279; 3281) ".." 1931 [email protected] ".."
1932 WHITESPACE@[3281; 3282) " " 1932 [email protected] " "
1933 RANGE_EXPR@[3282; 3512) 1933 [email protected]
1934 DOT2@[3282; 3284) ".." 1934 [email protected] ".."
1935 WHITESPACE@[3284; 3288) " " 1935 [email protected] " "
1936 RANGE_EXPR@[3288; 3512) 1936 [email protected]
1937 DOT2EQ@[3288; 3291) "..=" 1937 [email protected] "..="
1938 RANGE_EXPR@[3291; 3512) 1938 [email protected]
1939 DOT2@[3291; 3293) ".." 1939 [email protected] ".."
1940 WHITESPACE@[3293; 3294) " " 1940 [email protected] " "
1941 RANGE_EXPR@[3294; 3512) 1941 [email protected]
1942 DOT2EQ@[3294; 3297) "..=" 1942 [email protected] "..="
1943 RANGE_EXPR@[3297; 3512) 1943 [email protected]
1944 DOT2@[3297; 3299) ".." 1944 [email protected] ".."
1945 WHITESPACE@[3299; 3303) " " 1945 [email protected] " "
1946 RANGE_EXPR@[3303; 3512) 1946 [email protected]
1947 DOT2EQ@[3303; 3306) "..=" 1947 [email protected] "..="
1948 RANGE_EXPR@[3306; 3512) 1948 [email protected]
1949 DOT2@[3306; 3308) ".." 1949 [email protected] ".."
1950 WHITESPACE@[3308; 3309) " " 1950 [email protected] " "
1951 RANGE_EXPR@[3309; 3512) 1951 [email protected]
1952 DOT2@[3309; 3311) ".." 1952 [email protected] ".."
1953 WHITESPACE@[3311; 3312) " " 1953 [email protected] " "
1954 RANGE_EXPR@[3312; 3512) 1954 [email protected]
1955 DOT2@[3312; 3314) ".." 1955 [email protected] ".."
1956 WHITESPACE@[3314; 3318) " " 1956 [email protected] " "
1957 RANGE_EXPR@[3318; 3512) 1957 [email protected]
1958 DOT2@[3318; 3320) ".." 1958 [email protected] ".."
1959 WHITESPACE@[3320; 3321) " " 1959 [email protected] " "
1960 RANGE_EXPR@[3321; 3512) 1960 [email protected]
1961 DOT2EQ@[3321; 3324) "..=" 1961 [email protected] "..="
1962 RANGE_EXPR@[3324; 3512) 1962 [email protected]
1963 DOT2@[3324; 3326) ".." 1963 [email protected] ".."
1964 WHITESPACE@[3326; 3327) " " 1964 [email protected] " "
1965 RANGE_EXPR@[3327; 3512) 1965 [email protected]
1966 DOT2@[3327; 3329) ".." 1966 [email protected] ".."
1967 WHITESPACE@[3329; 3334) "\n " 1967 [email protected] "\n "
1968 RANGE_EXPR@[3334; 3512) 1968 [email protected]
1969 DOT2EQ@[3334; 3337) "..=" 1969 [email protected] "..="
1970 RANGE_EXPR@[3337; 3512) 1970 [email protected]
1971 DOT2@[3337; 3339) ".." 1971 [email protected] ".."
1972 WHITESPACE@[3339; 3340) " " 1972 [email protected] " "
1973 RANGE_EXPR@[3340; 3512) 1973 [email protected]
1974 DOT2EQ@[3340; 3343) "..=" 1974 [email protected] "..="
1975 RANGE_EXPR@[3343; 3512) 1975 [email protected]
1976 DOT2@[3343; 3345) ".." 1976 [email protected] ".."
1977 WHITESPACE@[3345; 3349) " " 1977 [email protected] " "
1978 RANGE_EXPR@[3349; 3512) 1978 [email protected]
1979 DOT2EQ@[3349; 3352) "..=" 1979 [email protected] "..="
1980 RANGE_EXPR@[3352; 3512) 1980 [email protected]
1981 DOT2@[3352; 3354) ".." 1981 [email protected] ".."
1982 WHITESPACE@[3354; 3355) " " 1982 [email protected] " "
1983 RANGE_EXPR@[3355; 3512) 1983 [email protected]
1984 DOT2EQ@[3355; 3358) "..=" 1984 [email protected] "..="
1985 RANGE_EXPR@[3358; 3512) 1985 [email protected]
1986 DOT2@[3358; 3360) ".." 1986 [email protected] ".."
1987 WHITESPACE@[3360; 3364) " " 1987 [email protected] " "
1988 RANGE_EXPR@[3364; 3512) 1988 [email protected]
1989 DOT2@[3364; 3366) ".." 1989 [email protected] ".."
1990 WHITESPACE@[3366; 3367) " " 1990 [email protected] " "
1991 RANGE_EXPR@[3367; 3512) 1991 [email protected]
1992 DOT2EQ@[3367; 3370) "..=" 1992 [email protected] "..="
1993 RANGE_EXPR@[3370; 3512) 1993 [email protected]
1994 DOT2@[3370; 3372) ".." 1994 [email protected] ".."
1995 WHITESPACE@[3372; 3373) " " 1995 [email protected] " "
1996 RANGE_EXPR@[3373; 3512) 1996 [email protected]
1997 DOT2@[3373; 3375) ".." 1997 [email protected] ".."
1998 WHITESPACE@[3375; 3379) " " 1998 [email protected] " "
1999 RANGE_EXPR@[3379; 3512) 1999 [email protected]
2000 DOT2@[3379; 3381) ".." 2000 [email protected] ".."
2001 WHITESPACE@[3381; 3382) " " 2001 [email protected] " "
2002 RANGE_EXPR@[3382; 3512) 2002 [email protected]
2003 DOT2EQ@[3382; 3385) "..=" 2003 [email protected] "..="
2004 RANGE_EXPR@[3385; 3512) 2004 [email protected]
2005 DOT2@[3385; 3387) ".." 2005 [email protected] ".."
2006 WHITESPACE@[3387; 3388) " " 2006 [email protected] " "
2007 RANGE_EXPR@[3388; 3512) 2007 [email protected]
2008 DOT2@[3388; 3390) ".." 2008 [email protected] ".."
2009 WHITESPACE@[3390; 3395) "\n " 2009 [email protected] "\n "
2010 RANGE_EXPR@[3395; 3512) 2010 [email protected]
2011 DOT2EQ@[3395; 3398) "..=" 2011 [email protected] "..="
2012 RANGE_EXPR@[3398; 3512) 2012 [email protected]
2013 DOT2@[3398; 3400) ".." 2013 [email protected] ".."
2014 WHITESPACE@[3400; 3401) " " 2014 [email protected] " "
2015 RANGE_EXPR@[3401; 3512) 2015 [email protected]
2016 DOT2EQ@[3401; 3404) "..=" 2016 [email protected] "..="
2017 RANGE_EXPR@[3404; 3512) 2017 [email protected]
2018 DOT2@[3404; 3406) ".." 2018 [email protected] ".."
2019 WHITESPACE@[3406; 3410) " " 2019 [email protected] " "
2020 RANGE_EXPR@[3410; 3512) 2020 [email protected]
2021 DOT2EQ@[3410; 3413) "..=" 2021 [email protected] "..="
2022 RANGE_EXPR@[3413; 3512) 2022 [email protected]
2023 DOT2@[3413; 3415) ".." 2023 [email protected] ".."
2024 WHITESPACE@[3415; 3416) " " 2024 [email protected] " "
2025 RANGE_EXPR@[3416; 3512) 2025 [email protected]
2026 DOT2EQ@[3416; 3419) "..=" 2026 [email protected] "..="
2027 RANGE_EXPR@[3419; 3512) 2027 [email protected]
2028 DOT2@[3419; 3421) ".." 2028 [email protected] ".."
2029 WHITESPACE@[3421; 3425) " " 2029 [email protected] " "
2030 RANGE_EXPR@[3425; 3512) 2030 [email protected]
2031 DOT2@[3425; 3427) ".." 2031 [email protected] ".."
2032 WHITESPACE@[3427; 3428) " " 2032 [email protected] " "
2033 RANGE_EXPR@[3428; 3512) 2033 [email protected]
2034 DOT2@[3428; 3430) ".." 2034 [email protected] ".."
2035 WHITESPACE@[3430; 3431) " " 2035 [email protected] " "
2036 RANGE_EXPR@[3431; 3512) 2036 [email protected]
2037 DOT2EQ@[3431; 3434) "..=" 2037 [email protected] "..="
2038 RANGE_EXPR@[3434; 3512) 2038 [email protected]
2039 DOT2@[3434; 3436) ".." 2039 [email protected] ".."
2040 WHITESPACE@[3436; 3440) " " 2040 [email protected] " "
2041 RANGE_EXPR@[3440; 3512) 2041 [email protected]
2042 DOT2@[3440; 3442) ".." 2042 [email protected] ".."
2043 WHITESPACE@[3442; 3443) " " 2043 [email protected] " "
2044 RANGE_EXPR@[3443; 3512) 2044 [email protected]
2045 DOT2EQ@[3443; 3446) "..=" 2045 [email protected] "..="
2046 RANGE_EXPR@[3446; 3512) 2046 [email protected]
2047 DOT2@[3446; 3448) ".." 2047 [email protected] ".."
2048 WHITESPACE@[3448; 3449) " " 2048 [email protected] " "
2049 RANGE_EXPR@[3449; 3512) 2049 [email protected]
2050 DOT2@[3449; 3451) ".." 2050 [email protected] ".."
2051 WHITESPACE@[3451; 3456) "\n " 2051 [email protected] "\n "
2052 RANGE_EXPR@[3456; 3512) 2052 [email protected]
2053 DOT2EQ@[3456; 3459) "..=" 2053 [email protected] "..="
2054 RANGE_EXPR@[3459; 3512) 2054 [email protected]
2055 DOT2@[3459; 3461) ".." 2055 [email protected] ".."
2056 WHITESPACE@[3461; 3462) " " 2056 [email protected] " "
2057 RANGE_EXPR@[3462; 3512) 2057 [email protected]
2058 DOT2EQ@[3462; 3465) "..=" 2058 [email protected] "..="
2059 RANGE_EXPR@[3465; 3512) 2059 [email protected]
2060 DOT2@[3465; 3467) ".." 2060 [email protected] ".."
2061 WHITESPACE@[3467; 3471) " " 2061 [email protected] " "
2062 RANGE_EXPR@[3471; 3512) 2062 [email protected]
2063 DOT2@[3471; 3473) ".." 2063 [email protected] ".."
2064 WHITESPACE@[3473; 3474) " " 2064 [email protected] " "
2065 RANGE_EXPR@[3474; 3512) 2065 [email protected]
2066 DOT2EQ@[3474; 3477) "..=" 2066 [email protected] "..="
2067 RANGE_EXPR@[3477; 3512) 2067 [email protected]
2068 DOT2EQ@[3477; 3480) "..=" 2068 [email protected] "..="
2069 RANGE_EXPR@[3480; 3512) 2069 [email protected]
2070 DOT2@[3480; 3482) ".." 2070 [email protected] ".."
2071 WHITESPACE@[3482; 3486) " " 2071 [email protected] " "
2072 RANGE_EXPR@[3486; 3512) 2072 [email protected]
2073 DOT2EQ@[3486; 3489) "..=" 2073 [email protected] "..="
2074 RANGE_EXPR@[3489; 3512) 2074 [email protected]
2075 DOT2EQ@[3489; 3492) "..=" 2075 [email protected] "..="
2076 RANGE_EXPR@[3492; 3512) 2076 [email protected]
2077 DOT2@[3492; 3494) ".." 2077 [email protected] ".."
2078 WHITESPACE@[3494; 3495) " " 2078 [email protected] " "
2079 RANGE_EXPR@[3495; 3512) 2079 [email protected]
2080 DOT2@[3495; 3497) ".." 2080 [email protected] ".."
2081 WHITESPACE@[3497; 3501) " " 2081 [email protected] " "
2082 RANGE_EXPR@[3501; 3512) 2082 [email protected]
2083 DOT2@[3501; 3503) ".." 2083 [email protected] ".."
2084 WHITESPACE@[3503; 3504) " " 2084 [email protected] " "
2085 RANGE_EXPR@[3504; 3512) 2085 [email protected]
2086 DOT2EQ@[3504; 3507) "..=" 2086 [email protected] "..="
2087 RANGE_EXPR@[3507; 3512) 2087 [email protected]
2088 DOT2@[3507; 3509) ".." 2088 [email protected] ".."
2089 WHITESPACE@[3509; 3510) " " 2089 [email protected] " "
2090 RANGE_EXPR@[3510; 3512) 2090 [email protected]
2091 DOT2@[3510; 3512) ".." 2091 [email protected] ".."
2092 WHITESPACE@[3512; 3513) "\n" 2092 WHITESPACE@3512..3513 "\n"
2093 R_CURLY@[3513; 3514) "}" 2093 R_CURLY@3513..3514 "}"
2094 WHITESPACE@[3514; 3516) "\n\n" 2094 WHITESPACE@3514..3516 "\n\n"
2095 FN_DEF@[3516; 3552) 2095 FN_DEF@3516..3552
2096 FN_KW@[3516; 3518) "fn" 2096 FN_KW@3516..3518 "fn"
2097 WHITESPACE@[3518; 3519) " " 2097 WHITESPACE@3518..3519 " "
2098 NAME@[3519; 3525) 2098 NAME@3519..3525
2099 IDENT@[3519; 3525) "ktulhu" 2099 IDENT@3519..3525 "ktulhu"
2100 PARAM_LIST@[3525; 3527) 2100 PARAM_LIST@3525..3527
2101 L_PAREN@[3525; 3526) "(" 2101 L_PAREN@3525..3526 "("
2102 R_PAREN@[3526; 3527) ")" 2102 R_PAREN@3526..3527 ")"
2103 WHITESPACE@[3527; 3528) " " 2103 WHITESPACE@3527..3528 " "
2104 BLOCK_EXPR@[3528; 3552) 2104 BLOCK_EXPR@3528..3552
2105 BLOCK@[3528; 3552) 2105 BLOCK@3528..3552
2106 L_CURLY@[3528; 3529) "{" 2106 L_CURLY@3528..3529 "{"
2107 WHITESPACE@[3529; 3534) "\n " 2107 WHITESPACE@3529..3534 "\n "
2108 SEMICOLON@[3534; 3535) ";" 2108 SEMICOLON@3534..3535 ";"
2109 SEMICOLON@[3535; 3536) ";" 2109 SEMICOLON@3535..3536 ";"
2110 SEMICOLON@[3536; 3537) ";" 2110 SEMICOLON@3536..3537 ";"
2111 EXPR_STMT@[3537; 3540) 2111 EXPR_STMT@3537..3540
2112 TUPLE_EXPR@[3537; 3539) 2112 TUPLE_EXPR@3537..3539
2113 L_PAREN@[3537; 3538) "(" 2113 L_PAREN@3537..3538 "("
2114 R_PAREN@[3538; 3539) ")" 2114 R_PAREN@3538..3539 ")"
2115 SEMICOLON@[3539; 3540) ";" 2115 SEMICOLON@3539..3540 ";"
2116 SEMICOLON@[3540; 3541) ";" 2116 SEMICOLON@3540..3541 ";"
2117 SEMICOLON@[3541; 3542) ";" 2117 SEMICOLON@3541..3542 ";"
2118 SEMICOLON@[3542; 3543) ";" 2118 SEMICOLON@3542..3543 ";"
2119 SEMICOLON@[3543; 3544) ";" 2119 SEMICOLON@3543..3544 ";"
2120 SEMICOLON@[3544; 3545) ";" 2120 SEMICOLON@3544..3545 ";"
2121 SEMICOLON@[3545; 3546) ";" 2121 SEMICOLON@3545..3546 ";"
2122 SEMICOLON@[3546; 3547) ";" 2122 SEMICOLON@3546..3547 ";"
2123 SEMICOLON@[3547; 3548) ";" 2123 SEMICOLON@3547..3548 ";"
2124 TUPLE_EXPR@[3548; 3550) 2124 TUPLE_EXPR@3548..3550
2125 L_PAREN@[3548; 3549) "(" 2125 L_PAREN@3548..3549 "("
2126 R_PAREN@[3549; 3550) ")" 2126 R_PAREN@3549..3550 ")"
2127 WHITESPACE@[3550; 3551) "\n" 2127 WHITESPACE@3550..3551 "\n"
2128 R_CURLY@[3551; 3552) "}" 2128 R_CURLY@3551..3552 "}"
2129 WHITESPACE@[3552; 3554) "\n\n" 2129 WHITESPACE@3552..3554 "\n\n"
2130 FN_DEF@[3554; 3812) 2130 FN_DEF@3554..3812
2131 VISIBILITY@[3554; 3557) 2131 VISIBILITY@3554..3557
2132 PUB_KW@[3554; 3557) "pub" 2132 PUB_KW@3554..3557 "pub"
2133 WHITESPACE@[3557; 3558) " " 2133 WHITESPACE@3557..3558 " "
2134 FN_KW@[3558; 3560) "fn" 2134 FN_KW@3558..3560 "fn"
2135 WHITESPACE@[3560; 3561) " " 2135 WHITESPACE@3560..3561 " "
2136 NAME@[3561; 3565) 2136 NAME@3561..3565
2137 IDENT@[3561; 3565) "main" 2137 IDENT@3561..3565 "main"
2138 PARAM_LIST@[3565; 3567) 2138 PARAM_LIST@3565..3567
2139 L_PAREN@[3565; 3566) "(" 2139 L_PAREN@3565..3566 "("
2140 R_PAREN@[3566; 3567) ")" 2140 R_PAREN@3566..3567 ")"
2141 WHITESPACE@[3567; 3568) " " 2141 WHITESPACE@3567..3568 " "
2142 BLOCK_EXPR@[3568; 3812) 2142 BLOCK_EXPR@3568..3812
2143 BLOCK@[3568; 3812) 2143 BLOCK@3568..3812
2144 L_CURLY@[3568; 3569) "{" 2144 L_CURLY@3568..3569 "{"
2145 WHITESPACE@[3569; 3574) "\n " 2145 WHITESPACE@3569..3574 "\n "
2146 EXPR_STMT@[3574; 3584) 2146 EXPR_STMT@3574..3584
2147 CALL_EXPR@[3574; 3583) 2147 CALL_EXPR@3574..3583
2148 PATH_EXPR@[3574; 3581) 2148 PATH_EXPR@3574..3581
2149 PATH@[3574; 3581) 2149 PATH@3574..3581
2150 PATH_SEGMENT@[3574; 3581) 2150 PATH_SEGMENT@3574..3581
2151 NAME_REF@[3574; 3581) 2151 NAME_REF@3574..3581
2152 IDENT@[3574; 3581) "strange" 2152 IDENT@3574..3581 "strange"
2153 ARG_LIST@[3581; 3583) 2153 ARG_LIST@3581..3583
2154 L_PAREN@[3581; 3582) "(" 2154 L_PAREN@3581..3582 "("
2155 R_PAREN@[3582; 3583) ")" 2155 R_PAREN@3582..3583 ")"
2156 SEMICOLON@[3583; 3584) ";" 2156 SEMICOLON@3583..3584 ";"
2157 WHITESPACE@[3584; 3589) "\n " 2157 WHITESPACE@3584..3589 "\n "
2158 EXPR_STMT@[3589; 3597) 2158 EXPR_STMT@3589..3597
2159 CALL_EXPR@[3589; 3596) 2159 CALL_EXPR@3589..3596
2160 PATH_EXPR@[3589; 3594) 2160 PATH_EXPR@3589..3594
2161 PATH@[3589; 3594) 2161 PATH@3589..3594
2162 PATH_SEGMENT@[3589; 3594) 2162 PATH_SEGMENT@3589..3594
2163 NAME_REF@[3589; 3594) 2163 NAME_REF@3589..3594
2164 IDENT@[3589; 3594) "funny" 2164 IDENT@3589..3594 "funny"
2165 ARG_LIST@[3594; 3596) 2165 ARG_LIST@3594..3596
2166 L_PAREN@[3594; 3595) "(" 2166 L_PAREN@3594..3595 "("
2167 R_PAREN@[3595; 3596) ")" 2167 R_PAREN@3595..3596 ")"
2168 SEMICOLON@[3596; 3597) ";" 2168 SEMICOLON@3596..3597 ";"
2169 WHITESPACE@[3597; 3602) "\n " 2169 WHITESPACE@3597..3602 "\n "
2170 EXPR_STMT@[3602; 3609) 2170 EXPR_STMT@3602..3609
2171 CALL_EXPR@[3602; 3608) 2171 CALL_EXPR@3602..3608
2172 PATH_EXPR@[3602; 3606) 2172 PATH_EXPR@3602..3606
2173 PATH@[3602; 3606) 2173 PATH@3602..3606
2174 PATH_SEGMENT@[3602; 3606) 2174 PATH_SEGMENT@3602..3606
2175 NAME_REF@[3602; 3606) 2175 NAME_REF@3602..3606
2176 IDENT@[3602; 3606) "what" 2176 IDENT@3602..3606 "what"
2177 ARG_LIST@[3606; 3608) 2177 ARG_LIST@3606..3608
2178 L_PAREN@[3606; 3607) "(" 2178 L_PAREN@3606..3607 "("
2179 R_PAREN@[3607; 3608) ")" 2179 R_PAREN@3607..3608 ")"
2180 SEMICOLON@[3608; 3609) ";" 2180 SEMICOLON@3608..3609 ";"
2181 WHITESPACE@[3609; 3614) "\n " 2181 WHITESPACE@3609..3614 "\n "
2182 EXPR_STMT@[3614; 3628) 2182 EXPR_STMT@3614..3628
2183 CALL_EXPR@[3614; 3627) 2183 CALL_EXPR@3614..3627
2184 PATH_EXPR@[3614; 3625) 2184 PATH_EXPR@3614..3625
2185 PATH@[3614; 3625) 2185 PATH@3614..3625
2186 PATH_SEGMENT@[3614; 3625) 2186 PATH_SEGMENT@3614..3625
2187 NAME_REF@[3614; 3625) 2187 NAME_REF@3614..3625
2188 IDENT@[3614; 3625) "zombiejesus" 2188 IDENT@3614..3625 "zombiejesus"
2189 ARG_LIST@[3625; 3627) 2189 ARG_LIST@3625..3627
2190 L_PAREN@[3625; 3626) "(" 2190 L_PAREN@3625..3626 "("
2191 R_PAREN@[3626; 3627) ")" 2191 R_PAREN@3626..3627 ")"
2192 SEMICOLON@[3627; 3628) ";" 2192 SEMICOLON@3627..3628 ";"
2193 WHITESPACE@[3628; 3633) "\n " 2193 WHITESPACE@3628..3633 "\n "
2194 EXPR_STMT@[3633; 3643) 2194 EXPR_STMT@3633..3643
2195 CALL_EXPR@[3633; 3642) 2195 CALL_EXPR@3633..3642
2196 PATH_EXPR@[3633; 3640) 2196 PATH_EXPR@3633..3640
2197 PATH@[3633; 3640) 2197 PATH@3633..3640
2198 PATH_SEGMENT@[3633; 3640) 2198 PATH_SEGMENT@3633..3640
2199 NAME_REF@[3633; 3640) 2199 NAME_REF@3633..3640
2200 IDENT@[3633; 3640) "notsure" 2200 IDENT@3633..3640 "notsure"
2201 ARG_LIST@[3640; 3642) 2201 ARG_LIST@3640..3642
2202 L_PAREN@[3640; 3641) "(" 2202 L_PAREN@3640..3641 "("
2203 R_PAREN@[3641; 3642) ")" 2203 R_PAREN@3641..3642 ")"
2204 SEMICOLON@[3642; 3643) ";" 2204 SEMICOLON@3642..3643 ";"
2205 WHITESPACE@[3643; 3648) "\n " 2205 WHITESPACE@3643..3648 "\n "
2206 EXPR_STMT@[3648; 3664) 2206 EXPR_STMT@3648..3664
2207 CALL_EXPR@[3648; 3663) 2207 CALL_EXPR@3648..3663
2208 PATH_EXPR@[3648; 3661) 2208 PATH_EXPR@3648..3661
2209 PATH@[3648; 3661) 2209 PATH@3648..3661
2210 PATH_SEGMENT@[3648; 3661) 2210 PATH_SEGMENT@3648..3661
2211 NAME_REF@[3648; 3661) 2211 NAME_REF@3648..3661
2212 IDENT@[3648; 3661) "canttouchthis" 2212 IDENT@3648..3661 "canttouchthis"
2213 ARG_LIST@[3661; 3663) 2213 ARG_LIST@3661..3663
2214 L_PAREN@[3661; 3662) "(" 2214 L_PAREN@3661..3662 "("
2215 R_PAREN@[3662; 3663) ")" 2215 R_PAREN@3662..3663 ")"
2216 SEMICOLON@[3663; 3664) ";" 2216 SEMICOLON@3663..3664 ";"
2217 WHITESPACE@[3664; 3669) "\n " 2217 WHITESPACE@3664..3669 "\n "
2218 EXPR_STMT@[3669; 3681) 2218 EXPR_STMT@3669..3681
2219 CALL_EXPR@[3669; 3680) 2219 CALL_EXPR@3669..3680
2220 PATH_EXPR@[3669; 3678) 2220 PATH_EXPR@3669..3678
2221 PATH@[3669; 3678) 2221 PATH@3669..3678
2222 PATH_SEGMENT@[3669; 3678) 2222 PATH_SEGMENT@3669..3678
2223 NAME_REF@[3669; 3678) 2223 NAME_REF@3669..3678
2224 IDENT@[3669; 3678) "angrydome" 2224 IDENT@3669..3678 "angrydome"
2225 ARG_LIST@[3678; 3680) 2225 ARG_LIST@3678..3680
2226 L_PAREN@[3678; 3679) "(" 2226 L_PAREN@3678..3679 "("
2227 R_PAREN@[3679; 3680) ")" 2227 R_PAREN@3679..3680 ")"
2228 SEMICOLON@[3680; 3681) ";" 2228 SEMICOLON@3680..3681 ";"
2229 WHITESPACE@[3681; 3686) "\n " 2229 WHITESPACE@3681..3686 "\n "
2230 EXPR_STMT@[3686; 3701) 2230 EXPR_STMT@3686..3701
2231 CALL_EXPR@[3686; 3700) 2231 CALL_EXPR@3686..3700
2232 PATH_EXPR@[3686; 3698) 2232 PATH_EXPR@3686..3698
2233 PATH@[3686; 3698) 2233 PATH@3686..3698
2234 PATH_SEGMENT@[3686; 3698) 2234 PATH_SEGMENT@3686..3698
2235 NAME_REF@[3686; 3698) 2235 NAME_REF@3686..3698
2236 IDENT@[3686; 3698) "evil_lincoln" 2236 IDENT@3686..3698 "evil_lincoln"
2237 ARG_LIST@[3698; 3700) 2237 ARG_LIST@3698..3700
2238 L_PAREN@[3698; 3699) "(" 2238 L_PAREN@3698..3699 "("
2239 R_PAREN@[3699; 3700) ")" 2239 R_PAREN@3699..3700 ")"
2240 SEMICOLON@[3700; 3701) ";" 2240 SEMICOLON@3700..3701 ";"
2241 WHITESPACE@[3701; 3706) "\n " 2241 WHITESPACE@3701..3706 "\n "
2242 EXPR_STMT@[3706; 3713) 2242 EXPR_STMT@3706..3713
2243 CALL_EXPR@[3706; 3712) 2243 CALL_EXPR@3706..3712
2244 PATH_EXPR@[3706; 3710) 2244 PATH_EXPR@3706..3710
2245 PATH@[3706; 3710) 2245 PATH@3706..3710
2246 PATH_SEGMENT@[3706; 3710) 2246 PATH_SEGMENT@3706..3710
2247 NAME_REF@[3706; 3710) 2247 NAME_REF@3706..3710
2248 IDENT@[3706; 3710) "dots" 2248 IDENT@3706..3710 "dots"
2249 ARG_LIST@[3710; 3712) 2249 ARG_LIST@3710..3712
2250 L_PAREN@[3710; 3711) "(" 2250 L_PAREN@3710..3711 "("
2251 R_PAREN@[3711; 3712) ")" 2251 R_PAREN@3711..3712 ")"
2252 SEMICOLON@[3712; 3713) ";" 2252 SEMICOLON@3712..3713 ";"
2253 WHITESPACE@[3713; 3718) "\n " 2253 WHITESPACE@3713..3718 "\n "
2254 EXPR_STMT@[3718; 3726) 2254 EXPR_STMT@3718..3726
2255 CALL_EXPR@[3718; 3725) 2255 CALL_EXPR@3718..3725
2256 PATH_EXPR@[3718; 3720) 2256 PATH_EXPR@3718..3720
2257 PATH@[3718; 3720) 2257 PATH@3718..3720
2258 PATH_SEGMENT@[3718; 3720) 2258 PATH_SEGMENT@3718..3720
2259 NAME_REF@[3718; 3720) 2259 NAME_REF@3718..3720
2260 IDENT@[3718; 3720) "u8" 2260 IDENT@3718..3720 "u8"
2261 ARG_LIST@[3720; 3725) 2261 ARG_LIST@3720..3725
2262 L_PAREN@[3720; 3721) "(" 2262 L_PAREN@3720..3721 "("
2263 LITERAL@[3721; 3724) 2263 LITERAL@3721..3724
2264 INT_NUMBER@[3721; 3724) "8u8" 2264 INT_NUMBER@3721..3724 "8u8"
2265 R_PAREN@[3724; 3725) ")" 2265 R_PAREN@3724..3725 ")"
2266 SEMICOLON@[3725; 3726) ";" 2266 SEMICOLON@3725..3726 ";"
2267 WHITESPACE@[3726; 3731) "\n " 2267 WHITESPACE@3726..3731 "\n "
2268 EXPR_STMT@[3731; 3739) 2268 EXPR_STMT@3731..3739
2269 CALL_EXPR@[3731; 3738) 2269 CALL_EXPR@3731..3738
2270 PATH_EXPR@[3731; 3736) 2270 PATH_EXPR@3731..3736
2271 PATH@[3731; 3736) 2271 PATH@3731..3736
2272 PATH_SEGMENT@[3731; 3736) 2272 PATH_SEGMENT@3731..3736
2273 NAME_REF@[3731; 3736) 2273 NAME_REF@3731..3736
2274 IDENT@[3731; 3736) "fishy" 2274 IDENT@3731..3736 "fishy"
2275 ARG_LIST@[3736; 3738) 2275 ARG_LIST@3736..3738
2276 L_PAREN@[3736; 3737) "(" 2276 L_PAREN@3736..3737 "("
2277 R_PAREN@[3737; 3738) ")" 2277 R_PAREN@3737..3738 ")"
2278 SEMICOLON@[3738; 3739) ";" 2278 SEMICOLON@3738..3739 ";"
2279 WHITESPACE@[3739; 3744) "\n " 2279 WHITESPACE@3739..3744 "\n "
2280 EXPR_STMT@[3744; 3752) 2280 EXPR_STMT@3744..3752
2281 CALL_EXPR@[3744; 3751) 2281 CALL_EXPR@3744..3751
2282 PATH_EXPR@[3744; 3749) 2282 PATH_EXPR@3744..3749
2283 PATH@[3744; 3749) 2283 PATH@3744..3749
2284 PATH_SEGMENT@[3744; 3749) 2284 PATH_SEGMENT@3744..3749
2285 NAME_REF@[3744; 3749) 2285 NAME_REF@3744..3749
2286 IDENT@[3744; 3749) "union" 2286 IDENT@3744..3749 "union"
2287 ARG_LIST@[3749; 3751) 2287 ARG_LIST@3749..3751
2288 L_PAREN@[3749; 3750) "(" 2288 L_PAREN@3749..3750 "("
2289 R_PAREN@[3750; 3751) ")" 2289 R_PAREN@3750..3751 ")"
2290 SEMICOLON@[3751; 3752) ";" 2290 SEMICOLON@3751..3752 ";"
2291 WHITESPACE@[3752; 3757) "\n " 2291 WHITESPACE@3752..3757 "\n "
2292 EXPR_STMT@[3757; 3778) 2292 EXPR_STMT@3757..3778
2293 CALL_EXPR@[3757; 3777) 2293 CALL_EXPR@3757..3777
2294 PATH_EXPR@[3757; 3775) 2294 PATH_EXPR@3757..3775
2295 PATH@[3757; 3775) 2295 PATH@3757..3775
2296 PATH_SEGMENT@[3757; 3775) 2296 PATH_SEGMENT@3757..3775
2297 NAME_REF@[3757; 3775) 2297 NAME_REF@3757..3775
2298 IDENT@[3757; 3775) "special_characters" 2298 IDENT@3757..3775 "special_characters"
2299 ARG_LIST@[3775; 3777) 2299 ARG_LIST@3775..3777
2300 L_PAREN@[3775; 3776) "(" 2300 L_PAREN@3775..3776 "("
2301 R_PAREN@[3776; 3777) ")" 2301 R_PAREN@3776..3777 ")"
2302 SEMICOLON@[3777; 3778) ";" 2302 SEMICOLON@3777..3778 ";"
2303 WHITESPACE@[3778; 3783) "\n " 2303 WHITESPACE@3778..3783 "\n "
2304 EXPR_STMT@[3783; 3796) 2304 EXPR_STMT@3783..3796
2305 CALL_EXPR@[3783; 3795) 2305 CALL_EXPR@3783..3795
2306 PATH_EXPR@[3783; 3793) 2306 PATH_EXPR@3783..3793
2307 PATH@[3783; 3793) 2307 PATH@3783..3793
2308 PATH_SEGMENT@[3783; 3793) 2308 PATH_SEGMENT@3783..3793
2309 NAME_REF@[3783; 3793) 2309 NAME_REF@3783..3793
2310 IDENT@[3783; 3793) "punch_card" 2310 IDENT@3783..3793 "punch_card"
2311 ARG_LIST@[3793; 3795) 2311 ARG_LIST@3793..3795
2312 L_PAREN@[3793; 3794) "(" 2312 L_PAREN@3793..3794 "("
2313 R_PAREN@[3794; 3795) ")" 2313 R_PAREN@3794..3795 ")"
2314 SEMICOLON@[3795; 3796) ";" 2314 SEMICOLON@3795..3796 ";"
2315 WHITESPACE@[3796; 3801) "\n " 2315 WHITESPACE@3796..3801 "\n "
2316 EXPR_STMT@[3801; 3810) 2316 EXPR_STMT@3801..3810
2317 CALL_EXPR@[3801; 3809) 2317 CALL_EXPR@3801..3809
2318 PATH_EXPR@[3801; 3807) 2318 PATH_EXPR@3801..3807
2319 PATH@[3801; 3807) 2319 PATH@3801..3807
2320 PATH_SEGMENT@[3801; 3807) 2320 PATH_SEGMENT@3801..3807
2321 NAME_REF@[3801; 3807) 2321 NAME_REF@3801..3807
2322 IDENT@[3801; 3807) "ktulhu" 2322 IDENT@3801..3807 "ktulhu"
2323 ARG_LIST@[3807; 3809) 2323 ARG_LIST@3807..3809
2324 L_PAREN@[3807; 3808) "(" 2324 L_PAREN@3807..3808 "("
2325 R_PAREN@[3808; 3809) ")" 2325 R_PAREN@3808..3809 ")"
2326 SEMICOLON@[3809; 3810) ";" 2326 SEMICOLON@3809..3810 ";"
2327 WHITESPACE@[3810; 3811) "\n" 2327 WHITESPACE@3810..3811 "\n"
2328 R_CURLY@[3811; 3812) "}" 2328 R_CURLY@3811..3812 "}"
2329 WHITESPACE@[3812; 3813) "\n" 2329 WHITESPACE@3812..3813 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0036_fully_qualified.rast b/crates/ra_syntax/test_data/parser/ok/0036_fully_qualified.rast
index 4df6703f4..8f616623b 100644
--- a/crates/ra_syntax/test_data/parser/ok/0036_fully_qualified.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0036_fully_qualified.rast
@@ -1,93 +1,93 @@
1SOURCE_FILE@[0; 157) 1SOURCE_FILE@0..157
2 COMMENT@[0; 60) "// https://github.com ..." 2 COMMENT@0..60 "// https://github.com ..."
3 WHITESPACE@[60; 62) "\n\n" 3 WHITESPACE@60..62 "\n\n"
4 FN_DEF@[62; 156) 4 FN_DEF@62..156
5 VISIBILITY@[62; 65) 5 VISIBILITY@62..65
6 PUB_KW@[62; 65) "pub" 6 PUB_KW@62..65 "pub"
7 WHITESPACE@[65; 66) " " 7 WHITESPACE@65..66 " "
8 FN_KW@[66; 68) "fn" 8 FN_KW@66..68 "fn"
9 WHITESPACE@[68; 69) " " 9 WHITESPACE@68..69 " "
10 NAME@[69; 72) 10 NAME@69..72
11 IDENT@[69; 72) "foo" 11 IDENT@69..72 "foo"
12 TYPE_PARAM_LIST@[72; 85) 12 TYPE_PARAM_LIST@72..85
13 L_ANGLE@[72; 73) "<" 13 L_ANGLE@72..73 "<"
14 TYPE_PARAM@[73; 84) 14 TYPE_PARAM@73..84
15 NAME@[73; 74) 15 NAME@73..74
16 IDENT@[73; 74) "S" 16 IDENT@73..74 "S"
17 COLON@[74; 75) ":" 17 COLON@74..75 ":"
18 WHITESPACE@[75; 76) " " 18 WHITESPACE@75..76 " "
19 TYPE_BOUND_LIST@[76; 84) 19 TYPE_BOUND_LIST@76..84
20 TYPE_BOUND@[76; 84) 20 TYPE_BOUND@76..84
21 PATH_TYPE@[76; 84) 21 PATH_TYPE@76..84
22 PATH@[76; 84) 22 PATH@76..84
23 PATH_SEGMENT@[76; 84) 23 PATH_SEGMENT@76..84
24 NAME_REF@[76; 84) 24 NAME_REF@76..84
25 IDENT@[76; 84) "Iterator" 25 IDENT@76..84 "Iterator"
26 R_ANGLE@[84; 85) ">" 26 R_ANGLE@84..85 ">"
27 PARAM_LIST@[85; 87) 27 PARAM_LIST@85..87
28 L_PAREN@[85; 86) "(" 28 L_PAREN@85..86 "("
29 R_PAREN@[86; 87) ")" 29 R_PAREN@86..87 ")"
30 WHITESPACE@[87; 88) " " 30 WHITESPACE@87..88 " "
31 RET_TYPE@[88; 97) 31 RET_TYPE@88..97
32 THIN_ARROW@[88; 90) "->" 32 THIN_ARROW@88..90 "->"
33 WHITESPACE@[90; 91) " " 33 WHITESPACE@90..91 " "
34 PATH_TYPE@[91; 97) 34 PATH_TYPE@91..97
35 PATH@[91; 97) 35 PATH@91..97
36 PATH_SEGMENT@[91; 97) 36 PATH_SEGMENT@91..97
37 NAME_REF@[91; 97) 37 NAME_REF@91..97
38 IDENT@[91; 97) "String" 38 IDENT@91..97 "String"
39 WHITESPACE@[97; 98) "\n" 39 WHITESPACE@97..98 "\n"
40 WHERE_CLAUSE@[98; 134) 40 WHERE_CLAUSE@98..134
41 WHERE_KW@[98; 103) "where" 41 WHERE_KW@98..103 "where"
42 WHITESPACE@[103; 108) "\n " 42 WHITESPACE@103..108 "\n "
43 WHERE_PRED@[108; 133) 43 WHERE_PRED@108..133
44 PATH_TYPE@[108; 129) 44 PATH_TYPE@108..129
45 PATH@[108; 129) 45 PATH@108..129
46 PATH@[108; 123) 46 PATH@108..123
47 PATH_SEGMENT@[108; 123) 47 PATH_SEGMENT@108..123
48 L_ANGLE@[108; 109) "<" 48 L_ANGLE@108..109 "<"
49 PATH_TYPE@[109; 110) 49 PATH_TYPE@109..110
50 PATH@[109; 110) 50 PATH@109..110
51 PATH_SEGMENT@[109; 110) 51 PATH_SEGMENT@109..110
52 NAME_REF@[109; 110) 52 NAME_REF@109..110
53 IDENT@[109; 110) "S" 53 IDENT@109..110 "S"
54 WHITESPACE@[110; 111) " " 54 WHITESPACE@110..111 " "
55 AS_KW@[111; 113) "as" 55 AS_KW@111..113 "as"
56 WHITESPACE@[113; 114) " " 56 WHITESPACE@113..114 " "
57 PATH_TYPE@[114; 122) 57 PATH_TYPE@114..122
58 PATH@[114; 122) 58 PATH@114..122
59 PATH_SEGMENT@[114; 122) 59 PATH_SEGMENT@114..122
60 NAME_REF@[114; 122) 60 NAME_REF@114..122
61 IDENT@[114; 122) "Iterator" 61 IDENT@114..122 "Iterator"
62 R_ANGLE@[122; 123) ">" 62 R_ANGLE@122..123 ">"
63 COLON2@[123; 125) "::" 63 COLON2@123..125 "::"
64 PATH_SEGMENT@[125; 129) 64 PATH_SEGMENT@125..129
65 NAME_REF@[125; 129) 65 NAME_REF@125..129
66 IDENT@[125; 129) "Item" 66 IDENT@125..129 "Item"
67 COLON@[129; 130) ":" 67 COLON@129..130 ":"
68 WHITESPACE@[130; 131) " " 68 WHITESPACE@130..131 " "
69 TYPE_BOUND_LIST@[131; 133) 69 TYPE_BOUND_LIST@131..133
70 TYPE_BOUND@[131; 133) 70 TYPE_BOUND@131..133
71 PATH_TYPE@[131; 133) 71 PATH_TYPE@131..133
72 PATH@[131; 133) 72 PATH@131..133
73 PATH_SEGMENT@[131; 133) 73 PATH_SEGMENT@131..133
74 NAME_REF@[131; 133) 74 NAME_REF@131..133
75 IDENT@[131; 133) "Eq" 75 IDENT@131..133 "Eq"
76 COMMA@[133; 134) "," 76 COMMA@133..134 ","
77 WHITESPACE@[134; 135) "\n" 77 WHITESPACE@134..135 "\n"
78 BLOCK_EXPR@[135; 156) 78 BLOCK_EXPR@135..156
79 BLOCK@[135; 156) 79 BLOCK@135..156
80 L_CURLY@[135; 136) "{" 80 L_CURLY@135..136 "{"
81 WHITESPACE@[136; 141) "\n " 81 WHITESPACE@136..141 "\n "
82 METHOD_CALL_EXPR@[141; 154) 82 METHOD_CALL_EXPR@141..154
83 LITERAL@[141; 143) 83 LITERAL@141..143
84 STRING@[141; 143) "\"\"" 84 STRING@141..143 "\"\""
85 DOT@[143; 144) "." 85 DOT@143..144 "."
86 NAME_REF@[144; 152) 86 NAME_REF@144..152
87 IDENT@[144; 152) "to_owned" 87 IDENT@144..152 "to_owned"
88 ARG_LIST@[152; 154) 88 ARG_LIST@152..154
89 L_PAREN@[152; 153) "(" 89 L_PAREN@152..153 "("
90 R_PAREN@[153; 154) ")" 90 R_PAREN@153..154 ")"
91 WHITESPACE@[154; 155) "\n" 91 WHITESPACE@154..155 "\n"
92 R_CURLY@[155; 156) "}" 92 R_CURLY@155..156 "}"
93 WHITESPACE@[156; 157) "\n" 93 WHITESPACE@156..157 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0037_mod.rast b/crates/ra_syntax/test_data/parser/ok/0037_mod.rast
index 3af40a104..1d5d94bde 100644
--- a/crates/ra_syntax/test_data/parser/ok/0037_mod.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0037_mod.rast
@@ -1,16 +1,16 @@
1SOURCE_FILE@[0; 93) 1SOURCE_FILE@0..93
2 COMMENT@[0; 60) "// https://github.com ..." 2 COMMENT@0..60 "// https://github.com ..."
3 WHITESPACE@[60; 62) "\n\n" 3 WHITESPACE@60..62 "\n\n"
4 MODULE@[62; 93) 4 MODULE@62..93
5 COMMENT@[62; 70) "//! docs" 5 COMMENT@62..70 "//! docs"
6 WHITESPACE@[70; 71) "\n" 6 WHITESPACE@70..71 "\n"
7 COMMENT@[71; 82) "// non-docs" 7 COMMENT@71..82 "// non-docs"
8 WHITESPACE@[82; 83) "\n" 8 WHITESPACE@82..83 "\n"
9 MOD_KW@[83; 86) "mod" 9 MOD_KW@83..86 "mod"
10 WHITESPACE@[86; 87) " " 10 WHITESPACE@86..87 " "
11 NAME@[87; 90) 11 NAME@87..90
12 IDENT@[87; 90) "foo" 12 IDENT@87..90 "foo"
13 WHITESPACE@[90; 91) " " 13 WHITESPACE@90..91 " "
14 ITEM_LIST@[91; 93) 14 ITEM_LIST@91..93
15 L_CURLY@[91; 92) "{" 15 L_CURLY@91..92 "{"
16 R_CURLY@[92; 93) "}" 16 R_CURLY@92..93 "}"
diff --git a/crates/ra_syntax/test_data/parser/ok/0038_where_pred_type.rast b/crates/ra_syntax/test_data/parser/ok/0038_where_pred_type.rast
index 377367914..14d82feb0 100644
--- a/crates/ra_syntax/test_data/parser/ok/0038_where_pred_type.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0038_where_pred_type.rast
@@ -1,43 +1,43 @@
1SOURCE_FILE@[0; 34) 1SOURCE_FILE@0..34
2 FN_DEF@[0; 34) 2 FN_DEF@0..34
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "test" 6 IDENT@3..7 "test"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 WHERE_CLAUSE@[10; 31) 11 WHERE_CLAUSE@10..31
12 WHERE_KW@[10; 15) "where" 12 WHERE_KW@10..15 "where"
13 WHITESPACE@[15; 16) " " 13 WHITESPACE@15..16 " "
14 WHERE_PRED@[16; 31) 14 WHERE_PRED@16..31
15 TUPLE_TYPE@[16; 26) 15 TUPLE_TYPE@16..26
16 L_PAREN@[16; 17) "(" 16 L_PAREN@16..17 "("
17 PATH_TYPE@[17; 20) 17 PATH_TYPE@17..20
18 PATH@[17; 20) 18 PATH@17..20
19 PATH_SEGMENT@[17; 20) 19 PATH_SEGMENT@17..20
20 NAME_REF@[17; 20) 20 NAME_REF@17..20
21 IDENT@[17; 20) "u64" 21 IDENT@17..20 "u64"
22 COMMA@[20; 21) "," 22 COMMA@20..21 ","
23 WHITESPACE@[21; 22) " " 23 WHITESPACE@21..22 " "
24 PATH_TYPE@[22; 25) 24 PATH_TYPE@22..25
25 PATH@[22; 25) 25 PATH@22..25
26 PATH_SEGMENT@[22; 25) 26 PATH_SEGMENT@22..25
27 NAME_REF@[22; 25) 27 NAME_REF@22..25
28 IDENT@[22; 25) "u64" 28 IDENT@22..25 "u64"
29 R_PAREN@[25; 26) ")" 29 R_PAREN@25..26 ")"
30 COLON@[26; 27) ":" 30 COLON@26..27 ":"
31 WHITESPACE@[27; 28) " " 31 WHITESPACE@27..28 " "
32 TYPE_BOUND_LIST@[28; 31) 32 TYPE_BOUND_LIST@28..31
33 TYPE_BOUND@[28; 31) 33 TYPE_BOUND@28..31
34 PATH_TYPE@[28; 31) 34 PATH_TYPE@28..31
35 PATH@[28; 31) 35 PATH@28..31
36 PATH_SEGMENT@[28; 31) 36 PATH_SEGMENT@28..31
37 NAME_REF@[28; 31) 37 NAME_REF@28..31
38 IDENT@[28; 31) "Foo" 38 IDENT@28..31 "Foo"
39 WHITESPACE@[31; 32) " " 39 WHITESPACE@31..32 " "
40 BLOCK_EXPR@[32; 34) 40 BLOCK_EXPR@32..34
41 BLOCK@[32; 34) 41 BLOCK@32..34
42 L_CURLY@[32; 33) "{" 42 L_CURLY@32..33 "{"
43 R_CURLY@[33; 34) "}" 43 R_CURLY@33..34 "}"
diff --git a/crates/ra_syntax/test_data/parser/ok/0039_raw_fn_item.rast b/crates/ra_syntax/test_data/parser/ok/0039_raw_fn_item.rast
index 9936892e9..d38a60665 100644
--- a/crates/ra_syntax/test_data/parser/ok/0039_raw_fn_item.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0039_raw_fn_item.rast
@@ -1,16 +1,16 @@
1SOURCE_FILE@[0; 15) 1SOURCE_FILE@0..15
2 FN_DEF@[0; 14) 2 FN_DEF@0..14
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 8) 5 NAME@3..8
6 IDENT@[3; 8) "r#foo" 6 IDENT@3..8 "r#foo"
7 PARAM_LIST@[8; 10) 7 PARAM_LIST@8..10
8 L_PAREN@[8; 9) "(" 8 L_PAREN@8..9 "("
9 R_PAREN@[9; 10) ")" 9 R_PAREN@9..10 ")"
10 WHITESPACE@[10; 11) " " 10 WHITESPACE@10..11 " "
11 BLOCK_EXPR@[11; 14) 11 BLOCK_EXPR@11..14
12 BLOCK@[11; 14) 12 BLOCK@11..14
13 L_CURLY@[11; 12) "{" 13 L_CURLY@11..12 "{"
14 WHITESPACE@[12; 13) "\n" 14 WHITESPACE@12..13 "\n"
15 R_CURLY@[13; 14) "}" 15 R_CURLY@13..14 "}"
16 WHITESPACE@[14; 15) "\n" 16 WHITESPACE@14..15 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0040_raw_struct_item_field.rast b/crates/ra_syntax/test_data/parser/ok/0040_raw_struct_item_field.rast
index 05f2c656f..5640bae0a 100644
--- a/crates/ra_syntax/test_data/parser/ok/0040_raw_struct_item_field.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0040_raw_struct_item_field.rast
@@ -1,22 +1,22 @@
1SOURCE_FILE@[0; 27) 1SOURCE_FILE@0..27
2 STRUCT_DEF@[0; 27) 2 STRUCT_DEF@0..27
3 STRUCT_KW@[0; 6) "struct" 3 STRUCT_KW@0..6 "struct"
4 WHITESPACE@[6; 7) " " 4 WHITESPACE@6..7 " "
5 NAME@[7; 8) 5 NAME@7..8
6 IDENT@[7; 8) "S" 6 IDENT@7..8 "S"
7 WHITESPACE@[8; 9) " " 7 WHITESPACE@8..9 " "
8 RECORD_FIELD_DEF_LIST@[9; 27) 8 RECORD_FIELD_DEF_LIST@9..27
9 L_CURLY@[9; 10) "{" 9 L_CURLY@9..10 "{"
10 WHITESPACE@[10; 15) "\n " 10 WHITESPACE@10..15 "\n "
11 RECORD_FIELD_DEF@[15; 25) 11 RECORD_FIELD_DEF@15..25
12 NAME@[15; 20) 12 NAME@15..20
13 IDENT@[15; 20) "r#foo" 13 IDENT@15..20 "r#foo"
14 COLON@[20; 21) ":" 14 COLON@20..21 ":"
15 WHITESPACE@[21; 22) " " 15 WHITESPACE@21..22 " "
16 PATH_TYPE@[22; 25) 16 PATH_TYPE@22..25
17 PATH@[22; 25) 17 PATH@22..25
18 PATH_SEGMENT@[22; 25) 18 PATH_SEGMENT@22..25
19 NAME_REF@[22; 25) 19 NAME_REF@22..25
20 IDENT@[22; 25) "u32" 20 IDENT@22..25 "u32"
21 WHITESPACE@[25; 26) "\n" 21 WHITESPACE@25..26 "\n"
22 R_CURLY@[26; 27) "}" 22 R_CURLY@26..27 "}"
diff --git a/crates/ra_syntax/test_data/parser/ok/0041_raw_keywords.rast b/crates/ra_syntax/test_data/parser/ok/0041_raw_keywords.rast
index 825518eda..db25bc2b8 100644
--- a/crates/ra_syntax/test_data/parser/ok/0041_raw_keywords.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0041_raw_keywords.rast
@@ -1,50 +1,50 @@
1SOURCE_FILE@[0; 59) 1SOURCE_FILE@0..59
2 FN_DEF@[0; 59) 2 FN_DEF@0..59
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 59) 11 BLOCK_EXPR@9..59
12 BLOCK@[9; 59) 12 BLOCK@9..59
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 11) " " 14 WHITESPACE@10..11 " "
15 LET_STMT@[11; 29) 15 LET_STMT@11..29
16 LET_KW@[11; 14) "let" 16 LET_KW@11..14 "let"
17 WHITESPACE@[14; 15) " " 17 WHITESPACE@14..15 " "
18 BIND_PAT@[15; 23) 18 BIND_PAT@15..23
19 NAME@[15; 23) 19 NAME@15..23
20 IDENT@[15; 23) "r#struct" 20 IDENT@15..23 "r#struct"
21 WHITESPACE@[23; 24) " " 21 WHITESPACE@23..24 " "
22 EQ@[24; 25) "=" 22 EQ@24..25 "="
23 WHITESPACE@[25; 26) " " 23 WHITESPACE@25..26 " "
24 LITERAL@[26; 28) 24 LITERAL@26..28
25 INT_NUMBER@[26; 28) "92" 25 INT_NUMBER@26..28 "92"
26 SEMICOLON@[28; 29) ";" 26 SEMICOLON@28..29 ";"
27 WHITESPACE@[29; 30) " " 27 WHITESPACE@29..30 " "
28 LET_STMT@[30; 57) 28 LET_STMT@30..57
29 LET_KW@[30; 33) "let" 29 LET_KW@30..33 "let"
30 WHITESPACE@[33; 34) " " 30 WHITESPACE@33..34 " "
31 BIND_PAT@[34; 41) 31 BIND_PAT@34..41
32 NAME@[34; 41) 32 NAME@34..41
33 IDENT@[34; 41) "r#trait" 33 IDENT@34..41 "r#trait"
34 WHITESPACE@[41; 42) " " 34 WHITESPACE@41..42 " "
35 EQ@[42; 43) "=" 35 EQ@42..43 "="
36 WHITESPACE@[43; 44) " " 36 WHITESPACE@43..44 " "
37 BIN_EXPR@[44; 56) 37 BIN_EXPR@44..56
38 PATH_EXPR@[44; 52) 38 PATH_EXPR@44..52
39 PATH@[44; 52) 39 PATH@44..52
40 PATH_SEGMENT@[44; 52) 40 PATH_SEGMENT@44..52
41 NAME_REF@[44; 52) 41 NAME_REF@44..52
42 IDENT@[44; 52) "r#struct" 42 IDENT@44..52 "r#struct"
43 WHITESPACE@[52; 53) " " 43 WHITESPACE@52..53 " "
44 STAR@[53; 54) "*" 44 STAR@53..54 "*"
45 WHITESPACE@[54; 55) " " 45 WHITESPACE@54..55 " "
46 LITERAL@[55; 56) 46 LITERAL@55..56
47 INT_NUMBER@[55; 56) "2" 47 INT_NUMBER@55..56 "2"
48 SEMICOLON@[56; 57) ";" 48 SEMICOLON@56..57 ";"
49 WHITESPACE@[57; 58) " " 49 WHITESPACE@57..58 " "
50 R_CURLY@[58; 59) "}" 50 R_CURLY@58..59 "}"
diff --git a/crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast b/crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast
index 420a62639..9704bea95 100644
--- a/crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast
@@ -1,126 +1,126 @@
1SOURCE_FILE@[0; 199) 1SOURCE_FILE@0..199
2 COMMENT@[0; 60) "// https://github.com ..." 2 COMMENT@0..60 "// https://github.com ..."
3 WHITESPACE@[60; 62) "\n\n" 3 WHITESPACE@60..62 "\n\n"
4 STRUCT_DEF@[62; 73) 4 STRUCT_DEF@62..73
5 STRUCT_KW@[62; 68) "struct" 5 STRUCT_KW@62..68 "struct"
6 WHITESPACE@[68; 69) " " 6 WHITESPACE@68..69 " "
7 NAME@[69; 72) 7 NAME@69..72
8 IDENT@[69; 72) "Foo" 8 IDENT@69..72 "Foo"
9 SEMICOLON@[72; 73) ";" 9 SEMICOLON@72..73 ";"
10 WHITESPACE@[73; 75) "\n\n" 10 WHITESPACE@73..75 "\n\n"
11 IMPL_DEF@[75; 141) 11 IMPL_DEF@75..141
12 IMPL_KW@[75; 79) "impl" 12 IMPL_KW@75..79 "impl"
13 WHITESPACE@[79; 80) " " 13 WHITESPACE@79..80 " "
14 PATH_TYPE@[80; 83) 14 PATH_TYPE@80..83
15 PATH@[80; 83) 15 PATH@80..83
16 PATH_SEGMENT@[80; 83) 16 PATH_SEGMENT@80..83
17 NAME_REF@[80; 83) 17 NAME_REF@80..83
18 IDENT@[80; 83) "Foo" 18 IDENT@80..83 "Foo"
19 WHITESPACE@[83; 84) " " 19 WHITESPACE@83..84 " "
20 ITEM_LIST@[84; 141) 20 ITEM_LIST@84..141
21 L_CURLY@[84; 85) "{" 21 L_CURLY@84..85 "{"
22 WHITESPACE@[85; 90) "\n " 22 WHITESPACE@85..90 "\n "
23 FN_DEF@[90; 139) 23 FN_DEF@90..139
24 FN_KW@[90; 92) "fn" 24 FN_KW@90..92 "fn"
25 WHITESPACE@[92; 93) " " 25 WHITESPACE@92..93 " "
26 NAME@[93; 96) 26 NAME@93..96
27 IDENT@[93; 96) "bar" 27 IDENT@93..96 "bar"
28 PARAM_LIST@[96; 98) 28 PARAM_LIST@96..98
29 L_PAREN@[96; 97) "(" 29 L_PAREN@96..97 "("
30 R_PAREN@[97; 98) ")" 30 R_PAREN@97..98 ")"
31 WHITESPACE@[98; 99) " " 31 WHITESPACE@98..99 " "
32 RET_TYPE@[99; 106) 32 RET_TYPE@99..106
33 THIN_ARROW@[99; 101) "->" 33 THIN_ARROW@99..101 "->"
34 WHITESPACE@[101; 102) " " 34 WHITESPACE@101..102 " "
35 PATH_TYPE@[102; 106) 35 PATH_TYPE@102..106
36 PATH@[102; 106) 36 PATH@102..106
37 PATH_SEGMENT@[102; 106) 37 PATH_SEGMENT@102..106
38 NAME_REF@[102; 106) 38 NAME_REF@102..106
39 IDENT@[102; 106) "bool" 39 IDENT@102..106 "bool"
40 WHITESPACE@[106; 107) " " 40 WHITESPACE@106..107 " "
41 BLOCK_EXPR@[107; 139) 41 BLOCK_EXPR@107..139
42 BLOCK@[107; 139) 42 BLOCK@107..139
43 L_CURLY@[107; 108) "{" 43 L_CURLY@107..108 "{"
44 WHITESPACE@[108; 117) "\n " 44 WHITESPACE@108..117 "\n "
45 MACRO_CALL@[117; 133) 45 MACRO_CALL@117..133
46 PATH@[117; 130) 46 PATH@117..130
47 PATH_SEGMENT@[117; 130) 47 PATH_SEGMENT@117..130
48 NAME_REF@[117; 130) 48 NAME_REF@117..130
49 IDENT@[117; 130) "unimplemented" 49 IDENT@117..130 "unimplemented"
50 BANG@[130; 131) "!" 50 BANG@130..131 "!"
51 TOKEN_TREE@[131; 133) 51 TOKEN_TREE@131..133
52 L_PAREN@[131; 132) "(" 52 L_PAREN@131..132 "("
53 R_PAREN@[132; 133) ")" 53 R_PAREN@132..133 ")"
54 WHITESPACE@[133; 138) "\n " 54 WHITESPACE@133..138 "\n "
55 R_CURLY@[138; 139) "}" 55 R_CURLY@138..139 "}"
56 WHITESPACE@[139; 140) "\n" 56 WHITESPACE@139..140 "\n"
57 R_CURLY@[140; 141) "}" 57 R_CURLY@140..141 "}"
58 WHITESPACE@[141; 143) "\n\n" 58 WHITESPACE@141..143 "\n\n"
59 FN_DEF@[143; 161) 59 FN_DEF@143..161
60 FN_KW@[143; 145) "fn" 60 FN_KW@143..145 "fn"
61 WHITESPACE@[145; 146) " " 61 WHITESPACE@145..146 " "
62 NAME@[146; 149) 62 NAME@146..149
63 IDENT@[146; 149) "baz" 63 IDENT@146..149 "baz"
64 PARAM_LIST@[149; 158) 64 PARAM_LIST@149..158
65 L_PAREN@[149; 150) "(" 65 L_PAREN@149..150 "("
66 PARAM@[150; 157) 66 PARAM@150..157
67 PLACEHOLDER_PAT@[150; 151) 67 PLACEHOLDER_PAT@150..151
68 UNDERSCORE@[150; 151) "_" 68 UNDERSCORE@150..151 "_"
69 COLON@[151; 152) ":" 69 COLON@151..152 ":"
70 WHITESPACE@[152; 153) " " 70 WHITESPACE@152..153 " "
71 PATH_TYPE@[153; 157) 71 PATH_TYPE@153..157
72 PATH@[153; 157) 72 PATH@153..157
73 PATH_SEGMENT@[153; 157) 73 PATH_SEGMENT@153..157
74 NAME_REF@[153; 157) 74 NAME_REF@153..157
75 IDENT@[153; 157) "bool" 75 IDENT@153..157 "bool"
76 R_PAREN@[157; 158) ")" 76 R_PAREN@157..158 ")"
77 WHITESPACE@[158; 159) " " 77 WHITESPACE@158..159 " "
78 BLOCK_EXPR@[159; 161) 78 BLOCK_EXPR@159..161
79 BLOCK@[159; 161) 79 BLOCK@159..161
80 L_CURLY@[159; 160) "{" 80 L_CURLY@159..160 "{"
81 R_CURLY@[160; 161) "}" 81 R_CURLY@160..161 "}"
82 WHITESPACE@[161; 163) "\n\n" 82 WHITESPACE@161..163 "\n\n"
83 FN_DEF@[163; 198) 83 FN_DEF@163..198
84 FN_KW@[163; 165) "fn" 84 FN_KW@163..165 "fn"
85 WHITESPACE@[165; 166) " " 85 WHITESPACE@165..166 " "
86 NAME@[166; 170) 86 NAME@166..170
87 IDENT@[166; 170) "main" 87 IDENT@166..170 "main"
88 PARAM_LIST@[170; 172) 88 PARAM_LIST@170..172
89 L_PAREN@[170; 171) "(" 89 L_PAREN@170..171 "("
90 R_PAREN@[171; 172) ")" 90 R_PAREN@171..172 ")"
91 WHITESPACE@[172; 173) " " 91 WHITESPACE@172..173 " "
92 BLOCK_EXPR@[173; 198) 92 BLOCK_EXPR@173..198
93 BLOCK@[173; 198) 93 BLOCK@173..198
94 L_CURLY@[173; 174) "{" 94 L_CURLY@173..174 "{"
95 WHITESPACE@[174; 179) "\n " 95 WHITESPACE@174..179 "\n "
96 CALL_EXPR@[179; 196) 96 CALL_EXPR@179..196
97 PATH_EXPR@[179; 182) 97 PATH_EXPR@179..182
98 PATH@[179; 182) 98 PATH@179..182
99 PATH_SEGMENT@[179; 182) 99 PATH_SEGMENT@179..182
100 NAME_REF@[179; 182) 100 NAME_REF@179..182
101 IDENT@[179; 182) "baz" 101 IDENT@179..182 "baz"
102 ARG_LIST@[182; 196) 102 ARG_LIST@182..196
103 L_PAREN@[182; 183) "(" 103 L_PAREN@182..183 "("
104 CALL_EXPR@[183; 195) 104 CALL_EXPR@183..195
105 PATH_EXPR@[183; 193) 105 PATH_EXPR@183..193
106 PATH@[183; 193) 106 PATH@183..193
107 PATH@[183; 188) 107 PATH@183..188
108 PATH_SEGMENT@[183; 188) 108 PATH_SEGMENT@183..188
109 L_ANGLE@[183; 184) "<" 109 L_ANGLE@183..184 "<"
110 PATH_TYPE@[184; 187) 110 PATH_TYPE@184..187
111 PATH@[184; 187) 111 PATH@184..187
112 PATH_SEGMENT@[184; 187) 112 PATH_SEGMENT@184..187
113 NAME_REF@[184; 187) 113 NAME_REF@184..187
114 IDENT@[184; 187) "Foo" 114 IDENT@184..187 "Foo"
115 R_ANGLE@[187; 188) ">" 115 R_ANGLE@187..188 ">"
116 COLON2@[188; 190) "::" 116 COLON2@188..190 "::"
117 PATH_SEGMENT@[190; 193) 117 PATH_SEGMENT@190..193
118 NAME_REF@[190; 193) 118 NAME_REF@190..193
119 IDENT@[190; 193) "bar" 119 IDENT@190..193 "bar"
120 ARG_LIST@[193; 195) 120 ARG_LIST@193..195
121 L_PAREN@[193; 194) "(" 121 L_PAREN@193..194 "("
122 R_PAREN@[194; 195) ")" 122 R_PAREN@194..195 ")"
123 R_PAREN@[195; 196) ")" 123 R_PAREN@195..196 ")"
124 WHITESPACE@[196; 197) "\n" 124 WHITESPACE@196..197 "\n"
125 R_CURLY@[197; 198) "}" 125 R_CURLY@197..198 "}"
126 WHITESPACE@[198; 199) "\n" 126 WHITESPACE@198..199 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0043_complex_assignment.rast b/crates/ra_syntax/test_data/parser/ok/0043_complex_assignment.rast
index 3bc0ddbde..6e5b25748 100644
--- a/crates/ra_syntax/test_data/parser/ok/0043_complex_assignment.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0043_complex_assignment.rast
@@ -1,110 +1,110 @@
1SOURCE_FILE@[0; 160) 1SOURCE_FILE@0..160
2 COMMENT@[0; 60) "// https://github.com ..." 2 COMMENT@0..60 "// https://github.com ..."
3 WHITESPACE@[60; 62) "\n\n" 3 WHITESPACE@60..62 "\n\n"
4 STRUCT_DEF@[62; 90) 4 STRUCT_DEF@62..90
5 STRUCT_KW@[62; 68) "struct" 5 STRUCT_KW@62..68 "struct"
6 WHITESPACE@[68; 69) " " 6 WHITESPACE@68..69 " "
7 NAME@[69; 73) 7 NAME@69..73
8 IDENT@[69; 73) "Repr" 8 IDENT@69..73 "Repr"
9 WHITESPACE@[73; 74) " " 9 WHITESPACE@73..74 " "
10 RECORD_FIELD_DEF_LIST@[74; 90) 10 RECORD_FIELD_DEF_LIST@74..90
11 L_CURLY@[74; 75) "{" 11 L_CURLY@74..75 "{"
12 WHITESPACE@[75; 76) " " 12 WHITESPACE@75..76 " "
13 RECORD_FIELD_DEF@[76; 88) 13 RECORD_FIELD_DEF@76..88
14 NAME@[76; 79) 14 NAME@76..79
15 IDENT@[76; 79) "raw" 15 IDENT@76..79 "raw"
16 COLON@[79; 80) ":" 16 COLON@79..80 ":"
17 WHITESPACE@[80; 81) " " 17 WHITESPACE@80..81 " "
18 ARRAY_TYPE@[81; 88) 18 ARRAY_TYPE@81..88
19 L_BRACK@[81; 82) "[" 19 L_BRACK@81..82 "["
20 PATH_TYPE@[82; 84) 20 PATH_TYPE@82..84
21 PATH@[82; 84) 21 PATH@82..84
22 PATH_SEGMENT@[82; 84) 22 PATH_SEGMENT@82..84
23 NAME_REF@[82; 84) 23 NAME_REF@82..84
24 IDENT@[82; 84) "u8" 24 IDENT@82..84 "u8"
25 SEMICOLON@[84; 85) ";" 25 SEMICOLON@84..85 ";"
26 WHITESPACE@[85; 86) " " 26 WHITESPACE@85..86 " "
27 LITERAL@[86; 87) 27 LITERAL@86..87
28 INT_NUMBER@[86; 87) "1" 28 INT_NUMBER@86..87 "1"
29 R_BRACK@[87; 88) "]" 29 R_BRACK@87..88 "]"
30 WHITESPACE@[88; 89) " " 30 WHITESPACE@88..89 " "
31 R_CURLY@[89; 90) "}" 31 R_CURLY@89..90 "}"
32 WHITESPACE@[90; 92) "\n\n" 32 WHITESPACE@90..92 "\n\n"
33 FN_DEF@[92; 159) 33 FN_DEF@92..159
34 FN_KW@[92; 94) "fn" 34 FN_KW@92..94 "fn"
35 WHITESPACE@[94; 95) " " 35 WHITESPACE@94..95 " "
36 NAME@[95; 98) 36 NAME@95..98
37 IDENT@[95; 98) "abc" 37 IDENT@95..98 "abc"
38 PARAM_LIST@[98; 100) 38 PARAM_LIST@98..100
39 L_PAREN@[98; 99) "(" 39 L_PAREN@98..99 "("
40 R_PAREN@[99; 100) ")" 40 R_PAREN@99..100 ")"
41 WHITESPACE@[100; 101) " " 41 WHITESPACE@100..101 " "
42 BLOCK_EXPR@[101; 159) 42 BLOCK_EXPR@101..159
43 BLOCK@[101; 159) 43 BLOCK@101..159
44 L_CURLY@[101; 102) "{" 44 L_CURLY@101..102 "{"
45 WHITESPACE@[102; 107) "\n " 45 WHITESPACE@102..107 "\n "
46 EXPR_STMT@[107; 136) 46 EXPR_STMT@107..136
47 BIN_EXPR@[107; 135) 47 BIN_EXPR@107..135
48 INDEX_EXPR@[107; 131) 48 INDEX_EXPR@107..131
49 FIELD_EXPR@[107; 128) 49 FIELD_EXPR@107..128
50 RECORD_LIT@[107; 124) 50 RECORD_LIT@107..124
51 PATH@[107; 111) 51 PATH@107..111
52 PATH_SEGMENT@[107; 111) 52 PATH_SEGMENT@107..111
53 NAME_REF@[107; 111) 53 NAME_REF@107..111
54 IDENT@[107; 111) "Repr" 54 IDENT@107..111 "Repr"
55 WHITESPACE@[111; 112) " " 55 WHITESPACE@111..112 " "
56 RECORD_FIELD_LIST@[112; 124) 56 RECORD_FIELD_LIST@112..124
57 L_CURLY@[112; 113) "{" 57 L_CURLY@112..113 "{"
58 WHITESPACE@[113; 114) " " 58 WHITESPACE@113..114 " "
59 RECORD_FIELD@[114; 122) 59 RECORD_FIELD@114..122
60 NAME_REF@[114; 117) 60 NAME_REF@114..117
61 IDENT@[114; 117) "raw" 61 IDENT@114..117 "raw"
62 COLON@[117; 118) ":" 62 COLON@117..118 ":"
63 WHITESPACE@[118; 119) " " 63 WHITESPACE@118..119 " "
64 ARRAY_EXPR@[119; 122) 64 ARRAY_EXPR@119..122
65 L_BRACK@[119; 120) "[" 65 L_BRACK@119..120 "["
66 LITERAL@[120; 121) 66 LITERAL@120..121
67 INT_NUMBER@[120; 121) "0" 67 INT_NUMBER@120..121 "0"
68 R_BRACK@[121; 122) "]" 68 R_BRACK@121..122 "]"
69 WHITESPACE@[122; 123) " " 69 WHITESPACE@122..123 " "
70 R_CURLY@[123; 124) "}" 70 R_CURLY@123..124 "}"
71 DOT@[124; 125) "." 71 DOT@124..125 "."
72 NAME_REF@[125; 128) 72 NAME_REF@125..128
73 IDENT@[125; 128) "raw" 73 IDENT@125..128 "raw"
74 L_BRACK@[128; 129) "[" 74 L_BRACK@128..129 "["
75 LITERAL@[129; 130) 75 LITERAL@129..130
76 INT_NUMBER@[129; 130) "0" 76 INT_NUMBER@129..130 "0"
77 R_BRACK@[130; 131) "]" 77 R_BRACK@130..131 "]"
78 WHITESPACE@[131; 132) " " 78 WHITESPACE@131..132 " "
79 EQ@[132; 133) "=" 79 EQ@132..133 "="
80 WHITESPACE@[133; 134) " " 80 WHITESPACE@133..134 " "
81 LITERAL@[134; 135) 81 LITERAL@134..135
82 INT_NUMBER@[134; 135) "0" 82 INT_NUMBER@134..135 "0"
83 SEMICOLON@[135; 136) ";" 83 SEMICOLON@135..136 ";"
84 WHITESPACE@[136; 141) "\n " 84 WHITESPACE@136..141 "\n "
85 EXPR_STMT@[141; 157) 85 EXPR_STMT@141..157
86 CALL_EXPR@[141; 156) 86 CALL_EXPR@141..156
87 RECORD_LIT@[141; 154) 87 RECORD_LIT@141..154
88 PATH@[141; 145) 88 PATH@141..145
89 PATH_SEGMENT@[141; 145) 89 PATH_SEGMENT@141..145
90 NAME_REF@[141; 145) 90 NAME_REF@141..145
91 IDENT@[141; 145) "Repr" 91 IDENT@141..145 "Repr"
92 RECORD_FIELD_LIST@[145; 154) 92 RECORD_FIELD_LIST@145..154
93 L_CURLY@[145; 146) "{" 93 L_CURLY@145..146 "{"
94 RECORD_FIELD@[146; 153) 94 RECORD_FIELD@146..153
95 NAME_REF@[146; 149) 95 NAME_REF@146..149
96 IDENT@[146; 149) "raw" 96 IDENT@146..149 "raw"
97 COLON@[149; 150) ":" 97 COLON@149..150 ":"
98 ARRAY_EXPR@[150; 153) 98 ARRAY_EXPR@150..153
99 L_BRACK@[150; 151) "[" 99 L_BRACK@150..151 "["
100 LITERAL@[151; 152) 100 LITERAL@151..152
101 INT_NUMBER@[151; 152) "0" 101 INT_NUMBER@151..152 "0"
102 R_BRACK@[152; 153) "]" 102 R_BRACK@152..153 "]"
103 R_CURLY@[153; 154) "}" 103 R_CURLY@153..154 "}"
104 ARG_LIST@[154; 156) 104 ARG_LIST@154..156
105 L_PAREN@[154; 155) "(" 105 L_PAREN@154..155 "("
106 R_PAREN@[155; 156) ")" 106 R_PAREN@155..156 ")"
107 SEMICOLON@[156; 157) ";" 107 SEMICOLON@156..157 ";"
108 WHITESPACE@[157; 158) "\n" 108 WHITESPACE@157..158 "\n"
109 R_CURLY@[158; 159) "}" 109 R_CURLY@158..159 "}"
110 WHITESPACE@[159; 160) "\n" 110 WHITESPACE@159..160 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0044_let_attrs.rast b/crates/ra_syntax/test_data/parser/ok/0044_let_attrs.rast
index 4b2593147..f1eef3be0 100644
--- a/crates/ra_syntax/test_data/parser/ok/0044_let_attrs.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0044_let_attrs.rast
@@ -1,76 +1,76 @@
1SOURCE_FILE@[0; 166) 1SOURCE_FILE@0..166
2 FN_DEF@[0; 165) 2 FN_DEF@0..165
3 COMMENT@[0; 60) "// https://github.com ..." 3 COMMENT@0..60 "// https://github.com ..."
4 WHITESPACE@[60; 61) "\n" 4 WHITESPACE@60..61 "\n"
5 FN_KW@[61; 63) "fn" 5 FN_KW@61..63 "fn"
6 WHITESPACE@[63; 64) " " 6 WHITESPACE@63..64 " "
7 NAME@[64; 68) 7 NAME@64..68
8 IDENT@[64; 68) "main" 8 IDENT@64..68 "main"
9 PARAM_LIST@[68; 70) 9 PARAM_LIST@68..70
10 L_PAREN@[68; 69) "(" 10 L_PAREN@68..69 "("
11 R_PAREN@[69; 70) ")" 11 R_PAREN@69..70 ")"
12 WHITESPACE@[70; 71) " " 12 WHITESPACE@70..71 " "
13 BLOCK_EXPR@[71; 165) 13 BLOCK_EXPR@71..165
14 BLOCK@[71; 165) 14 BLOCK@71..165
15 L_CURLY@[71; 72) "{" 15 L_CURLY@71..72 "{"
16 WHITESPACE@[72; 77) "\n " 16 WHITESPACE@72..77 "\n "
17 LET_STMT@[77; 163) 17 LET_STMT@77..163
18 ATTR@[77; 106) 18 ATTR@77..106
19 POUND@[77; 78) "#" 19 POUND@77..78 "#"
20 L_BRACK@[78; 79) "[" 20 L_BRACK@78..79 "["
21 PATH@[79; 82) 21 PATH@79..82
22 PATH_SEGMENT@[79; 82) 22 PATH_SEGMENT@79..82
23 NAME_REF@[79; 82) 23 NAME_REF@79..82
24 IDENT@[79; 82) "cfg" 24 IDENT@79..82 "cfg"
25 TOKEN_TREE@[82; 105) 25 TOKEN_TREE@82..105
26 L_PAREN@[82; 83) "(" 26 L_PAREN@82..83 "("
27 IDENT@[83; 90) "feature" 27 IDENT@83..90 "feature"
28 WHITESPACE@[90; 91) " " 28 WHITESPACE@90..91 " "
29 EQ@[91; 92) "=" 29 EQ@91..92 "="
30 WHITESPACE@[92; 93) " " 30 WHITESPACE@92..93 " "
31 STRING@[93; 104) "\"backtrace\"" 31 STRING@93..104 "\"backtrace\""
32 R_PAREN@[104; 105) ")" 32 R_PAREN@104..105 ")"
33 R_BRACK@[105; 106) "]" 33 R_BRACK@105..106 "]"
34 WHITESPACE@[106; 111) "\n " 34 WHITESPACE@106..111 "\n "
35 LET_KW@[111; 114) "let" 35 LET_KW@111..114 "let"
36 WHITESPACE@[114; 115) " " 36 WHITESPACE@114..115 " "
37 BIND_PAT@[115; 124) 37 BIND_PAT@115..124
38 NAME@[115; 124) 38 NAME@115..124
39 IDENT@[115; 124) "exit_code" 39 IDENT@115..124 "exit_code"
40 WHITESPACE@[124; 125) " " 40 WHITESPACE@124..125 " "
41 EQ@[125; 126) "=" 41 EQ@125..126 "="
42 WHITESPACE@[126; 127) " " 42 WHITESPACE@126..127 " "
43 CALL_EXPR@[127; 162) 43 CALL_EXPR@127..162
44 PATH_EXPR@[127; 146) 44 PATH_EXPR@127..146
45 PATH@[127; 146) 45 PATH@127..146
46 PATH@[127; 132) 46 PATH@127..132
47 PATH_SEGMENT@[127; 132) 47 PATH_SEGMENT@127..132
48 NAME_REF@[127; 132) 48 NAME_REF@127..132
49 IDENT@[127; 132) "panic" 49 IDENT@127..132 "panic"
50 COLON2@[132; 134) "::" 50 COLON2@132..134 "::"
51 PATH_SEGMENT@[134; 146) 51 PATH_SEGMENT@134..146
52 NAME_REF@[134; 146) 52 NAME_REF@134..146
53 IDENT@[134; 146) "catch_unwind" 53 IDENT@134..146 "catch_unwind"
54 ARG_LIST@[146; 162) 54 ARG_LIST@146..162
55 L_PAREN@[146; 147) "(" 55 L_PAREN@146..147 "("
56 LAMBDA_EXPR@[147; 161) 56 LAMBDA_EXPR@147..161
57 MOVE_KW@[147; 151) "move" 57 MOVE_KW@147..151 "move"
58 WHITESPACE@[151; 152) " " 58 WHITESPACE@151..152 " "
59 PARAM_LIST@[152; 154) 59 PARAM_LIST@152..154
60 PIPE@[152; 153) "|" 60 PIPE@152..153 "|"
61 PIPE@[153; 154) "|" 61 PIPE@153..154 "|"
62 WHITESPACE@[154; 155) " " 62 WHITESPACE@154..155 " "
63 CALL_EXPR@[155; 161) 63 CALL_EXPR@155..161
64 PATH_EXPR@[155; 159) 64 PATH_EXPR@155..159
65 PATH@[155; 159) 65 PATH@155..159
66 PATH_SEGMENT@[155; 159) 66 PATH_SEGMENT@155..159
67 NAME_REF@[155; 159) 67 NAME_REF@155..159
68 IDENT@[155; 159) "main" 68 IDENT@155..159 "main"
69 ARG_LIST@[159; 161) 69 ARG_LIST@159..161
70 L_PAREN@[159; 160) "(" 70 L_PAREN@159..160 "("
71 R_PAREN@[160; 161) ")" 71 R_PAREN@160..161 ")"
72 R_PAREN@[161; 162) ")" 72 R_PAREN@161..162 ")"
73 SEMICOLON@[162; 163) ";" 73 SEMICOLON@162..163 ";"
74 WHITESPACE@[163; 164) "\n" 74 WHITESPACE@163..164 "\n"
75 R_CURLY@[164; 165) "}" 75 R_CURLY@164..165 "}"
76 WHITESPACE@[165; 166) "\n" 76 WHITESPACE@165..166 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast b/crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast
index 954b3bc2a..f79feec19 100644
--- a/crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast
@@ -1,181 +1,181 @@
1SOURCE_FILE@[0; 686) 1SOURCE_FILE@0..686
2 FN_DEF@[0; 461) 2 FN_DEF@0..461
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 8) 5 NAME@3..8
6 IDENT@[3; 8) "block" 6 IDENT@3..8 "block"
7 PARAM_LIST@[8; 10) 7 PARAM_LIST@8..10
8 L_PAREN@[8; 9) "(" 8 L_PAREN@8..9 "("
9 R_PAREN@[9; 10) ")" 9 R_PAREN@9..10 ")"
10 WHITESPACE@[10; 11) " " 10 WHITESPACE@10..11 " "
11 BLOCK_EXPR@[11; 461) 11 BLOCK_EXPR@11..461
12 BLOCK@[11; 461) 12 BLOCK@11..461
13 L_CURLY@[11; 12) "{" 13 L_CURLY@11..12 "{"
14 WHITESPACE@[12; 17) "\n " 14 WHITESPACE@12..17 "\n "
15 ATTR@[17; 57) 15 ATTR@17..57
16 POUND@[17; 18) "#" 16 POUND@17..18 "#"
17 BANG@[18; 19) "!" 17 BANG@18..19 "!"
18 L_BRACK@[19; 20) "[" 18 L_BRACK@19..20 "["
19 PATH@[20; 23) 19 PATH@20..23
20 PATH_SEGMENT@[20; 23) 20 PATH_SEGMENT@20..23
21 NAME_REF@[20; 23) 21 NAME_REF@20..23
22 IDENT@[20; 23) "doc" 22 IDENT@20..23 "doc"
23 TOKEN_TREE@[23; 56) 23 TOKEN_TREE@23..56
24 L_PAREN@[23; 24) "(" 24 L_PAREN@23..24 "("
25 STRING@[24; 55) "\"Inner attributes all ..." 25 STRING@24..55 "\"Inner attributes all ..."
26 R_PAREN@[55; 56) ")" 26 R_PAREN@55..56 ")"
27 R_BRACK@[56; 57) "]" 27 R_BRACK@56..57 "]"
28 WHITESPACE@[57; 62) "\n " 28 WHITESPACE@57..62 "\n "
29 COMMENT@[62; 97) "//! As are ModuleDoc ..." 29 COMMENT@62..97 "//! As are ModuleDoc ..."
30 WHITESPACE@[97; 102) "\n " 30 WHITESPACE@97..102 "\n "
31 EXPR_STMT@[102; 295) 31 EXPR_STMT@102..295
32 BLOCK_EXPR@[102; 294) 32 BLOCK_EXPR@102..294
33 BLOCK@[102; 294) 33 BLOCK@102..294
34 L_CURLY@[102; 103) "{" 34 L_CURLY@102..103 "{"
35 WHITESPACE@[103; 112) "\n " 35 WHITESPACE@103..112 "\n "
36 ATTR@[112; 180) 36 ATTR@112..180
37 POUND@[112; 113) "#" 37 POUND@112..113 "#"
38 BANG@[113; 114) "!" 38 BANG@113..114 "!"
39 L_BRACK@[114; 115) "[" 39 L_BRACK@114..115 "["
40 PATH@[115; 118) 40 PATH@115..118
41 PATH_SEGMENT@[115; 118) 41 PATH_SEGMENT@115..118
42 NAME_REF@[115; 118) 42 NAME_REF@115..118
43 IDENT@[115; 118) "doc" 43 IDENT@115..118 "doc"
44 TOKEN_TREE@[118; 179) 44 TOKEN_TREE@118..179
45 L_PAREN@[118; 119) "(" 45 L_PAREN@118..119 "("
46 STRING@[119; 178) "\"Inner attributes are ..." 46 STRING@119..178 "\"Inner attributes are ..."
47 R_PAREN@[178; 179) ")" 47 R_PAREN@178..179 ")"
48 R_BRACK@[179; 180) "]" 48 R_BRACK@179..180 "]"
49 WHITESPACE@[180; 189) "\n " 49 WHITESPACE@180..189 "\n "
50 ATTR@[189; 244) 50 ATTR@189..244
51 POUND@[189; 190) "#" 51 POUND@189..190 "#"
52 BANG@[190; 191) "!" 52 BANG@190..191 "!"
53 L_BRACK@[191; 192) "[" 53 L_BRACK@191..192 "["
54 PATH@[192; 195) 54 PATH@192..195
55 PATH_SEGMENT@[192; 195) 55 PATH_SEGMENT@192..195
56 NAME_REF@[192; 195) 56 NAME_REF@192..195
57 IDENT@[192; 195) "doc" 57 IDENT@192..195 "doc"
58 TOKEN_TREE@[195; 243) 58 TOKEN_TREE@195..243
59 L_PAREN@[195; 196) "(" 59 L_PAREN@195..196 "("
60 STRING@[196; 242) "\"Being validated is n ..." 60 STRING@196..242 "\"Being validated is n ..."
61 R_PAREN@[242; 243) ")" 61 R_PAREN@242..243 ")"
62 R_BRACK@[243; 244) "]" 62 R_BRACK@243..244 "]"
63 WHITESPACE@[244; 253) "\n " 63 WHITESPACE@244..253 "\n "
64 COMMENT@[253; 288) "//! As are ModuleDoc ..." 64 COMMENT@253..288 "//! As are ModuleDoc ..."
65 WHITESPACE@[288; 293) "\n " 65 WHITESPACE@288..293 "\n "
66 R_CURLY@[293; 294) "}" 66 R_CURLY@293..294 "}"
67 SEMICOLON@[294; 295) ";" 67 SEMICOLON@294..295 ";"
68 WHITESPACE@[295; 300) "\n " 68 WHITESPACE@295..300 "\n "
69 BLOCK_EXPR@[300; 459) 69 BLOCK_EXPR@300..459
70 BLOCK@[300; 459) 70 BLOCK@300..459
71 L_CURLY@[300; 301) "{" 71 L_CURLY@300..301 "{"
72 WHITESPACE@[301; 310) "\n " 72 WHITESPACE@301..310 "\n "
73 ATTR@[310; 409) 73 ATTR@310..409
74 POUND@[310; 311) "#" 74 POUND@310..311 "#"
75 BANG@[311; 312) "!" 75 BANG@311..312 "!"
76 L_BRACK@[312; 313) "[" 76 L_BRACK@312..313 "["
77 PATH@[313; 316) 77 PATH@313..316
78 PATH_SEGMENT@[313; 316) 78 PATH_SEGMENT@313..316
79 NAME_REF@[313; 316) 79 NAME_REF@313..316
80 IDENT@[313; 316) "doc" 80 IDENT@313..316 "doc"
81 TOKEN_TREE@[316; 408) 81 TOKEN_TREE@316..408
82 L_PAREN@[316; 317) "(" 82 L_PAREN@316..317 "("
83 STRING@[317; 407) "\"Inner attributes are ..." 83 STRING@317..407 "\"Inner attributes are ..."
84 R_PAREN@[407; 408) ")" 84 R_PAREN@407..408 ")"
85 R_BRACK@[408; 409) "]" 85 R_BRACK@408..409 "]"
86 WHITESPACE@[409; 418) "\n " 86 WHITESPACE@409..418 "\n "
87 COMMENT@[418; 453) "//! As are ModuleDoc ..." 87 COMMENT@418..453 "//! As are ModuleDoc ..."
88 WHITESPACE@[453; 458) "\n " 88 WHITESPACE@453..458 "\n "
89 R_CURLY@[458; 459) "}" 89 R_CURLY@458..459 "}"
90 WHITESPACE@[459; 460) "\n" 90 WHITESPACE@459..460 "\n"
91 R_CURLY@[460; 461) "}" 91 R_CURLY@460..461 "}"
92 WHITESPACE@[461; 463) "\n\n" 92 WHITESPACE@461..463 "\n\n"
93 COMMENT@[463; 523) "// https://github.com ..." 93 COMMENT@463..523 "// https://github.com ..."
94 WHITESPACE@[523; 524) "\n" 94 WHITESPACE@523..524 "\n"
95 IMPL_DEF@[524; 685) 95 IMPL_DEF@524..685
96 IMPL_KW@[524; 528) "impl" 96 IMPL_KW@524..528 "impl"
97 WHITESPACE@[528; 529) " " 97 WHITESPACE@528..529 " "
98 PATH_TYPE@[529; 537) 98 PATH_TYPE@529..537
99 PATH@[529; 537) 99 PATH@529..537
100 PATH_SEGMENT@[529; 537) 100 PATH_SEGMENT@529..537
101 NAME_REF@[529; 537) 101 NAME_REF@529..537
102 IDENT@[529; 537) "Whatever" 102 IDENT@529..537 "Whatever"
103 WHITESPACE@[537; 538) " " 103 WHITESPACE@537..538 " "
104 ITEM_LIST@[538; 685) 104 ITEM_LIST@538..685
105 L_CURLY@[538; 539) "{" 105 L_CURLY@538..539 "{"
106 WHITESPACE@[539; 544) "\n " 106 WHITESPACE@539..544 "\n "
107 FN_DEF@[544; 683) 107 FN_DEF@544..683
108 FN_KW@[544; 546) "fn" 108 FN_KW@544..546 "fn"
109 WHITESPACE@[546; 547) " " 109 WHITESPACE@546..547 " "
110 NAME@[547; 558) 110 NAME@547..558
111 IDENT@[547; 558) "salsa_event" 111 IDENT@547..558 "salsa_event"
112 PARAM_LIST@[558; 601) 112 PARAM_LIST@558..601
113 L_PAREN@[558; 559) "(" 113 L_PAREN@558..559 "("
114 SELF_PARAM@[559; 564) 114 SELF_PARAM@559..564
115 AMP@[559; 560) "&" 115 AMP@559..560 "&"
116 SELF_KW@[560; 564) "self" 116 SELF_KW@560..564 "self"
117 COMMA@[564; 565) "," 117 COMMA@564..565 ","
118 WHITESPACE@[565; 566) " " 118 WHITESPACE@565..566 " "
119 PARAM@[566; 600) 119 PARAM@566..600
120 BIND_PAT@[566; 574) 120 BIND_PAT@566..574
121 NAME@[566; 574) 121 NAME@566..574
122 IDENT@[566; 574) "event_fn" 122 IDENT@566..574 "event_fn"
123 COLON@[574; 575) ":" 123 COLON@574..575 ":"
124 WHITESPACE@[575; 576) " " 124 WHITESPACE@575..576 " "
125 IMPL_TRAIT_TYPE@[576; 600) 125 IMPL_TRAIT_TYPE@576..600
126 IMPL_KW@[576; 580) "impl" 126 IMPL_KW@576..580 "impl"
127 WHITESPACE@[580; 581) " " 127 WHITESPACE@580..581 " "
128 TYPE_BOUND_LIST@[581; 600) 128 TYPE_BOUND_LIST@581..600
129 TYPE_BOUND@[581; 600) 129 TYPE_BOUND@581..600
130 PATH_TYPE@[581; 600) 130 PATH_TYPE@581..600
131 PATH@[581; 600) 131 PATH@581..600
132 PATH_SEGMENT@[581; 600) 132 PATH_SEGMENT@581..600
133 NAME_REF@[581; 583) 133 NAME_REF@581..583
134 IDENT@[581; 583) "Fn" 134 IDENT@581..583 "Fn"
135 PARAM_LIST@[583; 585) 135 PARAM_LIST@583..585
136 L_PAREN@[583; 584) "(" 136 L_PAREN@583..584 "("
137 R_PAREN@[584; 585) ")" 137 R_PAREN@584..585 ")"
138 WHITESPACE@[585; 586) " " 138 WHITESPACE@585..586 " "
139 RET_TYPE@[586; 600) 139 RET_TYPE@586..600
140 THIN_ARROW@[586; 588) "->" 140 THIN_ARROW@586..588 "->"
141 WHITESPACE@[588; 589) " " 141 WHITESPACE@588..589 " "
142 PATH_TYPE@[589; 600) 142 PATH_TYPE@589..600
143 PATH@[589; 600) 143 PATH@589..600
144 PATH_SEGMENT@[589; 600) 144 PATH_SEGMENT@589..600
145 NAME_REF@[589; 594) 145 NAME_REF@589..594
146 IDENT@[589; 594) "Event" 146 IDENT@589..594 "Event"
147 TYPE_ARG_LIST@[594; 600) 147 TYPE_ARG_LIST@594..600
148 L_ANGLE@[594; 595) "<" 148 L_ANGLE@594..595 "<"
149 TYPE_ARG@[595; 599) 149 TYPE_ARG@595..599
150 PATH_TYPE@[595; 599) 150 PATH_TYPE@595..599
151 PATH@[595; 599) 151 PATH@595..599
152 PATH_SEGMENT@[595; 599) 152 PATH_SEGMENT@595..599
153 NAME_REF@[595; 599) 153 NAME_REF@595..599
154 IDENT@[595; 599) "Self" 154 IDENT@595..599 "Self"
155 R_ANGLE@[599; 600) ">" 155 R_ANGLE@599..600 ">"
156 R_PAREN@[600; 601) ")" 156 R_PAREN@600..601 ")"
157 WHITESPACE@[601; 602) " " 157 WHITESPACE@601..602 " "
158 BLOCK_EXPR@[602; 683) 158 BLOCK_EXPR@602..683
159 BLOCK@[602; 683) 159 BLOCK@602..683
160 L_CURLY@[602; 603) "{" 160 L_CURLY@602..603 "{"
161 WHITESPACE@[603; 612) "\n " 161 WHITESPACE@603..612 "\n "
162 ATTR@[612; 639) 162 ATTR@612..639
163 POUND@[612; 613) "#" 163 POUND@612..613 "#"
164 BANG@[613; 614) "!" 164 BANG@613..614 "!"
165 L_BRACK@[614; 615) "[" 165 L_BRACK@614..615 "["
166 PATH@[615; 620) 166 PATH@615..620
167 PATH_SEGMENT@[615; 620) 167 PATH_SEGMENT@615..620
168 NAME_REF@[615; 620) 168 NAME_REF@615..620
169 IDENT@[615; 620) "allow" 169 IDENT@615..620 "allow"
170 TOKEN_TREE@[620; 638) 170 TOKEN_TREE@620..638
171 L_PAREN@[620; 621) "(" 171 L_PAREN@620..621 "("
172 IDENT@[621; 637) "unused_variables" 172 IDENT@621..637 "unused_variables"
173 R_PAREN@[637; 638) ")" 173 R_PAREN@637..638 ")"
174 R_BRACK@[638; 639) "]" 174 R_BRACK@638..639 "]"
175 WHITESPACE@[639; 640) " " 175 WHITESPACE@639..640 " "
176 COMMENT@[640; 677) "// this is `inner_at ..." 176 COMMENT@640..677 "// this is `inner_at ..."
177 WHITESPACE@[677; 682) "\n " 177 WHITESPACE@677..682 "\n "
178 R_CURLY@[682; 683) "}" 178 R_CURLY@682..683 "}"
179 WHITESPACE@[683; 684) "\n" 179 WHITESPACE@683..684 "\n"
180 R_CURLY@[684; 685) "}" 180 R_CURLY@684..685 "}"
181 WHITESPACE@[685; 686) "\n" 181 WHITESPACE@685..686 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0046_extern_inner_attributes.rast b/crates/ra_syntax/test_data/parser/ok/0046_extern_inner_attributes.rast
index 92c8df2d6..37594769a 100644
--- a/crates/ra_syntax/test_data/parser/ok/0046_extern_inner_attributes.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0046_extern_inner_attributes.rast
@@ -1,28 +1,28 @@
1SOURCE_FILE@[0; 87) 1SOURCE_FILE@0..87
2 EXTERN_BLOCK@[0; 86) 2 EXTERN_BLOCK@0..86
3 ABI@[0; 10) 3 ABI@0..10
4 EXTERN_KW@[0; 6) "extern" 4 EXTERN_KW@0..6 "extern"
5 WHITESPACE@[6; 7) " " 5 WHITESPACE@6..7 " "
6 STRING@[7; 10) "\"C\"" 6 STRING@7..10 "\"C\""
7 WHITESPACE@[10; 11) " " 7 WHITESPACE@10..11 " "
8 EXTERN_ITEM_LIST@[11; 86) 8 EXTERN_ITEM_LIST@11..86
9 L_CURLY@[11; 12) "{" 9 L_CURLY@11..12 "{"
10 WHITESPACE@[12; 17) "\n " 10 WHITESPACE@12..17 "\n "
11 COMMENT@[17; 42) "//! This is a doc com ..." 11 COMMENT@17..42 "//! This is a doc com ..."
12 WHITESPACE@[42; 47) "\n " 12 WHITESPACE@42..47 "\n "
13 ATTR@[47; 84) 13 ATTR@47..84
14 POUND@[47; 48) "#" 14 POUND@47..48 "#"
15 BANG@[48; 49) "!" 15 BANG@48..49 "!"
16 L_BRACK@[49; 50) "[" 16 L_BRACK@49..50 "["
17 PATH@[50; 53) 17 PATH@50..53
18 PATH_SEGMENT@[50; 53) 18 PATH_SEGMENT@50..53
19 NAME_REF@[50; 53) 19 NAME_REF@50..53
20 IDENT@[50; 53) "doc" 20 IDENT@50..53 "doc"
21 TOKEN_TREE@[53; 83) 21 TOKEN_TREE@53..83
22 L_PAREN@[53; 54) "(" 22 L_PAREN@53..54 "("
23 STRING@[54; 82) "\"This is also a doc c ..." 23 STRING@54..82 "\"This is also a doc c ..."
24 R_PAREN@[82; 83) ")" 24 R_PAREN@82..83 ")"
25 R_BRACK@[83; 84) "]" 25 R_BRACK@83..84 "]"
26 WHITESPACE@[84; 85) "\n" 26 WHITESPACE@84..85 "\n"
27 R_CURLY@[85; 86) "}" 27 R_CURLY@85..86 "}"
28 WHITESPACE@[86; 87) "\n" 28 WHITESPACE@86..87 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0047_minus_in_inner_pattern.rast b/crates/ra_syntax/test_data/parser/ok/0047_minus_in_inner_pattern.rast
index de703328a..1cf12d670 100644
--- a/crates/ra_syntax/test_data/parser/ok/0047_minus_in_inner_pattern.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0047_minus_in_inner_pattern.rast
@@ -1,323 +1,323 @@
1SOURCE_FILE@[0; 395) 1SOURCE_FILE@0..395
2 COMMENT@[0; 60) "// https://github.com ..." 2 COMMENT@0..60 "// https://github.com ..."
3 WHITESPACE@[60; 62) "\n\n" 3 WHITESPACE@60..62 "\n\n"
4 FN_DEF@[62; 341) 4 FN_DEF@62..341
5 FN_KW@[62; 64) "fn" 5 FN_KW@62..64 "fn"
6 WHITESPACE@[64; 65) " " 6 WHITESPACE@64..65 " "
7 NAME@[65; 69) 7 NAME@65..69
8 IDENT@[65; 69) "main" 8 IDENT@65..69 "main"
9 PARAM_LIST@[69; 71) 9 PARAM_LIST@69..71
10 L_PAREN@[69; 70) "(" 10 L_PAREN@69..70 "("
11 R_PAREN@[70; 71) ")" 11 R_PAREN@70..71 ")"
12 WHITESPACE@[71; 72) " " 12 WHITESPACE@71..72 " "
13 BLOCK_EXPR@[72; 341) 13 BLOCK_EXPR@72..341
14 BLOCK@[72; 341) 14 BLOCK@72..341
15 L_CURLY@[72; 73) "{" 15 L_CURLY@72..73 "{"
16 WHITESPACE@[73; 78) "\n " 16 WHITESPACE@73..78 "\n "
17 EXPR_STMT@[78; 141) 17 EXPR_STMT@78..141
18 MATCH_EXPR@[78; 141) 18 MATCH_EXPR@78..141
19 MATCH_KW@[78; 83) "match" 19 MATCH_KW@78..83 "match"
20 WHITESPACE@[83; 84) " " 20 WHITESPACE@83..84 " "
21 CALL_EXPR@[84; 92) 21 CALL_EXPR@84..92
22 PATH_EXPR@[84; 88) 22 PATH_EXPR@84..88
23 PATH@[84; 88) 23 PATH@84..88
24 PATH_SEGMENT@[84; 88) 24 PATH_SEGMENT@84..88
25 NAME_REF@[84; 88) 25 NAME_REF@84..88
26 IDENT@[84; 88) "Some" 26 IDENT@84..88 "Some"
27 ARG_LIST@[88; 92) 27 ARG_LIST@88..92
28 L_PAREN@[88; 89) "(" 28 L_PAREN@88..89 "("
29 PREFIX_EXPR@[89; 91) 29 PREFIX_EXPR@89..91
30 MINUS@[89; 90) "-" 30 MINUS@89..90 "-"
31 LITERAL@[90; 91) 31 LITERAL@90..91
32 INT_NUMBER@[90; 91) "1" 32 INT_NUMBER@90..91 "1"
33 R_PAREN@[91; 92) ")" 33 R_PAREN@91..92 ")"
34 WHITESPACE@[92; 93) " " 34 WHITESPACE@92..93 " "
35 MATCH_ARM_LIST@[93; 141) 35 MATCH_ARM_LIST@93..141
36 L_CURLY@[93; 94) "{" 36 L_CURLY@93..94 "{"
37 WHITESPACE@[94; 103) "\n " 37 WHITESPACE@94..103 "\n "
38 MATCH_ARM@[103; 117) 38 MATCH_ARM@103..117
39 TUPLE_STRUCT_PAT@[103; 111) 39 TUPLE_STRUCT_PAT@103..111
40 PATH@[103; 107) 40 PATH@103..107
41 PATH_SEGMENT@[103; 107) 41 PATH_SEGMENT@103..107
42 NAME_REF@[103; 107) 42 NAME_REF@103..107
43 IDENT@[103; 107) "Some" 43 IDENT@103..107 "Some"
44 L_PAREN@[107; 108) "(" 44 L_PAREN@107..108 "("
45 LITERAL_PAT@[108; 110) 45 LITERAL_PAT@108..110
46 MINUS@[108; 109) "-" 46 MINUS@108..109 "-"
47 LITERAL@[109; 110) 47 LITERAL@109..110
48 INT_NUMBER@[109; 110) "1" 48 INT_NUMBER@109..110 "1"
49 R_PAREN@[110; 111) ")" 49 R_PAREN@110..111 ")"
50 WHITESPACE@[111; 112) " " 50 WHITESPACE@111..112 " "
51 FAT_ARROW@[112; 114) "=>" 51 FAT_ARROW@112..114 "=>"
52 WHITESPACE@[114; 115) " " 52 WHITESPACE@114..115 " "
53 TUPLE_EXPR@[115; 117) 53 TUPLE_EXPR@115..117
54 L_PAREN@[115; 116) "(" 54 L_PAREN@115..116 "("
55 R_PAREN@[116; 117) ")" 55 R_PAREN@116..117 ")"
56 COMMA@[117; 118) "," 56 COMMA@117..118 ","
57 WHITESPACE@[118; 127) "\n " 57 WHITESPACE@118..127 "\n "
58 MATCH_ARM@[127; 134) 58 MATCH_ARM@127..134
59 PLACEHOLDER_PAT@[127; 128) 59 PLACEHOLDER_PAT@127..128
60 UNDERSCORE@[127; 128) "_" 60 UNDERSCORE@127..128 "_"
61 WHITESPACE@[128; 129) " " 61 WHITESPACE@128..129 " "
62 FAT_ARROW@[129; 131) "=>" 62 FAT_ARROW@129..131 "=>"
63 WHITESPACE@[131; 132) " " 63 WHITESPACE@131..132 " "
64 TUPLE_EXPR@[132; 134) 64 TUPLE_EXPR@132..134
65 L_PAREN@[132; 133) "(" 65 L_PAREN@132..133 "("
66 R_PAREN@[133; 134) ")" 66 R_PAREN@133..134 ")"
67 COMMA@[134; 135) "," 67 COMMA@134..135 ","
68 WHITESPACE@[135; 140) "\n " 68 WHITESPACE@135..140 "\n "
69 R_CURLY@[140; 141) "}" 69 R_CURLY@140..141 "}"
70 WHITESPACE@[141; 147) "\n\n " 70 WHITESPACE@141..147 "\n\n "
71 EXPR_STMT@[147; 222) 71 EXPR_STMT@147..222
72 MATCH_EXPR@[147; 222) 72 MATCH_EXPR@147..222
73 MATCH_KW@[147; 152) "match" 73 MATCH_KW@147..152 "match"
74 WHITESPACE@[152; 153) " " 74 WHITESPACE@152..153 " "
75 CALL_EXPR@[153; 167) 75 CALL_EXPR@153..167
76 PATH_EXPR@[153; 157) 76 PATH_EXPR@153..157
77 PATH@[153; 157) 77 PATH@153..157
78 PATH_SEGMENT@[153; 157) 78 PATH_SEGMENT@153..157
79 NAME_REF@[153; 157) 79 NAME_REF@153..157
80 IDENT@[153; 157) "Some" 80 IDENT@153..157 "Some"
81 ARG_LIST@[157; 167) 81 ARG_LIST@157..167
82 L_PAREN@[157; 158) "(" 82 L_PAREN@157..158 "("
83 TUPLE_EXPR@[158; 166) 83 TUPLE_EXPR@158..166
84 L_PAREN@[158; 159) "(" 84 L_PAREN@158..159 "("
85 PREFIX_EXPR@[159; 161) 85 PREFIX_EXPR@159..161
86 MINUS@[159; 160) "-" 86 MINUS@159..160 "-"
87 LITERAL@[160; 161) 87 LITERAL@160..161
88 INT_NUMBER@[160; 161) "1" 88 INT_NUMBER@160..161 "1"
89 COMMA@[161; 162) "," 89 COMMA@161..162 ","
90 WHITESPACE@[162; 163) " " 90 WHITESPACE@162..163 " "
91 PREFIX_EXPR@[163; 165) 91 PREFIX_EXPR@163..165
92 MINUS@[163; 164) "-" 92 MINUS@163..164 "-"
93 LITERAL@[164; 165) 93 LITERAL@164..165
94 INT_NUMBER@[164; 165) "1" 94 INT_NUMBER@164..165 "1"
95 R_PAREN@[165; 166) ")" 95 R_PAREN@165..166 ")"
96 R_PAREN@[166; 167) ")" 96 R_PAREN@166..167 ")"
97 WHITESPACE@[167; 168) " " 97 WHITESPACE@167..168 " "
98 MATCH_ARM_LIST@[168; 222) 98 MATCH_ARM_LIST@168..222
99 L_CURLY@[168; 169) "{" 99 L_CURLY@168..169 "{"
100 WHITESPACE@[169; 178) "\n " 100 WHITESPACE@169..178 "\n "
101 MATCH_ARM@[178; 198) 101 MATCH_ARM@178..198
102 TUPLE_STRUCT_PAT@[178; 192) 102 TUPLE_STRUCT_PAT@178..192
103 PATH@[178; 182) 103 PATH@178..182
104 PATH_SEGMENT@[178; 182) 104 PATH_SEGMENT@178..182
105 NAME_REF@[178; 182) 105 NAME_REF@178..182
106 IDENT@[178; 182) "Some" 106 IDENT@178..182 "Some"
107 L_PAREN@[182; 183) "(" 107 L_PAREN@182..183 "("
108 TUPLE_PAT@[183; 191) 108 TUPLE_PAT@183..191
109 L_PAREN@[183; 184) "(" 109 L_PAREN@183..184 "("
110 LITERAL_PAT@[184; 186) 110 LITERAL_PAT@184..186
111 MINUS@[184; 185) "-" 111 MINUS@184..185 "-"
112 LITERAL@[185; 186) 112 LITERAL@185..186
113 INT_NUMBER@[185; 186) "1" 113 INT_NUMBER@185..186 "1"
114 COMMA@[186; 187) "," 114 COMMA@186..187 ","
115 WHITESPACE@[187; 188) " " 115 WHITESPACE@187..188 " "
116 LITERAL_PAT@[188; 190) 116 LITERAL_PAT@188..190
117 MINUS@[188; 189) "-" 117 MINUS@188..189 "-"
118 LITERAL@[189; 190) 118 LITERAL@189..190
119 INT_NUMBER@[189; 190) "1" 119 INT_NUMBER@189..190 "1"
120 R_PAREN@[190; 191) ")" 120 R_PAREN@190..191 ")"
121 R_PAREN@[191; 192) ")" 121 R_PAREN@191..192 ")"
122 WHITESPACE@[192; 193) " " 122 WHITESPACE@192..193 " "
123 FAT_ARROW@[193; 195) "=>" 123 FAT_ARROW@193..195 "=>"
124 WHITESPACE@[195; 196) " " 124 WHITESPACE@195..196 " "
125 TUPLE_EXPR@[196; 198) 125 TUPLE_EXPR@196..198
126 L_PAREN@[196; 197) "(" 126 L_PAREN@196..197 "("
127 R_PAREN@[197; 198) ")" 127 R_PAREN@197..198 ")"
128 COMMA@[198; 199) "," 128 COMMA@198..199 ","
129 WHITESPACE@[199; 208) "\n " 129 WHITESPACE@199..208 "\n "
130 MATCH_ARM@[208; 215) 130 MATCH_ARM@208..215
131 PLACEHOLDER_PAT@[208; 209) 131 PLACEHOLDER_PAT@208..209
132 UNDERSCORE@[208; 209) "_" 132 UNDERSCORE@208..209 "_"
133 WHITESPACE@[209; 210) " " 133 WHITESPACE@209..210 " "
134 FAT_ARROW@[210; 212) "=>" 134 FAT_ARROW@210..212 "=>"
135 WHITESPACE@[212; 213) " " 135 WHITESPACE@212..213 " "
136 TUPLE_EXPR@[213; 215) 136 TUPLE_EXPR@213..215
137 L_PAREN@[213; 214) "(" 137 L_PAREN@213..214 "("
138 R_PAREN@[214; 215) ")" 138 R_PAREN@214..215 ")"
139 COMMA@[215; 216) "," 139 COMMA@215..216 ","
140 WHITESPACE@[216; 221) "\n " 140 WHITESPACE@216..221 "\n "
141 R_CURLY@[221; 222) "}" 141 R_CURLY@221..222 "}"
142 WHITESPACE@[222; 228) "\n\n " 142 WHITESPACE@222..228 "\n\n "
143 EXPR_STMT@[228; 299) 143 EXPR_STMT@228..299
144 MATCH_EXPR@[228; 299) 144 MATCH_EXPR@228..299
145 MATCH_KW@[228; 233) "match" 145 MATCH_KW@228..233 "match"
146 WHITESPACE@[233; 234) " " 146 WHITESPACE@233..234 " "
147 CALL_EXPR@[234; 246) 147 CALL_EXPR@234..246
148 PATH_EXPR@[234; 238) 148 PATH_EXPR@234..238
149 PATH@[234; 238) 149 PATH@234..238
150 PATH@[234; 235) 150 PATH@234..235
151 PATH_SEGMENT@[234; 235) 151 PATH_SEGMENT@234..235
152 NAME_REF@[234; 235) 152 NAME_REF@234..235
153 IDENT@[234; 235) "A" 153 IDENT@234..235 "A"
154 COLON2@[235; 237) "::" 154 COLON2@235..237 "::"
155 PATH_SEGMENT@[237; 238) 155 PATH_SEGMENT@237..238
156 NAME_REF@[237; 238) 156 NAME_REF@237..238
157 IDENT@[237; 238) "B" 157 IDENT@237..238 "B"
158 ARG_LIST@[238; 246) 158 ARG_LIST@238..246
159 L_PAREN@[238; 239) "(" 159 L_PAREN@238..239 "("
160 PREFIX_EXPR@[239; 241) 160 PREFIX_EXPR@239..241
161 MINUS@[239; 240) "-" 161 MINUS@239..240 "-"
162 LITERAL@[240; 241) 162 LITERAL@240..241
163 INT_NUMBER@[240; 241) "1" 163 INT_NUMBER@240..241 "1"
164 COMMA@[241; 242) "," 164 COMMA@241..242 ","
165 WHITESPACE@[242; 243) " " 165 WHITESPACE@242..243 " "
166 PREFIX_EXPR@[243; 245) 166 PREFIX_EXPR@243..245
167 MINUS@[243; 244) "-" 167 MINUS@243..244 "-"
168 LITERAL@[244; 245) 168 LITERAL@244..245
169 INT_NUMBER@[244; 245) "1" 169 INT_NUMBER@244..245 "1"
170 R_PAREN@[245; 246) ")" 170 R_PAREN@245..246 ")"
171 WHITESPACE@[246; 247) " " 171 WHITESPACE@246..247 " "
172 MATCH_ARM_LIST@[247; 299) 172 MATCH_ARM_LIST@247..299
173 L_CURLY@[247; 248) "{" 173 L_CURLY@247..248 "{"
174 WHITESPACE@[248; 257) "\n " 174 WHITESPACE@248..257 "\n "
175 MATCH_ARM@[257; 275) 175 MATCH_ARM@257..275
176 TUPLE_STRUCT_PAT@[257; 269) 176 TUPLE_STRUCT_PAT@257..269
177 PATH@[257; 261) 177 PATH@257..261
178 PATH@[257; 258) 178 PATH@257..258
179 PATH_SEGMENT@[257; 258) 179 PATH_SEGMENT@257..258
180 NAME_REF@[257; 258) 180 NAME_REF@257..258
181 IDENT@[257; 258) "A" 181 IDENT@257..258 "A"
182 COLON2@[258; 260) "::" 182 COLON2@258..260 "::"
183 PATH_SEGMENT@[260; 261) 183 PATH_SEGMENT@260..261
184 NAME_REF@[260; 261) 184 NAME_REF@260..261
185 IDENT@[260; 261) "B" 185 IDENT@260..261 "B"
186 L_PAREN@[261; 262) "(" 186 L_PAREN@261..262 "("
187 LITERAL_PAT@[262; 264) 187 LITERAL_PAT@262..264
188 MINUS@[262; 263) "-" 188 MINUS@262..263 "-"
189 LITERAL@[263; 264) 189 LITERAL@263..264
190 INT_NUMBER@[263; 264) "1" 190 INT_NUMBER@263..264 "1"
191 COMMA@[264; 265) "," 191 COMMA@264..265 ","
192 WHITESPACE@[265; 266) " " 192 WHITESPACE@265..266 " "
193 LITERAL_PAT@[266; 268) 193 LITERAL_PAT@266..268
194 MINUS@[266; 267) "-" 194 MINUS@266..267 "-"
195 LITERAL@[267; 268) 195 LITERAL@267..268
196 INT_NUMBER@[267; 268) "1" 196 INT_NUMBER@267..268 "1"
197 R_PAREN@[268; 269) ")" 197 R_PAREN@268..269 ")"
198 WHITESPACE@[269; 270) " " 198 WHITESPACE@269..270 " "
199 FAT_ARROW@[270; 272) "=>" 199 FAT_ARROW@270..272 "=>"
200 WHITESPACE@[272; 273) " " 200 WHITESPACE@272..273 " "
201 TUPLE_EXPR@[273; 275) 201 TUPLE_EXPR@273..275
202 L_PAREN@[273; 274) "(" 202 L_PAREN@273..274 "("
203 R_PAREN@[274; 275) ")" 203 R_PAREN@274..275 ")"
204 COMMA@[275; 276) "," 204 COMMA@275..276 ","
205 WHITESPACE@[276; 285) "\n " 205 WHITESPACE@276..285 "\n "
206 MATCH_ARM@[285; 292) 206 MATCH_ARM@285..292
207 PLACEHOLDER_PAT@[285; 286) 207 PLACEHOLDER_PAT@285..286
208 UNDERSCORE@[285; 286) "_" 208 UNDERSCORE@285..286 "_"
209 WHITESPACE@[286; 287) " " 209 WHITESPACE@286..287 " "
210 FAT_ARROW@[287; 289) "=>" 210 FAT_ARROW@287..289 "=>"
211 WHITESPACE@[289; 290) " " 211 WHITESPACE@289..290 " "
212 TUPLE_EXPR@[290; 292) 212 TUPLE_EXPR@290..292
213 L_PAREN@[290; 291) "(" 213 L_PAREN@290..291 "("
214 R_PAREN@[291; 292) ")" 214 R_PAREN@291..292 ")"
215 COMMA@[292; 293) "," 215 COMMA@292..293 ","
216 WHITESPACE@[293; 298) "\n " 216 WHITESPACE@293..298 "\n "
217 R_CURLY@[298; 299) "}" 217 R_CURLY@298..299 "}"
218 WHITESPACE@[299; 305) "\n\n " 218 WHITESPACE@299..305 "\n\n "
219 IF_EXPR@[305; 339) 219 IF_EXPR@305..339
220 IF_KW@[305; 307) "if" 220 IF_KW@305..307 "if"
221 WHITESPACE@[307; 308) " " 221 WHITESPACE@307..308 " "
222 CONDITION@[308; 331) 222 CONDITION@308..331
223 LET_KW@[308; 311) "let" 223 LET_KW@308..311 "let"
224 WHITESPACE@[311; 312) " " 224 WHITESPACE@311..312 " "
225 TUPLE_STRUCT_PAT@[312; 320) 225 TUPLE_STRUCT_PAT@312..320
226 PATH@[312; 316) 226 PATH@312..316
227 PATH_SEGMENT@[312; 316) 227 PATH_SEGMENT@312..316
228 NAME_REF@[312; 316) 228 NAME_REF@312..316
229 IDENT@[312; 316) "Some" 229 IDENT@312..316 "Some"
230 L_PAREN@[316; 317) "(" 230 L_PAREN@316..317 "("
231 LITERAL_PAT@[317; 319) 231 LITERAL_PAT@317..319
232 MINUS@[317; 318) "-" 232 MINUS@317..318 "-"
233 LITERAL@[318; 319) 233 LITERAL@318..319
234 INT_NUMBER@[318; 319) "1" 234 INT_NUMBER@318..319 "1"
235 R_PAREN@[319; 320) ")" 235 R_PAREN@319..320 ")"
236 WHITESPACE@[320; 321) " " 236 WHITESPACE@320..321 " "
237 EQ@[321; 322) "=" 237 EQ@321..322 "="
238 WHITESPACE@[322; 323) " " 238 WHITESPACE@322..323 " "
239 CALL_EXPR@[323; 331) 239 CALL_EXPR@323..331
240 PATH_EXPR@[323; 327) 240 PATH_EXPR@323..327
241 PATH@[323; 327) 241 PATH@323..327
242 PATH_SEGMENT@[323; 327) 242 PATH_SEGMENT@323..327
243 NAME_REF@[323; 327) 243 NAME_REF@323..327
244 IDENT@[323; 327) "Some" 244 IDENT@323..327 "Some"
245 ARG_LIST@[327; 331) 245 ARG_LIST@327..331
246 L_PAREN@[327; 328) "(" 246 L_PAREN@327..328 "("
247 PREFIX_EXPR@[328; 330) 247 PREFIX_EXPR@328..330
248 MINUS@[328; 329) "-" 248 MINUS@328..329 "-"
249 LITERAL@[329; 330) 249 LITERAL@329..330
250 INT_NUMBER@[329; 330) "1" 250 INT_NUMBER@329..330 "1"
251 R_PAREN@[330; 331) ")" 251 R_PAREN@330..331 ")"
252 WHITESPACE@[331; 332) " " 252 WHITESPACE@331..332 " "
253 BLOCK_EXPR@[332; 339) 253 BLOCK_EXPR@332..339
254 BLOCK@[332; 339) 254 BLOCK@332..339
255 L_CURLY@[332; 333) "{" 255 L_CURLY@332..333 "{"
256 WHITESPACE@[333; 338) "\n " 256 WHITESPACE@333..338 "\n "
257 R_CURLY@[338; 339) "}" 257 R_CURLY@338..339 "}"
258 WHITESPACE@[339; 340) "\n" 258 WHITESPACE@339..340 "\n"
259 R_CURLY@[340; 341) "}" 259 R_CURLY@340..341 "}"
260 WHITESPACE@[341; 343) "\n\n" 260 WHITESPACE@341..343 "\n\n"
261 ENUM_DEF@[343; 367) 261 ENUM_DEF@343..367
262 ENUM_KW@[343; 347) "enum" 262 ENUM_KW@343..347 "enum"
263 WHITESPACE@[347; 348) " " 263 WHITESPACE@347..348 " "
264 NAME@[348; 349) 264 NAME@348..349
265 IDENT@[348; 349) "A" 265 IDENT@348..349 "A"
266 WHITESPACE@[349; 350) " " 266 WHITESPACE@349..350 " "
267 ENUM_VARIANT_LIST@[350; 367) 267 ENUM_VARIANT_LIST@350..367
268 L_CURLY@[350; 351) "{" 268 L_CURLY@350..351 "{"
269 WHITESPACE@[351; 356) "\n " 269 WHITESPACE@351..356 "\n "
270 ENUM_VARIANT@[356; 365) 270 ENUM_VARIANT@356..365
271 NAME@[356; 357) 271 NAME@356..357
272 IDENT@[356; 357) "B" 272 IDENT@356..357 "B"
273 TUPLE_FIELD_DEF_LIST@[357; 365) 273 TUPLE_FIELD_DEF_LIST@357..365
274 L_PAREN@[357; 358) "(" 274 L_PAREN@357..358 "("
275 TUPLE_FIELD_DEF@[358; 360) 275 TUPLE_FIELD_DEF@358..360
276 PATH_TYPE@[358; 360) 276 PATH_TYPE@358..360
277 PATH@[358; 360) 277 PATH@358..360
278 PATH_SEGMENT@[358; 360) 278 PATH_SEGMENT@358..360
279 NAME_REF@[358; 360) 279 NAME_REF@358..360
280 IDENT@[358; 360) "i8" 280 IDENT@358..360 "i8"
281 COMMA@[360; 361) "," 281 COMMA@360..361 ","
282 WHITESPACE@[361; 362) " " 282 WHITESPACE@361..362 " "
283 TUPLE_FIELD_DEF@[362; 364) 283 TUPLE_FIELD_DEF@362..364
284 PATH_TYPE@[362; 364) 284 PATH_TYPE@362..364
285 PATH@[362; 364) 285 PATH@362..364
286 PATH_SEGMENT@[362; 364) 286 PATH_SEGMENT@362..364
287 NAME_REF@[362; 364) 287 NAME_REF@362..364
288 IDENT@[362; 364) "i8" 288 IDENT@362..364 "i8"
289 R_PAREN@[364; 365) ")" 289 R_PAREN@364..365 ")"
290 WHITESPACE@[365; 366) "\n" 290 WHITESPACE@365..366 "\n"
291 R_CURLY@[366; 367) "}" 291 R_CURLY@366..367 "}"
292 WHITESPACE@[367; 369) "\n\n" 292 WHITESPACE@367..369 "\n\n"
293 FN_DEF@[369; 394) 293 FN_DEF@369..394
294 FN_KW@[369; 371) "fn" 294 FN_KW@369..371 "fn"
295 WHITESPACE@[371; 372) " " 295 WHITESPACE@371..372 " "
296 NAME@[372; 375) 296 NAME@372..375
297 IDENT@[372; 375) "foo" 297 IDENT@372..375 "foo"
298 PARAM_LIST@[375; 391) 298 PARAM_LIST@375..391
299 L_PAREN@[375; 376) "(" 299 L_PAREN@375..376 "("
300 PARAM@[376; 390) 300 PARAM@376..390
301 RANGE_PAT@[376; 386) 301 RANGE_PAT@376..386
302 LITERAL_PAT@[376; 380) 302 LITERAL_PAT@376..380
303 MINUS@[376; 377) "-" 303 MINUS@376..377 "-"
304 LITERAL@[377; 380) 304 LITERAL@377..380
305 INT_NUMBER@[377; 380) "128" 305 INT_NUMBER@377..380 "128"
306 DOT2EQ@[380; 383) "..=" 306 DOT2EQ@380..383 "..="
307 LITERAL_PAT@[383; 386) 307 LITERAL_PAT@383..386
308 LITERAL@[383; 386) 308 LITERAL@383..386
309 INT_NUMBER@[383; 386) "127" 309 INT_NUMBER@383..386 "127"
310 COLON@[386; 387) ":" 310 COLON@386..387 ":"
311 WHITESPACE@[387; 388) " " 311 WHITESPACE@387..388 " "
312 PATH_TYPE@[388; 390) 312 PATH_TYPE@388..390
313 PATH@[388; 390) 313 PATH@388..390
314 PATH_SEGMENT@[388; 390) 314 PATH_SEGMENT@388..390
315 NAME_REF@[388; 390) 315 NAME_REF@388..390
316 IDENT@[388; 390) "i8" 316 IDENT@388..390 "i8"
317 R_PAREN@[390; 391) ")" 317 R_PAREN@390..391 ")"
318 WHITESPACE@[391; 392) " " 318 WHITESPACE@391..392 " "
319 BLOCK_EXPR@[392; 394) 319 BLOCK_EXPR@392..394
320 BLOCK@[392; 394) 320 BLOCK@392..394
321 L_CURLY@[392; 393) "{" 321 L_CURLY@392..393 "{"
322 R_CURLY@[393; 394) "}" 322 R_CURLY@393..394 "}"
323 WHITESPACE@[394; 395) "\n" 323 WHITESPACE@394..395 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0048_compound_assignment.rast b/crates/ra_syntax/test_data/parser/ok/0048_compound_assignment.rast
index 849d8a445..9c2701bf7 100644
--- a/crates/ra_syntax/test_data/parser/ok/0048_compound_assignment.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0048_compound_assignment.rast
@@ -1,201 +1,201 @@
1SOURCE_FILE@[0; 257) 1SOURCE_FILE@0..257
2 COMMENT@[0; 58) "// https://github.com ..." 2 COMMENT@0..58 "// https://github.com ..."
3 WHITESPACE@[58; 60) "\n\n" 3 WHITESPACE@58..60 "\n\n"
4 FN_DEF@[60; 256) 4 FN_DEF@60..256
5 FN_KW@[60; 62) "fn" 5 FN_KW@60..62 "fn"
6 WHITESPACE@[62; 63) " " 6 WHITESPACE@62..63 " "
7 NAME@[63; 82) 7 NAME@63..82
8 IDENT@[63; 82) "compound_assignment" 8 IDENT@63..82 "compound_assignment"
9 PARAM_LIST@[82; 84) 9 PARAM_LIST@82..84
10 L_PAREN@[82; 83) "(" 10 L_PAREN@82..83 "("
11 R_PAREN@[83; 84) ")" 11 R_PAREN@83..84 ")"
12 WHITESPACE@[84; 85) " " 12 WHITESPACE@84..85 " "
13 BLOCK_EXPR@[85; 256) 13 BLOCK_EXPR@85..256
14 BLOCK@[85; 256) 14 BLOCK@85..256
15 L_CURLY@[85; 86) "{" 15 L_CURLY@85..86 "{"
16 WHITESPACE@[86; 91) "\n " 16 WHITESPACE@86..91 "\n "
17 LET_STMT@[91; 105) 17 LET_STMT@91..105
18 LET_KW@[91; 94) "let" 18 LET_KW@91..94 "let"
19 WHITESPACE@[94; 95) " " 19 WHITESPACE@94..95 " "
20 BIND_PAT@[95; 100) 20 BIND_PAT@95..100
21 MUT_KW@[95; 98) "mut" 21 MUT_KW@95..98 "mut"
22 WHITESPACE@[98; 99) " " 22 WHITESPACE@98..99 " "
23 NAME@[99; 100) 23 NAME@99..100
24 IDENT@[99; 100) "a" 24 IDENT@99..100 "a"
25 WHITESPACE@[100; 101) " " 25 WHITESPACE@100..101 " "
26 EQ@[101; 102) "=" 26 EQ@101..102 "="
27 WHITESPACE@[102; 103) " " 27 WHITESPACE@102..103 " "
28 LITERAL@[103; 104) 28 LITERAL@103..104
29 INT_NUMBER@[103; 104) "0" 29 INT_NUMBER@103..104 "0"
30 SEMICOLON@[104; 105) ";" 30 SEMICOLON@104..105 ";"
31 WHITESPACE@[105; 110) "\n " 31 WHITESPACE@105..110 "\n "
32 EXPR_STMT@[110; 117) 32 EXPR_STMT@110..117
33 BIN_EXPR@[110; 116) 33 BIN_EXPR@110..116
34 PATH_EXPR@[110; 111) 34 PATH_EXPR@110..111
35 PATH@[110; 111) 35 PATH@110..111
36 PATH_SEGMENT@[110; 111) 36 PATH_SEGMENT@110..111
37 NAME_REF@[110; 111) 37 NAME_REF@110..111
38 IDENT@[110; 111) "a" 38 IDENT@110..111 "a"
39 WHITESPACE@[111; 112) " " 39 WHITESPACE@111..112 " "
40 PLUSEQ@[112; 114) "+=" 40 PLUSEQ@112..114 "+="
41 WHITESPACE@[114; 115) " " 41 WHITESPACE@114..115 " "
42 LITERAL@[115; 116) 42 LITERAL@115..116
43 INT_NUMBER@[115; 116) "1" 43 INT_NUMBER@115..116 "1"
44 SEMICOLON@[116; 117) ";" 44 SEMICOLON@116..117 ";"
45 WHITESPACE@[117; 122) "\n " 45 WHITESPACE@117..122 "\n "
46 EXPR_STMT@[122; 129) 46 EXPR_STMT@122..129
47 BIN_EXPR@[122; 128) 47 BIN_EXPR@122..128
48 PATH_EXPR@[122; 123) 48 PATH_EXPR@122..123
49 PATH@[122; 123) 49 PATH@122..123
50 PATH_SEGMENT@[122; 123) 50 PATH_SEGMENT@122..123
51 NAME_REF@[122; 123) 51 NAME_REF@122..123
52 IDENT@[122; 123) "a" 52 IDENT@122..123 "a"
53 WHITESPACE@[123; 124) " " 53 WHITESPACE@123..124 " "
54 MINUSEQ@[124; 126) "-=" 54 MINUSEQ@124..126 "-="
55 WHITESPACE@[126; 127) " " 55 WHITESPACE@126..127 " "
56 LITERAL@[127; 128) 56 LITERAL@127..128
57 INT_NUMBER@[127; 128) "2" 57 INT_NUMBER@127..128 "2"
58 SEMICOLON@[128; 129) ";" 58 SEMICOLON@128..129 ";"
59 WHITESPACE@[129; 134) "\n " 59 WHITESPACE@129..134 "\n "
60 EXPR_STMT@[134; 141) 60 EXPR_STMT@134..141
61 BIN_EXPR@[134; 140) 61 BIN_EXPR@134..140
62 PATH_EXPR@[134; 135) 62 PATH_EXPR@134..135
63 PATH@[134; 135) 63 PATH@134..135
64 PATH_SEGMENT@[134; 135) 64 PATH_SEGMENT@134..135
65 NAME_REF@[134; 135) 65 NAME_REF@134..135
66 IDENT@[134; 135) "a" 66 IDENT@134..135 "a"
67 WHITESPACE@[135; 136) " " 67 WHITESPACE@135..136 " "
68 STAREQ@[136; 138) "*=" 68 STAREQ@136..138 "*="
69 WHITESPACE@[138; 139) " " 69 WHITESPACE@138..139 " "
70 LITERAL@[139; 140) 70 LITERAL@139..140
71 INT_NUMBER@[139; 140) "3" 71 INT_NUMBER@139..140 "3"
72 SEMICOLON@[140; 141) ";" 72 SEMICOLON@140..141 ";"
73 WHITESPACE@[141; 146) "\n " 73 WHITESPACE@141..146 "\n "
74 EXPR_STMT@[146; 153) 74 EXPR_STMT@146..153
75 BIN_EXPR@[146; 152) 75 BIN_EXPR@146..152
76 PATH_EXPR@[146; 147) 76 PATH_EXPR@146..147
77 PATH@[146; 147) 77 PATH@146..147
78 PATH_SEGMENT@[146; 147) 78 PATH_SEGMENT@146..147
79 NAME_REF@[146; 147) 79 NAME_REF@146..147
80 IDENT@[146; 147) "a" 80 IDENT@146..147 "a"
81 WHITESPACE@[147; 148) " " 81 WHITESPACE@147..148 " "
82 PERCENTEQ@[148; 150) "%=" 82 PERCENTEQ@148..150 "%="
83 WHITESPACE@[150; 151) " " 83 WHITESPACE@150..151 " "
84 LITERAL@[151; 152) 84 LITERAL@151..152
85 INT_NUMBER@[151; 152) "4" 85 INT_NUMBER@151..152 "4"
86 SEMICOLON@[152; 153) ";" 86 SEMICOLON@152..153 ";"
87 WHITESPACE@[153; 158) "\n " 87 WHITESPACE@153..158 "\n "
88 EXPR_STMT@[158; 165) 88 EXPR_STMT@158..165
89 BIN_EXPR@[158; 164) 89 BIN_EXPR@158..164
90 PATH_EXPR@[158; 159) 90 PATH_EXPR@158..159
91 PATH@[158; 159) 91 PATH@158..159
92 PATH_SEGMENT@[158; 159) 92 PATH_SEGMENT@158..159
93 NAME_REF@[158; 159) 93 NAME_REF@158..159
94 IDENT@[158; 159) "a" 94 IDENT@158..159 "a"
95 WHITESPACE@[159; 160) " " 95 WHITESPACE@159..160 " "
96 SLASHEQ@[160; 162) "/=" 96 SLASHEQ@160..162 "/="
97 WHITESPACE@[162; 163) " " 97 WHITESPACE@162..163 " "
98 LITERAL@[163; 164) 98 LITERAL@163..164
99 INT_NUMBER@[163; 164) "5" 99 INT_NUMBER@163..164 "5"
100 SEMICOLON@[164; 165) ";" 100 SEMICOLON@164..165 ";"
101 WHITESPACE@[165; 170) "\n " 101 WHITESPACE@165..170 "\n "
102 EXPR_STMT@[170; 177) 102 EXPR_STMT@170..177
103 BIN_EXPR@[170; 176) 103 BIN_EXPR@170..176
104 PATH_EXPR@[170; 171) 104 PATH_EXPR@170..171
105 PATH@[170; 171) 105 PATH@170..171
106 PATH_SEGMENT@[170; 171) 106 PATH_SEGMENT@170..171
107 NAME_REF@[170; 171) 107 NAME_REF@170..171
108 IDENT@[170; 171) "a" 108 IDENT@170..171 "a"
109 WHITESPACE@[171; 172) " " 109 WHITESPACE@171..172 " "
110 PIPEEQ@[172; 174) "|=" 110 PIPEEQ@172..174 "|="
111 WHITESPACE@[174; 175) " " 111 WHITESPACE@174..175 " "
112 LITERAL@[175; 176) 112 LITERAL@175..176
113 INT_NUMBER@[175; 176) "6" 113 INT_NUMBER@175..176 "6"
114 SEMICOLON@[176; 177) ";" 114 SEMICOLON@176..177 ";"
115 WHITESPACE@[177; 182) "\n " 115 WHITESPACE@177..182 "\n "
116 EXPR_STMT@[182; 189) 116 EXPR_STMT@182..189
117 BIN_EXPR@[182; 188) 117 BIN_EXPR@182..188
118 PATH_EXPR@[182; 183) 118 PATH_EXPR@182..183
119 PATH@[182; 183) 119 PATH@182..183
120 PATH_SEGMENT@[182; 183) 120 PATH_SEGMENT@182..183
121 NAME_REF@[182; 183) 121 NAME_REF@182..183
122 IDENT@[182; 183) "a" 122 IDENT@182..183 "a"
123 WHITESPACE@[183; 184) " " 123 WHITESPACE@183..184 " "
124 AMPEQ@[184; 186) "&=" 124 AMPEQ@184..186 "&="
125 WHITESPACE@[186; 187) " " 125 WHITESPACE@186..187 " "
126 LITERAL@[187; 188) 126 LITERAL@187..188
127 INT_NUMBER@[187; 188) "7" 127 INT_NUMBER@187..188 "7"
128 SEMICOLON@[188; 189) ";" 128 SEMICOLON@188..189 ";"
129 WHITESPACE@[189; 194) "\n " 129 WHITESPACE@189..194 "\n "
130 EXPR_STMT@[194; 201) 130 EXPR_STMT@194..201
131 BIN_EXPR@[194; 200) 131 BIN_EXPR@194..200
132 PATH_EXPR@[194; 195) 132 PATH_EXPR@194..195
133 PATH@[194; 195) 133 PATH@194..195
134 PATH_SEGMENT@[194; 195) 134 PATH_SEGMENT@194..195
135 NAME_REF@[194; 195) 135 NAME_REF@194..195
136 IDENT@[194; 195) "a" 136 IDENT@194..195 "a"
137 WHITESPACE@[195; 196) " " 137 WHITESPACE@195..196 " "
138 CARETEQ@[196; 198) "^=" 138 CARETEQ@196..198 "^="
139 WHITESPACE@[198; 199) " " 139 WHITESPACE@198..199 " "
140 LITERAL@[199; 200) 140 LITERAL@199..200
141 INT_NUMBER@[199; 200) "8" 141 INT_NUMBER@199..200 "8"
142 SEMICOLON@[200; 201) ";" 142 SEMICOLON@200..201 ";"
143 WHITESPACE@[201; 206) "\n " 143 WHITESPACE@201..206 "\n "
144 EXPR_STMT@[206; 213) 144 EXPR_STMT@206..213
145 BIN_EXPR@[206; 212) 145 BIN_EXPR@206..212
146 PATH_EXPR@[206; 207) 146 PATH_EXPR@206..207
147 PATH@[206; 207) 147 PATH@206..207
148 PATH_SEGMENT@[206; 207) 148 PATH_SEGMENT@206..207
149 NAME_REF@[206; 207) 149 NAME_REF@206..207
150 IDENT@[206; 207) "a" 150 IDENT@206..207 "a"
151 WHITESPACE@[207; 208) " " 151 WHITESPACE@207..208 " "
152 LTEQ@[208; 210) "<=" 152 LTEQ@208..210 "<="
153 WHITESPACE@[210; 211) " " 153 WHITESPACE@210..211 " "
154 LITERAL@[211; 212) 154 LITERAL@211..212
155 INT_NUMBER@[211; 212) "9" 155 INT_NUMBER@211..212 "9"
156 SEMICOLON@[212; 213) ";" 156 SEMICOLON@212..213 ";"
157 WHITESPACE@[213; 218) "\n " 157 WHITESPACE@213..218 "\n "
158 EXPR_STMT@[218; 226) 158 EXPR_STMT@218..226
159 BIN_EXPR@[218; 225) 159 BIN_EXPR@218..225
160 PATH_EXPR@[218; 219) 160 PATH_EXPR@218..219
161 PATH@[218; 219) 161 PATH@218..219
162 PATH_SEGMENT@[218; 219) 162 PATH_SEGMENT@218..219
163 NAME_REF@[218; 219) 163 NAME_REF@218..219
164 IDENT@[218; 219) "a" 164 IDENT@218..219 "a"
165 WHITESPACE@[219; 220) " " 165 WHITESPACE@219..220 " "
166 GTEQ@[220; 222) ">=" 166 GTEQ@220..222 ">="
167 WHITESPACE@[222; 223) " " 167 WHITESPACE@222..223 " "
168 LITERAL@[223; 225) 168 LITERAL@223..225
169 INT_NUMBER@[223; 225) "10" 169 INT_NUMBER@223..225 "10"
170 SEMICOLON@[225; 226) ";" 170 SEMICOLON@225..226 ";"
171 WHITESPACE@[226; 231) "\n " 171 WHITESPACE@226..231 "\n "
172 EXPR_STMT@[231; 240) 172 EXPR_STMT@231..240
173 BIN_EXPR@[231; 239) 173 BIN_EXPR@231..239
174 PATH_EXPR@[231; 232) 174 PATH_EXPR@231..232
175 PATH@[231; 232) 175 PATH@231..232
176 PATH_SEGMENT@[231; 232) 176 PATH_SEGMENT@231..232
177 NAME_REF@[231; 232) 177 NAME_REF@231..232
178 IDENT@[231; 232) "a" 178 IDENT@231..232 "a"
179 WHITESPACE@[232; 233) " " 179 WHITESPACE@232..233 " "
180 SHREQ@[233; 236) ">>=" 180 SHREQ@233..236 ">>="
181 WHITESPACE@[236; 237) " " 181 WHITESPACE@236..237 " "
182 LITERAL@[237; 239) 182 LITERAL@237..239
183 INT_NUMBER@[237; 239) "11" 183 INT_NUMBER@237..239 "11"
184 SEMICOLON@[239; 240) ";" 184 SEMICOLON@239..240 ";"
185 WHITESPACE@[240; 245) "\n " 185 WHITESPACE@240..245 "\n "
186 EXPR_STMT@[245; 254) 186 EXPR_STMT@245..254
187 BIN_EXPR@[245; 253) 187 BIN_EXPR@245..253
188 PATH_EXPR@[245; 246) 188 PATH_EXPR@245..246
189 PATH@[245; 246) 189 PATH@245..246
190 PATH_SEGMENT@[245; 246) 190 PATH_SEGMENT@245..246
191 NAME_REF@[245; 246) 191 NAME_REF@245..246
192 IDENT@[245; 246) "a" 192 IDENT@245..246 "a"
193 WHITESPACE@[246; 247) " " 193 WHITESPACE@246..247 " "
194 SHLEQ@[247; 250) "<<=" 194 SHLEQ@247..250 "<<="
195 WHITESPACE@[250; 251) " " 195 WHITESPACE@250..251 " "
196 LITERAL@[251; 253) 196 LITERAL@251..253
197 INT_NUMBER@[251; 253) "12" 197 INT_NUMBER@251..253 "12"
198 SEMICOLON@[253; 254) ";" 198 SEMICOLON@253..254 ";"
199 WHITESPACE@[254; 255) "\n" 199 WHITESPACE@254..255 "\n"
200 R_CURLY@[255; 256) "}" 200 R_CURLY@255..256 "}"
201 WHITESPACE@[256; 257) "\n" 201 WHITESPACE@256..257 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0049_async_block.rast b/crates/ra_syntax/test_data/parser/ok/0049_async_block.rast
index 0d32f0115..750527bb9 100644
--- a/crates/ra_syntax/test_data/parser/ok/0049_async_block.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0049_async_block.rast
@@ -1,36 +1,36 @@
1SOURCE_FILE@[0; 47) 1SOURCE_FILE@0..47
2 FN_DEF@[0; 45) 2 FN_DEF@0..45
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 45) 11 BLOCK_EXPR@9..45
12 BLOCK@[9; 45) 12 BLOCK@9..45
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 24) 15 EXPR_STMT@15..24
16 BLOCK_EXPR@[15; 23) 16 BLOCK_EXPR@15..23
17 ASYNC_KW@[15; 20) "async" 17 ASYNC_KW@15..20 "async"
18 WHITESPACE@[20; 21) " " 18 WHITESPACE@20..21 " "
19 BLOCK@[21; 23) 19 BLOCK@21..23
20 L_CURLY@[21; 22) "{" 20 L_CURLY@21..22 "{"
21 R_CURLY@[22; 23) "}" 21 R_CURLY@22..23 "}"
22 SEMICOLON@[23; 24) ";" 22 SEMICOLON@23..24 ";"
23 WHITESPACE@[24; 29) "\n " 23 WHITESPACE@24..29 "\n "
24 EXPR_STMT@[29; 43) 24 EXPR_STMT@29..43
25 BLOCK_EXPR@[29; 42) 25 BLOCK_EXPR@29..42
26 ASYNC_KW@[29; 34) "async" 26 ASYNC_KW@29..34 "async"
27 WHITESPACE@[34; 35) " " 27 WHITESPACE@34..35 " "
28 MOVE_KW@[35; 39) "move" 28 MOVE_KW@35..39 "move"
29 WHITESPACE@[39; 40) " " 29 WHITESPACE@39..40 " "
30 BLOCK@[40; 42) 30 BLOCK@40..42
31 L_CURLY@[40; 41) "{" 31 L_CURLY@40..41 "{"
32 R_CURLY@[41; 42) "}" 32 R_CURLY@41..42 "}"
33 SEMICOLON@[42; 43) ";" 33 SEMICOLON@42..43 ";"
34 WHITESPACE@[43; 44) "\n" 34 WHITESPACE@43..44 "\n"
35 R_CURLY@[44; 45) "}" 35 R_CURLY@44..45 "}"
36 WHITESPACE@[45; 47) "\n\n" 36 WHITESPACE@45..47 "\n\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0050_async_block_as_argument.rast b/crates/ra_syntax/test_data/parser/ok/0050_async_block_as_argument.rast
index 17591d99f..b5577e933 100644
--- a/crates/ra_syntax/test_data/parser/ok/0050_async_block_as_argument.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0050_async_block_as_argument.rast
@@ -1,92 +1,92 @@
1SOURCE_FILE@[0; 95) 1SOURCE_FILE@0..95
2 FN_DEF@[0; 52) 2 FN_DEF@0..52
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 49) 7 PARAM_LIST@6..49
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 PARAM@[7; 48) 9 PARAM@7..48
10 BIND_PAT@[7; 8) 10 BIND_PAT@7..8
11 NAME@[7; 8) 11 NAME@7..8
12 IDENT@[7; 8) "x" 12 IDENT@7..8 "x"
13 COLON@[8; 9) ":" 13 COLON@8..9 ":"
14 WHITESPACE@[9; 10) " " 14 WHITESPACE@9..10 " "
15 IMPL_TRAIT_TYPE@[10; 48) 15 IMPL_TRAIT_TYPE@10..48
16 IMPL_KW@[10; 14) "impl" 16 IMPL_KW@10..14 "impl"
17 WHITESPACE@[14; 15) " " 17 WHITESPACE@14..15 " "
18 TYPE_BOUND_LIST@[15; 48) 18 TYPE_BOUND_LIST@15..48
19 TYPE_BOUND@[15; 48) 19 TYPE_BOUND@15..48
20 PATH_TYPE@[15; 48) 20 PATH_TYPE@15..48
21 PATH@[15; 48) 21 PATH@15..48
22 PATH@[15; 26) 22 PATH@15..26
23 PATH@[15; 18) 23 PATH@15..18
24 PATH_SEGMENT@[15; 18) 24 PATH_SEGMENT@15..18
25 NAME_REF@[15; 18) 25 NAME_REF@15..18
26 IDENT@[15; 18) "std" 26 IDENT@15..18 "std"
27 COLON2@[18; 20) "::" 27 COLON2@18..20 "::"
28 PATH_SEGMENT@[20; 26) 28 PATH_SEGMENT@20..26
29 NAME_REF@[20; 26) 29 NAME_REF@20..26
30 IDENT@[20; 26) "future" 30 IDENT@20..26 "future"
31 COLON2@[26; 28) "::" 31 COLON2@26..28 "::"
32 PATH_SEGMENT@[28; 48) 32 PATH_SEGMENT@28..48
33 NAME_REF@[28; 34) 33 NAME_REF@28..34
34 IDENT@[28; 34) "Future" 34 IDENT@28..34 "Future"
35 TYPE_ARG_LIST@[34; 48) 35 TYPE_ARG_LIST@34..48
36 L_ANGLE@[34; 35) "<" 36 L_ANGLE@34..35 "<"
37 ASSOC_TYPE_ARG@[35; 47) 37 ASSOC_TYPE_ARG@35..47
38 NAME_REF@[35; 41) 38 NAME_REF@35..41
39 IDENT@[35; 41) "Output" 39 IDENT@35..41 "Output"
40 WHITESPACE@[41; 42) " " 40 WHITESPACE@41..42 " "
41 EQ@[42; 43) "=" 41 EQ@42..43 "="
42 WHITESPACE@[43; 44) " " 42 WHITESPACE@43..44 " "
43 PATH_TYPE@[44; 47) 43 PATH_TYPE@44..47
44 PATH@[44; 47) 44 PATH@44..47
45 PATH_SEGMENT@[44; 47) 45 PATH_SEGMENT@44..47
46 NAME_REF@[44; 47) 46 NAME_REF@44..47
47 IDENT@[44; 47) "i32" 47 IDENT@44..47 "i32"
48 R_ANGLE@[47; 48) ">" 48 R_ANGLE@47..48 ">"
49 R_PAREN@[48; 49) ")" 49 R_PAREN@48..49 ")"
50 WHITESPACE@[49; 50) " " 50 WHITESPACE@49..50 " "
51 BLOCK_EXPR@[50; 52) 51 BLOCK_EXPR@50..52
52 BLOCK@[50; 52) 52 BLOCK@50..52
53 L_CURLY@[50; 51) "{" 53 L_CURLY@50..51 "{"
54 R_CURLY@[51; 52) "}" 54 R_CURLY@51..52 "}"
55 WHITESPACE@[52; 54) "\n\n" 55 WHITESPACE@52..54 "\n\n"
56 FN_DEF@[54; 94) 56 FN_DEF@54..94
57 FN_KW@[54; 56) "fn" 57 FN_KW@54..56 "fn"
58 WHITESPACE@[56; 57) " " 58 WHITESPACE@56..57 " "
59 NAME@[57; 61) 59 NAME@57..61
60 IDENT@[57; 61) "main" 60 IDENT@57..61 "main"
61 PARAM_LIST@[61; 63) 61 PARAM_LIST@61..63
62 L_PAREN@[61; 62) "(" 62 L_PAREN@61..62 "("
63 R_PAREN@[62; 63) ")" 63 R_PAREN@62..63 ")"
64 WHITESPACE@[63; 64) " " 64 WHITESPACE@63..64 " "
65 BLOCK_EXPR@[64; 94) 65 BLOCK_EXPR@64..94
66 BLOCK@[64; 94) 66 BLOCK@64..94
67 L_CURLY@[64; 65) "{" 67 L_CURLY@64..65 "{"
68 WHITESPACE@[65; 70) "\n " 68 WHITESPACE@65..70 "\n "
69 CALL_EXPR@[70; 92) 69 CALL_EXPR@70..92
70 PATH_EXPR@[70; 73) 70 PATH_EXPR@70..73
71 PATH@[70; 73) 71 PATH@70..73
72 PATH_SEGMENT@[70; 73) 72 PATH_SEGMENT@70..73
73 NAME_REF@[70; 73) 73 NAME_REF@70..73
74 IDENT@[70; 73) "foo" 74 IDENT@70..73 "foo"
75 ARG_LIST@[73; 92) 75 ARG_LIST@73..92
76 L_PAREN@[73; 74) "(" 76 L_PAREN@73..74 "("
77 BLOCK_EXPR@[74; 91) 77 BLOCK_EXPR@74..91
78 ASYNC_KW@[74; 79) "async" 78 ASYNC_KW@74..79 "async"
79 WHITESPACE@[79; 80) " " 79 WHITESPACE@79..80 " "
80 MOVE_KW@[80; 84) "move" 80 MOVE_KW@80..84 "move"
81 WHITESPACE@[84; 85) " " 81 WHITESPACE@84..85 " "
82 BLOCK@[85; 91) 82 BLOCK@85..91
83 L_CURLY@[85; 86) "{" 83 L_CURLY@85..86 "{"
84 WHITESPACE@[86; 87) " " 84 WHITESPACE@86..87 " "
85 LITERAL@[87; 89) 85 LITERAL@87..89
86 INT_NUMBER@[87; 89) "12" 86 INT_NUMBER@87..89 "12"
87 WHITESPACE@[89; 90) " " 87 WHITESPACE@89..90 " "
88 R_CURLY@[90; 91) "}" 88 R_CURLY@90..91 "}"
89 R_PAREN@[91; 92) ")" 89 R_PAREN@91..92 ")"
90 WHITESPACE@[92; 93) "\n" 90 WHITESPACE@92..93 "\n"
91 R_CURLY@[93; 94) "}" 91 R_CURLY@93..94 "}"
92 WHITESPACE@[94; 95) "\n" 92 WHITESPACE@94..95 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast b/crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast
index 8fd28427c..6aacc2141 100644
--- a/crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast
@@ -1,519 +1,519 @@
1SOURCE_FILE@[0; 519) 1SOURCE_FILE@0..519
2 FN_DEF@[0; 37) 2 FN_DEF@0..37
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 5) 5 NAME@3..5
6 IDENT@[3; 5) "g1" 6 IDENT@3..5 "g1"
7 PARAM_LIST@[5; 34) 7 PARAM_LIST@5..34
8 L_PAREN@[5; 6) "(" 8 L_PAREN@5..6 "("
9 ATTR@[6; 14) 9 ATTR@6..14
10 POUND@[6; 7) "#" 10 POUND@6..7 "#"
11 L_BRACK@[7; 8) "[" 11 L_BRACK@7..8 "["
12 PATH@[8; 13) 12 PATH@8..13
13 PATH_SEGMENT@[8; 13) 13 PATH_SEGMENT@8..13
14 NAME_REF@[8; 13) 14 NAME_REF@8..13
15 IDENT@[8; 13) "attr1" 15 IDENT@8..13 "attr1"
16 R_BRACK@[13; 14) "]" 16 R_BRACK@13..14 "]"
17 WHITESPACE@[14; 15) " " 17 WHITESPACE@14..15 " "
18 ATTR@[15; 23) 18 ATTR@15..23
19 POUND@[15; 16) "#" 19 POUND@15..16 "#"
20 L_BRACK@[16; 17) "[" 20 L_BRACK@16..17 "["
21 PATH@[17; 22) 21 PATH@17..22
22 PATH_SEGMENT@[17; 22) 22 PATH_SEGMENT@17..22
23 NAME_REF@[17; 22) 23 NAME_REF@17..22
24 IDENT@[17; 22) "attr2" 24 IDENT@17..22 "attr2"
25 R_BRACK@[22; 23) "]" 25 R_BRACK@22..23 "]"
26 WHITESPACE@[23; 24) " " 26 WHITESPACE@23..24 " "
27 PARAM@[24; 33) 27 PARAM@24..33
28 BIND_PAT@[24; 27) 28 BIND_PAT@24..27
29 NAME@[24; 27) 29 NAME@24..27
30 IDENT@[24; 27) "pat" 30 IDENT@24..27 "pat"
31 COLON@[27; 28) ":" 31 COLON@27..28 ":"
32 WHITESPACE@[28; 29) " " 32 WHITESPACE@28..29 " "
33 PATH_TYPE@[29; 33) 33 PATH_TYPE@29..33
34 PATH@[29; 33) 34 PATH@29..33
35 PATH_SEGMENT@[29; 33) 35 PATH_SEGMENT@29..33
36 NAME_REF@[29; 33) 36 NAME_REF@29..33
37 IDENT@[29; 33) "Type" 37 IDENT@29..33 "Type"
38 R_PAREN@[33; 34) ")" 38 R_PAREN@33..34 ")"
39 WHITESPACE@[34; 35) " " 39 WHITESPACE@34..35 " "
40 BLOCK_EXPR@[35; 37) 40 BLOCK_EXPR@35..37
41 BLOCK@[35; 37) 41 BLOCK@35..37
42 L_CURLY@[35; 36) "{" 42 L_CURLY@35..36 "{"
43 R_CURLY@[36; 37) "}" 43 R_CURLY@36..37 "}"
44 WHITESPACE@[37; 38) "\n" 44 WHITESPACE@37..38 "\n"
45 FN_DEF@[38; 62) 45 FN_DEF@38..62
46 FN_KW@[38; 40) "fn" 46 FN_KW@38..40 "fn"
47 WHITESPACE@[40; 41) " " 47 WHITESPACE@40..41 " "
48 NAME@[41; 43) 48 NAME@41..43
49 IDENT@[41; 43) "g2" 49 IDENT@41..43 "g2"
50 PARAM_LIST@[43; 59) 50 PARAM_LIST@43..59
51 L_PAREN@[43; 44) "(" 51 L_PAREN@43..44 "("
52 ATTR@[44; 52) 52 ATTR@44..52
53 POUND@[44; 45) "#" 53 POUND@44..45 "#"
54 L_BRACK@[45; 46) "[" 54 L_BRACK@45..46 "["
55 PATH@[46; 51) 55 PATH@46..51
56 PATH_SEGMENT@[46; 51) 56 PATH_SEGMENT@46..51
57 NAME_REF@[46; 51) 57 NAME_REF@46..51
58 IDENT@[46; 51) "attr1" 58 IDENT@46..51 "attr1"
59 R_BRACK@[51; 52) "]" 59 R_BRACK@51..52 "]"
60 WHITESPACE@[52; 53) " " 60 WHITESPACE@52..53 " "
61 PARAM@[53; 58) 61 PARAM@53..58
62 BIND_PAT@[53; 54) 62 BIND_PAT@53..54
63 NAME@[53; 54) 63 NAME@53..54
64 IDENT@[53; 54) "x" 64 IDENT@53..54 "x"
65 COLON@[54; 55) ":" 65 COLON@54..55 ":"
66 WHITESPACE@[55; 56) " " 66 WHITESPACE@55..56 " "
67 PATH_TYPE@[56; 58) 67 PATH_TYPE@56..58
68 PATH@[56; 58) 68 PATH@56..58
69 PATH_SEGMENT@[56; 58) 69 PATH_SEGMENT@56..58
70 NAME_REF@[56; 58) 70 NAME_REF@56..58
71 IDENT@[56; 58) "u8" 71 IDENT@56..58 "u8"
72 R_PAREN@[58; 59) ")" 72 R_PAREN@58..59 ")"
73 WHITESPACE@[59; 60) " " 73 WHITESPACE@59..60 " "
74 BLOCK_EXPR@[60; 62) 74 BLOCK_EXPR@60..62
75 BLOCK@[60; 62) 75 BLOCK@60..62
76 L_CURLY@[60; 61) "{" 76 L_CURLY@60..61 "{"
77 R_CURLY@[61; 62) "}" 77 R_CURLY@61..62 "}"
78 WHITESPACE@[62; 64) "\n\n" 78 WHITESPACE@62..64 "\n\n"
79 EXTERN_BLOCK@[64; 128) 79 EXTERN_BLOCK@64..128
80 ABI@[64; 74) 80 ABI@64..74
81 EXTERN_KW@[64; 70) "extern" 81 EXTERN_KW@64..70 "extern"
82 WHITESPACE@[70; 71) " " 82 WHITESPACE@70..71 " "
83 STRING@[71; 74) "\"C\"" 83 STRING@71..74 "\"C\""
84 WHITESPACE@[74; 75) " " 84 WHITESPACE@74..75 " "
85 EXTERN_ITEM_LIST@[75; 128) 85 EXTERN_ITEM_LIST@75..128
86 L_CURLY@[75; 76) "{" 86 L_CURLY@75..76 "{"
87 WHITESPACE@[76; 77) " " 87 WHITESPACE@76..77 " "
88 FN_DEF@[77; 126) 88 FN_DEF@77..126
89 FN_KW@[77; 79) "fn" 89 FN_KW@77..79 "fn"
90 WHITESPACE@[79; 80) " " 90 WHITESPACE@79..80 " "
91 NAME@[80; 86) 91 NAME@80..86
92 IDENT@[80; 86) "printf" 92 IDENT@80..86 "printf"
93 PARAM_LIST@[86; 118) 93 PARAM_LIST@86..118
94 L_PAREN@[86; 87) "(" 94 L_PAREN@86..87 "("
95 PARAM@[87; 104) 95 PARAM@87..104
96 BIND_PAT@[87; 93) 96 BIND_PAT@87..93
97 NAME@[87; 93) 97 NAME@87..93
98 IDENT@[87; 93) "format" 98 IDENT@87..93 "format"
99 COLON@[93; 94) ":" 99 COLON@93..94 ":"
100 WHITESPACE@[94; 95) " " 100 WHITESPACE@94..95 " "
101 POINTER_TYPE@[95; 104) 101 POINTER_TYPE@95..104
102 STAR@[95; 96) "*" 102 STAR@95..96 "*"
103 CONST_KW@[96; 101) "const" 103 CONST_KW@96..101 "const"
104 WHITESPACE@[101; 102) " " 104 WHITESPACE@101..102 " "
105 PATH_TYPE@[102; 104) 105 PATH_TYPE@102..104
106 PATH@[102; 104) 106 PATH@102..104
107 PATH_SEGMENT@[102; 104) 107 PATH_SEGMENT@102..104
108 NAME_REF@[102; 104) 108 NAME_REF@102..104
109 IDENT@[102; 104) "i8" 109 IDENT@102..104 "i8"
110 COMMA@[104; 105) "," 110 COMMA@104..105 ","
111 WHITESPACE@[105; 106) " " 111 WHITESPACE@105..106 " "
112 ATTR@[106; 113) 112 ATTR@106..113
113 POUND@[106; 107) "#" 113 POUND@106..107 "#"
114 L_BRACK@[107; 108) "[" 114 L_BRACK@107..108 "["
115 PATH@[108; 112) 115 PATH@108..112
116 PATH_SEGMENT@[108; 112) 116 PATH_SEGMENT@108..112
117 NAME_REF@[108; 112) 117 NAME_REF@108..112
118 IDENT@[108; 112) "attr" 118 IDENT@108..112 "attr"
119 R_BRACK@[112; 113) "]" 119 R_BRACK@112..113 "]"
120 WHITESPACE@[113; 114) " " 120 WHITESPACE@113..114 " "
121 PARAM@[114; 117) 121 PARAM@114..117
122 DOT3@[114; 117) "..." 122 DOT3@114..117 "..."
123 R_PAREN@[117; 118) ")" 123 R_PAREN@117..118 ")"
124 WHITESPACE@[118; 119) " " 124 WHITESPACE@118..119 " "
125 RET_TYPE@[119; 125) 125 RET_TYPE@119..125
126 THIN_ARROW@[119; 121) "->" 126 THIN_ARROW@119..121 "->"
127 WHITESPACE@[121; 122) " " 127 WHITESPACE@121..122 " "
128 PATH_TYPE@[122; 125) 128 PATH_TYPE@122..125
129 PATH@[122; 125) 129 PATH@122..125
130 PATH_SEGMENT@[122; 125) 130 PATH_SEGMENT@122..125
131 NAME_REF@[122; 125) 131 NAME_REF@122..125
132 IDENT@[122; 125) "i32" 132 IDENT@122..125 "i32"
133 SEMICOLON@[125; 126) ";" 133 SEMICOLON@125..126 ";"
134 WHITESPACE@[126; 127) " " 134 WHITESPACE@126..127 " "
135 R_CURLY@[127; 128) "}" 135 R_CURLY@127..128 "}"
136 WHITESPACE@[128; 130) "\n\n" 136 WHITESPACE@128..130 "\n\n"
137 FN_DEF@[130; 172) 137 FN_DEF@130..172
138 FN_KW@[130; 132) "fn" 138 FN_KW@130..132 "fn"
139 WHITESPACE@[132; 133) " " 139 WHITESPACE@132..133 " "
140 NAME@[133; 136) 140 NAME@133..136
141 IDENT@[133; 136) "foo" 141 IDENT@133..136 "foo"
142 TYPE_PARAM_LIST@[136; 168) 142 TYPE_PARAM_LIST@136..168
143 L_ANGLE@[136; 137) "<" 143 L_ANGLE@136..137 "<"
144 TYPE_PARAM@[137; 167) 144 TYPE_PARAM@137..167
145 NAME@[137; 138) 145 NAME@137..138
146 IDENT@[137; 138) "F" 146 IDENT@137..138 "F"
147 COLON@[138; 139) ":" 147 COLON@138..139 ":"
148 WHITESPACE@[139; 140) " " 148 WHITESPACE@139..140 " "
149 TYPE_BOUND_LIST@[140; 167) 149 TYPE_BOUND_LIST@140..167
150 TYPE_BOUND@[140; 167) 150 TYPE_BOUND@140..167
151 PATH_TYPE@[140; 167) 151 PATH_TYPE@140..167
152 PATH@[140; 167) 152 PATH@140..167
153 PATH_SEGMENT@[140; 167) 153 PATH_SEGMENT@140..167
154 NAME_REF@[140; 145) 154 NAME_REF@140..145
155 IDENT@[140; 145) "FnMut" 155 IDENT@140..145 "FnMut"
156 PARAM_LIST@[145; 167) 156 PARAM_LIST@145..167
157 L_PAREN@[145; 146) "(" 157 L_PAREN@145..146 "("
158 ATTR@[146; 153) 158 ATTR@146..153
159 POUND@[146; 147) "#" 159 POUND@146..147 "#"
160 L_BRACK@[147; 148) "[" 160 L_BRACK@147..148 "["
161 PATH@[148; 152) 161 PATH@148..152
162 PATH_SEGMENT@[148; 152) 162 PATH_SEGMENT@148..152
163 NAME_REF@[148; 152) 163 NAME_REF@148..152
164 IDENT@[148; 152) "attr" 164 IDENT@148..152 "attr"
165 R_BRACK@[152; 153) "]" 165 R_BRACK@152..153 "]"
166 WHITESPACE@[153; 154) " " 166 WHITESPACE@153..154 " "
167 PARAM@[154; 166) 167 PARAM@154..166
168 REFERENCE_TYPE@[154; 166) 168 REFERENCE_TYPE@154..166
169 AMP@[154; 155) "&" 169 AMP@154..155 "&"
170 MUT_KW@[155; 158) "mut" 170 MUT_KW@155..158 "mut"
171 WHITESPACE@[158; 159) " " 171 WHITESPACE@158..159 " "
172 PATH_TYPE@[159; 166) 172 PATH_TYPE@159..166
173 PATH@[159; 166) 173 PATH@159..166
174 PATH_SEGMENT@[159; 166) 174 PATH_SEGMENT@159..166
175 NAME_REF@[159; 162) 175 NAME_REF@159..162
176 IDENT@[159; 162) "Foo" 176 IDENT@159..162 "Foo"
177 TYPE_ARG_LIST@[162; 166) 177 TYPE_ARG_LIST@162..166
178 L_ANGLE@[162; 163) "<" 178 L_ANGLE@162..163 "<"
179 LIFETIME_ARG@[163; 165) 179 LIFETIME_ARG@163..165
180 LIFETIME@[163; 165) "\'a" 180 LIFETIME@163..165 "\'a"
181 R_ANGLE@[165; 166) ">" 181 R_ANGLE@165..166 ">"
182 R_PAREN@[166; 167) ")" 182 R_PAREN@166..167 ")"
183 R_ANGLE@[167; 168) ">" 183 R_ANGLE@167..168 ">"
184 PARAM_LIST@[168; 170) 184 PARAM_LIST@168..170
185 L_PAREN@[168; 169) "(" 185 L_PAREN@168..169 "("
186 R_PAREN@[169; 170) ")" 186 R_PAREN@169..170 ")"
187 BLOCK_EXPR@[170; 172) 187 BLOCK_EXPR@170..172
188 BLOCK@[170; 172) 188 BLOCK@170..172
189 L_CURLY@[170; 171) "{" 189 L_CURLY@170..171 "{"
190 R_CURLY@[171; 172) "}" 190 R_CURLY@171..172 "}"
191 WHITESPACE@[172; 174) "\n\n" 191 WHITESPACE@172..174 "\n\n"
192 TRAIT_DEF@[174; 236) 192 TRAIT_DEF@174..236
193 TRAIT_KW@[174; 179) "trait" 193 TRAIT_KW@174..179 "trait"
194 WHITESPACE@[179; 180) " " 194 WHITESPACE@179..180 " "
195 NAME@[180; 183) 195 NAME@180..183
196 IDENT@[180; 183) "Foo" 196 IDENT@180..183 "Foo"
197 WHITESPACE@[183; 184) " " 197 WHITESPACE@183..184 " "
198 ITEM_LIST@[184; 236) 198 ITEM_LIST@184..236
199 L_CURLY@[184; 185) "{" 199 L_CURLY@184..185 "{"
200 WHITESPACE@[185; 190) "\n " 200 WHITESPACE@185..190 "\n "
201 FN_DEF@[190; 234) 201 FN_DEF@190..234
202 FN_KW@[190; 192) "fn" 202 FN_KW@190..192 "fn"
203 WHITESPACE@[192; 193) " " 203 WHITESPACE@192..193 " "
204 NAME@[193; 196) 204 NAME@193..196
205 IDENT@[193; 196) "bar" 205 IDENT@193..196 "bar"
206 PARAM_LIST@[196; 233) 206 PARAM_LIST@196..233
207 L_PAREN@[196; 197) "(" 207 L_PAREN@196..197 "("
208 ATTR@[197; 204) 208 ATTR@197..204
209 POUND@[197; 198) "#" 209 POUND@197..198 "#"
210 L_BRACK@[198; 199) "[" 210 L_BRACK@198..199 "["
211 PATH@[199; 203) 211 PATH@199..203
212 PATH_SEGMENT@[199; 203) 212 PATH_SEGMENT@199..203
213 NAME_REF@[199; 203) 213 NAME_REF@199..203
214 IDENT@[199; 203) "attr" 214 IDENT@199..203 "attr"
215 R_BRACK@[203; 204) "]" 215 R_BRACK@203..204 "]"
216 WHITESPACE@[204; 205) " " 216 WHITESPACE@204..205 " "
217 PARAM@[205; 211) 217 PARAM@205..211
218 PLACEHOLDER_PAT@[205; 206) 218 PLACEHOLDER_PAT@205..206
219 UNDERSCORE@[205; 206) "_" 219 UNDERSCORE@205..206 "_"
220 COLON@[206; 207) ":" 220 COLON@206..207 ":"
221 WHITESPACE@[207; 208) " " 221 WHITESPACE@207..208 " "
222 PATH_TYPE@[208; 211) 222 PATH_TYPE@208..211
223 PATH@[208; 211) 223 PATH@208..211
224 PATH_SEGMENT@[208; 211) 224 PATH_SEGMENT@208..211
225 NAME_REF@[208; 211) 225 NAME_REF@208..211
226 IDENT@[208; 211) "u64" 226 IDENT@208..211 "u64"
227 COMMA@[211; 212) "," 227 COMMA@211..212 ","
228 WHITESPACE@[212; 213) " " 228 WHITESPACE@212..213 " "
229 ATTR@[213; 221) 229 ATTR@213..221
230 POUND@[213; 214) "#" 230 POUND@213..214 "#"
231 WHITESPACE@[214; 215) " " 231 WHITESPACE@214..215 " "
232 L_BRACK@[215; 216) "[" 232 L_BRACK@215..216 "["
233 PATH@[216; 220) 233 PATH@216..220
234 PATH_SEGMENT@[216; 220) 234 PATH_SEGMENT@216..220
235 NAME_REF@[216; 220) 235 NAME_REF@216..220
236 IDENT@[216; 220) "attr" 236 IDENT@216..220 "attr"
237 R_BRACK@[220; 221) "]" 237 R_BRACK@220..221 "]"
238 WHITESPACE@[221; 222) " " 238 WHITESPACE@221..222 " "
239 PARAM@[222; 232) 239 PARAM@222..232
240 BIND_PAT@[222; 227) 240 BIND_PAT@222..227
241 MUT_KW@[222; 225) "mut" 241 MUT_KW@222..225 "mut"
242 WHITESPACE@[225; 226) " " 242 WHITESPACE@225..226 " "
243 NAME@[226; 227) 243 NAME@226..227
244 IDENT@[226; 227) "x" 244 IDENT@226..227 "x"
245 COLON@[227; 228) ":" 245 COLON@227..228 ":"
246 WHITESPACE@[228; 229) " " 246 WHITESPACE@228..229 " "
247 PATH_TYPE@[229; 232) 247 PATH_TYPE@229..232
248 PATH@[229; 232) 248 PATH@229..232
249 PATH_SEGMENT@[229; 232) 249 PATH_SEGMENT@229..232
250 NAME_REF@[229; 232) 250 NAME_REF@229..232
251 IDENT@[229; 232) "i32" 251 IDENT@229..232 "i32"
252 R_PAREN@[232; 233) ")" 252 R_PAREN@232..233 ")"
253 SEMICOLON@[233; 234) ";" 253 SEMICOLON@233..234 ";"
254 WHITESPACE@[234; 235) "\n" 254 WHITESPACE@234..235 "\n"
255 R_CURLY@[235; 236) "}" 255 R_CURLY@235..236 "}"
256 WHITESPACE@[236; 238) "\n\n" 256 WHITESPACE@236..238 "\n\n"
257 IMPL_DEF@[238; 519) 257 IMPL_DEF@238..519
258 IMPL_KW@[238; 242) "impl" 258 IMPL_KW@238..242 "impl"
259 WHITESPACE@[242; 243) " " 259 WHITESPACE@242..243 " "
260 PATH_TYPE@[243; 244) 260 PATH_TYPE@243..244
261 PATH@[243; 244) 261 PATH@243..244
262 PATH_SEGMENT@[243; 244) 262 PATH_SEGMENT@243..244
263 NAME_REF@[243; 244) 263 NAME_REF@243..244
264 IDENT@[243; 244) "S" 264 IDENT@243..244 "S"
265 WHITESPACE@[244; 245) " " 265 WHITESPACE@244..245 " "
266 ITEM_LIST@[245; 519) 266 ITEM_LIST@245..519
267 L_CURLY@[245; 246) "{" 267 L_CURLY@245..246 "{"
268 WHITESPACE@[246; 252) "\n " 268 WHITESPACE@246..252 "\n "
269 FN_DEF@[252; 277) 269 FN_DEF@252..277
270 FN_KW@[252; 254) "fn" 270 FN_KW@252..254 "fn"
271 WHITESPACE@[254; 255) " " 271 WHITESPACE@254..255 " "
272 NAME@[255; 256) 272 NAME@255..256
273 IDENT@[255; 256) "f" 273 IDENT@255..256 "f"
274 PARAM_LIST@[256; 274) 274 PARAM_LIST@256..274
275 L_PAREN@[256; 257) "(" 275 L_PAREN@256..257 "("
276 ATTR@[257; 268) 276 ATTR@257..268
277 POUND@[257; 258) "#" 277 POUND@257..258 "#"
278 L_BRACK@[258; 259) "[" 278 L_BRACK@258..259 "["
279 PATH@[259; 267) 279 PATH@259..267
280 PATH_SEGMENT@[259; 267) 280 PATH_SEGMENT@259..267
281 NAME_REF@[259; 267) 281 NAME_REF@259..267
282 IDENT@[259; 267) "must_use" 282 IDENT@259..267 "must_use"
283 R_BRACK@[267; 268) "]" 283 R_BRACK@267..268 "]"
284 WHITESPACE@[268; 269) " " 284 WHITESPACE@268..269 " "
285 SELF_PARAM@[269; 273) 285 SELF_PARAM@269..273
286 SELF_KW@[269; 273) "self" 286 SELF_KW@269..273 "self"
287 R_PAREN@[273; 274) ")" 287 R_PAREN@273..274 ")"
288 WHITESPACE@[274; 275) " " 288 WHITESPACE@274..275 " "
289 BLOCK_EXPR@[275; 277) 289 BLOCK_EXPR@275..277
290 BLOCK@[275; 277) 290 BLOCK@275..277
291 L_CURLY@[275; 276) "{" 291 L_CURLY@275..276 "{"
292 R_CURLY@[276; 277) "}" 292 R_CURLY@276..277 "}"
293 WHITESPACE@[277; 283) "\n " 293 WHITESPACE@277..283 "\n "
294 FN_DEF@[283; 305) 294 FN_DEF@283..305
295 FN_KW@[283; 285) "fn" 295 FN_KW@283..285 "fn"
296 WHITESPACE@[285; 286) " " 296 WHITESPACE@285..286 " "
297 NAME@[286; 288) 297 NAME@286..288
298 IDENT@[286; 288) "g1" 298 IDENT@286..288 "g1"
299 PARAM_LIST@[288; 302) 299 PARAM_LIST@288..302
300 L_PAREN@[288; 289) "(" 300 L_PAREN@288..289 "("
301 ATTR@[289; 296) 301 ATTR@289..296
302 POUND@[289; 290) "#" 302 POUND@289..290 "#"
303 L_BRACK@[290; 291) "[" 303 L_BRACK@290..291 "["
304 PATH@[291; 295) 304 PATH@291..295
305 PATH_SEGMENT@[291; 295) 305 PATH_SEGMENT@291..295
306 NAME_REF@[291; 295) 306 NAME_REF@291..295
307 IDENT@[291; 295) "attr" 307 IDENT@291..295 "attr"
308 R_BRACK@[295; 296) "]" 308 R_BRACK@295..296 "]"
309 WHITESPACE@[296; 297) " " 309 WHITESPACE@296..297 " "
310 SELF_PARAM@[297; 301) 310 SELF_PARAM@297..301
311 SELF_KW@[297; 301) "self" 311 SELF_KW@297..301 "self"
312 R_PAREN@[301; 302) ")" 312 R_PAREN@301..302 ")"
313 WHITESPACE@[302; 303) " " 313 WHITESPACE@302..303 " "
314 BLOCK_EXPR@[303; 305) 314 BLOCK_EXPR@303..305
315 BLOCK@[303; 305) 315 BLOCK@303..305
316 L_CURLY@[303; 304) "{" 316 L_CURLY@303..304 "{"
317 R_CURLY@[304; 305) "}" 317 R_CURLY@304..305 "}"
318 WHITESPACE@[305; 311) "\n " 318 WHITESPACE@305..311 "\n "
319 FN_DEF@[311; 334) 319 FN_DEF@311..334
320 FN_KW@[311; 313) "fn" 320 FN_KW@311..313 "fn"
321 WHITESPACE@[313; 314) " " 321 WHITESPACE@313..314 " "
322 NAME@[314; 316) 322 NAME@314..316
323 IDENT@[314; 316) "g2" 323 IDENT@314..316 "g2"
324 PARAM_LIST@[316; 331) 324 PARAM_LIST@316..331
325 L_PAREN@[316; 317) "(" 325 L_PAREN@316..317 "("
326 ATTR@[317; 324) 326 ATTR@317..324
327 POUND@[317; 318) "#" 327 POUND@317..318 "#"
328 L_BRACK@[318; 319) "[" 328 L_BRACK@318..319 "["
329 PATH@[319; 323) 329 PATH@319..323
330 PATH_SEGMENT@[319; 323) 330 PATH_SEGMENT@319..323
331 NAME_REF@[319; 323) 331 NAME_REF@319..323
332 IDENT@[319; 323) "attr" 332 IDENT@319..323 "attr"
333 R_BRACK@[323; 324) "]" 333 R_BRACK@323..324 "]"
334 WHITESPACE@[324; 325) " " 334 WHITESPACE@324..325 " "
335 SELF_PARAM@[325; 330) 335 SELF_PARAM@325..330
336 AMP@[325; 326) "&" 336 AMP@325..326 "&"
337 SELF_KW@[326; 330) "self" 337 SELF_KW@326..330 "self"
338 R_PAREN@[330; 331) ")" 338 R_PAREN@330..331 ")"
339 WHITESPACE@[331; 332) " " 339 WHITESPACE@331..332 " "
340 BLOCK_EXPR@[332; 334) 340 BLOCK_EXPR@332..334
341 BLOCK@[332; 334) 341 BLOCK@332..334
342 L_CURLY@[332; 333) "{" 342 L_CURLY@332..333 "{"
343 R_CURLY@[333; 334) "}" 343 R_CURLY@333..334 "}"
344 WHITESPACE@[334; 340) "\n " 344 WHITESPACE@334..340 "\n "
345 FN_DEF@[340; 371) 345 FN_DEF@340..371
346 FN_KW@[340; 342) "fn" 346 FN_KW@340..342 "fn"
347 WHITESPACE@[342; 343) " " 347 WHITESPACE@342..343 " "
348 NAME@[343; 345) 348 NAME@343..345
349 IDENT@[343; 345) "g3" 349 IDENT@343..345 "g3"
350 TYPE_PARAM_LIST@[345; 349) 350 TYPE_PARAM_LIST@345..349
351 L_ANGLE@[345; 346) "<" 351 L_ANGLE@345..346 "<"
352 LIFETIME_PARAM@[346; 348) 352 LIFETIME_PARAM@346..348
353 LIFETIME@[346; 348) "\'a" 353 LIFETIME@346..348 "\'a"
354 R_ANGLE@[348; 349) ">" 354 R_ANGLE@348..349 ">"
355 PARAM_LIST@[349; 368) 355 PARAM_LIST@349..368
356 L_PAREN@[349; 350) "(" 356 L_PAREN@349..350 "("
357 ATTR@[350; 357) 357 ATTR@350..357
358 POUND@[350; 351) "#" 358 POUND@350..351 "#"
359 L_BRACK@[351; 352) "[" 359 L_BRACK@351..352 "["
360 PATH@[352; 356) 360 PATH@352..356
361 PATH_SEGMENT@[352; 356) 361 PATH_SEGMENT@352..356
362 NAME_REF@[352; 356) 362 NAME_REF@352..356
363 IDENT@[352; 356) "attr" 363 IDENT@352..356 "attr"
364 R_BRACK@[356; 357) "]" 364 R_BRACK@356..357 "]"
365 WHITESPACE@[357; 358) " " 365 WHITESPACE@357..358 " "
366 SELF_PARAM@[358; 367) 366 SELF_PARAM@358..367
367 AMP@[358; 359) "&" 367 AMP@358..359 "&"
368 MUT_KW@[359; 362) "mut" 368 MUT_KW@359..362 "mut"
369 WHITESPACE@[362; 363) " " 369 WHITESPACE@362..363 " "
370 SELF_KW@[363; 367) "self" 370 SELF_KW@363..367 "self"
371 R_PAREN@[367; 368) ")" 371 R_PAREN@367..368 ")"
372 WHITESPACE@[368; 369) " " 372 WHITESPACE@368..369 " "
373 BLOCK_EXPR@[369; 371) 373 BLOCK_EXPR@369..371
374 BLOCK@[369; 371) 374 BLOCK@369..371
375 L_CURLY@[369; 370) "{" 375 L_CURLY@369..370 "{"
376 R_CURLY@[370; 371) "}" 376 R_CURLY@370..371 "}"
377 WHITESPACE@[371; 377) "\n " 377 WHITESPACE@371..377 "\n "
378 FN_DEF@[377; 407) 378 FN_DEF@377..407
379 FN_KW@[377; 379) "fn" 379 FN_KW@377..379 "fn"
380 WHITESPACE@[379; 380) " " 380 WHITESPACE@379..380 " "
381 NAME@[380; 382) 381 NAME@380..382
382 IDENT@[380; 382) "g4" 382 IDENT@380..382 "g4"
383 TYPE_PARAM_LIST@[382; 386) 383 TYPE_PARAM_LIST@382..386
384 L_ANGLE@[382; 383) "<" 384 L_ANGLE@382..383 "<"
385 LIFETIME_PARAM@[383; 385) 385 LIFETIME_PARAM@383..385
386 LIFETIME@[383; 385) "\'a" 386 LIFETIME@383..385 "\'a"
387 R_ANGLE@[385; 386) ">" 387 R_ANGLE@385..386 ">"
388 PARAM_LIST@[386; 404) 388 PARAM_LIST@386..404
389 L_PAREN@[386; 387) "(" 389 L_PAREN@386..387 "("
390 ATTR@[387; 394) 390 ATTR@387..394
391 POUND@[387; 388) "#" 391 POUND@387..388 "#"
392 L_BRACK@[388; 389) "[" 392 L_BRACK@388..389 "["
393 PATH@[389; 393) 393 PATH@389..393
394 PATH_SEGMENT@[389; 393) 394 PATH_SEGMENT@389..393
395 NAME_REF@[389; 393) 395 NAME_REF@389..393
396 IDENT@[389; 393) "attr" 396 IDENT@389..393 "attr"
397 R_BRACK@[393; 394) "]" 397 R_BRACK@393..394 "]"
398 WHITESPACE@[394; 395) " " 398 WHITESPACE@394..395 " "
399 SELF_PARAM@[395; 403) 399 SELF_PARAM@395..403
400 AMP@[395; 396) "&" 400 AMP@395..396 "&"
401 LIFETIME@[396; 398) "\'a" 401 LIFETIME@396..398 "\'a"
402 WHITESPACE@[398; 399) " " 402 WHITESPACE@398..399 " "
403 SELF_KW@[399; 403) "self" 403 SELF_KW@399..403 "self"
404 R_PAREN@[403; 404) ")" 404 R_PAREN@403..404 ")"
405 WHITESPACE@[404; 405) " " 405 WHITESPACE@404..405 " "
406 BLOCK_EXPR@[405; 407) 406 BLOCK_EXPR@405..407
407 BLOCK@[405; 407) 407 BLOCK@405..407
408 L_CURLY@[405; 406) "{" 408 L_CURLY@405..406 "{"
409 R_CURLY@[406; 407) "}" 409 R_CURLY@406..407 "}"
410 WHITESPACE@[407; 413) "\n " 410 WHITESPACE@407..413 "\n "
411 FN_DEF@[413; 447) 411 FN_DEF@413..447
412 FN_KW@[413; 415) "fn" 412 FN_KW@413..415 "fn"
413 WHITESPACE@[415; 416) " " 413 WHITESPACE@415..416 " "
414 NAME@[416; 418) 414 NAME@416..418
415 IDENT@[416; 418) "g5" 415 IDENT@416..418 "g5"
416 TYPE_PARAM_LIST@[418; 422) 416 TYPE_PARAM_LIST@418..422
417 L_ANGLE@[418; 419) "<" 417 L_ANGLE@418..419 "<"
418 LIFETIME_PARAM@[419; 421) 418 LIFETIME_PARAM@419..421
419 LIFETIME@[419; 421) "\'a" 419 LIFETIME@419..421 "\'a"
420 R_ANGLE@[421; 422) ">" 420 R_ANGLE@421..422 ">"
421 PARAM_LIST@[422; 444) 421 PARAM_LIST@422..444
422 L_PAREN@[422; 423) "(" 422 L_PAREN@422..423 "("
423 ATTR@[423; 430) 423 ATTR@423..430
424 POUND@[423; 424) "#" 424 POUND@423..424 "#"
425 L_BRACK@[424; 425) "[" 425 L_BRACK@424..425 "["
426 PATH@[425; 429) 426 PATH@425..429
427 PATH_SEGMENT@[425; 429) 427 PATH_SEGMENT@425..429
428 NAME_REF@[425; 429) 428 NAME_REF@425..429
429 IDENT@[425; 429) "attr" 429 IDENT@425..429 "attr"
430 R_BRACK@[429; 430) "]" 430 R_BRACK@429..430 "]"
431 WHITESPACE@[430; 431) " " 431 WHITESPACE@430..431 " "
432 SELF_PARAM@[431; 443) 432 SELF_PARAM@431..443
433 AMP@[431; 432) "&" 433 AMP@431..432 "&"
434 LIFETIME@[432; 434) "\'a" 434 LIFETIME@432..434 "\'a"
435 WHITESPACE@[434; 435) " " 435 WHITESPACE@434..435 " "
436 MUT_KW@[435; 438) "mut" 436 MUT_KW@435..438 "mut"
437 WHITESPACE@[438; 439) " " 437 WHITESPACE@438..439 " "
438 SELF_KW@[439; 443) "self" 438 SELF_KW@439..443 "self"
439 R_PAREN@[443; 444) ")" 439 R_PAREN@443..444 ")"
440 WHITESPACE@[444; 445) " " 440 WHITESPACE@444..445 " "
441 BLOCK_EXPR@[445; 447) 441 BLOCK_EXPR@445..447
442 BLOCK@[445; 447) 442 BLOCK@445..447
443 L_CURLY@[445; 446) "{" 443 L_CURLY@445..446 "{"
444 R_CURLY@[446; 447) "}" 444 R_CURLY@446..447 "}"
445 WHITESPACE@[447; 453) "\n " 445 WHITESPACE@447..453 "\n "
446 FN_DEF@[453; 480) 446 FN_DEF@453..480
447 FN_KW@[453; 455) "fn" 447 FN_KW@453..455 "fn"
448 WHITESPACE@[455; 456) " " 448 WHITESPACE@455..456 " "
449 NAME@[456; 457) 449 NAME@456..457
450 IDENT@[456; 457) "c" 450 IDENT@456..457 "c"
451 PARAM_LIST@[457; 477) 451 PARAM_LIST@457..477
452 L_PAREN@[457; 458) "(" 452 L_PAREN@457..458 "("
453 ATTR@[458; 465) 453 ATTR@458..465
454 POUND@[458; 459) "#" 454 POUND@458..459 "#"
455 L_BRACK@[459; 460) "[" 455 L_BRACK@459..460 "["
456 PATH@[460; 464) 456 PATH@460..464
457 PATH_SEGMENT@[460; 464) 457 PATH_SEGMENT@460..464
458 NAME_REF@[460; 464) 458 NAME_REF@460..464
459 IDENT@[460; 464) "attr" 459 IDENT@460..464 "attr"
460 R_BRACK@[464; 465) "]" 460 R_BRACK@464..465 "]"
461 WHITESPACE@[465; 466) " " 461 WHITESPACE@465..466 " "
462 SELF_PARAM@[466; 476) 462 SELF_PARAM@466..476
463 SELF_KW@[466; 470) "self" 463 SELF_KW@466..470 "self"
464 COLON@[470; 471) ":" 464 COLON@470..471 ":"
465 WHITESPACE@[471; 472) " " 465 WHITESPACE@471..472 " "
466 PATH_TYPE@[472; 476) 466 PATH_TYPE@472..476
467 PATH@[472; 476) 467 PATH@472..476
468 PATH_SEGMENT@[472; 476) 468 PATH_SEGMENT@472..476
469 NAME_REF@[472; 476) 469 NAME_REF@472..476
470 IDENT@[472; 476) "Self" 470 IDENT@472..476 "Self"
471 R_PAREN@[476; 477) ")" 471 R_PAREN@476..477 ")"
472 WHITESPACE@[477; 478) " " 472 WHITESPACE@477..478 " "
473 BLOCK_EXPR@[478; 480) 473 BLOCK_EXPR@478..480
474 BLOCK@[478; 480) 474 BLOCK@478..480
475 L_CURLY@[478; 479) "{" 475 L_CURLY@478..479 "{"
476 R_CURLY@[479; 480) "}" 476 R_CURLY@479..480 "}"
477 WHITESPACE@[480; 486) "\n " 477 WHITESPACE@480..486 "\n "
478 FN_DEF@[486; 517) 478 FN_DEF@486..517
479 FN_KW@[486; 488) "fn" 479 FN_KW@486..488 "fn"
480 WHITESPACE@[488; 489) " " 480 WHITESPACE@488..489 " "
481 NAME@[489; 490) 481 NAME@489..490
482 IDENT@[489; 490) "d" 482 IDENT@489..490 "d"
483 PARAM_LIST@[490; 514) 483 PARAM_LIST@490..514
484 L_PAREN@[490; 491) "(" 484 L_PAREN@490..491 "("
485 ATTR@[491; 498) 485 ATTR@491..498
486 POUND@[491; 492) "#" 486 POUND@491..492 "#"
487 L_BRACK@[492; 493) "[" 487 L_BRACK@492..493 "["
488 PATH@[493; 497) 488 PATH@493..497
489 PATH_SEGMENT@[493; 497) 489 PATH_SEGMENT@493..497
490 NAME_REF@[493; 497) 490 NAME_REF@493..497
491 IDENT@[493; 497) "attr" 491 IDENT@493..497 "attr"
492 R_BRACK@[497; 498) "]" 492 R_BRACK@497..498 "]"
493 WHITESPACE@[498; 499) " " 493 WHITESPACE@498..499 " "
494 SELF_PARAM@[499; 513) 494 SELF_PARAM@499..513
495 SELF_KW@[499; 503) "self" 495 SELF_KW@499..503 "self"
496 COLON@[503; 504) ":" 496 COLON@503..504 ":"
497 WHITESPACE@[504; 505) " " 497 WHITESPACE@504..505 " "
498 PATH_TYPE@[505; 513) 498 PATH_TYPE@505..513
499 PATH@[505; 513) 499 PATH@505..513
500 PATH_SEGMENT@[505; 513) 500 PATH_SEGMENT@505..513
501 NAME_REF@[505; 507) 501 NAME_REF@505..507
502 IDENT@[505; 507) "Rc" 502 IDENT@505..507 "Rc"
503 TYPE_ARG_LIST@[507; 513) 503 TYPE_ARG_LIST@507..513
504 L_ANGLE@[507; 508) "<" 504 L_ANGLE@507..508 "<"
505 TYPE_ARG@[508; 512) 505 TYPE_ARG@508..512
506 PATH_TYPE@[508; 512) 506 PATH_TYPE@508..512
507 PATH@[508; 512) 507 PATH@508..512
508 PATH_SEGMENT@[508; 512) 508 PATH_SEGMENT@508..512
509 NAME_REF@[508; 512) 509 NAME_REF@508..512
510 IDENT@[508; 512) "Self" 510 IDENT@508..512 "Self"
511 R_ANGLE@[512; 513) ">" 511 R_ANGLE@512..513 ">"
512 R_PAREN@[513; 514) ")" 512 R_PAREN@513..514 ")"
513 WHITESPACE@[514; 515) " " 513 WHITESPACE@514..515 " "
514 BLOCK_EXPR@[515; 517) 514 BLOCK_EXPR@515..517
515 BLOCK@[515; 517) 515 BLOCK@515..517
516 L_CURLY@[515; 516) "{" 516 L_CURLY@515..516 "{"
517 R_CURLY@[516; 517) "}" 517 R_CURLY@516..517 "}"
518 WHITESPACE@[517; 518) "\n" 518 WHITESPACE@517..518 "\n"
519 R_CURLY@[518; 519) "}" 519 R_CURLY@518..519 "}"
diff --git a/crates/ra_syntax/test_data/parser/ok/0052_for_range_block.rast b/crates/ra_syntax/test_data/parser/ok/0052_for_range_block.rast
index 473966cd4..f376f86a7 100644
--- a/crates/ra_syntax/test_data/parser/ok/0052_for_range_block.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0052_for_range_block.rast
@@ -1,81 +1,81 @@
1SOURCE_FILE@[0; 80) 1SOURCE_FILE@0..80
2 FN_DEF@[0; 79) 2 FN_DEF@0..79
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 79) 11 BLOCK_EXPR@9..79
12 BLOCK@[9; 79) 12 BLOCK@9..79
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 14) "\n " 14 WHITESPACE@10..14 "\n "
15 FOR_EXPR@[14; 77) 15 FOR_EXPR@14..77
16 FOR_KW@[14; 17) "for" 16 FOR_KW@14..17 "for"
17 WHITESPACE@[17; 18) " " 17 WHITESPACE@17..18 " "
18 BIND_PAT@[18; 20) 18 BIND_PAT@18..20
19 NAME@[18; 20) 19 NAME@18..20
20 IDENT@[18; 20) "_x" 20 IDENT@18..20 "_x"
21 WHITESPACE@[20; 21) " " 21 WHITESPACE@20..21 " "
22 IN_KW@[21; 23) "in" 22 IN_KW@21..23 "in"
23 WHITESPACE@[23; 24) " " 23 WHITESPACE@23..24 " "
24 RANGE_EXPR@[24; 56) 24 RANGE_EXPR@24..56
25 LITERAL@[24; 25) 25 LITERAL@24..25
26 INT_NUMBER@[24; 25) "0" 26 INT_NUMBER@24..25 "0"
27 WHITESPACE@[25; 26) " " 27 WHITESPACE@25..26 " "
28 DOT2@[26; 28) ".." 28 DOT2@26..28 ".."
29 WHITESPACE@[28; 29) " " 29 WHITESPACE@28..29 " "
30 METHOD_CALL_EXPR@[29; 56) 30 METHOD_CALL_EXPR@29..56
31 PAREN_EXPR@[29; 43) 31 PAREN_EXPR@29..43
32 L_PAREN@[29; 30) "(" 32 L_PAREN@29..30 "("
33 RANGE_EXPR@[30; 42) 33 RANGE_EXPR@30..42
34 LITERAL@[30; 31) 34 LITERAL@30..31
35 INT_NUMBER@[30; 31) "0" 35 INT_NUMBER@30..31 "0"
36 WHITESPACE@[31; 32) " " 36 WHITESPACE@31..32 " "
37 DOT2@[32; 34) ".." 37 DOT2@32..34 ".."
38 WHITESPACE@[34; 35) " " 38 WHITESPACE@34..35 " "
39 BLOCK_EXPR@[35; 42) 39 BLOCK_EXPR@35..42
40 BLOCK@[35; 42) 40 BLOCK@35..42
41 L_CURLY@[35; 36) "{" 41 L_CURLY@35..36 "{"
42 BIN_EXPR@[36; 41) 42 BIN_EXPR@36..41
43 LITERAL@[36; 37) 43 LITERAL@36..37
44 INT_NUMBER@[36; 37) "1" 44 INT_NUMBER@36..37 "1"
45 WHITESPACE@[37; 38) " " 45 WHITESPACE@37..38 " "
46 PLUS@[38; 39) "+" 46 PLUS@38..39 "+"
47 WHITESPACE@[39; 40) " " 47 WHITESPACE@39..40 " "
48 LITERAL@[40; 41) 48 LITERAL@40..41
49 INT_NUMBER@[40; 41) "2" 49 INT_NUMBER@40..41 "2"
50 R_CURLY@[41; 42) "}" 50 R_CURLY@41..42 "}"
51 R_PAREN@[42; 43) ")" 51 R_PAREN@42..43 ")"
52 DOT@[43; 44) "." 52 DOT@43..44 "."
53 NAME_REF@[44; 47) 53 NAME_REF@44..47
54 IDENT@[44; 47) "sum" 54 IDENT@44..47 "sum"
55 TYPE_ARG_LIST@[47; 54) 55 TYPE_ARG_LIST@47..54
56 COLON2@[47; 49) "::" 56 COLON2@47..49 "::"
57 L_ANGLE@[49; 50) "<" 57 L_ANGLE@49..50 "<"
58 TYPE_ARG@[50; 53) 58 TYPE_ARG@50..53
59 PATH_TYPE@[50; 53) 59 PATH_TYPE@50..53
60 PATH@[50; 53) 60 PATH@50..53
61 PATH_SEGMENT@[50; 53) 61 PATH_SEGMENT@50..53
62 NAME_REF@[50; 53) 62 NAME_REF@50..53
63 IDENT@[50; 53) "u32" 63 IDENT@50..53 "u32"
64 R_ANGLE@[53; 54) ">" 64 R_ANGLE@53..54 ">"
65 ARG_LIST@[54; 56) 65 ARG_LIST@54..56
66 L_PAREN@[54; 55) "(" 66 L_PAREN@54..55 "("
67 R_PAREN@[55; 56) ")" 67 R_PAREN@55..56 ")"
68 WHITESPACE@[56; 57) " " 68 WHITESPACE@56..57 " "
69 BLOCK_EXPR@[57; 77) 69 BLOCK_EXPR@57..77
70 BLOCK@[57; 77) 70 BLOCK@57..77
71 L_CURLY@[57; 58) "{" 71 L_CURLY@57..58 "{"
72 WHITESPACE@[58; 66) "\n " 72 WHITESPACE@58..66 "\n "
73 EXPR_STMT@[66; 72) 73 EXPR_STMT@66..72
74 BREAK_EXPR@[66; 71) 74 BREAK_EXPR@66..71
75 BREAK_KW@[66; 71) "break" 75 BREAK_KW@66..71 "break"
76 SEMICOLON@[71; 72) ";" 76 SEMICOLON@71..72 ";"
77 WHITESPACE@[72; 76) "\n " 77 WHITESPACE@72..76 "\n "
78 R_CURLY@[76; 77) "}" 78 R_CURLY@76..77 "}"
79 WHITESPACE@[77; 78) "\n" 79 WHITESPACE@77..78 "\n"
80 R_CURLY@[78; 79) "}" 80 R_CURLY@78..79 "}"
81 WHITESPACE@[79; 80) "\n" 81 WHITESPACE@79..80 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0053_outer_attribute_on_macro_rules.rast b/crates/ra_syntax/test_data/parser/ok/0053_outer_attribute_on_macro_rules.rast
index 60a491853..be60f7a8e 100644
--- a/crates/ra_syntax/test_data/parser/ok/0053_outer_attribute_on_macro_rules.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0053_outer_attribute_on_macro_rules.rast
@@ -1,39 +1,39 @@
1SOURCE_FILE@[0; 65) 1SOURCE_FILE@0..65
2 MACRO_CALL@[0; 64) 2 MACRO_CALL@0..64
3 COMMENT@[0; 13) "/// Some docs" 3 COMMENT@0..13 "/// Some docs"
4 WHITESPACE@[13; 14) "\n" 4 WHITESPACE@13..14 "\n"
5 ATTR@[14; 29) 5 ATTR@14..29
6 POUND@[14; 15) "#" 6 POUND@14..15 "#"
7 L_BRACK@[15; 16) "[" 7 L_BRACK@15..16 "["
8 PATH@[16; 28) 8 PATH@16..28
9 PATH_SEGMENT@[16; 28) 9 PATH_SEGMENT@16..28
10 NAME_REF@[16; 28) 10 NAME_REF@16..28
11 IDENT@[16; 28) "macro_export" 11 IDENT@16..28 "macro_export"
12 R_BRACK@[28; 29) "]" 12 R_BRACK@28..29 "]"
13 WHITESPACE@[29; 30) "\n" 13 WHITESPACE@29..30 "\n"
14 PATH@[30; 41) 14 PATH@30..41
15 PATH_SEGMENT@[30; 41) 15 PATH_SEGMENT@30..41
16 NAME_REF@[30; 41) 16 NAME_REF@30..41
17 IDENT@[30; 41) "macro_rules" 17 IDENT@30..41 "macro_rules"
18 BANG@[41; 42) "!" 18 BANG@41..42 "!"
19 WHITESPACE@[42; 43) " " 19 WHITESPACE@42..43 " "
20 NAME@[43; 46) 20 NAME@43..46
21 IDENT@[43; 46) "foo" 21 IDENT@43..46 "foo"
22 WHITESPACE@[46; 47) " " 22 WHITESPACE@46..47 " "
23 TOKEN_TREE@[47; 64) 23 TOKEN_TREE@47..64
24 L_CURLY@[47; 48) "{" 24 L_CURLY@47..48 "{"
25 WHITESPACE@[48; 53) "\n " 25 WHITESPACE@48..53 "\n "
26 TOKEN_TREE@[53; 55) 26 TOKEN_TREE@53..55
27 L_PAREN@[53; 54) "(" 27 L_PAREN@53..54 "("
28 R_PAREN@[54; 55) ")" 28 R_PAREN@54..55 ")"
29 WHITESPACE@[55; 56) " " 29 WHITESPACE@55..56 " "
30 EQ@[56; 57) "=" 30 EQ@56..57 "="
31 R_ANGLE@[57; 58) ">" 31 R_ANGLE@57..58 ">"
32 WHITESPACE@[58; 59) " " 32 WHITESPACE@58..59 " "
33 TOKEN_TREE@[59; 61) 33 TOKEN_TREE@59..61
34 L_CURLY@[59; 60) "{" 34 L_CURLY@59..60 "{"
35 R_CURLY@[60; 61) "}" 35 R_CURLY@60..61 "}"
36 SEMICOLON@[61; 62) ";" 36 SEMICOLON@61..62 ";"
37 WHITESPACE@[62; 63) "\n" 37 WHITESPACE@62..63 "\n"
38 R_CURLY@[63; 64) "}" 38 R_CURLY@63..64 "}"
39 WHITESPACE@[64; 65) "\n" 39 WHITESPACE@64..65 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rast b/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rast
index fabf88e8f..f20819bd2 100644
--- a/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rast
@@ -1,126 +1,126 @@
1SOURCE_FILE@[0; 88) 1SOURCE_FILE@0..88
2 FN_DEF@[0; 26) 2 FN_DEF@0..26
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "a" 6 IDENT@3..4 "a"
7 PARAM_LIST@[4; 6) 7 PARAM_LIST@4..6
8 L_PAREN@[4; 5) "(" 8 L_PAREN@4..5 "("
9 R_PAREN@[5; 6) ")" 9 R_PAREN@5..6 ")"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 RET_TYPE@[7; 23) 11 RET_TYPE@7..23
12 THIN_ARROW@[7; 9) "->" 12 THIN_ARROW@7..9 "->"
13 WHITESPACE@[9; 10) " " 13 WHITESPACE@9..10 " "
14 PATH_TYPE@[10; 23) 14 PATH_TYPE@10..23
15 PATH@[10; 23) 15 PATH@10..23
16 PATH_SEGMENT@[10; 23) 16 PATH_SEGMENT@10..23
17 NAME_REF@[10; 13) 17 NAME_REF@10..13
18 IDENT@[10; 13) "Foo" 18 IDENT@10..13 "Foo"
19 TYPE_ARG_LIST@[13; 23) 19 TYPE_ARG_LIST@13..23
20 L_ANGLE@[13; 14) "<" 20 L_ANGLE@13..14 "<"
21 TYPE_ARG@[14; 22) 21 TYPE_ARG@14..22
22 PATH_TYPE@[14; 22) 22 PATH_TYPE@14..22
23 PATH@[14; 22) 23 PATH@14..22
24 PATH@[14; 17) 24 PATH@14..17
25 PATH_SEGMENT@[14; 17) 25 PATH_SEGMENT@14..17
26 NAME_REF@[14; 17) 26 NAME_REF@14..17
27 IDENT@[14; 17) "bar" 27 IDENT@14..17 "bar"
28 COLON2@[17; 19) "::" 28 COLON2@17..19 "::"
29 PATH_SEGMENT@[19; 22) 29 PATH_SEGMENT@19..22
30 NAME_REF@[19; 22) 30 NAME_REF@19..22
31 IDENT@[19; 22) "Baz" 31 IDENT@19..22 "Baz"
32 R_ANGLE@[22; 23) ">" 32 R_ANGLE@22..23 ">"
33 WHITESPACE@[23; 24) " " 33 WHITESPACE@23..24 " "
34 BLOCK_EXPR@[24; 26) 34 BLOCK_EXPR@24..26
35 BLOCK@[24; 26) 35 BLOCK@24..26
36 L_CURLY@[24; 25) "{" 36 L_CURLY@24..25 "{"
37 R_CURLY@[25; 26) "}" 37 R_CURLY@25..26 "}"
38 WHITESPACE@[26; 28) "\n\n" 38 WHITESPACE@26..28 "\n\n"
39 FN_DEF@[28; 56) 39 FN_DEF@28..56
40 FN_KW@[28; 30) "fn" 40 FN_KW@28..30 "fn"
41 WHITESPACE@[30; 31) " " 41 WHITESPACE@30..31 " "
42 NAME@[31; 32) 42 NAME@31..32
43 IDENT@[31; 32) "b" 43 IDENT@31..32 "b"
44 PARAM_LIST@[32; 53) 44 PARAM_LIST@32..53
45 L_PAREN@[32; 33) "(" 45 L_PAREN@32..33 "("
46 PARAM@[33; 52) 46 PARAM@33..52
47 PLACEHOLDER_PAT@[33; 34) 47 PLACEHOLDER_PAT@33..34
48 UNDERSCORE@[33; 34) "_" 48 UNDERSCORE@33..34 "_"
49 COLON@[34; 35) ":" 49 COLON@34..35 ":"
50 WHITESPACE@[35; 36) " " 50 WHITESPACE@35..36 " "
51 IMPL_TRAIT_TYPE@[36; 52) 51 IMPL_TRAIT_TYPE@36..52
52 IMPL_KW@[36; 40) "impl" 52 IMPL_KW@36..40 "impl"
53 WHITESPACE@[40; 41) " " 53 WHITESPACE@40..41 " "
54 TYPE_BOUND_LIST@[41; 52) 54 TYPE_BOUND_LIST@41..52
55 TYPE_BOUND@[41; 52) 55 TYPE_BOUND@41..52
56 PATH_TYPE@[41; 52) 56 PATH_TYPE@41..52
57 PATH@[41; 52) 57 PATH@41..52
58 PATH_SEGMENT@[41; 52) 58 PATH_SEGMENT@41..52
59 NAME_REF@[41; 46) 59 NAME_REF@41..46
60 IDENT@[41; 46) "FnMut" 60 IDENT@41..46 "FnMut"
61 PARAM_LIST@[46; 52) 61 PARAM_LIST@46..52
62 L_PAREN@[46; 47) "(" 62 L_PAREN@46..47 "("
63 PARAM@[47; 51) 63 PARAM@47..51
64 PATH_TYPE@[47; 51) 64 PATH_TYPE@47..51
65 PATH@[47; 51) 65 PATH@47..51
66 PATH@[47; 48) 66 PATH@47..48
67 PATH_SEGMENT@[47; 48) 67 PATH_SEGMENT@47..48
68 NAME_REF@[47; 48) 68 NAME_REF@47..48
69 IDENT@[47; 48) "x" 69 IDENT@47..48 "x"
70 COLON2@[48; 50) "::" 70 COLON2@48..50 "::"
71 PATH_SEGMENT@[50; 51) 71 PATH_SEGMENT@50..51
72 NAME_REF@[50; 51) 72 NAME_REF@50..51
73 IDENT@[50; 51) "Y" 73 IDENT@50..51 "Y"
74 R_PAREN@[51; 52) ")" 74 R_PAREN@51..52 ")"
75 R_PAREN@[52; 53) ")" 75 R_PAREN@52..53 ")"
76 WHITESPACE@[53; 54) " " 76 WHITESPACE@53..54 " "
77 BLOCK_EXPR@[54; 56) 77 BLOCK_EXPR@54..56
78 BLOCK@[54; 56) 78 BLOCK@54..56
79 L_CURLY@[54; 55) "{" 79 L_CURLY@54..55 "{"
80 R_CURLY@[55; 56) "}" 80 R_CURLY@55..56 "}"
81 WHITESPACE@[56; 58) "\n\n" 81 WHITESPACE@56..58 "\n\n"
82 FN_DEF@[58; 87) 82 FN_DEF@58..87
83 FN_KW@[58; 60) "fn" 83 FN_KW@58..60 "fn"
84 WHITESPACE@[60; 61) " " 84 WHITESPACE@60..61 " "
85 NAME@[61; 62) 85 NAME@61..62
86 IDENT@[61; 62) "c" 86 IDENT@61..62 "c"
87 PARAM_LIST@[62; 84) 87 PARAM_LIST@62..84
88 L_PAREN@[62; 63) "(" 88 L_PAREN@62..63 "("
89 PARAM@[63; 83) 89 PARAM@63..83
90 PLACEHOLDER_PAT@[63; 64) 90 PLACEHOLDER_PAT@63..64
91 UNDERSCORE@[63; 64) "_" 91 UNDERSCORE@63..64 "_"
92 COLON@[64; 65) ":" 92 COLON@64..65 ":"
93 WHITESPACE@[65; 66) " " 93 WHITESPACE@65..66 " "
94 IMPL_TRAIT_TYPE@[66; 83) 94 IMPL_TRAIT_TYPE@66..83
95 IMPL_KW@[66; 70) "impl" 95 IMPL_KW@66..70 "impl"
96 WHITESPACE@[70; 71) " " 96 WHITESPACE@70..71 " "
97 TYPE_BOUND_LIST@[71; 83) 97 TYPE_BOUND_LIST@71..83
98 TYPE_BOUND@[71; 83) 98 TYPE_BOUND@71..83
99 PATH_TYPE@[71; 83) 99 PATH_TYPE@71..83
100 PATH@[71; 83) 100 PATH@71..83
101 PATH_SEGMENT@[71; 83) 101 PATH_SEGMENT@71..83
102 NAME_REF@[71; 76) 102 NAME_REF@71..76
103 IDENT@[71; 76) "FnMut" 103 IDENT@71..76 "FnMut"
104 PARAM_LIST@[76; 83) 104 PARAM_LIST@76..83
105 L_PAREN@[76; 77) "(" 105 L_PAREN@76..77 "("
106 PARAM@[77; 82) 106 PARAM@77..82
107 REFERENCE_TYPE@[77; 82) 107 REFERENCE_TYPE@77..82
108 AMP@[77; 78) "&" 108 AMP@77..78 "&"
109 PATH_TYPE@[78; 82) 109 PATH_TYPE@78..82
110 PATH@[78; 82) 110 PATH@78..82
111 PATH@[78; 79) 111 PATH@78..79
112 PATH_SEGMENT@[78; 79) 112 PATH_SEGMENT@78..79
113 NAME_REF@[78; 79) 113 NAME_REF@78..79
114 IDENT@[78; 79) "x" 114 IDENT@78..79 "x"
115 COLON2@[79; 81) "::" 115 COLON2@79..81 "::"
116 PATH_SEGMENT@[81; 82) 116 PATH_SEGMENT@81..82
117 NAME_REF@[81; 82) 117 NAME_REF@81..82
118 IDENT@[81; 82) "Y" 118 IDENT@81..82 "Y"
119 R_PAREN@[82; 83) ")" 119 R_PAREN@82..83 ")"
120 R_PAREN@[83; 84) ")" 120 R_PAREN@83..84 ")"
121 WHITESPACE@[84; 85) " " 121 WHITESPACE@84..85 " "
122 BLOCK_EXPR@[85; 87) 122 BLOCK_EXPR@85..87
123 BLOCK@[85; 87) 123 BLOCK@85..87
124 L_CURLY@[85; 86) "{" 124 L_CURLY@85..86 "{"
125 R_CURLY@[86; 87) "}" 125 R_CURLY@86..87 "}"
126 WHITESPACE@[87; 88) "\n" 126 WHITESPACE@87..88 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rast b/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rast
index 6ac3f1458..dcdb3cc6d 100644
--- a/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rast
@@ -1,50 +1,50 @@
1SOURCE_FILE@[0; 49) 1SOURCE_FILE@0..49
2 TYPE_ALIAS_DEF@[0; 12) 2 TYPE_ALIAS_DEF@0..12
3 TYPE_KW@[0; 4) "type" 3 TYPE_KW@0..4 "type"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 NAME@[5; 6) 5 NAME@5..6
6 IDENT@[5; 6) "X" 6 IDENT@5..6 "X"
7 WHITESPACE@[6; 7) " " 7 WHITESPACE@6..7 " "
8 EQ@[7; 8) "=" 8 EQ@7..8 "="
9 WHITESPACE@[8; 9) " " 9 WHITESPACE@8..9 " "
10 TUPLE_TYPE@[9; 11) 10 TUPLE_TYPE@9..11
11 L_PAREN@[9; 10) "(" 11 L_PAREN@9..10 "("
12 R_PAREN@[10; 11) ")" 12 R_PAREN@10..11 ")"
13 SEMICOLON@[11; 12) ";" 13 SEMICOLON@11..12 ";"
14 WHITESPACE@[12; 14) "\n\n" 14 WHITESPACE@12..14 "\n\n"
15 FN_DEF@[14; 48) 15 FN_DEF@14..48
16 FN_KW@[14; 16) "fn" 16 FN_KW@14..16 "fn"
17 WHITESPACE@[16; 17) " " 17 WHITESPACE@16..17 " "
18 NAME@[17; 21) 18 NAME@17..21
19 IDENT@[17; 21) "main" 19 IDENT@17..21 "main"
20 PARAM_LIST@[21; 23) 20 PARAM_LIST@21..23
21 L_PAREN@[21; 22) "(" 21 L_PAREN@21..22 "("
22 R_PAREN@[22; 23) ")" 22 R_PAREN@22..23 ")"
23 WHITESPACE@[23; 24) " " 23 WHITESPACE@23..24 " "
24 BLOCK_EXPR@[24; 48) 24 BLOCK_EXPR@24..48
25 BLOCK@[24; 48) 25 BLOCK@24..48
26 L_CURLY@[24; 25) "{" 26 L_CURLY@24..25 "{"
27 WHITESPACE@[25; 30) "\n " 27 WHITESPACE@25..30 "\n "
28 LET_STMT@[30; 46) 28 LET_STMT@30..46
29 LET_KW@[30; 33) "let" 29 LET_KW@30..33 "let"
30 WHITESPACE@[33; 34) " " 30 WHITESPACE@33..34 " "
31 TUPLE_PAT@[34; 36) 31 TUPLE_PAT@34..36
32 L_PAREN@[34; 35) "(" 32 L_PAREN@34..35 "("
33 R_PAREN@[35; 36) ")" 33 R_PAREN@35..36 ")"
34 COLON@[36; 37) ":" 34 COLON@36..37 ":"
35 PATH_TYPE@[37; 40) 35 PATH_TYPE@37..40
36 PATH@[37; 40) 36 PATH@37..40
37 PATH_SEGMENT@[37; 40) 37 PATH_SEGMENT@37..40
38 COLON2@[37; 39) "::" 38 COLON2@37..39 "::"
39 NAME_REF@[39; 40) 39 NAME_REF@39..40
40 IDENT@[39; 40) "X" 40 IDENT@39..40 "X"
41 WHITESPACE@[40; 41) " " 41 WHITESPACE@40..41 " "
42 EQ@[41; 42) "=" 42 EQ@41..42 "="
43 WHITESPACE@[42; 43) " " 43 WHITESPACE@42..43 " "
44 TUPLE_EXPR@[43; 45) 44 TUPLE_EXPR@43..45
45 L_PAREN@[43; 44) "(" 45 L_PAREN@43..44 "("
46 R_PAREN@[44; 45) ")" 46 R_PAREN@44..45 ")"
47 SEMICOLON@[45; 46) ";" 47 SEMICOLON@45..46 ";"
48 WHITESPACE@[46; 47) "\n" 48 WHITESPACE@46..47 "\n"
49 R_CURLY@[47; 48) "}" 49 R_CURLY@47..48 "}"
50 WHITESPACE@[48; 49) "\n" 50 WHITESPACE@48..49 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0056_neq_in_type.rast b/crates/ra_syntax/test_data/parser/ok/0056_neq_in_type.rast
index 4a4ad84ca..6176a9620 100644
--- a/crates/ra_syntax/test_data/parser/ok/0056_neq_in_type.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0056_neq_in_type.rast
@@ -1,66 +1,66 @@
1SOURCE_FILE@[0; 71) 1SOURCE_FILE@0..71
2 FN_DEF@[0; 70) 2 FN_DEF@0..70
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 70) 11 BLOCK_EXPR@10..70
12 BLOCK@[10; 70) 12 BLOCK@10..70
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 IF_EXPR@[16; 68) 15 IF_EXPR@16..68
16 IF_KW@[16; 18) "if" 16 IF_KW@16..18 "if"
17 WHITESPACE@[18; 19) " " 17 WHITESPACE@18..19 " "
18 CONDITION@[19; 65) 18 CONDITION@19..65
19 BIN_EXPR@[19; 65) 19 BIN_EXPR@19..65
20 CAST_EXPR@[19; 40) 20 CAST_EXPR@19..40
21 METHOD_CALL_EXPR@[19; 33) 21 METHOD_CALL_EXPR@19..33
22 LITERAL@[19; 25) 22 LITERAL@19..25
23 FLOAT_NUMBER@[19; 25) "1.0f32" 23 FLOAT_NUMBER@19..25 "1.0f32"
24 DOT@[25; 26) "." 24 DOT@25..26 "."
25 NAME_REF@[26; 31) 25 NAME_REF@26..31
26 IDENT@[26; 31) "floor" 26 IDENT@26..31 "floor"
27 ARG_LIST@[31; 33) 27 ARG_LIST@31..33
28 L_PAREN@[31; 32) "(" 28 L_PAREN@31..32 "("
29 R_PAREN@[32; 33) ")" 29 R_PAREN@32..33 ")"
30 WHITESPACE@[33; 34) " " 30 WHITESPACE@33..34 " "
31 AS_KW@[34; 36) "as" 31 AS_KW@34..36 "as"
32 WHITESPACE@[36; 37) " " 32 WHITESPACE@36..37 " "
33 PATH_TYPE@[37; 40) 33 PATH_TYPE@37..40
34 PATH@[37; 40) 34 PATH@37..40
35 PATH_SEGMENT@[37; 40) 35 PATH_SEGMENT@37..40
36 NAME_REF@[37; 40) 36 NAME_REF@37..40
37 IDENT@[37; 40) "i64" 37 IDENT@37..40 "i64"
38 WHITESPACE@[40; 41) " " 38 WHITESPACE@40..41 " "
39 NEQ@[41; 43) "!=" 39 NEQ@41..43 "!="
40 WHITESPACE@[43; 44) " " 40 WHITESPACE@43..44 " "
41 CAST_EXPR@[44; 65) 41 CAST_EXPR@44..65
42 METHOD_CALL_EXPR@[44; 58) 42 METHOD_CALL_EXPR@44..58
43 LITERAL@[44; 50) 43 LITERAL@44..50
44 FLOAT_NUMBER@[44; 50) "1.0f32" 44 FLOAT_NUMBER@44..50 "1.0f32"
45 DOT@[50; 51) "." 45 DOT@50..51 "."
46 NAME_REF@[51; 56) 46 NAME_REF@51..56
47 IDENT@[51; 56) "floor" 47 IDENT@51..56 "floor"
48 ARG_LIST@[56; 58) 48 ARG_LIST@56..58
49 L_PAREN@[56; 57) "(" 49 L_PAREN@56..57 "("
50 R_PAREN@[57; 58) ")" 50 R_PAREN@57..58 ")"
51 WHITESPACE@[58; 59) " " 51 WHITESPACE@58..59 " "
52 AS_KW@[59; 61) "as" 52 AS_KW@59..61 "as"
53 WHITESPACE@[61; 62) " " 53 WHITESPACE@61..62 " "
54 PATH_TYPE@[62; 65) 54 PATH_TYPE@62..65
55 PATH@[62; 65) 55 PATH@62..65
56 PATH_SEGMENT@[62; 65) 56 PATH_SEGMENT@62..65
57 NAME_REF@[62; 65) 57 NAME_REF@62..65
58 IDENT@[62; 65) "i64" 58 IDENT@62..65 "i64"
59 WHITESPACE@[65; 66) " " 59 WHITESPACE@65..66 " "
60 BLOCK_EXPR@[66; 68) 60 BLOCK_EXPR@66..68
61 BLOCK@[66; 68) 61 BLOCK@66..68
62 L_CURLY@[66; 67) "{" 62 L_CURLY@66..67 "{"
63 R_CURLY@[67; 68) "}" 63 R_CURLY@67..68 "}"
64 WHITESPACE@[68; 69) "\n" 64 WHITESPACE@68..69 "\n"
65 R_CURLY@[69; 70) "}" 65 R_CURLY@69..70 "}"
66 WHITESPACE@[70; 71) "\n" 66 WHITESPACE@70..71 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0057_loop_in_call.rast b/crates/ra_syntax/test_data/parser/ok/0057_loop_in_call.rast
index 2c07bde43..342fe23f5 100644
--- a/crates/ra_syntax/test_data/parser/ok/0057_loop_in_call.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0057_loop_in_call.rast
@@ -1,59 +1,59 @@
1SOURCE_FILE@[0; 50) 1SOURCE_FILE@0..50
2 FN_DEF@[0; 17) 2 FN_DEF@0..17
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 14) 7 PARAM_LIST@6..14
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 PARAM@[7; 13) 9 PARAM@7..13
10 BIND_PAT@[7; 8) 10 BIND_PAT@7..8
11 NAME@[7; 8) 11 NAME@7..8
12 IDENT@[7; 8) "x" 12 IDENT@7..8 "x"
13 COLON@[8; 9) ":" 13 COLON@8..9 ":"
14 WHITESPACE@[9; 10) " " 14 WHITESPACE@9..10 " "
15 PATH_TYPE@[10; 13) 15 PATH_TYPE@10..13
16 PATH@[10; 13) 16 PATH@10..13
17 PATH_SEGMENT@[10; 13) 17 PATH_SEGMENT@10..13
18 NAME_REF@[10; 13) 18 NAME_REF@10..13
19 IDENT@[10; 13) "i32" 19 IDENT@10..13 "i32"
20 R_PAREN@[13; 14) ")" 20 R_PAREN@13..14 ")"
21 WHITESPACE@[14; 15) " " 21 WHITESPACE@14..15 " "
22 BLOCK_EXPR@[15; 17) 22 BLOCK_EXPR@15..17
23 BLOCK@[15; 17) 23 BLOCK@15..17
24 L_CURLY@[15; 16) "{" 24 L_CURLY@15..16 "{"
25 R_CURLY@[16; 17) "}" 25 R_CURLY@16..17 "}"
26 WHITESPACE@[17; 19) "\n\n" 26 WHITESPACE@17..19 "\n\n"
27 FN_DEF@[19; 50) 27 FN_DEF@19..50
28 FN_KW@[19; 21) "fn" 28 FN_KW@19..21 "fn"
29 WHITESPACE@[21; 22) " " 29 WHITESPACE@21..22 " "
30 NAME@[22; 26) 30 NAME@22..26
31 IDENT@[22; 26) "main" 31 IDENT@22..26 "main"
32 PARAM_LIST@[26; 28) 32 PARAM_LIST@26..28
33 L_PAREN@[26; 27) "(" 33 L_PAREN@26..27 "("
34 R_PAREN@[27; 28) ")" 34 R_PAREN@27..28 ")"
35 WHITESPACE@[28; 29) " " 35 WHITESPACE@28..29 " "
36 BLOCK_EXPR@[29; 50) 36 BLOCK_EXPR@29..50
37 BLOCK@[29; 50) 37 BLOCK@29..50
38 L_CURLY@[29; 30) "{" 38 L_CURLY@29..30 "{"
39 WHITESPACE@[30; 35) "\n " 39 WHITESPACE@30..35 "\n "
40 EXPR_STMT@[35; 48) 40 EXPR_STMT@35..48
41 CALL_EXPR@[35; 47) 41 CALL_EXPR@35..47
42 PATH_EXPR@[35; 38) 42 PATH_EXPR@35..38
43 PATH@[35; 38) 43 PATH@35..38
44 PATH_SEGMENT@[35; 38) 44 PATH_SEGMENT@35..38
45 NAME_REF@[35; 38) 45 NAME_REF@35..38
46 IDENT@[35; 38) "foo" 46 IDENT@35..38 "foo"
47 ARG_LIST@[38; 47) 47 ARG_LIST@38..47
48 L_PAREN@[38; 39) "(" 48 L_PAREN@38..39 "("
49 LOOP_EXPR@[39; 46) 49 LOOP_EXPR@39..46
50 LOOP_KW@[39; 43) "loop" 50 LOOP_KW@39..43 "loop"
51 WHITESPACE@[43; 44) " " 51 WHITESPACE@43..44 " "
52 BLOCK_EXPR@[44; 46) 52 BLOCK_EXPR@44..46
53 BLOCK@[44; 46) 53 BLOCK@44..46
54 L_CURLY@[44; 45) "{" 54 L_CURLY@44..45 "{"
55 R_CURLY@[45; 46) "}" 55 R_CURLY@45..46 "}"
56 R_PAREN@[46; 47) ")" 56 R_PAREN@46..47 ")"
57 SEMICOLON@[47; 48) ";" 57 SEMICOLON@47..48 ";"
58 WHITESPACE@[48; 49) "\n" 58 WHITESPACE@48..49 "\n"
59 R_CURLY@[49; 50) "}" 59 R_CURLY@49..50 "}"
diff --git a/crates/ra_syntax/test_data/parser/ok/0058_unary_expr_precedence.rast b/crates/ra_syntax/test_data/parser/ok/0058_unary_expr_precedence.rast
index 9de9efbad..360b6e044 100644
--- a/crates/ra_syntax/test_data/parser/ok/0058_unary_expr_precedence.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0058_unary_expr_precedence.rast
@@ -1,97 +1,97 @@
1SOURCE_FILE@[0; 79) 1SOURCE_FILE@0..79
2 FN_DEF@[0; 78) 2 FN_DEF@0..78
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 6) 5 NAME@3..6
6 IDENT@[3; 6) "foo" 6 IDENT@3..6 "foo"
7 PARAM_LIST@[6; 8) 7 PARAM_LIST@6..8
8 L_PAREN@[6; 7) "(" 8 L_PAREN@6..7 "("
9 R_PAREN@[7; 8) ")" 9 R_PAREN@7..8 ")"
10 WHITESPACE@[8; 9) " " 10 WHITESPACE@8..9 " "
11 BLOCK_EXPR@[9; 78) 11 BLOCK_EXPR@9..78
12 BLOCK@[9; 78) 12 BLOCK@9..78
13 L_CURLY@[9; 10) "{" 13 L_CURLY@9..10 "{"
14 WHITESPACE@[10; 15) "\n " 14 WHITESPACE@10..15 "\n "
15 EXPR_STMT@[15; 27) 15 EXPR_STMT@15..27
16 BIN_EXPR@[15; 26) 16 BIN_EXPR@15..26
17 BIN_EXPR@[15; 22) 17 BIN_EXPR@15..22
18 LITERAL@[15; 16) 18 LITERAL@15..16
19 INT_NUMBER@[15; 16) "1" 19 INT_NUMBER@15..16 "1"
20 WHITESPACE@[16; 17) " " 20 WHITESPACE@16..17 " "
21 PLUS@[17; 18) "+" 21 PLUS@17..18 "+"
22 WHITESPACE@[18; 19) " " 22 WHITESPACE@18..19 " "
23 PREFIX_EXPR@[19; 22) 23 PREFIX_EXPR@19..22
24 STAR@[19; 20) "*" 24 STAR@19..20 "*"
25 REF_EXPR@[20; 22) 25 REF_EXPR@20..22
26 AMP@[20; 21) "&" 26 AMP@20..21 "&"
27 LITERAL@[21; 22) 27 LITERAL@21..22
28 INT_NUMBER@[21; 22) "2" 28 INT_NUMBER@21..22 "2"
29 WHITESPACE@[22; 23) " " 29 WHITESPACE@22..23 " "
30 PLUS@[23; 24) "+" 30 PLUS@23..24 "+"
31 WHITESPACE@[24; 25) " " 31 WHITESPACE@24..25 " "
32 LITERAL@[25; 26) 32 LITERAL@25..26
33 INT_NUMBER@[25; 26) "3" 33 INT_NUMBER@25..26 "3"
34 SEMICOLON@[26; 27) ";" 34 SEMICOLON@26..27 ";"
35 WHITESPACE@[27; 32) "\n " 35 WHITESPACE@27..32 "\n "
36 EXPR_STMT@[32; 43) 36 EXPR_STMT@32..43
37 CAST_EXPR@[32; 42) 37 CAST_EXPR@32..42
38 PREFIX_EXPR@[32; 35) 38 PREFIX_EXPR@32..35
39 STAR@[32; 33) "*" 39 STAR@32..33 "*"
40 REF_EXPR@[33; 35) 40 REF_EXPR@33..35
41 AMP@[33; 34) "&" 41 AMP@33..34 "&"
42 LITERAL@[34; 35) 42 LITERAL@34..35
43 INT_NUMBER@[34; 35) "1" 43 INT_NUMBER@34..35 "1"
44 WHITESPACE@[35; 36) " " 44 WHITESPACE@35..36 " "
45 AS_KW@[36; 38) "as" 45 AS_KW@36..38 "as"
46 WHITESPACE@[38; 39) " " 46 WHITESPACE@38..39 " "
47 PATH_TYPE@[39; 42) 47 PATH_TYPE@39..42
48 PATH@[39; 42) 48 PATH@39..42
49 PATH_SEGMENT@[39; 42) 49 PATH_SEGMENT@39..42
50 NAME_REF@[39; 42) 50 NAME_REF@39..42
51 IDENT@[39; 42) "u64" 51 IDENT@39..42 "u64"
52 SEMICOLON@[42; 43) ";" 52 SEMICOLON@42..43 ";"
53 WHITESPACE@[43; 48) "\n " 53 WHITESPACE@43..48 "\n "
54 EXPR_STMT@[48; 54) 54 EXPR_STMT@48..54
55 PREFIX_EXPR@[48; 53) 55 PREFIX_EXPR@48..53
56 STAR@[48; 49) "*" 56 STAR@48..49 "*"
57 CALL_EXPR@[49; 53) 57 CALL_EXPR@49..53
58 PATH_EXPR@[49; 50) 58 PATH_EXPR@49..50
59 PATH@[49; 50) 59 PATH@49..50
60 PATH_SEGMENT@[49; 50) 60 PATH_SEGMENT@49..50
61 NAME_REF@[49; 50) 61 NAME_REF@49..50
62 IDENT@[49; 50) "x" 62 IDENT@49..50 "x"
63 ARG_LIST@[50; 53) 63 ARG_LIST@50..53
64 L_PAREN@[50; 51) "(" 64 L_PAREN@50..51 "("
65 LITERAL@[51; 52) 65 LITERAL@51..52
66 INT_NUMBER@[51; 52) "1" 66 INT_NUMBER@51..52 "1"
67 R_PAREN@[52; 53) ")" 67 R_PAREN@52..53 ")"
68 SEMICOLON@[53; 54) ";" 68 SEMICOLON@53..54 ";"
69 WHITESPACE@[54; 59) "\n " 69 WHITESPACE@54..59 "\n "
70 EXPR_STMT@[59; 65) 70 EXPR_STMT@59..65
71 REF_EXPR@[59; 64) 71 REF_EXPR@59..64
72 AMP@[59; 60) "&" 72 AMP@59..60 "&"
73 INDEX_EXPR@[60; 64) 73 INDEX_EXPR@60..64
74 PATH_EXPR@[60; 61) 74 PATH_EXPR@60..61
75 PATH@[60; 61) 75 PATH@60..61
76 PATH_SEGMENT@[60; 61) 76 PATH_SEGMENT@60..61
77 NAME_REF@[60; 61) 77 NAME_REF@60..61
78 IDENT@[60; 61) "x" 78 IDENT@60..61 "x"
79 L_BRACK@[61; 62) "[" 79 L_BRACK@61..62 "["
80 LITERAL@[62; 63) 80 LITERAL@62..63
81 INT_NUMBER@[62; 63) "1" 81 INT_NUMBER@62..63 "1"
82 R_BRACK@[63; 64) "]" 82 R_BRACK@63..64 "]"
83 SEMICOLON@[64; 65) ";" 83 SEMICOLON@64..65 ";"
84 WHITESPACE@[65; 70) "\n " 84 WHITESPACE@65..70 "\n "
85 EXPR_STMT@[70; 76) 85 EXPR_STMT@70..76
86 RANGE_EXPR@[70; 75) 86 RANGE_EXPR@70..75
87 PREFIX_EXPR@[70; 72) 87 PREFIX_EXPR@70..72
88 MINUS@[70; 71) "-" 88 MINUS@70..71 "-"
89 LITERAL@[71; 72) 89 LITERAL@71..72
90 INT_NUMBER@[71; 72) "1" 90 INT_NUMBER@71..72 "1"
91 DOT2@[72; 74) ".." 91 DOT2@72..74 ".."
92 LITERAL@[74; 75) 92 LITERAL@74..75
93 INT_NUMBER@[74; 75) "2" 93 INT_NUMBER@74..75 "2"
94 SEMICOLON@[75; 76) ";" 94 SEMICOLON@75..76 ";"
95 WHITESPACE@[76; 77) "\n" 95 WHITESPACE@76..77 "\n"
96 R_CURLY@[77; 78) "}" 96 R_CURLY@77..78 "}"
97 WHITESPACE@[78; 79) "\n" 97 WHITESPACE@78..79 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0059_loops_in_parens.rast b/crates/ra_syntax/test_data/parser/ok/0059_loops_in_parens.rast
index 101478ce1..225b1d0b6 100644
--- a/crates/ra_syntax/test_data/parser/ok/0059_loops_in_parens.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0059_loops_in_parens.rast
@@ -1,101 +1,101 @@
1SOURCE_FILE@[0; 105) 1SOURCE_FILE@0..105
2 FN_DEF@[0; 104) 2 FN_DEF@0..104
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 104) 11 BLOCK_EXPR@10..104
12 BLOCK@[10; 104) 12 BLOCK@10..104
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 EXPR_STMT@[16; 50) 15 EXPR_STMT@16..50
16 CALL_EXPR@[16; 49) 16 CALL_EXPR@16..49
17 PATH_EXPR@[16; 20) 17 PATH_EXPR@16..20
18 PATH@[16; 20) 18 PATH@16..20
19 PATH_SEGMENT@[16; 20) 19 PATH_SEGMENT@16..20
20 NAME_REF@[16; 20) 20 NAME_REF@16..20
21 IDENT@[16; 20) "Some" 21 IDENT@16..20 "Some"
22 ARG_LIST@[20; 49) 22 ARG_LIST@20..49
23 L_PAREN@[20; 21) "(" 23 L_PAREN@20..21 "("
24 FOR_EXPR@[21; 48) 24 FOR_EXPR@21..48
25 FOR_KW@[21; 24) "for" 25 FOR_KW@21..24 "for"
26 WHITESPACE@[24; 25) " " 26 WHITESPACE@24..25 " "
27 PLACEHOLDER_PAT@[25; 26) 27 PLACEHOLDER_PAT@25..26
28 UNDERSCORE@[25; 26) "_" 28 UNDERSCORE@25..26 "_"
29 WHITESPACE@[26; 27) " " 29 WHITESPACE@26..27 " "
30 IN_KW@[27; 29) "in" 30 IN_KW@27..29 "in"
31 WHITESPACE@[29; 30) " " 31 WHITESPACE@29..30 " "
32 METHOD_CALL_EXPR@[30; 45) 32 METHOD_CALL_EXPR@30..45
33 ARRAY_EXPR@[30; 33) 33 ARRAY_EXPR@30..33
34 L_BRACK@[30; 31) "[" 34 L_BRACK@30..31 "["
35 LITERAL@[31; 32) 35 LITERAL@31..32
36 INT_NUMBER@[31; 32) "1" 36 INT_NUMBER@31..32 "1"
37 R_BRACK@[32; 33) "]" 37 R_BRACK@32..33 "]"
38 DOT@[33; 34) "." 38 DOT@33..34 "."
39 NAME_REF@[34; 43) 39 NAME_REF@34..43
40 IDENT@[34; 43) "into_iter" 40 IDENT@34..43 "into_iter"
41 ARG_LIST@[43; 45) 41 ARG_LIST@43..45
42 L_PAREN@[43; 44) "(" 42 L_PAREN@43..44 "("
43 R_PAREN@[44; 45) ")" 43 R_PAREN@44..45 ")"
44 WHITESPACE@[45; 46) " " 44 WHITESPACE@45..46 " "
45 BLOCK_EXPR@[46; 48) 45 BLOCK_EXPR@46..48
46 BLOCK@[46; 48) 46 BLOCK@46..48
47 L_CURLY@[46; 47) "{" 47 L_CURLY@46..47 "{"
48 R_CURLY@[47; 48) "}" 48 R_CURLY@47..48 "}"
49 R_PAREN@[48; 49) ")" 49 R_PAREN@48..49 ")"
50 SEMICOLON@[49; 50) ";" 50 SEMICOLON@49..50 ";"
51 WHITESPACE@[50; 55) "\n " 51 WHITESPACE@50..55 "\n "
52 EXPR_STMT@[55; 77) 52 EXPR_STMT@55..77
53 CALL_EXPR@[55; 76) 53 CALL_EXPR@55..76
54 PATH_EXPR@[55; 59) 54 PATH_EXPR@55..59
55 PATH@[55; 59) 55 PATH@55..59
56 PATH_SEGMENT@[55; 59) 56 PATH_SEGMENT@55..59
57 NAME_REF@[55; 59) 57 NAME_REF@55..59
58 IDENT@[55; 59) "Some" 58 IDENT@55..59 "Some"
59 ARG_LIST@[59; 76) 59 ARG_LIST@59..76
60 L_PAREN@[59; 60) "(" 60 L_PAREN@59..60 "("
61 LOOP_EXPR@[60; 75) 61 LOOP_EXPR@60..75
62 LOOP_KW@[60; 64) "loop" 62 LOOP_KW@60..64 "loop"
63 WHITESPACE@[64; 65) " " 63 WHITESPACE@64..65 " "
64 BLOCK_EXPR@[65; 75) 64 BLOCK_EXPR@65..75
65 BLOCK@[65; 75) 65 BLOCK@65..75
66 L_CURLY@[65; 66) "{" 66 L_CURLY@65..66 "{"
67 WHITESPACE@[66; 67) " " 67 WHITESPACE@66..67 " "
68 EXPR_STMT@[67; 73) 68 EXPR_STMT@67..73
69 BREAK_EXPR@[67; 72) 69 BREAK_EXPR@67..72
70 BREAK_KW@[67; 72) "break" 70 BREAK_KW@67..72 "break"
71 SEMICOLON@[72; 73) ";" 71 SEMICOLON@72..73 ";"
72 WHITESPACE@[73; 74) " " 72 WHITESPACE@73..74 " "
73 R_CURLY@[74; 75) "}" 73 R_CURLY@74..75 "}"
74 R_PAREN@[75; 76) ")" 74 R_PAREN@75..76 ")"
75 SEMICOLON@[76; 77) ";" 75 SEMICOLON@76..77 ";"
76 WHITESPACE@[77; 82) "\n " 76 WHITESPACE@77..82 "\n "
77 EXPR_STMT@[82; 102) 77 EXPR_STMT@82..102
78 CALL_EXPR@[82; 101) 78 CALL_EXPR@82..101
79 PATH_EXPR@[82; 86) 79 PATH_EXPR@82..86
80 PATH@[82; 86) 80 PATH@82..86
81 PATH_SEGMENT@[82; 86) 81 PATH_SEGMENT@82..86
82 NAME_REF@[82; 86) 82 NAME_REF@82..86
83 IDENT@[82; 86) "Some" 83 IDENT@82..86 "Some"
84 ARG_LIST@[86; 101) 84 ARG_LIST@86..101
85 L_PAREN@[86; 87) "(" 85 L_PAREN@86..87 "("
86 WHILE_EXPR@[87; 100) 86 WHILE_EXPR@87..100
87 WHILE_KW@[87; 92) "while" 87 WHILE_KW@87..92 "while"
88 WHITESPACE@[92; 93) " " 88 WHITESPACE@92..93 " "
89 CONDITION@[93; 97) 89 CONDITION@93..97
90 LITERAL@[93; 97) 90 LITERAL@93..97
91 TRUE_KW@[93; 97) "true" 91 TRUE_KW@93..97 "true"
92 WHITESPACE@[97; 98) " " 92 WHITESPACE@97..98 " "
93 BLOCK_EXPR@[98; 100) 93 BLOCK_EXPR@98..100
94 BLOCK@[98; 100) 94 BLOCK@98..100
95 L_CURLY@[98; 99) "{" 95 L_CURLY@98..99 "{"
96 R_CURLY@[99; 100) "}" 96 R_CURLY@99..100 "}"
97 R_PAREN@[100; 101) ")" 97 R_PAREN@100..101 ")"
98 SEMICOLON@[101; 102) ";" 98 SEMICOLON@101..102 ";"
99 WHITESPACE@[102; 103) "\n" 99 WHITESPACE@102..103 "\n"
100 R_CURLY@[103; 104) "}" 100 R_CURLY@103..104 "}"
101 WHITESPACE@[104; 105) "\n" 101 WHITESPACE@104..105 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0060_as_range.rast b/crates/ra_syntax/test_data/parser/ok/0060_as_range.rast
index 6bff57505..a52a08ed0 100644
--- a/crates/ra_syntax/test_data/parser/ok/0060_as_range.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0060_as_range.rast
@@ -1,56 +1,56 @@
1SOURCE_FILE@[0; 56) 1SOURCE_FILE@0..56
2 FN_DEF@[0; 55) 2 FN_DEF@0..55
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 55) 11 BLOCK_EXPR@10..55
12 BLOCK@[10; 55) 12 BLOCK@10..55
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 EXPR_STMT@[16; 30) 15 EXPR_STMT@16..30
16 RANGE_EXPR@[16; 29) 16 RANGE_EXPR@16..29
17 CAST_EXPR@[16; 26) 17 CAST_EXPR@16..26
18 LITERAL@[16; 17) 18 LITERAL@16..17
19 INT_NUMBER@[16; 17) "0" 19 INT_NUMBER@16..17 "0"
20 WHITESPACE@[17; 18) " " 20 WHITESPACE@17..18 " "
21 AS_KW@[18; 20) "as" 21 AS_KW@18..20 "as"
22 WHITESPACE@[20; 21) " " 22 WHITESPACE@20..21 " "
23 PATH_TYPE@[21; 26) 23 PATH_TYPE@21..26
24 PATH@[21; 26) 24 PATH@21..26
25 PATH_SEGMENT@[21; 26) 25 PATH_SEGMENT@21..26
26 NAME_REF@[21; 26) 26 NAME_REF@21..26
27 IDENT@[21; 26) "usize" 27 IDENT@21..26 "usize"
28 WHITESPACE@[26; 27) " " 28 WHITESPACE@26..27 " "
29 DOT2@[27; 29) ".." 29 DOT2@27..29 ".."
30 SEMICOLON@[29; 30) ";" 30 SEMICOLON@29..30 ";"
31 WHITESPACE@[30; 35) "\n " 31 WHITESPACE@30..35 "\n "
32 EXPR_STMT@[35; 53) 32 EXPR_STMT@35..53
33 RANGE_EXPR@[35; 52) 33 RANGE_EXPR@35..52
34 BIN_EXPR@[35; 49) 34 BIN_EXPR@35..49
35 LITERAL@[35; 36) 35 LITERAL@35..36
36 INT_NUMBER@[35; 36) "1" 36 INT_NUMBER@35..36 "1"
37 WHITESPACE@[36; 37) " " 37 WHITESPACE@36..37 " "
38 PLUS@[37; 38) "+" 38 PLUS@37..38 "+"
39 WHITESPACE@[38; 39) " " 39 WHITESPACE@38..39 " "
40 CAST_EXPR@[39; 49) 40 CAST_EXPR@39..49
41 LITERAL@[39; 40) 41 LITERAL@39..40
42 INT_NUMBER@[39; 40) "2" 42 INT_NUMBER@39..40 "2"
43 WHITESPACE@[40; 41) " " 43 WHITESPACE@40..41 " "
44 AS_KW@[41; 43) "as" 44 AS_KW@41..43 "as"
45 WHITESPACE@[43; 44) " " 45 WHITESPACE@43..44 " "
46 PATH_TYPE@[44; 49) 46 PATH_TYPE@44..49
47 PATH@[44; 49) 47 PATH@44..49
48 PATH_SEGMENT@[44; 49) 48 PATH_SEGMENT@44..49
49 NAME_REF@[44; 49) 49 NAME_REF@44..49
50 IDENT@[44; 49) "usize" 50 IDENT@44..49 "usize"
51 WHITESPACE@[49; 50) " " 51 WHITESPACE@49..50 " "
52 DOT2@[50; 52) ".." 52 DOT2@50..52 ".."
53 SEMICOLON@[52; 53) ";" 53 SEMICOLON@52..53 ";"
54 WHITESPACE@[53; 54) "\n" 54 WHITESPACE@53..54 "\n"
55 R_CURLY@[54; 55) "}" 55 R_CURLY@54..55 "}"
56 WHITESPACE@[55; 56) "\n" 56 WHITESPACE@55..56 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0061_match_full_range.rast b/crates/ra_syntax/test_data/parser/ok/0061_match_full_range.rast
index be6774199..b8974c942 100644
--- a/crates/ra_syntax/test_data/parser/ok/0061_match_full_range.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0061_match_full_range.rast
@@ -1,27 +1,27 @@
1SOURCE_FILE@[0; 35) 1SOURCE_FILE@0..35
2 FN_DEF@[0; 34) 2 FN_DEF@0..34
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 7) 5 NAME@3..7
6 IDENT@[3; 7) "main" 6 IDENT@3..7 "main"
7 PARAM_LIST@[7; 9) 7 PARAM_LIST@7..9
8 L_PAREN@[7; 8) "(" 8 L_PAREN@7..8 "("
9 R_PAREN@[8; 9) ")" 9 R_PAREN@8..9 ")"
10 WHITESPACE@[9; 10) " " 10 WHITESPACE@9..10 " "
11 BLOCK_EXPR@[10; 34) 11 BLOCK_EXPR@10..34
12 BLOCK@[10; 34) 12 BLOCK@10..34
13 L_CURLY@[10; 11) "{" 13 L_CURLY@10..11 "{"
14 WHITESPACE@[11; 16) "\n " 14 WHITESPACE@11..16 "\n "
15 MATCH_EXPR@[16; 32) 15 MATCH_EXPR@16..32
16 MATCH_KW@[16; 21) "match" 16 MATCH_KW@16..21 "match"
17 WHITESPACE@[21; 22) " " 17 WHITESPACE@21..22 " "
18 RANGE_EXPR@[22; 24) 18 RANGE_EXPR@22..24
19 DOT2@[22; 24) ".." 19 DOT2@22..24 ".."
20 WHITESPACE@[24; 25) " " 20 WHITESPACE@24..25 " "
21 MATCH_ARM_LIST@[25; 32) 21 MATCH_ARM_LIST@25..32
22 L_CURLY@[25; 26) "{" 22 L_CURLY@25..26 "{"
23 WHITESPACE@[26; 31) "\n " 23 WHITESPACE@26..31 "\n "
24 R_CURLY@[31; 32) "}" 24 R_CURLY@31..32 "}"
25 WHITESPACE@[32; 33) "\n" 25 WHITESPACE@32..33 "\n"
26 R_CURLY@[33; 34) "}" 26 R_CURLY@33..34 "}"
27 WHITESPACE@[34; 35) "\n" 27 WHITESPACE@34..35 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0062_macro_2.0.rast b/crates/ra_syntax/test_data/parser/ok/0062_macro_2.0.rast
index f89d7c0d9..46f370eec 100644
--- a/crates/ra_syntax/test_data/parser/ok/0062_macro_2.0.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0062_macro_2.0.rast
@@ -1,176 +1,176 @@
1SOURCE_FILE@[0; 349) 1SOURCE_FILE@0..349
2 MACRO_DEF@[0; 93) 2 MACRO_DEF@0..93
3 MACRO_KW@[0; 5) "macro" 3 MACRO_KW@0..5 "macro"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 21) 5 NAME@6..21
6 IDENT@[6; 21) "parse_use_trees" 6 IDENT@6..21 "parse_use_trees"
7 TOKEN_TREE@[21; 93) 7 TOKEN_TREE@21..93
8 TOKEN_TREE@[21; 41) 8 TOKEN_TREE@21..41
9 L_PAREN@[21; 22) "(" 9 L_PAREN@21..22 "("
10 DOLLAR@[22; 23) "$" 10 DOLLAR@22..23 "$"
11 TOKEN_TREE@[23; 32) 11 TOKEN_TREE@23..32
12 L_PAREN@[23; 24) "(" 12 L_PAREN@23..24 "("
13 DOLLAR@[24; 25) "$" 13 DOLLAR@24..25 "$"
14 IDENT@[25; 26) "s" 14 IDENT@25..26 "s"
15 COLON@[26; 27) ":" 15 COLON@26..27 ":"
16 IDENT@[27; 31) "expr" 16 IDENT@27..31 "expr"
17 R_PAREN@[31; 32) ")" 17 R_PAREN@31..32 ")"
18 COMMA@[32; 33) "," 18 COMMA@32..33 ","
19 STAR@[33; 34) "*" 19 STAR@33..34 "*"
20 WHITESPACE@[34; 35) " " 20 WHITESPACE@34..35 " "
21 DOLLAR@[35; 36) "$" 21 DOLLAR@35..36 "$"
22 TOKEN_TREE@[36; 39) 22 TOKEN_TREE@36..39
23 L_PAREN@[36; 37) "(" 23 L_PAREN@36..37 "("
24 COMMA@[37; 38) "," 24 COMMA@37..38 ","
25 R_PAREN@[38; 39) ")" 25 R_PAREN@38..39 ")"
26 STAR@[39; 40) "*" 26 STAR@39..40 "*"
27 R_PAREN@[40; 41) ")" 27 R_PAREN@40..41 ")"
28 WHITESPACE@[41; 42) " " 28 WHITESPACE@41..42 " "
29 TOKEN_TREE@[42; 93) 29 TOKEN_TREE@42..93
30 L_CURLY@[42; 43) "{" 30 L_CURLY@42..43 "{"
31 WHITESPACE@[43; 48) "\n " 31 WHITESPACE@43..48 "\n "
32 IDENT@[48; 51) "vec" 32 IDENT@48..51 "vec"
33 BANG@[51; 52) "!" 33 BANG@51..52 "!"
34 TOKEN_TREE@[52; 91) 34 TOKEN_TREE@52..91
35 L_BRACK@[52; 53) "[" 35 L_BRACK@52..53 "["
36 WHITESPACE@[53; 62) "\n " 36 WHITESPACE@53..62 "\n "
37 DOLLAR@[62; 63) "$" 37 DOLLAR@62..63 "$"
38 TOKEN_TREE@[63; 84) 38 TOKEN_TREE@63..84
39 L_PAREN@[63; 64) "(" 39 L_PAREN@63..64 "("
40 IDENT@[64; 78) "parse_use_tree" 40 IDENT@64..78 "parse_use_tree"
41 TOKEN_TREE@[78; 82) 41 TOKEN_TREE@78..82
42 L_PAREN@[78; 79) "(" 42 L_PAREN@78..79 "("
43 DOLLAR@[79; 80) "$" 43 DOLLAR@79..80 "$"
44 IDENT@[80; 81) "s" 44 IDENT@80..81 "s"
45 R_PAREN@[81; 82) ")" 45 R_PAREN@81..82 ")"
46 COMMA@[82; 83) "," 46 COMMA@82..83 ","
47 R_PAREN@[83; 84) ")" 47 R_PAREN@83..84 ")"
48 STAR@[84; 85) "*" 48 STAR@84..85 "*"
49 WHITESPACE@[85; 90) "\n " 49 WHITESPACE@85..90 "\n "
50 R_BRACK@[90; 91) "]" 50 R_BRACK@90..91 "]"
51 WHITESPACE@[91; 92) "\n" 51 WHITESPACE@91..92 "\n"
52 R_CURLY@[92; 93) "}" 52 R_CURLY@92..93 "}"
53 WHITESPACE@[93; 95) "\n\n" 53 WHITESPACE@93..95 "\n\n"
54 FN_DEF@[95; 348) 54 FN_DEF@95..348
55 ATTR@[95; 102) 55 ATTR@95..102
56 POUND@[95; 96) "#" 56 POUND@95..96 "#"
57 L_BRACK@[96; 97) "[" 57 L_BRACK@96..97 "["
58 PATH@[97; 101) 58 PATH@97..101
59 PATH_SEGMENT@[97; 101) 59 PATH_SEGMENT@97..101
60 NAME_REF@[97; 101) 60 NAME_REF@97..101
61 IDENT@[97; 101) "test" 61 IDENT@97..101 "test"
62 R_BRACK@[101; 102) "]" 62 R_BRACK@101..102 "]"
63 WHITESPACE@[102; 103) "\n" 63 WHITESPACE@102..103 "\n"
64 FN_KW@[103; 105) "fn" 64 FN_KW@103..105 "fn"
65 WHITESPACE@[105; 106) " " 65 WHITESPACE@105..106 " "
66 NAME@[106; 125) 66 NAME@106..125
67 IDENT@[106; 125) "test_use_tree_merge" 67 IDENT@106..125 "test_use_tree_merge"
68 PARAM_LIST@[125; 127) 68 PARAM_LIST@125..127
69 L_PAREN@[125; 126) "(" 69 L_PAREN@125..126 "("
70 R_PAREN@[126; 127) ")" 70 R_PAREN@126..127 ")"
71 WHITESPACE@[127; 128) " " 71 WHITESPACE@127..128 " "
72 BLOCK_EXPR@[128; 348) 72 BLOCK_EXPR@128..348
73 BLOCK@[128; 348) 73 BLOCK@128..348
74 L_CURLY@[128; 129) "{" 74 L_CURLY@128..129 "{"
75 WHITESPACE@[129; 134) "\n " 75 WHITESPACE@129..134 "\n "
76 MACRO_DEF@[134; 346) 76 MACRO_DEF@134..346
77 MACRO_KW@[134; 139) "macro" 77 MACRO_KW@134..139 "macro"
78 WHITESPACE@[139; 140) " " 78 WHITESPACE@139..140 " "
79 NAME@[140; 150) 79 NAME@140..150
80 IDENT@[140; 150) "test_merge" 80 IDENT@140..150 "test_merge"
81 TOKEN_TREE@[150; 346) 81 TOKEN_TREE@150..346
82 TOKEN_TREE@[150; 203) 82 TOKEN_TREE@150..203
83 L_PAREN@[150; 151) "(" 83 L_PAREN@150..151 "("
84 TOKEN_TREE@[151; 175) 84 TOKEN_TREE@151..175
85 L_BRACK@[151; 152) "[" 85 L_BRACK@151..152 "["
86 DOLLAR@[152; 153) "$" 86 DOLLAR@152..153 "$"
87 TOKEN_TREE@[153; 166) 87 TOKEN_TREE@153..166
88 L_PAREN@[153; 154) "(" 88 L_PAREN@153..154 "("
89 DOLLAR@[154; 155) "$" 89 DOLLAR@154..155 "$"
90 IDENT@[155; 160) "input" 90 IDENT@155..160 "input"
91 COLON@[160; 161) ":" 91 COLON@160..161 ":"
92 IDENT@[161; 165) "expr" 92 IDENT@161..165 "expr"
93 R_PAREN@[165; 166) ")" 93 R_PAREN@165..166 ")"
94 COMMA@[166; 167) "," 94 COMMA@166..167 ","
95 STAR@[167; 168) "*" 95 STAR@167..168 "*"
96 WHITESPACE@[168; 169) " " 96 WHITESPACE@168..169 " "
97 DOLLAR@[169; 170) "$" 97 DOLLAR@169..170 "$"
98 TOKEN_TREE@[170; 173) 98 TOKEN_TREE@170..173
99 L_PAREN@[170; 171) "(" 99 L_PAREN@170..171 "("
100 COMMA@[171; 172) "," 100 COMMA@171..172 ","
101 R_PAREN@[172; 173) ")" 101 R_PAREN@172..173 ")"
102 STAR@[173; 174) "*" 102 STAR@173..174 "*"
103 R_BRACK@[174; 175) "]" 103 R_BRACK@174..175 "]"
104 COMMA@[175; 176) "," 104 COMMA@175..176 ","
105 WHITESPACE@[176; 177) " " 105 WHITESPACE@176..177 " "
106 TOKEN_TREE@[177; 202) 106 TOKEN_TREE@177..202
107 L_BRACK@[177; 178) "[" 107 L_BRACK@177..178 "["
108 DOLLAR@[178; 179) "$" 108 DOLLAR@178..179 "$"
109 TOKEN_TREE@[179; 193) 109 TOKEN_TREE@179..193
110 L_PAREN@[179; 180) "(" 110 L_PAREN@179..180 "("
111 DOLLAR@[180; 181) "$" 111 DOLLAR@180..181 "$"
112 IDENT@[181; 187) "output" 112 IDENT@181..187 "output"
113 COLON@[187; 188) ":" 113 COLON@187..188 ":"
114 IDENT@[188; 192) "expr" 114 IDENT@188..192 "expr"
115 R_PAREN@[192; 193) ")" 115 R_PAREN@192..193 ")"
116 COMMA@[193; 194) "," 116 COMMA@193..194 ","
117 STAR@[194; 195) "*" 117 STAR@194..195 "*"
118 WHITESPACE@[195; 196) " " 118 WHITESPACE@195..196 " "
119 DOLLAR@[196; 197) "$" 119 DOLLAR@196..197 "$"
120 TOKEN_TREE@[197; 200) 120 TOKEN_TREE@197..200
121 L_PAREN@[197; 198) "(" 121 L_PAREN@197..198 "("
122 COMMA@[198; 199) "," 122 COMMA@198..199 ","
123 R_PAREN@[199; 200) ")" 123 R_PAREN@199..200 ")"
124 STAR@[200; 201) "*" 124 STAR@200..201 "*"
125 R_BRACK@[201; 202) "]" 125 R_BRACK@201..202 "]"
126 R_PAREN@[202; 203) ")" 126 R_PAREN@202..203 ")"
127 WHITESPACE@[203; 204) " " 127 WHITESPACE@203..204 " "
128 TOKEN_TREE@[204; 346) 128 TOKEN_TREE@204..346
129 L_CURLY@[204; 205) "{" 129 L_CURLY@204..205 "{"
130 WHITESPACE@[205; 214) "\n " 130 WHITESPACE@205..214 "\n "
131 IDENT@[214; 223) "assert_eq" 131 IDENT@214..223 "assert_eq"
132 BANG@[223; 224) "!" 132 BANG@223..224 "!"
133 TOKEN_TREE@[224; 339) 133 TOKEN_TREE@224..339
134 L_PAREN@[224; 225) "(" 134 L_PAREN@224..225 "("
135 WHITESPACE@[225; 238) "\n " 135 WHITESPACE@225..238 "\n "
136 IDENT@[238; 253) "merge_use_trees" 136 IDENT@238..253 "merge_use_trees"
137 TOKEN_TREE@[253; 284) 137 TOKEN_TREE@253..284
138 L_PAREN@[253; 254) "(" 138 L_PAREN@253..254 "("
139 IDENT@[254; 269) "parse_use_trees" 139 IDENT@254..269 "parse_use_trees"
140 BANG@[269; 270) "!" 140 BANG@269..270 "!"
141 TOKEN_TREE@[270; 283) 141 TOKEN_TREE@270..283
142 L_PAREN@[270; 271) "(" 142 L_PAREN@270..271 "("
143 DOLLAR@[271; 272) "$" 143 DOLLAR@271..272 "$"
144 TOKEN_TREE@[272; 281) 144 TOKEN_TREE@272..281
145 L_PAREN@[272; 273) "(" 145 L_PAREN@272..273 "("
146 DOLLAR@[273; 274) "$" 146 DOLLAR@273..274 "$"
147 IDENT@[274; 279) "input" 147 IDENT@274..279 "input"
148 COMMA@[279; 280) "," 148 COMMA@279..280 ","
149 R_PAREN@[280; 281) ")" 149 R_PAREN@280..281 ")"
150 STAR@[281; 282) "*" 150 STAR@281..282 "*"
151 R_PAREN@[282; 283) ")" 151 R_PAREN@282..283 ")"
152 R_PAREN@[283; 284) ")" 152 R_PAREN@283..284 ")"
153 COMMA@[284; 285) "," 153 COMMA@284..285 ","
154 WHITESPACE@[285; 298) "\n " 154 WHITESPACE@285..298 "\n "
155 IDENT@[298; 313) "parse_use_trees" 155 IDENT@298..313 "parse_use_trees"
156 BANG@[313; 314) "!" 156 BANG@313..314 "!"
157 TOKEN_TREE@[314; 328) 157 TOKEN_TREE@314..328
158 L_PAREN@[314; 315) "(" 158 L_PAREN@314..315 "("
159 DOLLAR@[315; 316) "$" 159 DOLLAR@315..316 "$"
160 TOKEN_TREE@[316; 326) 160 TOKEN_TREE@316..326
161 L_PAREN@[316; 317) "(" 161 L_PAREN@316..317 "("
162 DOLLAR@[317; 318) "$" 162 DOLLAR@317..318 "$"
163 IDENT@[318; 324) "output" 163 IDENT@318..324 "output"
164 COMMA@[324; 325) "," 164 COMMA@324..325 ","
165 R_PAREN@[325; 326) ")" 165 R_PAREN@325..326 ")"
166 STAR@[326; 327) "*" 166 STAR@326..327 "*"
167 R_PAREN@[327; 328) ")" 167 R_PAREN@327..328 ")"
168 COMMA@[328; 329) "," 168 COMMA@328..329 ","
169 WHITESPACE@[329; 338) "\n " 169 WHITESPACE@329..338 "\n "
170 R_PAREN@[338; 339) ")" 170 R_PAREN@338..339 ")"
171 SEMICOLON@[339; 340) ";" 171 SEMICOLON@339..340 ";"
172 WHITESPACE@[340; 345) "\n " 172 WHITESPACE@340..345 "\n "
173 R_CURLY@[345; 346) "}" 173 R_CURLY@345..346 "}"
174 WHITESPACE@[346; 347) "\n" 174 WHITESPACE@346..347 "\n"
175 R_CURLY@[347; 348) "}" 175 R_CURLY@347..348 "}"
176 WHITESPACE@[348; 349) "\n" 176 WHITESPACE@348..349 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast b/crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast
index d0623ba90..1cd77aa14 100644
--- a/crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast
@@ -1,198 +1,198 @@
1SOURCE_FILE@[0; 170) 1SOURCE_FILE@0..170
2 TRAIT_DEF@[0; 169) 2 TRAIT_DEF@0..169
3 TRAIT_KW@[0; 5) "trait" 3 TRAIT_KW@0..5 "trait"
4 WHITESPACE@[5; 6) " " 4 WHITESPACE@5..6 " "
5 NAME@[6; 7) 5 NAME@6..7
6 IDENT@[6; 7) "T" 6 IDENT@6..7 "T"
7 WHITESPACE@[7; 8) " " 7 WHITESPACE@7..8 " "
8 ITEM_LIST@[8; 169) 8 ITEM_LIST@8..169
9 L_CURLY@[8; 9) "{" 9 L_CURLY@8..9 "{"
10 WHITESPACE@[9; 14) "\n " 10 WHITESPACE@9..14 "\n "
11 FN_DEF@[14; 46) 11 FN_DEF@14..46
12 FN_KW@[14; 16) "fn" 12 FN_KW@14..16 "fn"
13 WHITESPACE@[16; 17) " " 13 WHITESPACE@16..17 " "
14 NAME@[17; 19) 14 NAME@17..19
15 IDENT@[17; 19) "f1" 15 IDENT@17..19 "f1"
16 PARAM_LIST@[19; 43) 16 PARAM_LIST@19..43
17 L_PAREN@[19; 20) "(" 17 L_PAREN@19..20 "("
18 PARAM@[20; 42) 18 PARAM@20..42
19 TUPLE_PAT@[20; 26) 19 TUPLE_PAT@20..26
20 L_PAREN@[20; 21) "(" 20 L_PAREN@20..21 "("
21 BIND_PAT@[21; 22) 21 BIND_PAT@21..22
22 NAME@[21; 22) 22 NAME@21..22
23 IDENT@[21; 22) "a" 23 IDENT@21..22 "a"
24 COMMA@[22; 23) "," 24 COMMA@22..23 ","
25 WHITESPACE@[23; 24) " " 25 WHITESPACE@23..24 " "
26 BIND_PAT@[24; 25) 26 BIND_PAT@24..25
27 NAME@[24; 25) 27 NAME@24..25
28 IDENT@[24; 25) "b" 28 IDENT@24..25 "b"
29 R_PAREN@[25; 26) ")" 29 R_PAREN@25..26 ")"
30 COLON@[26; 27) ":" 30 COLON@26..27 ":"
31 WHITESPACE@[27; 28) " " 31 WHITESPACE@27..28 " "
32 TUPLE_TYPE@[28; 42) 32 TUPLE_TYPE@28..42
33 L_PAREN@[28; 29) "(" 33 L_PAREN@28..29 "("
34 PATH_TYPE@[29; 34) 34 PATH_TYPE@29..34
35 PATH@[29; 34) 35 PATH@29..34
36 PATH_SEGMENT@[29; 34) 36 PATH_SEGMENT@29..34
37 NAME_REF@[29; 34) 37 NAME_REF@29..34
38 IDENT@[29; 34) "usize" 38 IDENT@29..34 "usize"
39 COMMA@[34; 35) "," 39 COMMA@34..35 ","
40 WHITESPACE@[35; 36) " " 40 WHITESPACE@35..36 " "
41 PATH_TYPE@[36; 41) 41 PATH_TYPE@36..41
42 PATH@[36; 41) 42 PATH@36..41
43 PATH_SEGMENT@[36; 41) 43 PATH_SEGMENT@36..41
44 NAME_REF@[36; 41) 44 NAME_REF@36..41
45 IDENT@[36; 41) "usize" 45 IDENT@36..41 "usize"
46 R_PAREN@[41; 42) ")" 46 R_PAREN@41..42 ")"
47 R_PAREN@[42; 43) ")" 47 R_PAREN@42..43 ")"
48 WHITESPACE@[43; 44) " " 48 WHITESPACE@43..44 " "
49 BLOCK_EXPR@[44; 46) 49 BLOCK_EXPR@44..46
50 BLOCK@[44; 46) 50 BLOCK@44..46
51 L_CURLY@[44; 45) "{" 51 L_CURLY@44..45 "{"
52 R_CURLY@[45; 46) "}" 52 R_CURLY@45..46 "}"
53 WHITESPACE@[46; 51) "\n " 53 WHITESPACE@46..51 "\n "
54 FN_DEF@[51; 74) 54 FN_DEF@51..74
55 FN_KW@[51; 53) "fn" 55 FN_KW@51..53 "fn"
56 WHITESPACE@[53; 54) " " 56 WHITESPACE@53..54 " "
57 NAME@[54; 56) 57 NAME@54..56
58 IDENT@[54; 56) "f2" 58 IDENT@54..56 "f2"
59 PARAM_LIST@[56; 71) 59 PARAM_LIST@56..71
60 L_PAREN@[56; 57) "(" 60 L_PAREN@56..57 "("
61 PARAM@[57; 70) 61 PARAM@57..70
62 RECORD_PAT@[57; 67) 62 RECORD_PAT@57..67
63 PATH@[57; 58) 63 PATH@57..58
64 PATH_SEGMENT@[57; 58) 64 PATH_SEGMENT@57..58
65 NAME_REF@[57; 58) 65 NAME_REF@57..58
66 IDENT@[57; 58) "S" 66 IDENT@57..58 "S"
67 WHITESPACE@[58; 59) " " 67 WHITESPACE@58..59 " "
68 RECORD_FIELD_PAT_LIST@[59; 67) 68 RECORD_FIELD_PAT_LIST@59..67
69 L_CURLY@[59; 60) "{" 69 L_CURLY@59..60 "{"
70 WHITESPACE@[60; 61) " " 70 WHITESPACE@60..61 " "
71 RECORD_FIELD_PAT@[61; 62) 71 RECORD_FIELD_PAT@61..62
72 BIND_PAT@[61; 62) 72 BIND_PAT@61..62
73 NAME@[61; 62) 73 NAME@61..62
74 IDENT@[61; 62) "a" 74 IDENT@61..62 "a"
75 COMMA@[62; 63) "," 75 COMMA@62..63 ","
76 WHITESPACE@[63; 64) " " 76 WHITESPACE@63..64 " "
77 RECORD_FIELD_PAT@[64; 65) 77 RECORD_FIELD_PAT@64..65
78 BIND_PAT@[64; 65) 78 BIND_PAT@64..65
79 NAME@[64; 65) 79 NAME@64..65
80 IDENT@[64; 65) "b" 80 IDENT@64..65 "b"
81 WHITESPACE@[65; 66) " " 81 WHITESPACE@65..66 " "
82 R_CURLY@[66; 67) "}" 82 R_CURLY@66..67 "}"
83 COLON@[67; 68) ":" 83 COLON@67..68 ":"
84 WHITESPACE@[68; 69) " " 84 WHITESPACE@68..69 " "
85 PATH_TYPE@[69; 70) 85 PATH_TYPE@69..70
86 PATH@[69; 70) 86 PATH@69..70
87 PATH_SEGMENT@[69; 70) 87 PATH_SEGMENT@69..70
88 NAME_REF@[69; 70) 88 NAME_REF@69..70
89 IDENT@[69; 70) "S" 89 IDENT@69..70 "S"
90 R_PAREN@[70; 71) ")" 90 R_PAREN@70..71 ")"
91 WHITESPACE@[71; 72) " " 91 WHITESPACE@71..72 " "
92 BLOCK_EXPR@[72; 74) 92 BLOCK_EXPR@72..74
93 BLOCK@[72; 74) 93 BLOCK@72..74
94 L_CURLY@[72; 73) "{" 94 L_CURLY@72..73 "{"
95 R_CURLY@[73; 74) "}" 95 R_CURLY@73..74 "}"
96 WHITESPACE@[74; 79) "\n " 96 WHITESPACE@74..79 "\n "
97 FN_DEF@[79; 108) 97 FN_DEF@79..108
98 FN_KW@[79; 81) "fn" 98 FN_KW@79..81 "fn"
99 WHITESPACE@[81; 82) " " 99 WHITESPACE@81..82 " "
100 NAME@[82; 84) 100 NAME@82..84
101 IDENT@[82; 84) "f3" 101 IDENT@82..84 "f3"
102 PARAM_LIST@[84; 105) 102 PARAM_LIST@84..105
103 L_PAREN@[84; 85) "(" 103 L_PAREN@84..85 "("
104 PARAM@[85; 104) 104 PARAM@85..104
105 TUPLE_STRUCT_PAT@[85; 95) 105 TUPLE_STRUCT_PAT@85..95
106 PATH@[85; 92) 106 PATH@85..92
107 PATH_SEGMENT@[85; 92) 107 PATH_SEGMENT@85..92
108 NAME_REF@[85; 92) 108 NAME_REF@85..92
109 IDENT@[85; 92) "NewType" 109 IDENT@85..92 "NewType"
110 L_PAREN@[92; 93) "(" 110 L_PAREN@92..93 "("
111 BIND_PAT@[93; 94) 111 BIND_PAT@93..94
112 NAME@[93; 94) 112 NAME@93..94
113 IDENT@[93; 94) "a" 113 IDENT@93..94 "a"
114 R_PAREN@[94; 95) ")" 114 R_PAREN@94..95 ")"
115 COLON@[95; 96) ":" 115 COLON@95..96 ":"
116 WHITESPACE@[96; 97) " " 116 WHITESPACE@96..97 " "
117 PATH_TYPE@[97; 104) 117 PATH_TYPE@97..104
118 PATH@[97; 104) 118 PATH@97..104
119 PATH_SEGMENT@[97; 104) 119 PATH_SEGMENT@97..104
120 NAME_REF@[97; 104) 120 NAME_REF@97..104
121 IDENT@[97; 104) "NewType" 121 IDENT@97..104 "NewType"
122 R_PAREN@[104; 105) ")" 122 R_PAREN@104..105 ")"
123 WHITESPACE@[105; 106) " " 123 WHITESPACE@105..106 " "
124 BLOCK_EXPR@[106; 108) 124 BLOCK_EXPR@106..108
125 BLOCK@[106; 108) 125 BLOCK@106..108
126 L_CURLY@[106; 107) "{" 126 L_CURLY@106..107 "{"
127 R_CURLY@[107; 108) "}" 127 R_CURLY@107..108 "}"
128 WHITESPACE@[108; 113) "\n " 128 WHITESPACE@108..113 "\n "
129 FN_DEF@[113; 135) 129 FN_DEF@113..135
130 FN_KW@[113; 115) "fn" 130 FN_KW@113..115 "fn"
131 WHITESPACE@[115; 116) " " 131 WHITESPACE@115..116 " "
132 NAME@[116; 118) 132 NAME@116..118
133 IDENT@[116; 118) "f4" 133 IDENT@116..118 "f4"
134 PARAM_LIST@[118; 132) 134 PARAM_LIST@118..132
135 L_PAREN@[118; 119) "(" 135 L_PAREN@118..119 "("
136 PARAM@[119; 131) 136 PARAM@119..131
137 REF_PAT@[119; 122) 137 REF_PAT@119..122
138 AMP@[119; 120) "&" 138 AMP@119..120 "&"
139 REF_PAT@[120; 122) 139 REF_PAT@120..122
140 AMP@[120; 121) "&" 140 AMP@120..121 "&"
141 BIND_PAT@[121; 122) 141 BIND_PAT@121..122
142 NAME@[121; 122) 142 NAME@121..122
143 IDENT@[121; 122) "a" 143 IDENT@121..122 "a"
144 COLON@[122; 123) ":" 144 COLON@122..123 ":"
145 WHITESPACE@[123; 124) " " 145 WHITESPACE@123..124 " "
146 REFERENCE_TYPE@[124; 131) 146 REFERENCE_TYPE@124..131
147 AMP@[124; 125) "&" 147 AMP@124..125 "&"
148 REFERENCE_TYPE@[125; 131) 148 REFERENCE_TYPE@125..131
149 AMP@[125; 126) "&" 149 AMP@125..126 "&"
150 PATH_TYPE@[126; 131) 150 PATH_TYPE@126..131
151 PATH@[126; 131) 151 PATH@126..131
152 PATH_SEGMENT@[126; 131) 152 PATH_SEGMENT@126..131
153 NAME_REF@[126; 131) 153 NAME_REF@126..131
154 IDENT@[126; 131) "usize" 154 IDENT@126..131 "usize"
155 R_PAREN@[131; 132) ")" 155 R_PAREN@131..132 ")"
156 WHITESPACE@[132; 133) " " 156 WHITESPACE@132..133 " "
157 BLOCK_EXPR@[133; 135) 157 BLOCK_EXPR@133..135
158 BLOCK@[133; 135) 158 BLOCK@133..135
159 L_CURLY@[133; 134) "{" 159 L_CURLY@133..134 "{"
160 R_CURLY@[134; 135) "}" 160 R_CURLY@134..135 "}"
161 WHITESPACE@[135; 140) "\n " 161 WHITESPACE@135..140 "\n "
162 FN_DEF@[140; 167) 162 FN_DEF@140..167
163 FN_KW@[140; 142) "fn" 163 FN_KW@140..142 "fn"
164 WHITESPACE@[142; 143) " " 164 WHITESPACE@142..143 " "
165 NAME@[143; 146) 165 NAME@143..146
166 IDENT@[143; 146) "bar" 166 IDENT@143..146 "bar"
167 PARAM_LIST@[146; 166) 167 PARAM_LIST@146..166
168 L_PAREN@[146; 147) "(" 168 L_PAREN@146..147 "("
169 PARAM@[147; 153) 169 PARAM@147..153
170 PLACEHOLDER_PAT@[147; 148) 170 PLACEHOLDER_PAT@147..148
171 UNDERSCORE@[147; 148) "_" 171 UNDERSCORE@147..148 "_"
172 COLON@[148; 149) ":" 172 COLON@148..149 ":"
173 WHITESPACE@[149; 150) " " 173 WHITESPACE@149..150 " "
174 PATH_TYPE@[150; 153) 174 PATH_TYPE@150..153
175 PATH@[150; 153) 175 PATH@150..153
176 PATH_SEGMENT@[150; 153) 176 PATH_SEGMENT@150..153
177 NAME_REF@[150; 153) 177 NAME_REF@150..153
178 IDENT@[150; 153) "u64" 178 IDENT@150..153 "u64"
179 COMMA@[153; 154) "," 179 COMMA@153..154 ","
180 WHITESPACE@[154; 155) " " 180 WHITESPACE@154..155 " "
181 PARAM@[155; 165) 181 PARAM@155..165
182 BIND_PAT@[155; 160) 182 BIND_PAT@155..160
183 MUT_KW@[155; 158) "mut" 183 MUT_KW@155..158 "mut"
184 WHITESPACE@[158; 159) " " 184 WHITESPACE@158..159 " "
185 NAME@[159; 160) 185 NAME@159..160
186 IDENT@[159; 160) "x" 186 IDENT@159..160 "x"
187 COLON@[160; 161) ":" 187 COLON@160..161 ":"
188 WHITESPACE@[161; 162) " " 188 WHITESPACE@161..162 " "
189 PATH_TYPE@[162; 165) 189 PATH_TYPE@162..165
190 PATH@[162; 165) 190 PATH@162..165
191 PATH_SEGMENT@[162; 165) 191 PATH_SEGMENT@162..165
192 NAME_REF@[162; 165) 192 NAME_REF@162..165
193 IDENT@[162; 165) "i32" 193 IDENT@162..165 "i32"
194 R_PAREN@[165; 166) ")" 194 R_PAREN@165..166 ")"
195 SEMICOLON@[166; 167) ";" 195 SEMICOLON@166..167 ";"
196 WHITESPACE@[167; 168) "\n" 196 WHITESPACE@167..168 "\n"
197 R_CURLY@[168; 169) "}" 197 R_CURLY@168..169 "}"
198 WHITESPACE@[169; 170) "\n" 198 WHITESPACE@169..170 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0063_variadic_fun.rast b/crates/ra_syntax/test_data/parser/ok/0063_variadic_fun.rast
index 17b08197b..5a9f07c89 100644
--- a/crates/ra_syntax/test_data/parser/ok/0063_variadic_fun.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0063_variadic_fun.rast
@@ -1,133 +1,133 @@
1SOURCE_FILE@[0; 126) 1SOURCE_FILE@0..126
2 EXTERN_BLOCK@[0; 125) 2 EXTERN_BLOCK@0..125
3 ABI@[0; 10) 3 ABI@0..10
4 EXTERN_KW@[0; 6) "extern" 4 EXTERN_KW@0..6 "extern"
5 WHITESPACE@[6; 7) " " 5 WHITESPACE@6..7 " "
6 STRING@[7; 10) "\"C\"" 6 STRING@7..10 "\"C\""
7 WHITESPACE@[10; 11) " " 7 WHITESPACE@10..11 " "
8 EXTERN_ITEM_LIST@[11; 125) 8 EXTERN_ITEM_LIST@11..125
9 L_CURLY@[11; 12) "{" 9 L_CURLY@11..12 "{"
10 WHITESPACE@[12; 17) "\n " 10 WHITESPACE@12..17 "\n "
11 FN_DEF@[17; 40) 11 FN_DEF@17..40
12 FN_KW@[17; 19) "fn" 12 FN_KW@17..19 "fn"
13 WHITESPACE@[19; 20) " " 13 WHITESPACE@19..20 " "
14 NAME@[20; 21) 14 NAME@20..21
15 IDENT@[20; 21) "a" 15 IDENT@20..21 "a"
16 PARAM_LIST@[21; 39) 16 PARAM_LIST@21..39
17 L_PAREN@[21; 22) "(" 17 L_PAREN@21..22 "("
18 PARAM@[22; 32) 18 PARAM@22..32
19 PLACEHOLDER_PAT@[22; 23) 19 PLACEHOLDER_PAT@22..23
20 UNDERSCORE@[22; 23) "_" 20 UNDERSCORE@22..23 "_"
21 COLON@[23; 24) ":" 21 COLON@23..24 ":"
22 WHITESPACE@[24; 25) " " 22 WHITESPACE@24..25 " "
23 POINTER_TYPE@[25; 32) 23 POINTER_TYPE@25..32
24 STAR@[25; 26) "*" 24 STAR@25..26 "*"
25 MUT_KW@[26; 29) "mut" 25 MUT_KW@26..29 "mut"
26 WHITESPACE@[29; 30) " " 26 WHITESPACE@29..30 " "
27 PATH_TYPE@[30; 32) 27 PATH_TYPE@30..32
28 PATH@[30; 32) 28 PATH@30..32
29 PATH_SEGMENT@[30; 32) 29 PATH_SEGMENT@30..32
30 NAME_REF@[30; 32) 30 NAME_REF@30..32
31 IDENT@[30; 32) "u8" 31 IDENT@30..32 "u8"
32 COMMA@[32; 33) "," 32 COMMA@32..33 ","
33 WHITESPACE@[33; 34) " " 33 WHITESPACE@33..34 " "
34 PARAM@[34; 37) 34 PARAM@34..37
35 DOT3@[34; 37) "..." 35 DOT3@34..37 "..."
36 COMMA@[37; 38) "," 36 COMMA@37..38 ","
37 R_PAREN@[38; 39) ")" 37 R_PAREN@38..39 ")"
38 SEMICOLON@[39; 40) ";" 38 SEMICOLON@39..40 ";"
39 WHITESPACE@[40; 45) "\n " 39 WHITESPACE@40..45 "\n "
40 FN_DEF@[45; 70) 40 FN_DEF@45..70
41 FN_KW@[45; 47) "fn" 41 FN_KW@45..47 "fn"
42 WHITESPACE@[47; 48) " " 42 WHITESPACE@47..48 " "
43 NAME@[48; 49) 43 NAME@48..49
44 IDENT@[48; 49) "b" 44 IDENT@48..49 "b"
45 PARAM_LIST@[49; 69) 45 PARAM_LIST@49..69
46 L_PAREN@[49; 50) "(" 46 L_PAREN@49..50 "("
47 PARAM@[50; 60) 47 PARAM@50..60
48 PLACEHOLDER_PAT@[50; 51) 48 PLACEHOLDER_PAT@50..51
49 UNDERSCORE@[50; 51) "_" 49 UNDERSCORE@50..51 "_"
50 COLON@[51; 52) ":" 50 COLON@51..52 ":"
51 WHITESPACE@[52; 53) " " 51 WHITESPACE@52..53 " "
52 POINTER_TYPE@[53; 60) 52 POINTER_TYPE@53..60
53 STAR@[53; 54) "*" 53 STAR@53..54 "*"
54 MUT_KW@[54; 57) "mut" 54 MUT_KW@54..57 "mut"
55 WHITESPACE@[57; 58) " " 55 WHITESPACE@57..58 " "
56 PATH_TYPE@[58; 60) 56 PATH_TYPE@58..60
57 PATH@[58; 60) 57 PATH@58..60
58 PATH_SEGMENT@[58; 60) 58 PATH_SEGMENT@58..60
59 NAME_REF@[58; 60) 59 NAME_REF@58..60
60 IDENT@[58; 60) "u8" 60 IDENT@58..60 "u8"
61 COMMA@[60; 61) "," 61 COMMA@60..61 ","
62 WHITESPACE@[61; 62) " " 62 WHITESPACE@61..62 " "
63 PARAM@[62; 68) 63 PARAM@62..68
64 PLACEHOLDER_PAT@[62; 63) 64 PLACEHOLDER_PAT@62..63
65 UNDERSCORE@[62; 63) "_" 65 UNDERSCORE@62..63 "_"
66 COLON@[63; 64) ":" 66 COLON@63..64 ":"
67 WHITESPACE@[64; 65) " " 67 WHITESPACE@64..65 " "
68 DOT3@[65; 68) "..." 68 DOT3@65..68 "..."
69 R_PAREN@[68; 69) ")" 69 R_PAREN@68..69 ")"
70 SEMICOLON@[69; 70) ";" 70 SEMICOLON@69..70 ";"
71 WHITESPACE@[70; 75) "\n " 71 WHITESPACE@70..75 "\n "
72 FN_DEF@[75; 123) 72 FN_DEF@75..123
73 FN_KW@[75; 77) "fn" 73 FN_KW@75..77 "fn"
74 WHITESPACE@[77; 78) " " 74 WHITESPACE@77..78 " "
75 NAME@[78; 79) 75 NAME@78..79
76 IDENT@[78; 79) "c" 76 IDENT@78..79 "c"
77 PARAM_LIST@[79; 122) 77 PARAM_LIST@79..122
78 L_PAREN@[79; 80) "(" 78 L_PAREN@79..80 "("
79 PARAM@[80; 90) 79 PARAM@80..90
80 PLACEHOLDER_PAT@[80; 81) 80 PLACEHOLDER_PAT@80..81
81 UNDERSCORE@[80; 81) "_" 81 UNDERSCORE@80..81 "_"
82 COLON@[81; 82) ":" 82 COLON@81..82 ":"
83 WHITESPACE@[82; 83) " " 83 WHITESPACE@82..83 " "
84 POINTER_TYPE@[83; 90) 84 POINTER_TYPE@83..90
85 STAR@[83; 84) "*" 85 STAR@83..84 "*"
86 MUT_KW@[84; 87) "mut" 86 MUT_KW@84..87 "mut"
87 WHITESPACE@[87; 88) " " 87 WHITESPACE@87..88 " "
88 PATH_TYPE@[88; 90) 88 PATH_TYPE@88..90
89 PATH@[88; 90) 89 PATH@88..90
90 PATH_SEGMENT@[88; 90) 90 PATH_SEGMENT@88..90
91 NAME_REF@[88; 90) 91 NAME_REF@88..90
92 IDENT@[88; 90) "u8" 92 IDENT@88..90 "u8"
93 COMMA@[90; 91) "," 93 COMMA@90..91 ","
94 WHITESPACE@[91; 92) " " 94 WHITESPACE@91..92 " "
95 ATTR@[92; 105) 95 ATTR@92..105
96 POUND@[92; 93) "#" 96 POUND@92..93 "#"
97 L_BRACK@[93; 94) "[" 97 L_BRACK@93..94 "["
98 PATH@[94; 97) 98 PATH@94..97
99 PATH_SEGMENT@[94; 97) 99 PATH_SEGMENT@94..97
100 NAME_REF@[94; 97) 100 NAME_REF@94..97
101 IDENT@[94; 97) "cfg" 101 IDENT@94..97 "cfg"
102 TOKEN_TREE@[97; 104) 102 TOKEN_TREE@97..104
103 L_PAREN@[97; 98) "(" 103 L_PAREN@97..98 "("
104 IDENT@[98; 103) "never" 104 IDENT@98..103 "never"
105 R_PAREN@[103; 104) ")" 105 R_PAREN@103..104 ")"
106 R_BRACK@[104; 105) "]" 106 R_BRACK@104..105 "]"
107 WHITESPACE@[105; 106) " " 107 WHITESPACE@105..106 " "
108 PARAM@[106; 120) 108 PARAM@106..120
109 SLICE_PAT@[106; 115) 109 SLICE_PAT@106..115
110 L_BRACK@[106; 107) "[" 110 L_BRACK@106..107 "["
111 BIND_PAT@[107; 108) 111 BIND_PAT@107..108
112 NAME@[107; 108) 112 NAME@107..108
113 IDENT@[107; 108) "w" 113 IDENT@107..108 "w"
114 COMMA@[108; 109) "," 114 COMMA@108..109 ","
115 WHITESPACE@[109; 110) " " 115 WHITESPACE@109..110 " "
116 BIND_PAT@[110; 111) 116 BIND_PAT@110..111
117 NAME@[110; 111) 117 NAME@110..111
118 IDENT@[110; 111) "t" 118 IDENT@110..111 "t"
119 COMMA@[111; 112) "," 119 COMMA@111..112 ","
120 WHITESPACE@[112; 113) " " 120 WHITESPACE@112..113 " "
121 BIND_PAT@[113; 114) 121 BIND_PAT@113..114
122 NAME@[113; 114) 122 NAME@113..114
123 IDENT@[113; 114) "f" 123 IDENT@113..114 "f"
124 R_BRACK@[114; 115) "]" 124 R_BRACK@114..115 "]"
125 COLON@[115; 116) ":" 125 COLON@115..116 ":"
126 WHITESPACE@[116; 117) " " 126 WHITESPACE@116..117 " "
127 DOT3@[117; 120) "..." 127 DOT3@117..120 "..."
128 COMMA@[120; 121) "," 128 COMMA@120..121 ","
129 R_PAREN@[121; 122) ")" 129 R_PAREN@121..122 ")"
130 SEMICOLON@[122; 123) ";" 130 SEMICOLON@122..123 ";"
131 WHITESPACE@[123; 124) "\n" 131 WHITESPACE@123..124 "\n"
132 R_CURLY@[124; 125) "}" 132 R_CURLY@124..125 "}"
133 WHITESPACE@[125; 126) "\n" 133 WHITESPACE@125..126 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast b/crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast
index 5e96b695b..4f9a14066 100644
--- a/crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast
@@ -1,166 +1,166 @@
1SOURCE_FILE@[0; 137) 1SOURCE_FILE@0..137
2 IMPL_DEF@[0; 136) 2 IMPL_DEF@0..136
3 IMPL_KW@[0; 4) "impl" 3 IMPL_KW@0..4 "impl"
4 WHITESPACE@[4; 5) " " 4 WHITESPACE@4..5 " "
5 PATH_TYPE@[5; 6) 5 PATH_TYPE@5..6
6 PATH@[5; 6) 6 PATH@5..6
7 PATH_SEGMENT@[5; 6) 7 PATH_SEGMENT@5..6
8 NAME_REF@[5; 6) 8 NAME_REF@5..6
9 IDENT@[5; 6) "U" 9 IDENT@5..6 "U"
10 WHITESPACE@[6; 7) " " 10 WHITESPACE@6..7 " "
11 ITEM_LIST@[7; 136) 11 ITEM_LIST@7..136
12 L_CURLY@[7; 8) "{" 12 L_CURLY@7..8 "{"
13 WHITESPACE@[8; 13) "\n " 13 WHITESPACE@8..13 "\n "
14 FN_DEF@[13; 45) 14 FN_DEF@13..45
15 FN_KW@[13; 15) "fn" 15 FN_KW@13..15 "fn"
16 WHITESPACE@[15; 16) " " 16 WHITESPACE@15..16 " "
17 NAME@[16; 18) 17 NAME@16..18
18 IDENT@[16; 18) "f1" 18 IDENT@16..18 "f1"
19 PARAM_LIST@[18; 42) 19 PARAM_LIST@18..42
20 L_PAREN@[18; 19) "(" 20 L_PAREN@18..19 "("
21 PARAM@[19; 41) 21 PARAM@19..41
22 TUPLE_PAT@[19; 25) 22 TUPLE_PAT@19..25
23 L_PAREN@[19; 20) "(" 23 L_PAREN@19..20 "("
24 BIND_PAT@[20; 21) 24 BIND_PAT@20..21
25 NAME@[20; 21) 25 NAME@20..21
26 IDENT@[20; 21) "a" 26 IDENT@20..21 "a"
27 COMMA@[21; 22) "," 27 COMMA@21..22 ","
28 WHITESPACE@[22; 23) " " 28 WHITESPACE@22..23 " "
29 BIND_PAT@[23; 24) 29 BIND_PAT@23..24
30 NAME@[23; 24) 30 NAME@23..24
31 IDENT@[23; 24) "b" 31 IDENT@23..24 "b"
32 R_PAREN@[24; 25) ")" 32 R_PAREN@24..25 ")"
33 COLON@[25; 26) ":" 33 COLON@25..26 ":"
34 WHITESPACE@[26; 27) " " 34 WHITESPACE@26..27 " "
35 TUPLE_TYPE@[27; 41) 35 TUPLE_TYPE@27..41
36 L_PAREN@[27; 28) "(" 36 L_PAREN@27..28 "("
37 PATH_TYPE@[28; 33) 37 PATH_TYPE@28..33
38 PATH@[28; 33) 38 PATH@28..33
39 PATH_SEGMENT@[28; 33) 39 PATH_SEGMENT@28..33
40 NAME_REF@[28; 33) 40 NAME_REF@28..33
41 IDENT@[28; 33) "usize" 41 IDENT@28..33 "usize"
42 COMMA@[33; 34) "," 42 COMMA@33..34 ","
43 WHITESPACE@[34; 35) " " 43 WHITESPACE@34..35 " "
44 PATH_TYPE@[35; 40) 44 PATH_TYPE@35..40
45 PATH@[35; 40) 45 PATH@35..40
46 PATH_SEGMENT@[35; 40) 46 PATH_SEGMENT@35..40
47 NAME_REF@[35; 40) 47 NAME_REF@35..40
48 IDENT@[35; 40) "usize" 48 IDENT@35..40 "usize"
49 R_PAREN@[40; 41) ")" 49 R_PAREN@40..41 ")"
50 R_PAREN@[41; 42) ")" 50 R_PAREN@41..42 ")"
51 WHITESPACE@[42; 43) " " 51 WHITESPACE@42..43 " "
52 BLOCK_EXPR@[43; 45) 52 BLOCK_EXPR@43..45
53 BLOCK@[43; 45) 53 BLOCK@43..45
54 L_CURLY@[43; 44) "{" 54 L_CURLY@43..44 "{"
55 R_CURLY@[44; 45) "}" 55 R_CURLY@44..45 "}"
56 WHITESPACE@[45; 50) "\n " 56 WHITESPACE@45..50 "\n "
57 FN_DEF@[50; 73) 57 FN_DEF@50..73
58 FN_KW@[50; 52) "fn" 58 FN_KW@50..52 "fn"
59 WHITESPACE@[52; 53) " " 59 WHITESPACE@52..53 " "
60 NAME@[53; 55) 60 NAME@53..55
61 IDENT@[53; 55) "f2" 61 IDENT@53..55 "f2"
62 PARAM_LIST@[55; 70) 62 PARAM_LIST@55..70
63 L_PAREN@[55; 56) "(" 63 L_PAREN@55..56 "("
64 PARAM@[56; 69) 64 PARAM@56..69
65 RECORD_PAT@[56; 66) 65 RECORD_PAT@56..66
66 PATH@[56; 57) 66 PATH@56..57
67 PATH_SEGMENT@[56; 57) 67 PATH_SEGMENT@56..57
68 NAME_REF@[56; 57) 68 NAME_REF@56..57
69 IDENT@[56; 57) "S" 69 IDENT@56..57 "S"
70 WHITESPACE@[57; 58) " " 70 WHITESPACE@57..58 " "
71 RECORD_FIELD_PAT_LIST@[58; 66) 71 RECORD_FIELD_PAT_LIST@58..66
72 L_CURLY@[58; 59) "{" 72 L_CURLY@58..59 "{"
73 WHITESPACE@[59; 60) " " 73 WHITESPACE@59..60 " "
74 RECORD_FIELD_PAT@[60; 61) 74 RECORD_FIELD_PAT@60..61
75 BIND_PAT@[60; 61) 75 BIND_PAT@60..61
76 NAME@[60; 61) 76 NAME@60..61
77 IDENT@[60; 61) "a" 77 IDENT@60..61 "a"
78 COMMA@[61; 62) "," 78 COMMA@61..62 ","
79 WHITESPACE@[62; 63) " " 79 WHITESPACE@62..63 " "
80 RECORD_FIELD_PAT@[63; 64) 80 RECORD_FIELD_PAT@63..64
81 BIND_PAT@[63; 64) 81 BIND_PAT@63..64
82 NAME@[63; 64) 82 NAME@63..64
83 IDENT@[63; 64) "b" 83 IDENT@63..64 "b"
84 WHITESPACE@[64; 65) " " 84 WHITESPACE@64..65 " "
85 R_CURLY@[65; 66) "}" 85 R_CURLY@65..66 "}"
86 COLON@[66; 67) ":" 86 COLON@66..67 ":"
87 WHITESPACE@[67; 68) " " 87 WHITESPACE@67..68 " "
88 PATH_TYPE@[68; 69) 88 PATH_TYPE@68..69
89 PATH@[68; 69) 89 PATH@68..69
90 PATH_SEGMENT@[68; 69) 90 PATH_SEGMENT@68..69
91 NAME_REF@[68; 69) 91 NAME_REF@68..69
92 IDENT@[68; 69) "S" 92 IDENT@68..69 "S"
93 R_PAREN@[69; 70) ")" 93 R_PAREN@69..70 ")"
94 WHITESPACE@[70; 71) " " 94 WHITESPACE@70..71 " "
95 BLOCK_EXPR@[71; 73) 95 BLOCK_EXPR@71..73
96 BLOCK@[71; 73) 96 BLOCK@71..73
97 L_CURLY@[71; 72) "{" 97 L_CURLY@71..72 "{"
98 R_CURLY@[72; 73) "}" 98 R_CURLY@72..73 "}"
99 WHITESPACE@[73; 78) "\n " 99 WHITESPACE@73..78 "\n "
100 FN_DEF@[78; 107) 100 FN_DEF@78..107
101 FN_KW@[78; 80) "fn" 101 FN_KW@78..80 "fn"
102 WHITESPACE@[80; 81) " " 102 WHITESPACE@80..81 " "
103 NAME@[81; 83) 103 NAME@81..83
104 IDENT@[81; 83) "f3" 104 IDENT@81..83 "f3"
105 PARAM_LIST@[83; 104) 105 PARAM_LIST@83..104
106 L_PAREN@[83; 84) "(" 106 L_PAREN@83..84 "("
107 PARAM@[84; 103) 107 PARAM@84..103
108 TUPLE_STRUCT_PAT@[84; 94) 108 TUPLE_STRUCT_PAT@84..94
109 PATH@[84; 91) 109 PATH@84..91
110 PATH_SEGMENT@[84; 91) 110 PATH_SEGMENT@84..91
111 NAME_REF@[84; 91) 111 NAME_REF@84..91
112 IDENT@[84; 91) "NewType" 112 IDENT@84..91 "NewType"
113 L_PAREN@[91; 92) "(" 113 L_PAREN@91..92 "("
114 BIND_PAT@[92; 93) 114 BIND_PAT@92..93
115 NAME@[92; 93) 115 NAME@92..93
116 IDENT@[92; 93) "a" 116 IDENT@92..93 "a"
117 R_PAREN@[93; 94) ")" 117 R_PAREN@93..94 ")"
118 COLON@[94; 95) ":" 118 COLON@94..95 ":"
119 WHITESPACE@[95; 96) " " 119 WHITESPACE@95..96 " "
120 PATH_TYPE@[96; 103) 120 PATH_TYPE@96..103
121 PATH@[96; 103) 121 PATH@96..103
122 PATH_SEGMENT@[96; 103) 122 PATH_SEGMENT@96..103
123 NAME_REF@[96; 103) 123 NAME_REF@96..103
124 IDENT@[96; 103) "NewType" 124 IDENT@96..103 "NewType"
125 R_PAREN@[103; 104) ")" 125 R_PAREN@103..104 ")"
126 WHITESPACE@[104; 105) " " 126 WHITESPACE@104..105 " "
127 BLOCK_EXPR@[105; 107) 127 BLOCK_EXPR@105..107
128 BLOCK@[105; 107) 128 BLOCK@105..107
129 L_CURLY@[105; 106) "{" 129 L_CURLY@105..106 "{"
130 R_CURLY@[106; 107) "}" 130 R_CURLY@106..107 "}"
131 WHITESPACE@[107; 112) "\n " 131 WHITESPACE@107..112 "\n "
132 FN_DEF@[112; 134) 132 FN_DEF@112..134
133 FN_KW@[112; 114) "fn" 133 FN_KW@112..114 "fn"
134 WHITESPACE@[114; 115) " " 134 WHITESPACE@114..115 " "
135 NAME@[115; 117) 135 NAME@115..117
136 IDENT@[115; 117) "f4" 136 IDENT@115..117 "f4"
137 PARAM_LIST@[117; 131) 137 PARAM_LIST@117..131
138 L_PAREN@[117; 118) "(" 138 L_PAREN@117..118 "("
139 PARAM@[118; 130) 139 PARAM@118..130
140 REF_PAT@[118; 121) 140 REF_PAT@118..121
141 AMP@[118; 119) "&" 141 AMP@118..119 "&"
142 REF_PAT@[119; 121) 142 REF_PAT@119..121
143 AMP@[119; 120) "&" 143 AMP@119..120 "&"
144 BIND_PAT@[120; 121) 144 BIND_PAT@120..121
145 NAME@[120; 121) 145 NAME@120..121
146 IDENT@[120; 121) "a" 146 IDENT@120..121 "a"
147 COLON@[121; 122) ":" 147 COLON@121..122 ":"
148 WHITESPACE@[122; 123) " " 148 WHITESPACE@122..123 " "
149 REFERENCE_TYPE@[123; 130) 149 REFERENCE_TYPE@123..130
150 AMP@[123; 124) "&" 150 AMP@123..124 "&"
151 REFERENCE_TYPE@[124; 130) 151 REFERENCE_TYPE@124..130
152 AMP@[124; 125) "&" 152 AMP@124..125 "&"
153 PATH_TYPE@[125; 130) 153 PATH_TYPE@125..130
154 PATH@[125; 130) 154 PATH@125..130
155 PATH_SEGMENT@[125; 130) 155 PATH_SEGMENT@125..130
156 NAME_REF@[125; 130) 156 NAME_REF@125..130
157 IDENT@[125; 130) "usize" 157 IDENT@125..130 "usize"
158 R_PAREN@[130; 131) ")" 158 R_PAREN@130..131 ")"
159 WHITESPACE@[131; 132) " " 159 WHITESPACE@131..132 " "
160 BLOCK_EXPR@[132; 134) 160 BLOCK_EXPR@132..134
161 BLOCK@[132; 134) 161 BLOCK@132..134
162 L_CURLY@[132; 133) "{" 162 L_CURLY@132..133 "{"
163 R_CURLY@[133; 134) "}" 163 R_CURLY@133..134 "}"
164 WHITESPACE@[134; 135) "\n" 164 WHITESPACE@134..135 "\n"
165 R_CURLY@[135; 136) "}" 165 R_CURLY@135..136 "}"
166 WHITESPACE@[136; 137) "\n" 166 WHITESPACE@136..137 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0065_comment_newline.rast b/crates/ra_syntax/test_data/parser/ok/0065_comment_newline.rast
index 91d0c3736..3294f4901 100644
--- a/crates/ra_syntax/test_data/parser/ok/0065_comment_newline.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0065_comment_newline.rast
@@ -1,17 +1,17 @@
1SOURCE_FILE@[0; 26) 1SOURCE_FILE@0..26
2 FN_DEF@[0; 25) 2 FN_DEF@0..25
3 COMMENT@[0; 11) "/// Example" 3 COMMENT@0..11 "/// Example"
4 WHITESPACE@[11; 13) "\n\n" 4 WHITESPACE@11..13 "\n\n"
5 FN_KW@[13; 15) "fn" 5 FN_KW@13..15 "fn"
6 WHITESPACE@[15; 16) " " 6 WHITESPACE@15..16 " "
7 NAME@[16; 20) 7 NAME@16..20
8 IDENT@[16; 20) "test" 8 IDENT@16..20 "test"
9 PARAM_LIST@[20; 22) 9 PARAM_LIST@20..22
10 L_PAREN@[20; 21) "(" 10 L_PAREN@20..21 "("
11 R_PAREN@[21; 22) ")" 11 R_PAREN@21..22 ")"
12 WHITESPACE@[22; 23) " " 12 WHITESPACE@22..23 " "
13 BLOCK_EXPR@[23; 25) 13 BLOCK_EXPR@23..25
14 BLOCK@[23; 25) 14 BLOCK@23..25
15 L_CURLY@[23; 24) "{" 15 L_CURLY@23..24 "{"
16 R_CURLY@[24; 25) "}" 16 R_CURLY@24..25 "}"
17 WHITESPACE@[25; 26) "\n" 17 WHITESPACE@25..26 "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0065_plus_after_fn_trait_bound.rast b/crates/ra_syntax/test_data/parser/ok/0065_plus_after_fn_trait_bound.rast
index 1b0acf47c..633b14000 100644
--- a/crates/ra_syntax/test_data/parser/ok/0065_plus_after_fn_trait_bound.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0065_plus_after_fn_trait_bound.rast
@@ -1,61 +1,61 @@
1SOURCE_FILE@[0; 40) 1SOURCE_FILE@0..40
2 FN_DEF@[0; 39) 2 FN_DEF@0..39
3 FN_KW@[0; 2) "fn" 3 FN_KW@0..2 "fn"
4 WHITESPACE@[2; 3) " " 4 WHITESPACE@2..3 " "
5 NAME@[3; 4) 5 NAME@3..4
6 IDENT@[3; 4) "f" 6 IDENT@3..4 "f"
7 TYPE_PARAM_LIST@[4; 7) 7 TYPE_PARAM_LIST@4..7
8 L_ANGLE@[4; 5) "<" 8 L_ANGLE@4..5 "<"
9 TYPE_PARAM@[5; 6) 9 TYPE_PARAM@5..6
10 NAME@[5; 6) 10 NAME@5..6
11 IDENT@[5; 6) "T" 11 IDENT@5..6 "T"
12 R_ANGLE@[6; 7) ">" 12 R_ANGLE@6..7 ">"
13 PARAM_LIST@[7; 9) 13 PARAM_LIST@7..9
14 L_PAREN@[7; 8) "(" 14 L_PAREN@7..8 "("
15 R_PAREN@[8; 9) ")" 15 R_PAREN@8..9 ")"
16 WHITESPACE@[9; 10) " " 16 WHITESPACE@9..10 " "
17 WHERE_CLAUSE@[10; 36) 17 WHERE_CLAUSE@10..36
18 WHERE_KW@[10; 15) "where" 18 WHERE_KW@10..15 "where"
19 WHITESPACE@[15; 16) " " 19 WHITESPACE@15..16 " "
20 WHERE_PRED@[16; 36) 20 WHERE_PRED@16..36
21 PATH_TYPE@[16; 17) 21 PATH_TYPE@16..17
22 PATH@[16; 17) 22 PATH@16..17
23 PATH_SEGMENT@[16; 17) 23 PATH_SEGMENT@16..17
24 NAME_REF@[16; 17) 24 NAME_REF@16..17
25 IDENT@[16; 17) "T" 25 IDENT@16..17 "T"
26 COLON@[17; 18) ":" 26 COLON@17..18 ":"
27 WHITESPACE@[18; 19) " " 27 WHITESPACE@18..19 " "
28 TYPE_BOUND_LIST@[19; 36) 28 TYPE_BOUND_LIST@19..36
29 TYPE_BOUND@[19; 29) 29 TYPE_BOUND@19..29
30 PATH_TYPE@[19; 29) 30 PATH_TYPE@19..29
31 PATH@[19; 29) 31 PATH@19..29
32 PATH_SEGMENT@[19; 29) 32 PATH_SEGMENT@19..29
33 NAME_REF@[19; 21) 33 NAME_REF@19..21
34 IDENT@[19; 21) "Fn" 34 IDENT@19..21 "Fn"
35 PARAM_LIST@[21; 23) 35 PARAM_LIST@21..23
36 L_PAREN@[21; 22) "(" 36 L_PAREN@21..22 "("
37 R_PAREN@[22; 23) ")" 37 R_PAREN@22..23 ")"
38 WHITESPACE@[23; 24) " " 38 WHITESPACE@23..24 " "
39 RET_TYPE@[24; 29) 39 RET_TYPE@24..29
40 THIN_ARROW@[24; 26) "->" 40 THIN_ARROW@24..26 "->"
41 WHITESPACE@[26; 27) " " 41 WHITESPACE@26..27 " "
42 PATH_TYPE@[27; 29) 42 PATH_TYPE@27..29
43 PATH@[27; 29) 43 PATH@27..29
44 PATH_SEGMENT@[27; 29) 44 PATH_SEGMENT@27..29
45 NAME_REF@[27; 29) 45 NAME_REF@27..29
46 IDENT@[27; 29) "u8" 46 IDENT@27..29 "u8"
47 WHITESPACE@[29; 30) " " 47 WHITESPACE@29..30 " "
48 PLUS@[30; 31) "+" 48 PLUS@30..31 "+"
49 WHITESPACE@[31; 32) " " 49 WHITESPACE@31..32 " "
50 TYPE_BOUND@[32; 36) 50 TYPE_BOUND@32..36
51 PATH_TYPE@[32; 36) 51 PATH_TYPE@32..36
52 PATH@[32; 36) 52 PATH@32..36
53 PATH_SEGMENT@[32; 36) 53 PATH_SEGMENT@32..36
54 NAME_REF@[32; 36) 54 NAME_REF@32..36
55 IDENT@[32; 36) "Send" 55 IDENT@32..36 "Send"
56 WHITESPACE@[36; 37) " " 56 WHITESPACE@36..37 " "
57 BLOCK_EXPR@[37; 39) 57 BLOCK_EXPR@37..39
58 BLOCK@[37; 39) 58 BLOCK@37..39
59 L_CURLY@[37; 38) "{" 59 L_CURLY@37..38 "{"
60 R_CURLY@[38; 39) "}" 60 R_CURLY@38..39 "}"
61 WHITESPACE@[39; 40) "\n" 61 WHITESPACE@39..40 "\n"
diff --git a/crates/ra_text_edit/Cargo.toml b/crates/ra_text_edit/Cargo.toml
index cae28389d..46a2ab68f 100644
--- a/crates/ra_text_edit/Cargo.toml
+++ b/crates/ra_text_edit/Cargo.toml
@@ -9,5 +9,4 @@ publish = false
9doctest = false 9doctest = false
10 10
11[dependencies] 11[dependencies]
12text_unit = "0.1.10" 12text-size = "1.0.0"
13
diff --git a/crates/ra_text_edit/src/lib.rs b/crates/ra_text_edit/src/lib.rs
index f6769e6a6..e656260c7 100644
--- a/crates/ra_text_edit/src/lib.rs
+++ b/crates/ra_text_edit/src/lib.rs
@@ -2,7 +2,7 @@
2 2
3mod text_edit; 3mod text_edit;
4 4
5use text_unit::{TextRange, TextUnit}; 5use text_size::{TextRange, TextSize};
6 6
7pub use crate::text_edit::{TextEdit, TextEditBuilder}; 7pub use crate::text_edit::{TextEdit, TextEditBuilder};
8 8
@@ -23,13 +23,13 @@ impl AtomTextEdit {
23 AtomTextEdit::replace(range, String::new()) 23 AtomTextEdit::replace(range, String::new())
24 } 24 }
25 25
26 pub fn insert(offset: TextUnit, text: String) -> AtomTextEdit { 26 pub fn insert(offset: TextSize, text: String) -> AtomTextEdit {
27 AtomTextEdit::replace(TextRange::offset_len(offset, 0.into()), text) 27 AtomTextEdit::replace(TextRange::empty(offset), text)
28 } 28 }
29 29
30 pub fn apply(&self, mut text: String) -> String { 30 pub fn apply(&self, mut text: String) -> String {
31 let start = self.delete.start().to_usize(); 31 let start: usize = self.delete.start().into();
32 let end = self.delete.end().to_usize(); 32 let end: usize = self.delete.end().into();
33 text.replace_range(start..end, &self.insert); 33 text.replace_range(start..end, &self.insert);
34 text 34 text
35 } 35 }
diff --git a/crates/ra_text_edit/src/text_edit.rs b/crates/ra_text_edit/src/text_edit.rs
index 5c37a08a8..eabab4b4d 100644
--- a/crates/ra_text_edit/src/text_edit.rs
+++ b/crates/ra_text_edit/src/text_edit.rs
@@ -1,7 +1,8 @@
1//! FIXME: write short doc here 1//! FIXME: write short doc here
2 2
3use crate::AtomTextEdit; 3use crate::AtomTextEdit;
4use text_unit::{TextRange, TextUnit}; 4
5use text_size::{TextRange, TextSize};
5 6
6#[derive(Debug, Clone)] 7#[derive(Debug, Clone)]
7pub struct TextEdit { 8pub struct TextEdit {
@@ -20,19 +21,19 @@ impl TextEditBuilder {
20 pub fn delete(&mut self, range: TextRange) { 21 pub fn delete(&mut self, range: TextRange) {
21 self.atoms.push(AtomTextEdit::delete(range)) 22 self.atoms.push(AtomTextEdit::delete(range))
22 } 23 }
23 pub fn insert(&mut self, offset: TextUnit, text: String) { 24 pub fn insert(&mut self, offset: TextSize, text: String) {
24 self.atoms.push(AtomTextEdit::insert(offset, text)) 25 self.atoms.push(AtomTextEdit::insert(offset, text))
25 } 26 }
26 pub fn finish(self) -> TextEdit { 27 pub fn finish(self) -> TextEdit {
27 TextEdit::from_atoms(self.atoms) 28 TextEdit::from_atoms(self.atoms)
28 } 29 }
29 pub fn invalidates_offset(&self, offset: TextUnit) -> bool { 30 pub fn invalidates_offset(&self, offset: TextSize) -> bool {
30 self.atoms.iter().any(|atom| atom.delete.contains_inclusive(offset)) 31 self.atoms.iter().any(|atom| atom.delete.contains_inclusive(offset))
31 } 32 }
32} 33}
33 34
34impl TextEdit { 35impl TextEdit {
35 pub fn insert(offset: TextUnit, text: String) -> TextEdit { 36 pub fn insert(offset: TextSize, text: String) -> TextEdit {
36 let mut builder = TextEditBuilder::default(); 37 let mut builder = TextEditBuilder::default();
37 builder.insert(offset, text); 38 builder.insert(offset, text);
38 builder.finish() 39 builder.finish()
@@ -63,16 +64,16 @@ impl TextEdit {
63 } 64 }
64 65
65 pub fn apply(&self, text: &str) -> String { 66 pub fn apply(&self, text: &str) -> String {
66 let mut total_len = TextUnit::of_str(text); 67 let mut total_len = TextSize::of(text);
67 for atom in self.atoms.iter() { 68 for atom in self.atoms.iter() {
68 total_len += TextUnit::of_str(&atom.insert); 69 total_len += TextSize::of(&atom.insert);
69 total_len -= atom.delete.end() - atom.delete.start(); 70 total_len -= atom.delete.end() - atom.delete.start();
70 } 71 }
71 let mut buf = String::with_capacity(total_len.to_usize()); 72 let mut buf = String::with_capacity(total_len.into());
72 let mut prev = 0; 73 let mut prev = 0;
73 for atom in self.atoms.iter() { 74 for atom in self.atoms.iter() {
74 let start = atom.delete.start().to_usize(); 75 let start: usize = atom.delete.start().into();
75 let end = atom.delete.end().to_usize(); 76 let end: usize = atom.delete.end().into();
76 if start > prev { 77 if start > prev {
77 buf.push_str(&text[prev..start]); 78 buf.push_str(&text[prev..start]);
78 } 79 }
@@ -80,11 +81,11 @@ impl TextEdit {
80 prev = end; 81 prev = end;
81 } 82 }
82 buf.push_str(&text[prev..text.len()]); 83 buf.push_str(&text[prev..text.len()]);
83 assert_eq!(TextUnit::of_str(&buf), total_len); 84 assert_eq!(TextSize::of(&buf), total_len);
84 buf 85 buf
85 } 86 }
86 87
87 pub fn apply_to_offset(&self, offset: TextUnit) -> Option<TextUnit> { 88 pub fn apply_to_offset(&self, offset: TextSize) -> Option<TextSize> {
88 let mut res = offset; 89 let mut res = offset;
89 for atom in self.atoms.iter() { 90 for atom in self.atoms.iter() {
90 if atom.delete.start() >= offset { 91 if atom.delete.start() >= offset {
@@ -93,7 +94,7 @@ impl TextEdit {
93 if offset < atom.delete.end() { 94 if offset < atom.delete.end() {
94 return None; 95 return None;
95 } 96 }
96 res += TextUnit::of_str(&atom.insert); 97 res += TextSize::of(&atom.insert);
97 res -= atom.delete.len(); 98 res -= atom.delete.len();
98 } 99 }
99 Some(res) 100 Some(res)
diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs
index 9fa7dad71..72183da15 100644
--- a/crates/rust-analyzer/src/cli/analysis_stats.rs
+++ b/crates/rust-analyzer/src/cli/analysis_stats.rs
@@ -130,7 +130,7 @@ pub fn analysis_stats(
130 let original_file = src.file_id.original_file(db); 130 let original_file = src.file_id.original_file(db);
131 let path = db.file_relative_path(original_file); 131 let path = db.file_relative_path(original_file);
132 let syntax_range = src.value.syntax().text_range(); 132 let syntax_range = src.value.syntax().text_range();
133 format_to!(msg, " ({:?} {})", path, syntax_range); 133 format_to!(msg, " ({:?} {:?})", path, syntax_range);
134 } 134 }
135 if verbosity.is_spammy() { 135 if verbosity.is_spammy() {
136 bar.println(msg.to_string()); 136 bar.println(msg.to_string());
diff --git a/crates/rust-analyzer/src/conv.rs b/crates/rust-analyzer/src/conv.rs
index 098ee369c..b0f911f71 100644
--- a/crates/rust-analyzer/src/conv.rs
+++ b/crates/rust-analyzer/src/conv.rs
@@ -14,7 +14,7 @@ use ra_ide::{
14 InlayHint, InlayKind, InsertTextFormat, LineCol, LineIndex, NavigationTarget, RangeInfo, 14 InlayHint, InlayKind, InsertTextFormat, LineCol, LineIndex, NavigationTarget, RangeInfo,
15 ReferenceAccess, Severity, SourceChange, SourceFileEdit, 15 ReferenceAccess, Severity, SourceChange, SourceFileEdit,
16}; 16};
17use ra_syntax::{SyntaxKind, TextRange, TextUnit}; 17use ra_syntax::{SyntaxKind, TextRange, TextSize};
18use ra_text_edit::{AtomTextEdit, TextEdit}; 18use ra_text_edit::{AtomTextEdit, TextEdit};
19use ra_vfs::LineEndings; 19use ra_vfs::LineEndings;
20 20
@@ -100,6 +100,7 @@ impl Conv for CompletionItemKind {
100 CompletionItemKind::Method => Method, 100 CompletionItemKind::Method => Method,
101 CompletionItemKind::TypeParam => TypeParameter, 101 CompletionItemKind::TypeParam => TypeParameter,
102 CompletionItemKind::Macro => Method, 102 CompletionItemKind::Macro => Method,
103 CompletionItemKind::Attribute => EnumMember,
103 } 104 }
104 } 105 }
105} 106}
@@ -123,13 +124,13 @@ impl ConvWith<(&LineIndex, LineEndings)> for CompletionItem {
123 // LSP does not allow arbitrary edits in completion, so we have to do a 124 // LSP does not allow arbitrary edits in completion, so we have to do a
124 // non-trivial mapping here. 125 // non-trivial mapping here.
125 for atom_edit in self.text_edit().as_atoms() { 126 for atom_edit in self.text_edit().as_atoms() {
126 if self.source_range().is_subrange(&atom_edit.delete) { 127 if atom_edit.delete.contains_range(self.source_range()) {
127 text_edit = Some(if atom_edit.delete == self.source_range() { 128 text_edit = Some(if atom_edit.delete == self.source_range() {
128 atom_edit.conv_with((ctx.0, ctx.1)) 129 atom_edit.conv_with((ctx.0, ctx.1))
129 } else { 130 } else {
130 assert!(self.source_range().end() == atom_edit.delete.end()); 131 assert!(self.source_range().end() == atom_edit.delete.end());
131 let range1 = 132 let range1 =
132 TextRange::from_to(atom_edit.delete.start(), self.source_range().start()); 133 TextRange::new(atom_edit.delete.start(), self.source_range().start());
133 let range2 = self.source_range(); 134 let range2 = self.source_range();
134 let edit1 = AtomTextEdit::replace(range1, String::new()); 135 let edit1 = AtomTextEdit::replace(range1, String::new());
135 let edit2 = AtomTextEdit::replace(range2, atom_edit.insert.clone()); 136 let edit2 = AtomTextEdit::replace(range2, atom_edit.insert.clone());
@@ -137,7 +138,7 @@ impl ConvWith<(&LineIndex, LineEndings)> for CompletionItem {
137 edit2.conv_with((ctx.0, ctx.1)) 138 edit2.conv_with((ctx.0, ctx.1))
138 }) 139 })
139 } else { 140 } else {
140 assert!(self.source_range().intersection(&atom_edit.delete).is_none()); 141 assert!(self.source_range().intersect(atom_edit.delete).is_none());
141 additional_text_edits.push(atom_edit.conv_with((ctx.0, ctx.1))); 142 additional_text_edits.push(atom_edit.conv_with((ctx.0, ctx.1)));
142 } 143 }
143 } 144 }
@@ -183,15 +184,15 @@ impl ConvWith<(&LineIndex, LineEndings)> for CompletionItem {
183} 184}
184 185
185impl ConvWith<&LineIndex> for Position { 186impl ConvWith<&LineIndex> for Position {
186 type Output = TextUnit; 187 type Output = TextSize;
187 188
188 fn conv_with(self, line_index: &LineIndex) -> TextUnit { 189 fn conv_with(self, line_index: &LineIndex) -> TextSize {
189 let line_col = LineCol { line: self.line as u32, col_utf16: self.character as u32 }; 190 let line_col = LineCol { line: self.line as u32, col_utf16: self.character as u32 };
190 line_index.offset(line_col) 191 line_index.offset(line_col)
191 } 192 }
192} 193}
193 194
194impl ConvWith<&LineIndex> for TextUnit { 195impl ConvWith<&LineIndex> for TextSize {
195 type Output = Position; 196 type Output = Position;
196 197
197 fn conv_with(self, line_index: &LineIndex) -> Position { 198 fn conv_with(self, line_index: &LineIndex) -> Position {
@@ -212,7 +213,7 @@ impl ConvWith<&LineIndex> for Range {
212 type Output = TextRange; 213 type Output = TextRange;
213 214
214 fn conv_with(self, line_index: &LineIndex) -> TextRange { 215 fn conv_with(self, line_index: &LineIndex) -> TextRange {
215 TextRange::from_to(self.start.conv_with(line_index), self.end.conv_with(line_index)) 216 TextRange::new(self.start.conv_with(line_index), self.end.conv_with(line_index))
216 } 217 }
217} 218}
218 219
@@ -299,7 +300,7 @@ impl ConvWith<&FoldConvCtx<'_>> for Fold {
299 // range.end.line from the folding region if there is more text after range.end 300 // range.end.line from the folding region if there is more text after range.end
300 // on the same line. 301 // on the same line.
301 let has_more_text_on_end_line = ctx.text 302 let has_more_text_on_end_line = ctx.text
302 [TextRange::from_to(self.range.end(), TextUnit::of_str(ctx.text))] 303 [TextRange::new(self.range.end(), TextSize::of(ctx.text))]
303 .chars() 304 .chars()
304 .take_while(|it| *it != '\n') 305 .take_while(|it| *it != '\n')
305 .any(|it| !it.is_whitespace()); 306 .any(|it| !it.is_whitespace());
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index fc4c77f8a..f3aef3f0f 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -222,6 +222,7 @@ pub fn main_loop(ws_roots: Vec<PathBuf>, config: Config, connection: Connection)
222 libdata_receiver.into_iter().for_each(drop); 222 libdata_receiver.into_iter().for_each(drop);
223 log::info!("...tasks have finished"); 223 log::info!("...tasks have finished");
224 log::info!("joining threadpool..."); 224 log::info!("joining threadpool...");
225 pool.join();
225 drop(pool); 226 drop(pool);
226 log::info!("...threadpool has finished"); 227 log::info!("...threadpool has finished");
227 228
@@ -417,28 +418,29 @@ fn loop_turn(
417 && loop_state.pending_libraries.is_empty() 418 && loop_state.pending_libraries.is_empty()
418 && loop_state.in_flight_libraries == 0 419 && loop_state.in_flight_libraries == 0
419 { 420 {
421 state_changed = true;
420 loop_state.workspace_loaded = true; 422 loop_state.workspace_loaded = true;
421 if let Some(flycheck) = &world_state.flycheck { 423 if let Some(flycheck) = &world_state.flycheck {
422 flycheck.update(); 424 flycheck.update();
423 } 425 }
424 pool.execute({
425 let subs = loop_state.subscriptions.subscriptions();
426 let snap = world_state.snapshot();
427 move || snap.analysis().prime_caches(subs).unwrap_or_else(|_: Canceled| ())
428 });
429 } 426 }
430 427
431 if show_progress { 428 if show_progress {
432 send_startup_progress(&connection.sender, loop_state); 429 send_startup_progress(&connection.sender, loop_state);
433 } 430 }
434 431
435 if state_changed { 432 if state_changed && loop_state.workspace_loaded {
436 update_file_notifications_on_threadpool( 433 update_file_notifications_on_threadpool(
437 pool, 434 pool,
438 world_state.snapshot(), 435 world_state.snapshot(),
439 task_sender.clone(), 436 task_sender.clone(),
440 loop_state.subscriptions.subscriptions(), 437 loop_state.subscriptions.subscriptions(),
441 ) 438 );
439 pool.execute({
440 let subs = loop_state.subscriptions.subscriptions();
441 let snap = world_state.snapshot();
442 move || snap.analysis().prime_caches(subs).unwrap_or_else(|_: Canceled| ())
443 });
442 } 444 }
443 445
444 let loop_duration = loop_start.elapsed(); 446 let loop_duration = loop_start.elapsed();
@@ -696,7 +698,7 @@ fn on_diagnostic_task(task: DiagnosticTask, msg_sender: &Sender<Message>, state:
696 let uri = match url_from_path_with_drive_lowercasing(&path) { 698 let uri = match url_from_path_with_drive_lowercasing(&path) {
697 Ok(uri) => uri, 699 Ok(uri) => uri,
698 Err(err) => { 700 Err(err) => {
699 log::error!("Couldn't convert path to url ({}): {:?}", err, path.to_string_lossy()); 701 log::error!("Couldn't convert path to url ({}): {}", err, path.display());
700 continue; 702 continue;
701 } 703 }
702 }; 704 };
diff --git a/crates/rust-analyzer/src/main_loop/handlers.rs b/crates/rust-analyzer/src/main_loop/handlers.rs
index 41d9fe344..c2c1a23cd 100644
--- a/crates/rust-analyzer/src/main_loop/handlers.rs
+++ b/crates/rust-analyzer/src/main_loop/handlers.rs
@@ -23,7 +23,7 @@ use ra_ide::{
23 SearchScope, 23 SearchScope,
24}; 24};
25use ra_prof::profile; 25use ra_prof::profile;
26use ra_syntax::{AstNode, SyntaxKind, TextRange, TextUnit}; 26use ra_syntax::{AstNode, SyntaxKind, TextRange, TextSize};
27use rustc_hash::FxHashMap; 27use rustc_hash::FxHashMap;
28use serde::{Deserialize, Serialize}; 28use serde::{Deserialize, Serialize};
29use serde_json::to_value; 29use serde_json::to_value;
@@ -97,7 +97,7 @@ pub fn handle_selection_range(
97 .map(|position| { 97 .map(|position| {
98 let mut ranges = Vec::new(); 98 let mut ranges = Vec::new();
99 { 99 {
100 let mut range = TextRange::from_to(position, position); 100 let mut range = TextRange::new(position, position);
101 loop { 101 loop {
102 ranges.push(range); 102 ranges.push(range);
103 let frange = FileRange { file_id, range }; 103 let frange = FileRange { file_id, range };
@@ -184,11 +184,11 @@ pub fn handle_on_type_formatting(
184 184
185 // in `ra_ide`, the `on_type` invariant is that 185 // in `ra_ide`, the `on_type` invariant is that
186 // `text.char_at(position) == typed_char`. 186 // `text.char_at(position) == typed_char`.
187 position.offset -= TextUnit::of_char('.'); 187 position.offset -= TextSize::of('.');
188 let char_typed = params.ch.chars().next().unwrap_or('\0'); 188 let char_typed = params.ch.chars().next().unwrap_or('\0');
189 assert!({ 189 assert!({
190 let text = world.analysis().file_text(position.file_id)?; 190 let text = world.analysis().file_text(position.file_id)?;
191 text[position.offset.to_usize()..].starts_with(char_typed) 191 text[usize::from(position.offset)..].starts_with(char_typed)
192 }); 192 });
193 193
194 // We have an assist that inserts ` ` after typing `->` in `fn foo() ->{`, 194 // We have an assist that inserts ` ` after typing `->` in `fn foo() ->{`,
@@ -384,7 +384,7 @@ pub fn handle_runnables(
384 args: check_args, 384 args: check_args,
385 extra_args: Vec::new(), 385 extra_args: Vec::new(),
386 env: FxHashMap::default(), 386 env: FxHashMap::default(),
387 cwd: workspace_root.map(|root| root.to_string_lossy().to_string()), 387 cwd: workspace_root.map(|root| root.to_owned()),
388 }); 388 });
389 Ok(res) 389 Ok(res)
390} 390}
@@ -403,7 +403,7 @@ pub fn handle_completion(
403 let syntax = source_file.syntax(); 403 let syntax = source_file.syntax();
404 let text = syntax.text(); 404 let text = syntax.text();
405 if let Some(next_char) = text.char_at(position.offset) { 405 if let Some(next_char) = text.char_at(position.offset) {
406 let diff = TextUnit::of_char(next_char) + TextUnit::of_char(':'); 406 let diff = TextSize::of(next_char) + TextSize::of(':');
407 let prev_char = position.offset - diff; 407 let prev_char = position.offset - diff;
408 if text.char_at(prev_char) != Some(':') { 408 if text.char_at(prev_char) != Some(':') {
409 res = true; 409 res = true;
@@ -592,7 +592,7 @@ pub fn handle_formatting(
592 let crate_ids = world.analysis().crate_for(file_id)?; 592 let crate_ids = world.analysis().crate_for(file_id)?;
593 593
594 let file_line_index = world.analysis().file_line_index(file_id)?; 594 let file_line_index = world.analysis().file_line_index(file_id)?;
595 let end_position = TextUnit::of_str(&file).conv_with(&file_line_index); 595 let end_position = TextSize::of(file.as_str()).conv_with(&file_line_index);
596 596
597 let mut rustfmt = match &world.config.rustfmt { 597 let mut rustfmt = match &world.config.rustfmt {
598 RustfmtConfig::Rustfmt { extra_args } => { 598 RustfmtConfig::Rustfmt { extra_args } => {
@@ -698,7 +698,7 @@ pub fn handle_code_action(
698 let fixes_from_diagnostics = diagnostics 698 let fixes_from_diagnostics = diagnostics
699 .into_iter() 699 .into_iter()
700 .filter_map(|d| Some((d.range, d.fix?))) 700 .filter_map(|d| Some((d.range, d.fix?)))
701 .filter(|(diag_range, _fix)| diag_range.intersection(&range).is_some()) 701 .filter(|(diag_range, _fix)| diag_range.intersect(range).is_some())
702 .map(|(_range, fix)| fix); 702 .map(|(_range, fix)| fix);
703 703
704 for source_edit in fixes_from_diagnostics { 704 for source_edit in fixes_from_diagnostics {
@@ -723,7 +723,7 @@ pub fn handle_code_action(
723 723
724 for fix in world.check_fixes.get(&file_id).into_iter().flatten() { 724 for fix in world.check_fixes.get(&file_id).into_iter().flatten() {
725 let fix_range = fix.range.conv_with(&line_index); 725 let fix_range = fix.range.conv_with(&line_index);
726 if fix_range.intersection(&range).is_none() { 726 if fix_range.intersect(range).is_none() {
727 continue; 727 continue;
728 } 728 }
729 res.push(fix.action.clone()); 729 res.push(fix.action.clone());
@@ -984,7 +984,7 @@ fn to_lsp_runnable(
984 m.insert("RUST_BACKTRACE".to_string(), "short".to_string()); 984 m.insert("RUST_BACKTRACE".to_string(), "short".to_string());
985 m 985 m
986 }, 986 },
987 cwd: world.workspace_root_for(file_id).map(|root| root.to_string_lossy().to_string()), 987 cwd: world.workspace_root_for(file_id).map(|root| root.to_owned()),
988 }) 988 })
989} 989}
990 990
@@ -1107,7 +1107,7 @@ pub fn handle_semantic_tokens(
1107 let (token_index, modifier_bitset) = highlight_range.highlight.conv(); 1107 let (token_index, modifier_bitset) = highlight_range.highlight.conv();
1108 for mut range in line_index.lines(highlight_range.range) { 1108 for mut range in line_index.lines(highlight_range.range) {
1109 if text[range].ends_with('\n') { 1109 if text[range].ends_with('\n') {
1110 range = TextRange::from_to(range.start(), range.end() - TextUnit::of_char('\n')); 1110 range = TextRange::new(range.start(), range.end() - TextSize::of('\n'));
1111 } 1111 }
1112 let range = range.conv_with(&line_index); 1112 let range = range.conv_with(&line_index);
1113 builder.push(range, token_index, modifier_bitset); 1113 builder.push(range, token_index, modifier_bitset);
diff --git a/crates/rust-analyzer/src/req.rs b/crates/rust-analyzer/src/req.rs
index b8b627e28..ae3448892 100644
--- a/crates/rust-analyzer/src/req.rs
+++ b/crates/rust-analyzer/src/req.rs
@@ -17,6 +17,7 @@ pub use lsp_types::{
17 SignatureHelp, SymbolKind, TextDocumentEdit, TextDocumentPositionParams, TextEdit, 17 SignatureHelp, SymbolKind, TextDocumentEdit, TextDocumentPositionParams, TextEdit,
18 WorkDoneProgressParams, WorkspaceEdit, WorkspaceSymbolParams, 18 WorkDoneProgressParams, WorkspaceEdit, WorkspaceSymbolParams,
19}; 19};
20use std::path::PathBuf;
20 21
21pub enum AnalyzerStatus {} 22pub enum AnalyzerStatus {}
22 23
@@ -141,7 +142,7 @@ pub struct Runnable {
141 pub args: Vec<String>, 142 pub args: Vec<String>,
142 pub extra_args: Vec<String>, 143 pub extra_args: Vec<String>,
143 pub env: FxHashMap<String, String>, 144 pub env: FxHashMap<String, String>,
144 pub cwd: Option<String>, 145 pub cwd: Option<PathBuf>,
145} 146}
146 147
147#[derive(Deserialize, Serialize, Debug)] 148#[derive(Deserialize, Serialize, Debug)]
diff --git a/crates/test_utils/Cargo.toml b/crates/test_utils/Cargo.toml
index 6a7c6d6f9..8ec986bcb 100644
--- a/crates/test_utils/Cargo.toml
+++ b/crates/test_utils/Cargo.toml
@@ -9,5 +9,5 @@ doctest = false
9 9
10[dependencies] 10[dependencies]
11difference = "2.0.0" 11difference = "2.0.0"
12text_unit = "0.1.10" 12text-size = "1.0.0"
13serde_json = "1.0.48" 13serde_json = "1.0.48"
diff --git a/crates/test_utils/src/lib.rs b/crates/test_utils/src/lib.rs
index 4164bfd5e..b1365444a 100644
--- a/crates/test_utils/src/lib.rs
+++ b/crates/test_utils/src/lib.rs
@@ -15,7 +15,7 @@ use std::{
15}; 15};
16 16
17use serde_json::Value; 17use serde_json::Value;
18use text_unit::{TextRange, TextUnit}; 18use text_size::{TextRange, TextSize};
19 19
20pub use difference::Changeset as __Changeset; 20pub use difference::Changeset as __Changeset;
21 21
@@ -49,7 +49,7 @@ macro_rules! assert_eq_text {
49} 49}
50 50
51/// Infallible version of `try_extract_offset()`. 51/// Infallible version of `try_extract_offset()`.
52pub fn extract_offset(text: &str) -> (TextUnit, String) { 52pub fn extract_offset(text: &str) -> (TextSize, String) {
53 match try_extract_offset(text) { 53 match try_extract_offset(text) {
54 None => panic!("text should contain cursor marker"), 54 None => panic!("text should contain cursor marker"),
55 Some(result) => result, 55 Some(result) => result,
@@ -58,12 +58,12 @@ pub fn extract_offset(text: &str) -> (TextUnit, String) {
58 58
59/// Returns the offset of the first occurence of `<|>` marker and the copy of `text` 59/// Returns the offset of the first occurence of `<|>` marker and the copy of `text`
60/// without the marker. 60/// without the marker.
61fn try_extract_offset(text: &str) -> Option<(TextUnit, String)> { 61fn try_extract_offset(text: &str) -> Option<(TextSize, String)> {
62 let cursor_pos = text.find(CURSOR_MARKER)?; 62 let cursor_pos = text.find(CURSOR_MARKER)?;
63 let mut new_text = String::with_capacity(text.len() - CURSOR_MARKER.len()); 63 let mut new_text = String::with_capacity(text.len() - CURSOR_MARKER.len());
64 new_text.push_str(&text[..cursor_pos]); 64 new_text.push_str(&text[..cursor_pos]);
65 new_text.push_str(&text[cursor_pos + CURSOR_MARKER.len()..]); 65 new_text.push_str(&text[cursor_pos + CURSOR_MARKER.len()..]);
66 let cursor_pos = TextUnit::from(cursor_pos as u32); 66 let cursor_pos = TextSize::from(cursor_pos as u32);
67 Some((cursor_pos, new_text)) 67 Some((cursor_pos, new_text))
68} 68}
69 69
@@ -80,25 +80,25 @@ pub fn extract_range(text: &str) -> (TextRange, String) {
80fn try_extract_range(text: &str) -> Option<(TextRange, String)> { 80fn try_extract_range(text: &str) -> Option<(TextRange, String)> {
81 let (start, text) = try_extract_offset(text)?; 81 let (start, text) = try_extract_offset(text)?;
82 let (end, text) = try_extract_offset(&text)?; 82 let (end, text) = try_extract_offset(&text)?;
83 Some((TextRange::from_to(start, end), text)) 83 Some((TextRange::new(start, end), text))
84} 84}
85 85
86#[derive(Clone, Copy)] 86#[derive(Clone, Copy)]
87pub enum RangeOrOffset { 87pub enum RangeOrOffset {
88 Range(TextRange), 88 Range(TextRange),
89 Offset(TextUnit), 89 Offset(TextSize),
90} 90}
91 91
92impl From<RangeOrOffset> for TextRange { 92impl From<RangeOrOffset> for TextRange {
93 fn from(selection: RangeOrOffset) -> Self { 93 fn from(selection: RangeOrOffset) -> Self {
94 match selection { 94 match selection {
95 RangeOrOffset::Range(it) => it, 95 RangeOrOffset::Range(it) => it,
96 RangeOrOffset::Offset(it) => TextRange::from_to(it, it), 96 RangeOrOffset::Offset(it) => TextRange::new(it, it),
97 } 97 }
98 } 98 }
99} 99}
100 100
101/// Extracts `TextRange` or `TextUnit` depending on the amount of `<|>` markers 101/// Extracts `TextRange` or `TextSize` depending on the amount of `<|>` markers
102/// found in `text`. 102/// found in `text`.
103/// 103///
104/// # Panics 104/// # Panics
@@ -129,13 +129,13 @@ pub fn extract_ranges(mut text: &str, tag: &str) -> (Vec<TextRange>, String) {
129 text = &text[i..]; 129 text = &text[i..];
130 if text.starts_with(&open) { 130 if text.starts_with(&open) {
131 text = &text[open.len()..]; 131 text = &text[open.len()..];
132 let from = TextUnit::of_str(&res); 132 let from = TextSize::of(&res);
133 stack.push(from); 133 stack.push(from);
134 } else if text.starts_with(&close) { 134 } else if text.starts_with(&close) {
135 text = &text[close.len()..]; 135 text = &text[close.len()..];
136 let from = stack.pop().unwrap_or_else(|| panic!("unmatched </{}>", tag)); 136 let from = stack.pop().unwrap_or_else(|| panic!("unmatched </{}>", tag));
137 let to = TextUnit::of_str(&res); 137 let to = TextSize::of(&res);
138 ranges.push(TextRange::from_to(from, to)); 138 ranges.push(TextRange::new(from, to));
139 } 139 }
140 } 140 }
141 } 141 }
@@ -146,8 +146,8 @@ pub fn extract_ranges(mut text: &str, tag: &str) -> (Vec<TextRange>, String) {
146} 146}
147 147
148/// Inserts `<|>` marker into the `text` at `offset`. 148/// Inserts `<|>` marker into the `text` at `offset`.
149pub fn add_cursor(text: &str, offset: TextUnit) -> String { 149pub fn add_cursor(text: &str, offset: TextSize) -> String {
150 let offset: usize = offset.to_usize(); 150 let offset: usize = offset.into();
151 let mut res = String::new(); 151 let mut res = String::new();
152 res.push_str(&text[..offset]); 152 res.push_str(&text[..offset]);
153 res.push_str("<|>"); 153 res.push_str("<|>");
diff --git a/docs/dev/syntax.md b/docs/dev/syntax.md
index 0a4554c55..4dd1de659 100644
--- a/docs/dev/syntax.md
+++ b/docs/dev/syntax.md
@@ -17,7 +17,7 @@ The things described are implemented in two places
17 17
18* Syntax trees are lossless, or full fidelity. All comments and whitespace are preserved. 18* Syntax trees are lossless, or full fidelity. All comments and whitespace are preserved.
19* Syntax trees are semantic-less. They describe *strictly* the structure of a sequence of characters, they don't have hygiene, name resolution or type information attached. 19* Syntax trees are semantic-less. They describe *strictly* the structure of a sequence of characters, they don't have hygiene, name resolution or type information attached.
20* Syntax trees are simple value type. It is possible to create trees for a syntax without any external context. 20* Syntax trees are simple value type. It is possible to create trees for a syntax without any external context.
21* Syntax trees have intuitive traversal API (parent, children, siblings, etc). 21* Syntax trees have intuitive traversal API (parent, children, siblings, etc).
22* Parsing is lossless (even if the input is invalid, the tree produced by the parser represents it exactly). 22* Parsing is lossless (even if the input is invalid, the tree produced by the parser represents it exactly).
23* Parsing is resilient (even if the input is invalid, parser tries to see as much syntax tree fragments in the input as it can). 23* Parsing is resilient (even if the input is invalid, parser tries to see as much syntax tree fragments in the input as it can).
@@ -34,12 +34,12 @@ The syntax tree consists of three layers:
34* SyntaxNodes (aka RedNode) 34* SyntaxNodes (aka RedNode)
35* AST 35* AST
36 36
37Of these, only GreenNodes store the actual data, the other two layers are (non-trivial) views into green tree. 37Of these, only GreenNodes store the actual data, the other two layers are (non-trivial) views into green tree.
38Red-green terminology comes from Roslyn ([link](https://docs.microsoft.com/en-ie/archive/blogs/ericlippert/persistence-facades-and-roslyns-red-green-trees)) and gives the name to the `rowan` library. Green and syntax nodes are defined in rowan, ast is defined in rust-analyzer. 38Red-green terminology comes from Roslyn ([link](https://docs.microsoft.com/en-ie/archive/blogs/ericlippert/persistence-facades-and-roslyns-red-green-trees)) and gives the name to the `rowan` library. Green and syntax nodes are defined in rowan, ast is defined in rust-analyzer.
39 39
40Syntax trees are a semi-transient data structure. 40Syntax trees are a semi-transient data structure.
41In general, frontend does not keep syntax trees for all files in memory. 41In general, frontend does not keep syntax trees for all files in memory.
42Instead, it *lowers* syntax trees to more compact and rigid representation, which is not full-fidelity, but which can be mapped back to a syntax tree if so desired. 42Instead, it *lowers* syntax trees to more compact and rigid representation, which is not full-fidelity, but which can be mapped back to a syntax tree if so desired.
43 43
44 44
45### GreenNode 45### GreenNode
@@ -64,7 +64,7 @@ struct Token {
64} 64}
65``` 65```
66 66
67All the difference bettwen the above sketch and the real implementation are strictly due to optimizations. 67All the difference bettwen the above sketch and the real implementation are strictly due to optimizations.
68 68
69Points of note: 69Points of note:
70* The tree is untyped. Each node has a "type tag", `SyntaxKind`. 70* The tree is untyped. Each node has a "type tag", `SyntaxKind`.
@@ -73,7 +73,7 @@ Points of note:
73* Each token carries its full text. 73* Each token carries its full text.
74* The original text can be recovered by concatenating the texts of all tokens in order. 74* The original text can be recovered by concatenating the texts of all tokens in order.
75* Accessing a child of particular type (for example, parameter list of a function) generarly involves linerary traversing the children, looking for a specific `kind`. 75* Accessing a child of particular type (for example, parameter list of a function) generarly involves linerary traversing the children, looking for a specific `kind`.
76* Modifying the tree is roughly `O(depth)`. 76* Modifying the tree is roughly `O(depth)`.
77 We don't make special efforts to guarantree that the depth is not liner, but, in practice, syntax trees are branchy and shallow. 77 We don't make special efforts to guarantree that the depth is not liner, but, in practice, syntax trees are branchy and shallow.
78* If mandatory (grammar wise) node is missing from the input, it's just missing from the tree. 78* If mandatory (grammar wise) node is missing from the input, it's just missing from the tree.
79* If an extra erroneous input is present, it is wrapped into a node with `ERROR` kind, and treated just like any other node. 79* If an extra erroneous input is present, it is wrapped into a node with `ERROR` kind, and treated just like any other node.
@@ -82,29 +82,29 @@ Points of note:
82An input like `fn f() { 90 + 2 }` might be parsed as 82An input like `fn f() { 90 + 2 }` might be parsed as
83 83
84``` 84```
85FN_DEF@[0; 17) 85FN_DEF@0..17
86 FN_KW@[0; 2) "fn" 86 FN_KW@0..2 "fn"
87 WHITESPACE@[2; 3) " " 87 WHITESPACE@2..3 " "
88 NAME@[3; 4) 88 NAME@3..4
89 IDENT@[3; 4) "f" 89 IDENT@3..4 "f"
90 PARAM_LIST@[4; 6) 90 PARAM_LIST@4..6
91 L_PAREN@[4; 5) "(" 91 L_PAREN@4..5 "("
92 R_PAREN@[5; 6) ")" 92 R_PAREN@5..6 ")"
93 WHITESPACE@[6; 7) " " 93 WHITESPACE@6..7 " "
94 BLOCK_EXPR@[7; 17) 94 BLOCK_EXPR@7..17
95 BLOCK@[7; 17) 95 BLOCK@7..17
96 L_CURLY@[7; 8) "{" 96 L_CURLY@7..8 "{"
97 WHITESPACE@[8; 9) " " 97 WHITESPACE@8..9 " "
98 BIN_EXPR@[9; 15) 98 BIN_EXPR@9..15
99 LITERAL@[9; 11) 99 LITERAL@9..11
100 INT_NUMBER@[9; 11) "90" 100 INT_NUMBER@9..11 "90"
101 WHITESPACE@[11; 12) " " 101 WHITESPACE@11..12 " "
102 PLUS@[12; 13) "+" 102 PLUS@12..13 "+"
103 WHITESPACE@[13; 14) " " 103 WHITESPACE@13..14 " "
104 LITERAL@[14; 15) 104 LITERAL@14..15
105 INT_NUMBER@[14; 15) "2" 105 INT_NUMBER@14..15 "2"
106 WHITESPACE@[15; 16) " " 106 WHITESPACE@15..16 " "
107 R_CURLY@[16; 17) "}" 107 R_CURLY@16..17 "}"
108``` 108```
109 109
110#### Optimizations 110#### Optimizations
@@ -122,20 +122,20 @@ To reduce the amount of allocations, the GreenNode is a DST, which uses a single
122To more compactly store the children, we box *both* interior nodes and tokens, and represent 122To more compactly store the children, we box *both* interior nodes and tokens, and represent
123`Either<Arc<Node>, Arc<Token>>` as a single pointer with a tag in the last bit. 123`Either<Arc<Node>, Arc<Token>>` as a single pointer with a tag in the last bit.
124 124
125To avoid allocating EVERY SINGLE TOKEN on the heap, syntax trees use interning. 125To avoid allocating EVERY SINGLE TOKEN on the heap, syntax trees use interning.
126Because the tree is fully imutable, it's valid to structuraly share subtrees. 126Because the tree is fully imutable, it's valid to structuraly share subtrees.
127For example, in `1 + 1`, there will be a *single* token for `1` with ref count 2; the same goes for the ` ` whitespace token. 127For example, in `1 + 1`, there will be a *single* token for `1` with ref count 2; the same goes for the ` ` whitespace token.
128Interior nodes are shared as well (for example in `(1 + 1) * (1 + 1)`). 128Interior nodes are shared as well (for example in `(1 + 1) * (1 + 1)`).
129 129
130Note that, the result of the interning is an `Arc<Node>`. 130Note that, the result of the interning is an `Arc<Node>`.
131That is, it's not an index into interning table, so you don't have to have the table around to do anything with the tree. 131That is, it's not an index into interning table, so you don't have to have the table around to do anything with the tree.
132Each tree is fully self-contained (although different trees might share parts). 132Each tree is fully self-contained (although different trees might share parts).
133Currently, the interner is created per-file, but it will be easy to use a per-thread or per-some-contex one. 133Currently, the interner is created per-file, but it will be easy to use a per-thread or per-some-contex one.
134 134
135We use a `TextUnit`, a newtyped `u32`, to store the length of the text. 135We use a `TextSize`, a newtyped `u32`, to store the length of the text.
136 136
137We currently use `SmolStr`, an small object optimized string to store text. 137We currently use `SmolStr`, an small object optimized string to store text.
138This was mostly relevant *before* we implmented tree interning, to avoid allocating common keywords and identifiers. We should switch to storing text data alongside the interned tokens. 138This was mostly relevant *before* we implmented tree interning, to avoid allocating common keywords and identifiers. We should switch to storing text data alongside the interned tokens.
139 139
140#### Alternative designs 140#### Alternative designs
141 141
@@ -153,9 +153,9 @@ struct Token {
153} 153}
154``` 154```
155 155
156The tree then contains only non-trivia tokens. 156The tree then contains only non-trivia tokens.
157 157
158Another approach (from Dart) is to, in addition to a syntax tree, link all the tokens into a bidirectional link list. 158Another approach (from Dart) is to, in addition to a syntax tree, link all the tokens into a bidirectional link list.
159That way, the tree again contains only non-trivia tokens. 159That way, the tree again contains only non-trivia tokens.
160 160
161Explicit trivia nodes, like in `rowan`, are used by IntelliJ. 161Explicit trivia nodes, like in `rowan`, are used by IntelliJ.
@@ -165,26 +165,26 @@ Explicit trivia nodes, like in `rowan`, are used by IntelliJ.
165As noted before, accesing a specific child in the node requires a linear traversal of the children (though we can skip tokens, beacuse the tag is encoded in the pointer itself). 165As noted before, accesing a specific child in the node requires a linear traversal of the children (though we can skip tokens, beacuse the tag is encoded in the pointer itself).
166It is possible to recover O(1) access with another representation. 166It is possible to recover O(1) access with another representation.
167We explicitly store optional and missing (required by the grammar, but not present) nodes. 167We explicitly store optional and missing (required by the grammar, but not present) nodes.
168That is, we use `Option<Node>` for children. 168That is, we use `Option<Node>` for children.
169We also remove trivia tokens from the tree. 169We also remove trivia tokens from the tree.
170This way, each child kind genrerally occupies a fixed position in a parent, and we can use index access to fetch it. 170This way, each child kind genrerally occupies a fixed position in a parent, and we can use index access to fetch it.
171The cost is that we now need to allocate space for all not-present optional nodes. 171The cost is that we now need to allocate space for all not-present optional nodes.
172So, `fn foo() {}` will have slots for visibility, unsafeness, attributes, abi and return type. 172So, `fn foo() {}` will have slots for visibility, unsafeness, attributes, abi and return type.
173 173
174IntelliJ uses linear traversal. 174IntelliJ uses linear traversal.
175Roslyn and Swift do `O(1)` access. 175Roslyn and Swift do `O(1)` access.
176 176
177##### Mutable Trees 177##### Mutable Trees
178 178
179IntelliJ uses mutable trees. 179IntelliJ uses mutable trees.
180Overall, it creates a lot of additional complexity. 180Overall, it creates a lot of additional complexity.
181However, the API for *editing* syntax trees is nice. 181However, the API for *editing* syntax trees is nice.
182 182
183For example the assist to move generic bounds to where clause has this code: 183For example the assist to move generic bounds to where clause has this code:
184 184
185```kotlin 185```kotlin
186 for typeBound in typeBounds { 186 for typeBound in typeBounds {
187 typeBound.typeParamBounds?.delete() 187 typeBound.typeParamBounds?.delete()
188} 188}
189``` 189```
190 190
@@ -195,7 +195,7 @@ Modeling this with immutable trees is possible, but annoying.
195A function green tree is not super-convenient to use. 195A function green tree is not super-convenient to use.
196The biggest problem is acessing parents (there are no parent pointers!). 196The biggest problem is acessing parents (there are no parent pointers!).
197But there are also "identify" issues. 197But there are also "identify" issues.
198Let's say you want to write a code which builds a list of expressions in a file: `fn collect_exrepssions(file: GreenNode) -> HashSet<GreenNode>`. 198Let's say you want to write a code which builds a list of expressions in a file: `fn collect_exrepssions(file: GreenNode) -> HashSet<GreenNode>`.
199For the input like 199For the input like
200 200
201```rust 201```rust
@@ -233,7 +233,7 @@ impl SyntaxNode {
233 }) 233 })
234 } 234 }
235 fn parent(&self) -> Option<SyntaxNode> { 235 fn parent(&self) -> Option<SyntaxNode> {
236 self.parent.clone() 236 self.parent.clone()
237 } 237 }
238 fn children(&self) -> impl Iterator<Item = SyntaxNode> { 238 fn children(&self) -> impl Iterator<Item = SyntaxNode> {
239 let mut offset = self.offset 239 let mut offset = self.offset
@@ -251,8 +251,8 @@ impl SyntaxNode {
251 251
252impl PartialEq for SyntaxNode { 252impl PartialEq for SyntaxNode {
253 fn eq(&self, other: &SyntaxNode) { 253 fn eq(&self, other: &SyntaxNode) {
254 self.offset == other.offset 254 self.offset == other.offset
255 && Arc::ptr_eq(&self.green, &other.green) 255 && Arc::ptr_eq(&self.green, &other.green)
256 } 256 }
257} 257}
258``` 258```
@@ -261,35 +261,35 @@ Points of note:
261 261
262* SyntaxNode remembers its parent node (and, transitively, the path to the root of the tree) 262* SyntaxNode remembers its parent node (and, transitively, the path to the root of the tree)
263* SyntaxNode knows its *absolute* text offset in the whole file 263* SyntaxNode knows its *absolute* text offset in the whole file
264* Equality is based on identity. Comparing nodes from different trees does not make sense. 264* Equality is based on identity. Comparing nodes from different trees does not make sense.
265 265
266#### Optimization 266#### Optimization
267 267
268The reality is different though :-) 268The reality is different though :-)
269Traversal of trees is a common operation, and it makes sense to optimize it. 269Traversal of trees is a common operation, and it makes sense to optimize it.
270In particular, the above code allocates and does atomic operations during a traversal. 270In particular, the above code allocates and does atomic operations during a traversal.
271 271
272To get rid of atomics, `rowan` uses non thread-safe `Rc`. 272To get rid of atomics, `rowan` uses non thread-safe `Rc`.
273This is OK because trees traversals mostly (always, in case of rust-analyzer) run on a single thread. If you need to send a `SyntaxNode` to another thread, you can send a pair of **root**`GreenNode` (which is thread safe) and a `Range<usize>`. 273This is OK because trees traversals mostly (always, in case of rust-analyzer) run on a single thread. If you need to send a `SyntaxNode` to another thread, you can send a pair of **root**`GreenNode` (which is thread safe) and a `Range<usize>`.
274The other thread can restore the `SyntaxNode` by traversing from the root green node and looking for a node with specified range. 274The other thread can restore the `SyntaxNode` by traversing from the root green node and looking for a node with specified range.
275You can also use the similar trick to store a `SyntaxNode`. 275You can also use the similar trick to store a `SyntaxNode`.
276That is, a data structure that holds a `(GreenNode, Range<usize>)` will be `Sync`. 276That is, a data structure that holds a `(GreenNode, Range<usize>)` will be `Sync`.
277However rust-analyzer goes even further. 277However rust-analyzer goes even further.
278It treats trees as semi-transient and instead of storing a `GreenNode`, it generally stores just the id of the file from which the tree originated: `(FileId, Range<usize>)`. 278It treats trees as semi-transient and instead of storing a `GreenNode`, it generally stores just the id of the file from which the tree originated: `(FileId, Range<usize>)`.
279The `SyntaxNode` is the restored by reparsing the file and traversing it from root. 279The `SyntaxNode` is the restored by reparsing the file and traversing it from root.
280With this trick, rust-analyzer holds only a small amount of trees in memory at the same time, which reduces memory usage. 280With this trick, rust-analyzer holds only a small amount of trees in memory at the same time, which reduces memory usage.
281 281
282Additionally, only the root `SyntaxNode` owns an `Arc` to the (root) `GreenNode`. 282Additionally, only the root `SyntaxNode` owns an `Arc` to the (root) `GreenNode`.
283All other `SyntaxNode`s point to corresponding `GreenNode`s with a raw pointer. 283All other `SyntaxNode`s point to corresponding `GreenNode`s with a raw pointer.
284They also point to the parent (and, consequently, to the root) with an owning `Rc`, so this is sound. 284They also point to the parent (and, consequently, to the root) with an owning `Rc`, so this is sound.
285In other words, one needs *one* arc bump when initiating a traversal. 285In other words, one needs *one* arc bump when initiating a traversal.
286 286
287To get rid of allocations, `rowan` takes advantage of `SyntaxNode: !Sync` and uses a thread-local free list of `SyntaxNode`s. 287To get rid of allocations, `rowan` takes advantage of `SyntaxNode: !Sync` and uses a thread-local free list of `SyntaxNode`s.
288In a typical traversal, you only directly hold a few `SyntaxNode`s at a time (and their ancesstors indirectly), so a free list proportional to the depth of the tree removes all allocations in a typical case. 288In a typical traversal, you only directly hold a few `SyntaxNode`s at a time (and their ancesstors indirectly), so a free list proportional to the depth of the tree removes all allocations in a typical case.
289 289
290So, while traversal is not exactly incrementing a pointer, it's still prety cheep: tls + rc bump! 290So, while traversal is not exactly incrementing a pointer, it's still prety cheep: tls + rc bump!
291 291
292Traversal also yields (cheap) owned nodes, which improves ergonomics quite a bit. 292Traversal also yields (cheap) owned nodes, which improves ergonomics quite a bit.
293 293
294#### Alternative Designs 294#### Alternative Designs
295 295
@@ -309,14 +309,14 @@ struct SyntaxData {
309``` 309```
310 310
311This allows using true pointer equality for comparision of identities of `SyntaxNodes`. 311This allows using true pointer equality for comparision of identities of `SyntaxNodes`.
312rust-analyzer used to have this design as well, but since we've switch to cursors. 312rust-analyzer used to have this design as well, but since we've switch to cursors.
313The main problem with memoizing the red nodes is that it more than doubles the memory requirenments for fully realized syntax trees. 313The main problem with memoizing the red nodes is that it more than doubles the memory requirenments for fully realized syntax trees.
314In contrast, cursors generally retain only a path to the root. 314In contrast, cursors generally retain only a path to the root.
315C# combats increased memory usage by using weak references. 315C# combats increased memory usage by using weak references.
316 316
317### AST 317### AST
318 318
319`GreenTree`s are untyped and homogeneous, because it makes accomodating error nodes, arbitrary whitespace and comments natural, and because it makes possible to write generic tree traversals. 319`GreenTree`s are untyped and homogeneous, because it makes accomodating error nodes, arbitrary whitespace and comments natural, and because it makes possible to write generic tree traversals.
320However, when working with a specific node, like a function definition, one would want a strongly typed API. 320However, when working with a specific node, like a function definition, one would want a strongly typed API.
321 321
322This is what is provided by the AST layer. AST nodes are transparent wrappers over untyped syntax nodes: 322This is what is provided by the AST layer. AST nodes are transparent wrappers over untyped syntax nodes:
@@ -352,13 +352,13 @@ impl AstNode for FnDef {
352} 352}
353 353
354impl FnDef { 354impl FnDef {
355 pub fn param_list(&self) -> Option<ParamList> { 355 pub fn param_list(&self) -> Option<ParamList> {
356 self.syntax.children().find_map(ParamList::cast) 356 self.syntax.children().find_map(ParamList::cast)
357 } 357 }
358 pub fn ret_type(&self) -> Option<RetType> { 358 pub fn ret_type(&self) -> Option<RetType> {
359 self.syntax.children().find_map(RetType::cast) 359 self.syntax.children().find_map(RetType::cast)
360 } 360 }
361 pub fn body(&self) -> Option<BlockExpr> { 361 pub fn body(&self) -> Option<BlockExpr> {
362 self.syntax.children().find_map(BlockExpr::cast) 362 self.syntax.children().find_map(BlockExpr::cast)
363 } 363 }
364 // ... 364 // ...
@@ -409,14 +409,14 @@ Points of note:
409 409
410##### Semantic Full AST 410##### Semantic Full AST
411 411
412In IntelliJ the AST layer (dubbed **P**rogram **S**tructure **I**nterface) can have semantics attached, and is usually backed by either syntax tree, indices, or metadata from compiled libraries. 412In IntelliJ the AST layer (dubbed **P**rogram **S**tructure **I**nterface) can have semantics attached, and is usually backed by either syntax tree, indices, or metadata from compiled libraries.
413The backend for PSI can change dynamically. 413The backend for PSI can change dynamically.
414 414
415### Syntax Tree Recap 415### Syntax Tree Recap
416 416
417At its core, the syntax tree is a purely functional n-ary tree, which stores text at the leaf nodes and node "kinds" at all nodes. 417At its core, the syntax tree is a purely functional n-ary tree, which stores text at the leaf nodes and node "kinds" at all nodes.
418A cursor layer is added on top, which gives owned, cheap to clone nodes with identity semantics, parent links and absolute offsets. 418A cursor layer is added on top, which gives owned, cheap to clone nodes with identity semantics, parent links and absolute offsets.
419An AST layer is added on top, which reifies each node `Kind` as a separate Rust type with the corresponding API. 419An AST layer is added on top, which reifies each node `Kind` as a separate Rust type with the corresponding API.
420 420
421## Parsing 421## Parsing
422 422
@@ -432,17 +432,17 @@ impl GreenNodeBuilder {
432 432
433 pub fn start_node(&mut self, kind: SyntaxKind) { ... } 433 pub fn start_node(&mut self, kind: SyntaxKind) { ... }
434 pub fn finish_node(&mut self) { ... } 434 pub fn finish_node(&mut self) { ... }
435 435
436 pub fn finish(self) -> GreenNode { ... } 436 pub fn finish(self) -> GreenNode { ... }
437} 437}
438``` 438```
439 439
440The parser, ultimatelly, needs to invoke the `GreenNodeBuilder`. 440The parser, ultimatelly, needs to invoke the `GreenNodeBuilder`.
441There are two principal sources of inputs for the parser: 441There are two principal sources of inputs for the parser:
442 * source text, which contains trivia tokens (whitespace and comments) 442 * source text, which contains trivia tokens (whitespace and comments)
443 * token trees from macros, which lack trivia 443 * token trees from macros, which lack trivia
444 444
445Additionaly, input tokens do not correspond 1-to-1 with output tokens. 445Additionaly, input tokens do not correspond 1-to-1 with output tokens.
446For example, two consequtive `>` tokens might be glued, by the parser, into a single `>>`. 446For example, two consequtive `>` tokens might be glued, by the parser, into a single `>>`.
447 447
448For these reasons, the parser crate defines a callback interfaces for both input tokens and output trees. 448For these reasons, the parser crate defines a callback interfaces for both input tokens and output trees.
@@ -474,7 +474,7 @@ pub trait TreeSink {
474} 474}
475 475
476pub fn parse( 476pub fn parse(
477 token_source: &mut dyn TokenSource, 477 token_source: &mut dyn TokenSource,
478 tree_sink: &mut dyn TreeSink, 478 tree_sink: &mut dyn TreeSink,
479) { ... } 479) { ... }
480``` 480```
@@ -491,21 +491,21 @@ Syntax errors are not stored directly in the tree.
491The primary motivation for this is that syntax tree is not necessary produced by the parser, it may also be assembled manually from pieces (which happens all the time in refactorings). 491The primary motivation for this is that syntax tree is not necessary produced by the parser, it may also be assembled manually from pieces (which happens all the time in refactorings).
492Instead, parser reports errors to an error sink, which stores them in a `Vec`. 492Instead, parser reports errors to an error sink, which stores them in a `Vec`.
493If possible, errors are not reported during parsing and are postponed for a separate validation step. 493If possible, errors are not reported during parsing and are postponed for a separate validation step.
494For example, parser accepts visibility modifiers on trait methods, but then a separate tree traversal flags all such visibilites as erroneous. 494For example, parser accepts visibility modifiers on trait methods, but then a separate tree traversal flags all such visibilites as erroneous.
495 495
496### Macros 496### Macros
497 497
498The primary difficulty with macros is that individual tokens have identities, which need to be preserved in the syntax tree for hygiene purposes. 498The primary difficulty with macros is that individual tokens have identities, which need to be preserved in the syntax tree for hygiene purposes.
499This is handled by the `TreeSink` layer. 499This is handled by the `TreeSink` layer.
500Specifically, `TreeSink` constructs the tree in lockstep with draining the original token stream. 500Specifically, `TreeSink` constructs the tree in lockstep with draining the original token stream.
501In the process, it records which tokens of the tree correspond to which tokens of the input, by using text ranges to identify syntax tokens. 501In the process, it records which tokens of the tree correspond to which tokens of the input, by using text ranges to identify syntax tokens.
502The end result is that parsing an expanded code yields a syntax tree and a mapping of text-ranges of the tree to original tokens. 502The end result is that parsing an expanded code yields a syntax tree and a mapping of text-ranges of the tree to original tokens.
503 503
504To deal with precedence in cases like `$expr * 1`, we use special invisible parenthesis, which are explicitelly handled by the parser 504To deal with precedence in cases like `$expr * 1`, we use special invisible parenthesis, which are explicitelly handled by the parser
505 505
506### Whitespace & Comments 506### Whitespace & Comments
507 507
508Parser does not see whitespace nodes. 508Parser does not see whitespace nodes.
509Instead, they are attached to the tree in the `TreeSink` layer. 509Instead, they are attached to the tree in the `TreeSink` layer.
510 510
511For example, in 511For example, in
@@ -521,7 +521,7 @@ the comment will be (heuristically) made a child of function node.
521 521
522Green trees are cheap to modify, so incremental reparse works by patching a previous tree, without maintaining any additional state. 522Green trees are cheap to modify, so incremental reparse works by patching a previous tree, without maintaining any additional state.
523The reparse is based on heuristic: we try to contain a change to a single `{}` block, and reparse only this block. 523The reparse is based on heuristic: we try to contain a change to a single `{}` block, and reparse only this block.
524To do this, we maintain the invariant that, even for invalid code, curly braces are always paired correctly. 524To do this, we maintain the invariant that, even for invalid code, curly braces are always paired correctly.
525 525
526In practice, incremental reparsing doesn't actually matter much for IDE use-cases, parsing from scratch seems to be fast enough. 526In practice, incremental reparsing doesn't actually matter much for IDE use-cases, parsing from scratch seems to be fast enough.
527 527
diff --git a/docs/user/assists.md b/docs/user/assists.md
index 6483ba4f3..6c6943622 100644
--- a/docs/user/assists.md
+++ b/docs/user/assists.md
@@ -65,7 +65,7 @@ Adds a stub function with a signature matching the function under the cursor.
65struct Baz; 65struct Baz;
66fn baz() -> Baz { Baz } 66fn baz() -> Baz { Baz }
67fn foo() { 67fn foo() {
68 bar┃("", baz()); 68 bar┃("", baz());
69} 69}
70 70
71 71
@@ -73,7 +73,7 @@ fn foo() {
73struct Baz; 73struct Baz;
74fn baz() -> Baz { Baz } 74fn baz() -> Baz { Baz }
75fn foo() { 75fn foo() {
76 bar("", baz()); 76 bar("", baz());
77} 77}
78 78
79fn bar(arg: &str, baz: Baz) { 79fn bar(arg: &str, baz: Baz) {
diff --git a/editors/code/src/source_change.ts b/editors/code/src/source_change.ts
index 399a150c6..af8f1df51 100644
--- a/editors/code/src/source_change.ts
+++ b/editors/code/src/source_change.ts
@@ -37,11 +37,13 @@ export async function applySourceChange(ctx: Ctx, change: ra.SourceChange) {
37 toReveal.position, 37 toReveal.position,
38 ); 38 );
39 const editor = vscode.window.activeTextEditor; 39 const editor = vscode.window.activeTextEditor;
40 if (!editor || editor.document.uri.toString() !== uri.toString()) { 40 if (!editor || !editor.selection.isEmpty) {
41 return; 41 return;
42 } 42 }
43 if (!editor.selection.isEmpty) { 43
44 return; 44 if (editor.document.uri !== uri) {
45 const doc = await vscode.workspace.openTextDocument(uri);
46 await vscode.window.showTextDocument(doc);
45 } 47 }
46 editor.selection = new vscode.Selection(position, position); 48 editor.selection = new vscode.Selection(position, position);
47 editor.revealRange( 49 editor.revealRange(