aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-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.rs2
-rw-r--r--crates/ra_hir_def/src/body/lower.rs4
-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.rs36
-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.rs16
-rw-r--r--crates/ra_ide/src/completion/complete_pattern.rs28
-rw-r--r--crates/ra_ide/src/completion/complete_postfix.rs134
-rw-r--r--crates/ra_ide/src/completion/complete_qualified_path.rs196
-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.rs361
-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.rs207
-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/lib.rs50
-rw-r--r--crates/ra_mbe/src/syntax_bridge.rs69
-rw-r--r--crates/ra_mbe/src/tests.rs458
-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
471 files changed, 28717 insertions, 27057 deletions
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.rs b/crates/ra_hir_def/src/body.rs
index 3b169440a..890cefcaf 100644
--- a/crates/ra_hir_def/src/body.rs
+++ b/crates/ra_hir_def/src/body.rs
@@ -27,7 +27,7 @@ use crate::{
27 AsMacroCall, DefWithBodyId, HasModule, Lookup, ModuleId, 27 AsMacroCall, DefWithBodyId, HasModule, Lookup, ModuleId,
28}; 28};
29 29
30/// A subser of Exander that only deals with cfg attributes. We only need it to 30/// A subset of Exander that only deals with cfg attributes. We only need it to
31/// avoid cyclic queries in crate def map during enum processing. 31/// avoid cyclic queries in crate def map during enum processing.
32pub(crate) struct CfgExpander { 32pub(crate) struct CfgExpander {
33 cfg_options: CfgOptions, 33 cfg_options: CfgOptions,
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs
index 0caedd8d8..571603854 100644
--- a/crates/ra_hir_def/src/body/lower.rs
+++ b/crates/ra_hir_def/src/body/lower.rs
@@ -141,6 +141,10 @@ impl ExprCollector<'_> {
141 141
142 fn collect_expr(&mut self, expr: ast::Expr) -> ExprId { 142 fn collect_expr(&mut self, expr: ast::Expr) -> ExprId {
143 let syntax_ptr = AstPtr::new(&expr); 143 let syntax_ptr = AstPtr::new(&expr);
144 let attrs = self.expander.parse_attrs(&expr);
145 if !self.expander.is_cfg_enabled(&attrs) {
146 return self.missing_expr();
147 }
144 match expr { 148 match expr {
145 ast::Expr::IfExpr(e) => { 149 ast::Expr::IfExpr(e) => {
146 let then_branch = self.collect_block_opt(e.then_branch()); 150 let then_branch = self.collect_block_opt(e.then_branch());
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..588d81282 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),
@@ -391,6 +391,38 @@ fn no_such_field_with_feature_flag_diagnostics_on_struct_lit() {
391} 391}
392 392
393#[test] 393#[test]
394fn no_such_field_with_feature_flag_diagnostics_on_block_expr() {
395 let diagnostics = TestDB::with_files(
396 r#"
397 //- /lib.rs crate:foo cfg:feature=foo
398 struct S {
399 #[cfg(feature = "foo")]
400 foo: u32,
401 #[cfg(not(feature = "foo"))]
402 bar: u32,
403 }
404
405 impl S {
406 fn new(bar: u32) -> Self {
407 #[cfg(feature = "foo")]
408 {
409 Self { foo: bar }
410 }
411 #[cfg(not(feature = "foo"))]
412 {
413 Self { bar }
414 }
415 }
416 }
417 "#,
418 )
419 .diagnostics()
420 .0;
421
422 assert_snapshot!(diagnostics, @r###""###);
423}
424
425#[test]
394fn no_such_field_with_feature_flag_diagnostics_on_struct_fields() { 426fn no_such_field_with_feature_flag_diagnostics_on_struct_fields() {
395 let diagnostics = TestDB::with_files( 427 let diagnostics = TestDB::with_files(
396 r#" 428 r#"
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 6000106d0..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
@@ -42,8 +42,8 @@ mod tests {
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",
@@ -82,8 +82,8 @@ mod tests {
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",
@@ -119,8 +119,8 @@ mod tests {
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 218829b10..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 9f795e441..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",
@@ -870,16 +902,16 @@ mod tests {
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 638f86eda..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 },
@@ -734,46 +742,46 @@ mod tests {
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",
@@ -803,16 +811,16 @@ mod tests {
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",
@@ -842,16 +850,16 @@ mod tests {
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",
@@ -881,16 +889,16 @@ mod tests {
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",
@@ -954,16 +962,16 @@ mod tests {
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",
@@ -1007,16 +1015,16 @@ mod tests {
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",
@@ -1060,16 +1068,16 @@ mod tests {
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 6a6ddc7bd..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);
@@ -452,8 +447,8 @@ mod tests {
452 [ 447 [
453 CompletionItem { 448 CompletionItem {
454 label: "Foo", 449 label: "Foo",
455 source_range: [121; 123), 450 source_range: 121..123,
456 delete: [121; 123), 451 delete: 121..123,
457 insert: "Foo", 452 insert: "Foo",
458 kind: EnumVariant, 453 kind: EnumVariant,
459 detail: "{ x: i32, y: i32 }", 454 detail: "{ x: i32, y: i32 }",
@@ -478,8 +473,8 @@ mod tests {
478 [ 473 [
479 CompletionItem { 474 CompletionItem {
480 label: "Foo(…)", 475 label: "Foo(…)",
481 source_range: [115; 117), 476 source_range: 115..117,
482 delete: [115; 117), 477 delete: 115..117,
483 insert: "Foo($0)", 478 insert: "Foo($0)",
484 kind: EnumVariant, 479 kind: EnumVariant,
485 lookup: "Foo", 480 lookup: "Foo",
@@ -506,8 +501,8 @@ mod tests {
506 [ 501 [
507 CompletionItem { 502 CompletionItem {
508 label: "Foo", 503 label: "Foo",
509 source_range: [104; 106), 504 source_range: 104..106,
510 delete: [104; 106), 505 delete: 104..106,
511 insert: "Foo", 506 insert: "Foo",
512 kind: EnumVariant, 507 kind: EnumVariant,
513 detail: "()", 508 detail: "()",
@@ -534,8 +529,8 @@ mod tests {
534 [ 529 [
535 CompletionItem { 530 CompletionItem {
536 label: "main()", 531 label: "main()",
537 source_range: [203; 206), 532 source_range: 203..206,
538 delete: [203; 206), 533 delete: 203..206,
539 insert: "main()$0", 534 insert: "main()$0",
540 kind: Function, 535 kind: Function,
541 lookup: "main", 536 lookup: "main",
@@ -543,8 +538,8 @@ mod tests {
543 }, 538 },
544 CompletionItem { 539 CompletionItem {
545 label: "something_deprecated()", 540 label: "something_deprecated()",
546 source_range: [203; 206), 541 source_range: 203..206,
547 delete: [203; 206), 542 delete: 203..206,
548 insert: "something_deprecated()$0", 543 insert: "something_deprecated()$0",
549 kind: Function, 544 kind: Function,
550 lookup: "something_deprecated", 545 lookup: "something_deprecated",
@@ -553,8 +548,8 @@ mod tests {
553 }, 548 },
554 CompletionItem { 549 CompletionItem {
555 label: "something_else_deprecated()", 550 label: "something_else_deprecated()",
556 source_range: [203; 206), 551 source_range: 203..206,
557 delete: [203; 206), 552 delete: 203..206,
558 insert: "something_else_deprecated()$0", 553 insert: "something_else_deprecated()$0",
559 kind: Function, 554 kind: Function,
560 lookup: "something_else_deprecated", 555 lookup: "something_else_deprecated",
@@ -580,8 +575,8 @@ mod tests {
580 [ 575 [
581 CompletionItem { 576 CompletionItem {
582 label: "main()", 577 label: "main()",
583 source_range: [61; 64), 578 source_range: 61..64,
584 delete: [61; 64), 579 delete: 61..64,
585 insert: "main()$0", 580 insert: "main()$0",
586 kind: Function, 581 kind: Function,
587 lookup: "main", 582 lookup: "main",
@@ -589,8 +584,8 @@ mod tests {
589 }, 584 },
590 CompletionItem { 585 CompletionItem {
591 label: "no_args()", 586 label: "no_args()",
592 source_range: [61; 64), 587 source_range: 61..64,
593 delete: [61; 64), 588 delete: 61..64,
594 insert: "no_args()$0", 589 insert: "no_args()$0",
595 kind: Function, 590 kind: Function,
596 lookup: "no_args", 591 lookup: "no_args",
@@ -610,8 +605,8 @@ mod tests {
610 [ 605 [
611 CompletionItem { 606 CompletionItem {
612 label: "main()", 607 label: "main()",
613 source_range: [80; 85), 608 source_range: 80..85,
614 delete: [80; 85), 609 delete: 80..85,
615 insert: "main()$0", 610 insert: "main()$0",
616 kind: Function, 611 kind: Function,
617 lookup: "main", 612 lookup: "main",
@@ -619,8 +614,8 @@ mod tests {
619 }, 614 },
620 CompletionItem { 615 CompletionItem {
621 label: "with_args(…)", 616 label: "with_args(…)",
622 source_range: [80; 85), 617 source_range: 80..85,
623 delete: [80; 85), 618 delete: 80..85,
624 insert: "with_args(${1:x}, ${2:y})$0", 619 insert: "with_args(${1:x}, ${2:y})$0",
625 kind: Function, 620 kind: Function,
626 lookup: "with_args", 621 lookup: "with_args",
@@ -646,8 +641,8 @@ mod tests {
646 [ 641 [
647 CompletionItem { 642 CompletionItem {
648 label: "foo()", 643 label: "foo()",
649 source_range: [163; 164), 644 source_range: 163..164,
650 delete: [163; 164), 645 delete: 163..164,
651 insert: "foo()$0", 646 insert: "foo()$0",
652 kind: Method, 647 kind: Method,
653 lookup: "foo", 648 lookup: "foo",
@@ -674,23 +669,23 @@ mod tests {
674 [ 669 [
675 CompletionItem { 670 CompletionItem {
676 label: "None", 671 label: "None",
677 source_range: [144; 147), 672 source_range: 144..147,
678 delete: [144; 147), 673 delete: 144..147,
679 insert: "None", 674 insert: "None",
680 kind: EnumVariant, 675 kind: EnumVariant,
681 detail: "()", 676 detail: "()",
682 }, 677 },
683 CompletionItem { 678 CompletionItem {
684 label: "Option", 679 label: "Option",
685 source_range: [144; 147), 680 source_range: 144..147,
686 delete: [144; 147), 681 delete: 144..147,
687 insert: "Option", 682 insert: "Option",
688 kind: Enum, 683 kind: Enum,
689 }, 684 },
690 CompletionItem { 685 CompletionItem {
691 label: "Some(…)", 686 label: "Some(…)",
692 source_range: [144; 147), 687 source_range: 144..147,
693 delete: [144; 147), 688 delete: 144..147,
694 insert: "Some($0)", 689 insert: "Some($0)",
695 kind: EnumVariant, 690 kind: EnumVariant,
696 lookup: "Some", 691 lookup: "Some",
@@ -699,8 +694,8 @@ mod tests {
699 }, 694 },
700 CompletionItem { 695 CompletionItem {
701 label: "main()", 696 label: "main()",
702 source_range: [144; 147), 697 source_range: 144..147,
703 delete: [144; 147), 698 delete: 144..147,
704 insert: "main()$0", 699 insert: "main()$0",
705 kind: Function, 700 kind: Function,
706 lookup: "main", 701 lookup: "main",
@@ -725,23 +720,23 @@ mod tests {
725 [ 720 [
726 CompletionItem { 721 CompletionItem {
727 label: "None", 722 label: "None",
728 source_range: [185; 188), 723 source_range: 185..188,
729 delete: [185; 188), 724 delete: 185..188,
730 insert: "None", 725 insert: "None",
731 kind: EnumVariant, 726 kind: EnumVariant,
732 detail: "()", 727 detail: "()",
733 }, 728 },
734 CompletionItem { 729 CompletionItem {
735 label: "Option", 730 label: "Option",
736 source_range: [185; 188), 731 source_range: 185..188,
737 delete: [185; 188), 732 delete: 185..188,
738 insert: "Option", 733 insert: "Option",
739 kind: Enum, 734 kind: Enum,
740 }, 735 },
741 CompletionItem { 736 CompletionItem {
742 label: "Some(…)", 737 label: "Some(…)",
743 source_range: [185; 188), 738 source_range: 185..188,
744 delete: [185; 188), 739 delete: 185..188,
745 insert: "Some($0)", 740 insert: "Some($0)",
746 kind: EnumVariant, 741 kind: EnumVariant,
747 lookup: "Some", 742 lookup: "Some",
@@ -771,8 +766,8 @@ mod tests {
771 [ 766 [
772 CompletionItem { 767 CompletionItem {
773 label: "foo(…)", 768 label: "foo(…)",
774 source_range: [171; 172), 769 source_range: 171..172,
775 delete: [171; 172), 770 delete: 171..172,
776 insert: "foo(${1:x})$0", 771 insert: "foo(${1:x})$0",
777 kind: Method, 772 kind: Method,
778 lookup: "foo", 773 lookup: "foo",
@@ -806,8 +801,8 @@ mod tests {
806 [ 801 [
807 CompletionItem { 802 CompletionItem {
808 label: "foo(…)", 803 label: "foo(…)",
809 source_range: [171; 172), 804 source_range: 171..172,
810 delete: [171; 172), 805 delete: 171..172,
811 insert: "foo($0)", 806 insert: "foo($0)",
812 kind: Method, 807 kind: Method,
813 lookup: "foo", 808 lookup: "foo",
@@ -833,8 +828,8 @@ mod tests {
833 [ 828 [
834 CompletionItem { 829 CompletionItem {
835 label: "foo", 830 label: "foo",
836 source_range: [40; 41), 831 source_range: 40..41,
837 delete: [40; 41), 832 delete: 40..41,
838 insert: "foo", 833 insert: "foo",
839 kind: Function, 834 kind: Function,
840 detail: "pub fn foo()", 835 detail: "pub fn foo()",
@@ -860,16 +855,16 @@ mod tests {
860 [ 855 [
861 CompletionItem { 856 CompletionItem {
862 label: "frobnicate", 857 label: "frobnicate",
863 source_range: [35; 39), 858 source_range: 35..39,
864 delete: [35; 39), 859 delete: 35..39,
865 insert: "frobnicate", 860 insert: "frobnicate",
866 kind: Function, 861 kind: Function,
867 detail: "fn frobnicate()", 862 detail: "fn frobnicate()",
868 }, 863 },
869 CompletionItem { 864 CompletionItem {
870 label: "main", 865 label: "main",
871 source_range: [35; 39), 866 source_range: 35..39,
872 delete: [35; 39), 867 delete: 35..39,
873 insert: "main", 868 insert: "main",
874 kind: Function, 869 kind: Function,
875 detail: "fn main()", 870 detail: "fn main()",
@@ -892,8 +887,8 @@ mod tests {
892 [ 887 [
893 CompletionItem { 888 CompletionItem {
894 label: "new", 889 label: "new",
895 source_range: [67; 69), 890 source_range: 67..69,
896 delete: [67; 69), 891 delete: 67..69,
897 insert: "new", 892 insert: "new",
898 kind: Function, 893 kind: Function,
899 detail: "fn new() -> Foo", 894 detail: "fn new() -> Foo",
@@ -917,16 +912,16 @@ mod tests {
917 [ 912 [
918 CompletionItem { 913 CompletionItem {
919 label: "Vec<…>", 914 label: "Vec<…>",
920 source_range: [61; 63), 915 source_range: 61..63,
921 delete: [61; 63), 916 delete: 61..63,
922 insert: "Vec<$0>", 917 insert: "Vec<$0>",
923 kind: Struct, 918 kind: Struct,
924 lookup: "Vec", 919 lookup: "Vec",
925 }, 920 },
926 CompletionItem { 921 CompletionItem {
927 label: "foo(…)", 922 label: "foo(…)",
928 source_range: [61; 63), 923 source_range: 61..63,
929 delete: [61; 63), 924 delete: 61..63,
930 insert: "foo(${1:xs})$0", 925 insert: "foo(${1:xs})$0",
931 kind: Function, 926 kind: Function,
932 lookup: "foo", 927 lookup: "foo",
@@ -947,16 +942,16 @@ mod tests {
947 [ 942 [
948 CompletionItem { 943 CompletionItem {
949 label: "Vec<…>", 944 label: "Vec<…>",
950 source_range: [64; 66), 945 source_range: 64..66,
951 delete: [64; 66), 946 delete: 64..66,
952 insert: "Vec<$0>", 947 insert: "Vec<$0>",
953 kind: TypeAlias, 948 kind: TypeAlias,
954 lookup: "Vec", 949 lookup: "Vec",
955 }, 950 },
956 CompletionItem { 951 CompletionItem {
957 label: "foo(…)", 952 label: "foo(…)",
958 source_range: [64; 66), 953 source_range: 64..66,
959 delete: [64; 66), 954 delete: 64..66,
960 insert: "foo(${1:xs})$0", 955 insert: "foo(${1:xs})$0",
961 kind: Function, 956 kind: Function,
962 lookup: "foo", 957 lookup: "foo",
@@ -977,15 +972,15 @@ mod tests {
977 [ 972 [
978 CompletionItem { 973 CompletionItem {
979 label: "Vec", 974 label: "Vec",
980 source_range: [68; 70), 975 source_range: 68..70,
981 delete: [68; 70), 976 delete: 68..70,
982 insert: "Vec", 977 insert: "Vec",
983 kind: Struct, 978 kind: Struct,
984 }, 979 },
985 CompletionItem { 980 CompletionItem {
986 label: "foo(…)", 981 label: "foo(…)",
987 source_range: [68; 70), 982 source_range: 68..70,
988 delete: [68; 70), 983 delete: 68..70,
989 insert: "foo(${1:xs})$0", 984 insert: "foo(${1:xs})$0",
990 kind: Function, 985 kind: Function,
991 lookup: "foo", 986 lookup: "foo",
@@ -1006,15 +1001,15 @@ mod tests {
1006 [ 1001 [
1007 CompletionItem { 1002 CompletionItem {
1008 label: "Vec", 1003 label: "Vec",
1009 source_range: [61; 63), 1004 source_range: 61..63,
1010 delete: [61; 63), 1005 delete: 61..63,
1011 insert: "Vec", 1006 insert: "Vec",
1012 kind: Struct, 1007 kind: Struct,
1013 }, 1008 },
1014 CompletionItem { 1009 CompletionItem {
1015 label: "foo(…)", 1010 label: "foo(…)",
1016 source_range: [61; 63), 1011 source_range: 61..63,
1017 delete: [61; 63), 1012 delete: 61..63,
1018 insert: "foo(${1:xs})$0", 1013 insert: "foo(${1:xs})$0",
1019 kind: Function, 1014 kind: Function,
1020 lookup: "foo", 1015 lookup: "foo",
@@ -1046,8 +1041,8 @@ mod tests {
1046 [ 1041 [
1047 CompletionItem { 1042 CompletionItem {
1048 label: "frobnicate!", 1043 label: "frobnicate!",
1049 source_range: [9; 9), 1044 source_range: 9..9,
1050 delete: [9; 9), 1045 delete: 9..9,
1051 insert: "frobnicate", 1046 insert: "frobnicate",
1052 kind: Macro, 1047 kind: Macro,
1053 detail: "#[macro_export]\nmacro_rules! frobnicate", 1048 detail: "#[macro_export]\nmacro_rules! frobnicate",
@@ -1072,16 +1067,16 @@ mod tests {
1072 [ 1067 [
1073 CompletionItem { 1068 CompletionItem {
1074 label: "frobnicate!", 1069 label: "frobnicate!",
1075 source_range: [56; 60), 1070 source_range: 56..60,
1076 delete: [56; 60), 1071 delete: 56..60,
1077 insert: "frobnicate", 1072 insert: "frobnicate",
1078 kind: Macro, 1073 kind: Macro,
1079 detail: "macro_rules! frobnicate", 1074 detail: "macro_rules! frobnicate",
1080 }, 1075 },
1081 CompletionItem { 1076 CompletionItem {
1082 label: "main()", 1077 label: "main()",
1083 source_range: [56; 60), 1078 source_range: 56..60,
1084 delete: [56; 60), 1079 delete: 56..60,
1085 insert: "main()$0", 1080 insert: "main()$0",
1086 kind: Function, 1081 kind: Function,
1087 lookup: "main", 1082 lookup: "main",
@@ -1109,24 +1104,24 @@ mod tests {
1109 [ 1104 [
1110 CompletionItem { 1105 CompletionItem {
1111 label: "another_field", 1106 label: "another_field",
1112 source_range: [201; 201), 1107 source_range: 201..201,
1113 delete: [201; 201), 1108 delete: 201..201,
1114 insert: "another_field", 1109 insert: "another_field",
1115 kind: Field, 1110 kind: Field,
1116 detail: "i64", 1111 detail: "i64",
1117 }, 1112 },
1118 CompletionItem { 1113 CompletionItem {
1119 label: "my_string", 1114 label: "my_string",
1120 source_range: [201; 201), 1115 source_range: 201..201,
1121 delete: [201; 201), 1116 delete: 201..201,
1122 insert: "my_string", 1117 insert: "my_string",
1123 kind: Field, 1118 kind: Field,
1124 detail: "{unknown}", 1119 detail: "{unknown}",
1125 }, 1120 },
1126 CompletionItem { 1121 CompletionItem {
1127 label: "the_field", 1122 label: "the_field",
1128 source_range: [201; 201), 1123 source_range: 201..201,
1129 delete: [201; 201), 1124 delete: 201..201,
1130 insert: "the_field", 1125 insert: "the_field",
1131 kind: Field, 1126 kind: Field,
1132 detail: "u32", 1127 detail: "u32",
@@ -1153,16 +1148,16 @@ mod tests {
1153 [ 1148 [
1154 CompletionItem { 1149 CompletionItem {
1155 label: "another_field", 1150 label: "another_field",
1156 source_range: [208; 208), 1151 source_range: 208..208,
1157 delete: [208; 208), 1152 delete: 208..208,
1158 insert: "another_field", 1153 insert: "another_field",
1159 kind: Field, 1154 kind: Field,
1160 detail: "i64", 1155 detail: "i64",
1161 }, 1156 },
1162 CompletionItem { 1157 CompletionItem {
1163 label: "another_good_type", 1158 label: "another_good_type",
1164 source_range: [208; 208), 1159 source_range: 208..208,
1165 delete: [208; 208), 1160 delete: 208..208,
1166 insert: "another_good_type", 1161 insert: "another_good_type",
1167 kind: Field, 1162 kind: Field,
1168 detail: "u32", 1163 detail: "u32",
@@ -1170,8 +1165,8 @@ mod tests {
1170 }, 1165 },
1171 CompletionItem { 1166 CompletionItem {
1172 label: "the_field", 1167 label: "the_field",
1173 source_range: [208; 208), 1168 source_range: 208..208,
1174 delete: [208; 208), 1169 delete: 208..208,
1175 insert: "the_field", 1170 insert: "the_field",
1176 kind: Field, 1171 kind: Field,
1177 detail: "u32", 1172 detail: "u32",
@@ -1201,16 +1196,16 @@ mod tests {
1201 [ 1196 [
1202 CompletionItem { 1197 CompletionItem {
1203 label: "another_field", 1198 label: "another_field",
1204 source_range: [270; 270), 1199 source_range: 270..270,
1205 delete: [270; 270), 1200 delete: 270..270,
1206 insert: "another_field", 1201 insert: "another_field",
1207 kind: Field, 1202 kind: Field,
1208 detail: "i64", 1203 detail: "i64",
1209 }, 1204 },
1210 CompletionItem { 1205 CompletionItem {
1211 label: "another_good_type", 1206 label: "another_good_type",
1212 source_range: [270; 270), 1207 source_range: 270..270,
1213 delete: [270; 270), 1208 delete: 270..270,
1214 insert: "another_good_type", 1209 insert: "another_good_type",
1215 kind: Field, 1210 kind: Field,
1216 detail: "u32", 1211 detail: "u32",
@@ -1218,8 +1213,8 @@ mod tests {
1218 }, 1213 },
1219 CompletionItem { 1214 CompletionItem {
1220 label: "the_field", 1215 label: "the_field",
1221 source_range: [270; 270), 1216 source_range: 270..270,
1222 delete: [270; 270), 1217 delete: 270..270,
1223 insert: "the_field", 1218 insert: "the_field",
1224 kind: Field, 1219 kind: Field,
1225 detail: "u32", 1220 detail: "u32",
@@ -1249,8 +1244,8 @@ mod tests {
1249 [ 1244 [
1250 CompletionItem { 1245 CompletionItem {
1251 label: "another_field", 1246 label: "another_field",
1252 source_range: [336; 336), 1247 source_range: 336..336,
1253 delete: [336; 336), 1248 delete: 336..336,
1254 insert: "another_field", 1249 insert: "another_field",
1255 kind: Field, 1250 kind: Field,
1256 detail: "i64", 1251 detail: "i64",
@@ -1258,16 +1253,16 @@ mod tests {
1258 }, 1253 },
1259 CompletionItem { 1254 CompletionItem {
1260 label: "another_good_type", 1255 label: "another_good_type",
1261 source_range: [336; 336), 1256 source_range: 336..336,
1262 delete: [336; 336), 1257 delete: 336..336,
1263 insert: "another_good_type", 1258 insert: "another_good_type",
1264 kind: Field, 1259 kind: Field,
1265 detail: "u32", 1260 detail: "u32",
1266 }, 1261 },
1267 CompletionItem { 1262 CompletionItem {
1268 label: "the_field", 1263 label: "the_field",
1269 source_range: [336; 336), 1264 source_range: 336..336,
1270 delete: [336; 336), 1265 delete: 336..336,
1271 insert: "the_field", 1266 insert: "the_field",
1272 kind: Field, 1267 kind: Field,
1273 detail: "u32", 1268 detail: "u32",
@@ -1296,16 +1291,16 @@ mod tests {
1296 [ 1291 [
1297 CompletionItem { 1292 CompletionItem {
1298 label: "another_field", 1293 label: "another_field",
1299 source_range: [328; 328), 1294 source_range: 328..328,
1300 delete: [328; 328), 1295 delete: 328..328,
1301 insert: "another_field", 1296 insert: "another_field",
1302 kind: Field, 1297 kind: Field,
1303 detail: "i64", 1298 detail: "i64",
1304 }, 1299 },
1305 CompletionItem { 1300 CompletionItem {
1306 label: "another_good_type", 1301 label: "another_good_type",
1307 source_range: [328; 328), 1302 source_range: 328..328,
1308 delete: [328; 328), 1303 delete: 328..328,
1309 insert: "another_good_type", 1304 insert: "another_good_type",
1310 kind: Field, 1305 kind: Field,
1311 detail: "u32", 1306 detail: "u32",
@@ -1313,8 +1308,8 @@ mod tests {
1313 }, 1308 },
1314 CompletionItem { 1309 CompletionItem {
1315 label: "the_field", 1310 label: "the_field",
1316 source_range: [328; 328), 1311 source_range: 328..328,
1317 delete: [328; 328), 1312 delete: 328..328,
1318 insert: "the_field", 1313 insert: "the_field",
1319 kind: Field, 1314 kind: Field,
1320 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/lib.rs b/crates/ra_mbe/src/lib.rs
index 535b7daa0..1a020398e 100644
--- a/crates/ra_mbe/src/lib.rs
+++ b/crates/ra_mbe/src/lib.rs
@@ -19,6 +19,7 @@ use crate::{
19#[derive(Debug, PartialEq, Eq)] 19#[derive(Debug, PartialEq, Eq)]
20pub enum ParseError { 20pub enum ParseError {
21 Expected(String), 21 Expected(String),
22 RepetitionEmtpyTokenTree,
22} 23}
23 24
24#[derive(Debug, PartialEq, Eq)] 25#[derive(Debug, PartialEq, Eq)]
@@ -194,20 +195,46 @@ impl Rule {
194 } 195 }
195} 196}
196 197
198fn to_parse_error(e: ExpandError) -> ParseError {
199 let msg = match e {
200 ExpandError::InvalidRepeat => "invalid repeat".to_string(),
201 _ => "invalid macro definition".to_string(),
202 };
203 ParseError::Expected(msg)
204}
205
197fn validate(pattern: &tt::Subtree) -> Result<(), ParseError> { 206fn validate(pattern: &tt::Subtree) -> Result<(), ParseError> {
198 for op in parse_pattern(pattern) { 207 for op in parse_pattern(pattern) {
199 let op = match op { 208 let op = op.map_err(to_parse_error)?;
200 Ok(it) => it, 209
201 Err(e) => {
202 let msg = match e {
203 ExpandError::InvalidRepeat => "invalid repeat".to_string(),
204 _ => "invalid macro definition".to_string(),
205 };
206 return Err(ParseError::Expected(msg));
207 }
208 };
209 match op { 210 match op {
210 Op::TokenTree(tt::TokenTree::Subtree(subtree)) | Op::Repeat { subtree, .. } => { 211 Op::TokenTree(tt::TokenTree::Subtree(subtree)) => validate(subtree)?,
212 Op::Repeat { subtree, separator, .. } => {
213 // Checks that no repetition which could match an empty token
214 // https://github.com/rust-lang/rust/blob/a58b1ed44f5e06976de2bdc4d7dc81c36a96934f/src/librustc_expand/mbe/macro_rules.rs#L558
215
216 if separator.is_none() {
217 if parse_pattern(subtree).all(|child_op| {
218 match child_op.map_err(to_parse_error) {
219 Ok(Op::Var { kind, .. }) => {
220 // vis is optional
221 if kind.map_or(false, |it| it == "vis") {
222 return true;
223 }
224 }
225 Ok(Op::Repeat { kind, .. }) => {
226 return matches!(
227 kind,
228 parser::RepeatKind::ZeroOrMore | parser::RepeatKind::ZeroOrOne
229 )
230 }
231 _ => {}
232 }
233 false
234 }) {
235 return Err(ParseError::RepetitionEmtpyTokenTree);
236 }
237 }
211 validate(subtree)? 238 validate(subtree)?
212 } 239 }
213 _ => (), 240 _ => (),
@@ -216,6 +243,7 @@ fn validate(pattern: &tt::Subtree) -> Result<(), ParseError> {
216 Ok(()) 243 Ok(())
217} 244}
218 245
246#[derive(Debug)]
219pub struct ExpandResult<T>(pub T, pub Option<ExpandError>); 247pub struct ExpandResult<T>(pub T, pub Option<ExpandError>);
220 248
221impl<T> ExpandResult<T> { 249impl<T> ExpandResult<T> {
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 100ed41f2..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
@@ -1657,7 +1657,7 @@ impl MacroFixture {
1657 } 1657 }
1658} 1658}
1659 1659
1660pub(crate) fn parse_macro(ra_fixture: &str) -> MacroFixture { 1660fn parse_macro_to_tt(ra_fixture: &str) -> tt::Subtree {
1661 let source_file = ast::SourceFile::parse(ra_fixture).ok().unwrap(); 1661 let source_file = ast::SourceFile::parse(ra_fixture).ok().unwrap();
1662 let macro_definition = 1662 let macro_definition =
1663 source_file.syntax().descendants().find_map(ast::MacroCall::cast).unwrap(); 1663 source_file.syntax().descendants().find_map(ast::MacroCall::cast).unwrap();
@@ -1671,10 +1671,24 @@ pub(crate) fn parse_macro(ra_fixture: &str) -> MacroFixture {
1671 .0; 1671 .0;
1672 assert_eq!(definition_tt, parsed); 1672 assert_eq!(definition_tt, parsed);
1673 1673
1674 definition_tt
1675}
1676
1677pub(crate) fn parse_macro(ra_fixture: &str) -> MacroFixture {
1678 let definition_tt = parse_macro_to_tt(ra_fixture);
1674 let rules = MacroRules::parse(&definition_tt).unwrap(); 1679 let rules = MacroRules::parse(&definition_tt).unwrap();
1675 MacroFixture { rules } 1680 MacroFixture { rules }
1676} 1681}
1677 1682
1683pub(crate) fn parse_macro_error(ra_fixture: &str) -> ParseError {
1684 let definition_tt = parse_macro_to_tt(ra_fixture);
1685
1686 match MacroRules::parse(&definition_tt) {
1687 Ok(_) => panic!("Expect error"),
1688 Err(err) => err,
1689 }
1690}
1691
1678pub(crate) fn parse_to_token_tree_by_syntax(ra_fixture: &str) -> tt::Subtree { 1692pub(crate) fn parse_to_token_tree_by_syntax(ra_fixture: &str) -> tt::Subtree {
1679 let source_file = ast::SourceFile::parse(ra_fixture).ok().unwrap(); 1693 let source_file = ast::SourceFile::parse(ra_fixture).ok().unwrap();
1680 let tt = syntax_node_to_token_tree(source_file.syntax()).unwrap().0; 1694 let tt = syntax_node_to_token_tree(source_file.syntax()).unwrap().0;
@@ -1798,48 +1812,69 @@ fn test_no_space_after_semi_colon() {
1798 let dump = format!("{:#?}", expanded); 1812 let dump = format!("{:#?}", expanded);
1799 assert_eq_text!( 1813 assert_eq_text!(
1800 dump.trim(), 1814 dump.trim(),
1801 r###"MACRO_ITEMS@[0; 52) 1815 r###"MACRO_ITEMS@0..52
1802 MODULE@[0; 26) 1816 MODULE@0..26
1803 ATTR@[0; 21) 1817 ATTR@0..21
1804 POUND@[0; 1) "#" 1818 POUND@0..1 "#"
1805 L_BRACK@[1; 2) "[" 1819 L_BRACK@1..2 "["
1806 PATH@[2; 5) 1820 PATH@2..5
1807 PATH_SEGMENT@[2; 5) 1821 PATH_SEGMENT@2..5
1808 NAME_REF@[2; 5) 1822 NAME_REF@2..5
1809 IDENT@[2; 5) "cfg" 1823 IDENT@2..5 "cfg"
1810 TOKEN_TREE@[5; 20) 1824 TOKEN_TREE@5..20
1811 L_PAREN@[5; 6) "(" 1825 L_PAREN@5..6 "("
1812 IDENT@[6; 13) "feature" 1826 IDENT@6..13 "feature"
1813 EQ@[13; 14) "=" 1827 EQ@13..14 "="
1814 STRING@[14; 19) "\"std\"" 1828 STRING@14..19 "\"std\""
1815 R_PAREN@[19; 20) ")" 1829 R_PAREN@19..20 ")"
1816 R_BRACK@[20; 21) "]" 1830 R_BRACK@20..21 "]"
1817 MOD_KW@[21; 24) "mod" 1831 MOD_KW@21..24 "mod"
1818 NAME@[24; 25) 1832 NAME@24..25
1819 IDENT@[24; 25) "m" 1833 IDENT@24..25 "m"
1820 SEMICOLON@[25; 26) ";" 1834 SEMICOLON@25..26 ";"
1821 MODULE@[26; 52) 1835 MODULE@26..52
1822 ATTR@[26; 47) 1836 ATTR@26..47
1823 POUND@[26; 27) "#" 1837 POUND@26..27 "#"
1824 L_BRACK@[27; 28) "[" 1838 L_BRACK@27..28 "["
1825 PATH@[28; 31) 1839 PATH@28..31
1826 PATH_SEGMENT@[28; 31) 1840 PATH_SEGMENT@28..31
1827 NAME_REF@[28; 31) 1841 NAME_REF@28..31
1828 IDENT@[28; 31) "cfg" 1842 IDENT@28..31 "cfg"
1829 TOKEN_TREE@[31; 46) 1843 TOKEN_TREE@31..46
1830 L_PAREN@[31; 32) "(" 1844 L_PAREN@31..32 "("
1831 IDENT@[32; 39) "feature" 1845 IDENT@32..39 "feature"
1832 EQ@[39; 40) "=" 1846 EQ@39..40 "="
1833 STRING@[40; 45) "\"std\"" 1847 STRING@40..45 "\"std\""
1834 R_PAREN@[45; 46) ")" 1848 R_PAREN@45..46 ")"
1835 R_BRACK@[46; 47) "]" 1849 R_BRACK@46..47 "]"
1836 MOD_KW@[47; 50) "mod" 1850 MOD_KW@47..50 "mod"
1837 NAME@[50; 51) 1851 NAME@50..51
1838 IDENT@[50; 51) "f" 1852 IDENT@50..51 "f"
1839 SEMICOLON@[51; 52) ";""###, 1853 SEMICOLON@51..52 ";""###,
1840 ); 1854 );
1841} 1855}
1842 1856
1857// https://github.com/rust-lang/rust/blob/master/src/test/ui/issues/issue-57597.rs
1858#[test]
1859fn test_rustc_issue_57597() {
1860 fn test_error(fixture: &str) {
1861 assert_eq!(parse_macro_error(fixture), ParseError::RepetitionEmtpyTokenTree);
1862 }
1863
1864 test_error("macro_rules! foo { ($($($i:ident)?)+) => {}; }");
1865 test_error("macro_rules! foo { ($($($i:ident)?)*) => {}; }");
1866 test_error("macro_rules! foo { ($($($i:ident)?)?) => {}; }");
1867 test_error("macro_rules! foo { ($($($($i:ident)?)?)?) => {}; }");
1868 test_error("macro_rules! foo { ($($($($i:ident)*)?)?) => {}; }");
1869 test_error("macro_rules! foo { ($($($($i:ident)?)*)?) => {}; }");
1870 test_error("macro_rules! foo { ($($($($i:ident)?)?)*) => {}; }");
1871 test_error("macro_rules! foo { ($($($($i:ident)*)*)?) => {}; }");
1872 test_error("macro_rules! foo { ($($($($i:ident)?)*)*) => {}; }");
1873 test_error("macro_rules! foo { ($($($($i:ident)?)*)+) => {}; }");
1874 test_error("macro_rules! foo { ($($($($i:ident)+)?)*) => {}; }");
1875 test_error("macro_rules! foo { ($($($($i:ident)+)*)?) => {}; }");
1876}
1877
1843#[test] 1878#[test]
1844fn test_expand_bad_literal() { 1879fn test_expand_bad_literal() {
1845 parse_macro( 1880 parse_macro(
@@ -1849,3 +1884,16 @@ fn test_expand_bad_literal() {
1849 ) 1884 )
1850 .assert_expand_err(r#"foo!(&k");"#, &ExpandError::BindingError("".into())); 1885 .assert_expand_err(r#"foo!(&k");"#, &ExpandError::BindingError("".into()));
1851} 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 246085005..e87e8db5d 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() ->{`,
@@ -413,7 +413,7 @@ pub fn handle_runnables(
413 args: check_args, 413 args: check_args,
414 extra_args: Vec::new(), 414 extra_args: Vec::new(),
415 env: FxHashMap::default(), 415 env: FxHashMap::default(),
416 cwd: workspace_root.map(|root| root.to_string_lossy().to_string()), 416 cwd: workspace_root.map(|root| root.to_owned()),
417 }); 417 });
418 Ok(res) 418 Ok(res)
419} 419}
@@ -432,7 +432,7 @@ pub fn handle_completion(
432 let syntax = source_file.syntax(); 432 let syntax = source_file.syntax();
433 let text = syntax.text(); 433 let text = syntax.text();
434 if let Some(next_char) = text.char_at(position.offset) { 434 if let Some(next_char) = text.char_at(position.offset) {
435 let diff = TextUnit::of_char(next_char) + TextUnit::of_char(':'); 435 let diff = TextSize::of(next_char) + TextSize::of(':');
436 let prev_char = position.offset - diff; 436 let prev_char = position.offset - diff;
437 if text.char_at(prev_char) != Some(':') { 437 if text.char_at(prev_char) != Some(':') {
438 res = true; 438 res = true;
@@ -621,7 +621,7 @@ pub fn handle_formatting(
621 let crate_ids = world.analysis().crate_for(file_id)?; 621 let crate_ids = world.analysis().crate_for(file_id)?;
622 622
623 let file_line_index = world.analysis().file_line_index(file_id)?; 623 let file_line_index = world.analysis().file_line_index(file_id)?;
624 let end_position = TextUnit::of_str(&file).conv_with(&file_line_index); 624 let end_position = TextSize::of(file.as_str()).conv_with(&file_line_index);
625 625
626 let mut rustfmt = match &world.config.rustfmt { 626 let mut rustfmt = match &world.config.rustfmt {
627 RustfmtConfig::Rustfmt { extra_args } => { 627 RustfmtConfig::Rustfmt { extra_args } => {
@@ -727,7 +727,7 @@ pub fn handle_code_action(
727 let fixes_from_diagnostics = diagnostics 727 let fixes_from_diagnostics = diagnostics
728 .into_iter() 728 .into_iter()
729 .filter_map(|d| Some((d.range, d.fix?))) 729 .filter_map(|d| Some((d.range, d.fix?)))
730 .filter(|(diag_range, _fix)| diag_range.intersection(&range).is_some()) 730 .filter(|(diag_range, _fix)| diag_range.intersect(range).is_some())
731 .map(|(_range, fix)| fix); 731 .map(|(_range, fix)| fix);
732 732
733 for source_edit in fixes_from_diagnostics { 733 for source_edit in fixes_from_diagnostics {
@@ -752,7 +752,7 @@ pub fn handle_code_action(
752 752
753 for fix in world.check_fixes.get(&file_id).into_iter().flatten() { 753 for fix in world.check_fixes.get(&file_id).into_iter().flatten() {
754 let fix_range = fix.range.conv_with(&line_index); 754 let fix_range = fix.range.conv_with(&line_index);
755 if fix_range.intersection(&range).is_none() { 755 if fix_range.intersect(range).is_none() {
756 continue; 756 continue;
757 } 757 }
758 res.push(fix.action.clone()); 758 res.push(fix.action.clone());
@@ -1013,7 +1013,7 @@ fn to_lsp_runnable(
1013 m.insert("RUST_BACKTRACE".to_string(), "short".to_string()); 1013 m.insert("RUST_BACKTRACE".to_string(), "short".to_string());
1014 m 1014 m
1015 }, 1015 },
1016 cwd: world.workspace_root_for(file_id).map(|root| root.to_string_lossy().to_string()), 1016 cwd: world.workspace_root_for(file_id).map(|root| root.to_owned()),
1017 }) 1017 })
1018} 1018}
1019 1019
@@ -1136,7 +1136,7 @@ pub fn handle_semantic_tokens(
1136 let (token_index, modifier_bitset) = highlight_range.highlight.conv(); 1136 let (token_index, modifier_bitset) = highlight_range.highlight.conv();
1137 for mut range in line_index.lines(highlight_range.range) { 1137 for mut range in line_index.lines(highlight_range.range) {
1138 if text[range].ends_with('\n') { 1138 if text[range].ends_with('\n') {
1139 range = TextRange::from_to(range.start(), range.end() - TextUnit::of_char('\n')); 1139 range = TextRange::new(range.start(), range.end() - TextSize::of('\n'));
1140 } 1140 }
1141 let range = range.conv_with(&line_index); 1141 let range = range.conv_with(&line_index);
1142 builder.push(range, token_index, modifier_bitset); 1142 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("<|>");