aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/release.yaml1
-rw-r--r--.vscode/launch.json4
-rw-r--r--.vscode/tasks.json31
-rw-r--r--Cargo.lock88
-rw-r--r--crates/ra_assists/src/ast_transform.rs2
-rw-r--r--crates/ra_assists/src/doc_tests/generated.rs23
-rw-r--r--crates/ra_assists/src/handlers/add_from_impl_for_enum.rs70
-rw-r--r--crates/ra_assists/src/handlers/add_missing_impl_members.rs194
-rw-r--r--crates/ra_assists/src/handlers/early_return.rs16
-rw-r--r--crates/ra_assists/src/handlers/inline_local_variable.rs1
-rw-r--r--crates/ra_assists/src/handlers/introduce_variable.rs2
-rw-r--r--crates/ra_assists/src/handlers/move_guard.rs4
-rw-r--r--crates/ra_assists/src/handlers/replace_if_let_with_match.rs78
-rw-r--r--crates/ra_assists/src/handlers/replace_let_with_if_let.rs16
-rw-r--r--crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs2
-rw-r--r--crates/ra_assists/src/handlers/replace_unwrap_with_match.rs52
-rw-r--r--crates/ra_assists/src/handlers/unwrap_block.rs348
-rw-r--r--crates/ra_assists/src/lib.rs2
-rw-r--r--crates/ra_assists/src/marks.rs1
-rw-r--r--crates/ra_assists/src/utils.rs110
-rw-r--r--crates/ra_flycheck/Cargo.toml2
-rw-r--r--crates/ra_fmt/src/lib.rs24
-rw-r--r--crates/ra_hir/src/code_model.rs37
-rw-r--r--crates/ra_hir/src/lib.rs3
-rw-r--r--crates/ra_hir/src/semantics.rs49
-rw-r--r--crates/ra_hir/src/semantics/source_to_def.rs2
-rw-r--r--crates/ra_hir/src/source_analyzer.rs3
-rw-r--r--crates/ra_hir_def/src/adt.rs18
-rw-r--r--crates/ra_hir_def/src/attr.rs1
-rw-r--r--crates/ra_hir_def/src/body.rs2
-rw-r--r--crates/ra_hir_def/src/body/lower.rs67
-rw-r--r--crates/ra_hir_def/src/data.rs21
-rw-r--r--crates/ra_hir_def/src/generics.rs68
-rw-r--r--crates/ra_hir_def/src/nameres/collector.rs2
-rw-r--r--crates/ra_hir_def/src/nameres/raw.rs29
-rw-r--r--crates/ra_hir_def/src/nameres/tests/macros.rs37
-rw-r--r--crates/ra_hir_def/src/path.rs5
-rw-r--r--crates/ra_hir_def/src/path/lower.rs38
-rw-r--r--crates/ra_hir_def/src/type_ref.rs52
-rw-r--r--crates/ra_hir_expand/src/builtin_derive.rs2
-rw-r--r--crates/ra_hir_expand/src/builtin_macro.rs4
-rw-r--r--crates/ra_hir_expand/src/db.rs3
-rw-r--r--crates/ra_hir_expand/src/hygiene.rs33
-rw-r--r--crates/ra_hir_expand/src/lib.rs2
-rw-r--r--crates/ra_hir_ty/Cargo.toml2
-rw-r--r--crates/ra_hir_ty/src/lib.rs3
-rw-r--r--crates/ra_hir_ty/src/lower.rs143
-rw-r--r--crates/ra_hir_ty/src/tests/macros.rs66
-rw-r--r--crates/ra_hir_ty/src/tests/simple.rs32
-rw-r--r--crates/ra_ide/src/completion/complete_dot.rs38
-rw-r--r--crates/ra_ide/src/completion/complete_qualified_path.rs272
-rw-r--r--crates/ra_ide/src/completion/complete_unqualified_path.rs12
-rw-r--r--crates/ra_ide/src/completion/completion_context.rs2
-rw-r--r--crates/ra_ide/src/completion/presentation.rs46
-rw-r--r--crates/ra_ide/src/display/function_signature.rs40
-rw-r--r--crates/ra_ide/src/display/short_label.rs6
-rw-r--r--crates/ra_ide/src/folding_ranges.rs2
-rw-r--r--crates/ra_ide/src/hover.rs36
-rw-r--r--crates/ra_ide/src/join_lines.rs69
-rw-r--r--crates/ra_ide/src/syntax_tree.rs77
-rw-r--r--crates/ra_mbe/src/tests.rs152
-rw-r--r--crates/ra_parser/src/grammar.rs4
-rw-r--r--crates/ra_parser/src/grammar/expressions.rs26
-rw-r--r--crates/ra_parser/src/grammar/expressions/atom.rs86
-rw-r--r--crates/ra_parser/src/grammar/items.rs13
-rw-r--r--crates/ra_parser/src/grammar/items/use_item.rs2
-rw-r--r--crates/ra_parser/src/grammar/type_args.rs2
-rw-r--r--crates/ra_parser/src/lib.rs2
-rw-r--r--crates/ra_parser/src/syntax_kind/generated.rs3
-rw-r--r--crates/ra_proc_macro_srv/Cargo.toml2
-rw-r--r--crates/ra_proc_macro_srv/src/cli.rs8
-rw-r--r--crates/ra_proc_macro_srv/src/dylib.rs113
-rw-r--r--crates/ra_proc_macro_srv/src/lib.rs48
-rw-r--r--crates/ra_proc_macro_srv/src/tests/fixtures/test_serialize_proc_macro.txt7
-rw-r--r--crates/ra_proc_macro_srv/src/tests/mod.rs6
-rw-r--r--crates/ra_proc_macro_srv/src/tests/utils.rs6
-rw-r--r--crates/ra_prof/src/hprof.rs45
-rw-r--r--crates/ra_project_model/Cargo.toml2
-rw-r--r--crates/ra_syntax/Cargo.toml4
-rw-r--r--crates/ra_syntax/src/ast.rs17
-rw-r--r--crates/ra_syntax/src/ast/edit.rs2
-rw-r--r--crates/ra_syntax/src/ast/expr_extensions.rs39
-rw-r--r--crates/ra_syntax/src/ast/extensions.rs6
-rw-r--r--crates/ra_syntax/src/ast/generated/nodes.rs76
-rw-r--r--crates/ra_syntax/src/ast/make.rs11
-rw-r--r--crates/ra_syntax/src/ast/tokens.rs17
-rw-r--r--crates/ra_syntax/src/lib.rs7
-rw-r--r--crates/ra_syntax/src/parsing/lexer.rs37
-rw-r--r--crates/ra_syntax/src/validation.rs81
-rw-r--r--crates/ra_syntax/src/validation/block.rs20
-rw-r--r--crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast7
-rw-r--r--crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast52
-rw-r--r--crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast63
-rw-r--r--crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast61
-rw-r--r--crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast45
-rw-r--r--crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast165
-rw-r--r--crates/ra_syntax/test_data/parser/err/0019_let_recover.rast166
-rw-r--r--crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast7
-rw-r--r--crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast229
-rw-r--r--crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast49
-rw-r--r--crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast430
-rw-r--r--crates/ra_syntax/test_data/parser/err/0025_nope.rast360
-rw-r--r--crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/err/0029_field_completion.rast23
-rw-r--r--crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast214
-rw-r--r--crates/ra_syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast361
-rw-r--r--crates/ra_syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast103
-rw-r--r--crates/ra_syntax/test_data/parser/err/0034_bad_box_pattern.rast155
-rw-r--r--crates/ra_syntax/test_data/parser/err/0035_use_recover.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/err/0037_visibility_in_traits.rast10
-rw-r--r--crates/ra_syntax/test_data/parser/err/0038_endless_inclusive_range.rast31
-rw-r--r--crates/ra_syntax/test_data/parser/err/0039_lambda_recovery.rast121
-rw-r--r--crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast91
-rw-r--r--crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rs4
-rw-r--r--crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast70
-rw-r--r--crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rs4
-rw-r--r--crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast27
-rw-r--r--crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rs2
-rw-r--r--crates/ra_syntax/test_data/parser/err/0163_weird_blocks.rast71
-rw-r--r--crates/ra_syntax/test_data/parser/err/0163_weird_blocks.rs6
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0002_misplaced_label_err.rast25
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0006_unsafe_block_in_mod.rast10
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0007_async_without_semicolon.rast37
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0008_pub_expr.rast25
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0009_attr_on_expr_not_allowed.rast92
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0010_bad_tuple_index_expr.rast77
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0010_wrong_order_fns.rast10
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0014_default_fn_type.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/err/0014_record_literal_before_ellipsis_recovery.rast71
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0001_trait_item_list.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rast49
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rs2
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0003_where_pred_for.rast7
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0005_function_type_params.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0006_self_param.rast25
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast169
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0009_loop_expr.rast26
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0011_field_expr.rast95
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0015_continue_expr.rast48
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0018_arb_self_types.rast10
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0019_unary_expr.rast65
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0021_impl_item_list.rast10
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast59
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast185
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0027_ref_pat.rast75
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0029_cast_expr.rast155
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0030_cond.rast365
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0031_while_expr.rast149
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0034_break_expr.rast84
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0036_unsafe_extern_fn.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0037_qual_paths.rast67
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0038_full_range_expr.rast33
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0039_type_arg.rast13
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0040_crate_keyword_vis.rast7
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0042_call_expr.rast271
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0044_block_items.rast34
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0045_param_list_opt_patterns.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0048_path_type_with_bounds.rast10
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0053_path_expr.rast167
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0055_literal_pattern.rast129
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0056_where_clause.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0057_const_fn.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0058_range_pat.rast141
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0059_match_arms_commas.rast94
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0061_record_lit.rast225
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0062_mod_contents.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0064_if_expr.rast229
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0066_match_arm.rast279
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0070_stmt_bin_expr_ambiguity.rast79
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0071_match_expr.rast165
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0072_return_expr.rast33
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0074_stmt_postfix_expr_ambiguity.rast98
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0075_block.rast86
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0076_function_where_clause.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0077_try_expr.rast27
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0080_postfix_range.rast167
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0081_for_type.rast15
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0082_ref_expr.rast85
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0085_expr_literals.rast247
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0086_function_ret_type.rast10
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0088_break_ambiguity.rast112
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0089_extern_fn.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0093_index_expr.rast43
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0095_placeholder_pat.rast33
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0096_no_semi_after_block.rast229
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0098_const_unsafe_fn.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0099_param_list.rast20
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0100_for_expr.rast46
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0101_unsafe_fn.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0102_record_field_pat_list.rast241
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0103_array_expr.rast85
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rast43
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rs5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0106_lambda_expr.rast251
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0107_method_call_expr.rast101
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0108_tuple_expr.rast53
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0109_label.rast108
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast155
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0112_bind_pat.rast231
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0113_nocontentexpr.rast90
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0118_match_guard.rast71
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0120_match_arms_inner_attribute.rast137
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0121_match_arms_outer_attributes.rast267
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0122_generic_lifetime_type_attribute.rast7
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0124_async_fn.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0125_crate_keyword_path.rast39
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0125_record_literal_field_with_attr.rast71
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0126_attr_on_expr_stmt.rast172
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0127_attr_on_last_expr_in_block.rast92
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0128_combined_fns.rast10
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0129_marco_pat.rast49
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0130_let_stmt.rast231
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0130_try_block_expr.rast40
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0132_box_expr.rast155
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0132_default_fn_type.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0134_nocontentexpr_after_item.rast102
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0137_await_expr.rast115
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0138_associated_type_bounds.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0138_expression_after_block.rast106
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0138_self_param_outer_attr.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0139_param_outer_arg.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0142_for_range_from.rast58
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0143_box_pat.rast197
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast887
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0145_record_field_pat.rast127
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0146_as_precedence.rast61
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0152_arg_with_attr.rast49
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0155_closure_params.rast115
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0156_fn_def_param.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0156_or_pattern.rast199
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0158_binop_resets_statementness.rast50
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0158_lambda_ret_block.rast64
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0159_try_macro_fallback.rast34
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0159_try_macro_fallback.rs1
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0160_try_macro_rules.rast27
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0160_try_macro_rules.rs1
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0161_labeled_block.rast26
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0161_labeled_block.rs1
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0162_unsafe_block.rast23
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0162_unsafe_block.rs1
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0005_fn_item.rast7
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0008_mod_item.rast7
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0011_outer_attribute.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0012_visibility.rast25
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rast26
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rs1
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0017_attr_trailing_comma.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0021_extern_fn.rast21
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0025_extern_fn_in_block.rast40
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0026_const_fn_in_block.rast38
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0027_unsafe_fn_in_block.rast60
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0028_operator_binding_power.rast347
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0029_range_forms.rast279
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0030_string_suffixes.rast103
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0032_where_for.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0033_label_break.rast407
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0034_crate_path_in_call.rast59
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast3912
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0036_fully_qualified.rast27
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0038_where_pred_type.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0039_raw_fn_item.rast7
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0041_raw_keywords.rast77
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0042_ufcs_call_list.rast97
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0043_complex_assignment.rast133
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0044_let_attrs.rast123
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0045_block_inner_attrs.rast196
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0047_minus_in_inner_pattern.rast495
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0048_compound_assignment.rast373
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0049_async_block.rast47
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0050_async_block_as_argument.rast56
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0051_parameter_attrs.rast55
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0052_for_range_block.rast135
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0054_qual_path_in_type_arg.rast15
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0055_dot_dot_dot.rast49
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0056_neq_in_type.rast106
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0057_loop_in_call.rast49
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0058_unary_expr_precedence.rast169
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0059_loops_in_parens.rast174
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0060_as_range.rast87
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0061_match_full_range.rast29
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0062_macro_2.0.rast205
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0063_trait_fn_patterns.rast20
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0064_impl_fn_params.rast20
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0065_comment_newline.rast5
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0065_plus_after_fn_trait_bound.rast5
-rw-r--r--crates/rust-analyzer/Cargo.toml6
-rw-r--r--crates/rust-analyzer/src/caps.rs31
-rw-r--r--crates/rust-analyzer/src/config.rs13
-rw-r--r--crates/rust-analyzer/src/conv.rs2
-rw-r--r--crates/rust-analyzer/src/main_loop.rs133
-rw-r--r--crates/rust-analyzer/src/main_loop/handlers.rs87
-rw-r--r--crates/rust-analyzer/src/req.rs15
-rw-r--r--crates/rust-analyzer/src/semantic_tokens.rs117
-rw-r--r--crates/rust-analyzer/tests/heavy_tests/main.rs31
-rw-r--r--crates/rust-analyzer/tests/heavy_tests/support.rs6
-rw-r--r--docs/dev/architecture.md4
-rw-r--r--docs/dev/guide.md8
-rw-r--r--docs/dev/syntax.md2
-rw-r--r--docs/user/assists.md22
-rw-r--r--docs/user/features.md4
-rw-r--r--docs/user/readme.adoc40
-rw-r--r--editors/code/package.json28
-rw-r--r--editors/code/src/cargo.ts106
-rw-r--r--editors/code/src/commands/runnables.ts70
-rw-r--r--editors/code/src/config.ts9
-rw-r--r--xtask/src/ast_src.rs21
-rw-r--r--xtask/src/codegen/gen_syntax.rs1
-rw-r--r--xtask/src/dist.rs8
-rw-r--r--xtask/src/lib.rs89
-rw-r--r--xtask/src/not_bash.rs60
313 files changed, 13661 insertions, 11706 deletions
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 2c1192f07..3f52f31f8 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -39,7 +39,6 @@ jobs:
39 with: 39 with:
40 toolchain: stable 40 toolchain: stable
41 profile: minimal 41 profile: minimal
42 target: x86_64-unknown-linux-musl
43 override: true 42 override: true
44 43
45 - name: Install Nodejs 44 - name: Install Nodejs
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 3f74d7566..6a2fff906 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -41,7 +41,7 @@
41 "outFiles": [ 41 "outFiles": [
42 "${workspaceFolder}/editors/code/out/**/*.js" 42 "${workspaceFolder}/editors/code/out/**/*.js"
43 ], 43 ],
44 "preLaunchTask": "Build Extension", 44 "preLaunchTask": "Build Server and Extension",
45 "skipFiles": [ 45 "skipFiles": [
46 "<node_internals>/**/*.js" 46 "<node_internals>/**/*.js"
47 ], 47 ],
@@ -62,7 +62,7 @@
62 "outFiles": [ 62 "outFiles": [
63 "${workspaceFolder}/editors/code/out/**/*.js" 63 "${workspaceFolder}/editors/code/out/**/*.js"
64 ], 64 ],
65 "preLaunchTask": "Build Extension", 65 "preLaunchTask": "Build Server (Release) and Extension",
66 "skipFiles": [ 66 "skipFiles": [
67 "<node_internals>/**/*.js" 67 "<node_internals>/**/*.js"
68 ], 68 ],
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 4037e7cce..0969ce89a 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -4,7 +4,7 @@
4 "version": "2.0.0", 4 "version": "2.0.0",
5 "tasks": [ 5 "tasks": [
6 { 6 {
7 "label": "Build Extension", 7 "label": "Build Extension in Background",
8 "group": "build", 8 "group": "build",
9 "type": "npm", 9 "type": "npm",
10 "script": "watch", 10 "script": "watch",
@@ -16,11 +16,40 @@
16 "isBackground": true, 16 "isBackground": true,
17 }, 17 },
18 { 18 {
19 "label": "Build Extension",
20 "group": "build",
21 "type": "npm",
22 "script": "build",
23 "path": "editors/code/",
24 "problemMatcher": {
25 "base": "$tsc",
26 "fileLocation": ["relative", "${workspaceFolder}/editors/code/"]
27 },
28 },
29 {
19 "label": "Build Server", 30 "label": "Build Server",
20 "group": "build", 31 "group": "build",
21 "type": "shell", 32 "type": "shell",
22 "command": "cargo build --package rust-analyzer", 33 "command": "cargo build --package rust-analyzer",
23 "problemMatcher": "$rustc" 34 "problemMatcher": "$rustc"
24 }, 35 },
36 {
37 "label": "Build Server (Release)",
38 "group": "build",
39 "type": "shell",
40 "command": "cargo build --release --package rust-analyzer",
41 "problemMatcher": "$rustc"
42 },
43
44 {
45 "label": "Build Server and Extension",
46 "dependsOn": ["Build Server", "Build Extension"],
47 "problemMatcher": "$rustc"
48 },
49 {
50 "label": "Build Server (Release) and Extension",
51 "dependsOn": ["Build Server (Release)", "Build Extension"],
52 "problemMatcher": "$rustc"
53 }
25 ] 54 ]
26} 55}
diff --git a/Cargo.lock b/Cargo.lock
index 367ff3f82..5d50a766f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -58,9 +58,9 @@ dependencies = [
58 58
59[[package]] 59[[package]]
60name = "backtrace-sys" 60name = "backtrace-sys"
61version = "0.1.36" 61version = "0.1.37"
62source = "registry+https://github.com/rust-lang/crates.io-index" 62source = "registry+https://github.com/rust-lang/crates.io-index"
63checksum = "78848718ee1255a2485d1309ad9cdecfc2e7d0362dd11c6829364c6b35ae1bc7" 63checksum = "18fbebbe1c9d1f383a9cc7e8ccdb471b91c8d024ee9c2ca5b5346121fe8b4399"
64dependencies = [ 64dependencies = [
65 "cc", 65 "cc",
66 "libc", 66 "libc",
@@ -68,9 +68,9 @@ dependencies = [
68 68
69[[package]] 69[[package]]
70name = "base64" 70name = "base64"
71version = "0.11.0" 71version = "0.12.0"
72source = "registry+https://github.com/rust-lang/crates.io-index" 72source = "registry+https://github.com/rust-lang/crates.io-index"
73checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" 73checksum = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3"
74 74
75[[package]] 75[[package]]
76name = "bitflags" 76name = "bitflags"
@@ -170,7 +170,7 @@ dependencies = [
170 "chalk-ir", 170 "chalk-ir",
171 "chalk-macros", 171 "chalk-macros",
172 "chalk-rust-ir", 172 "chalk-rust-ir",
173 "ena", 173 "ena 0.13.1",
174 "itertools", 174 "itertools",
175 "petgraph", 175 "petgraph",
176 "rustc-hash", 176 "rustc-hash",
@@ -199,14 +199,15 @@ dependencies = [
199 199
200[[package]] 200[[package]]
201name = "console" 201name = "console"
202version = "0.10.0" 202version = "0.10.3"
203source = "registry+https://github.com/rust-lang/crates.io-index" 203source = "registry+https://github.com/rust-lang/crates.io-index"
204checksum = "6728a28023f207181b193262711102bfbaf47cc9d13bc71d0736607ef8efe88c" 204checksum = "2586208b33573b7f76ccfbe5adb076394c88deaf81b84d7213969805b0a952a7"
205dependencies = [ 205dependencies = [
206 "clicolors-control", 206 "clicolors-control",
207 "encode_unicode", 207 "encode_unicode",
208 "lazy_static", 208 "lazy_static",
209 "libc", 209 "libc",
210 "terminal_size",
210 "termios", 211 "termios",
211 "winapi 0.3.8", 212 "winapi 0.3.8",
212] 213]
@@ -316,6 +317,15 @@ dependencies = [
316] 317]
317 318
318[[package]] 319[[package]]
320name = "ena"
321version = "0.14.0"
322source = "registry+https://github.com/rust-lang/crates.io-index"
323checksum = "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3"
324dependencies = [
325 "log",
326]
327
328[[package]]
319name = "encode_unicode" 329name = "encode_unicode"
320version = "0.3.6" 330version = "0.3.6"
321source = "registry+https://github.com/rust-lang/crates.io-index" 331source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -381,9 +391,9 @@ dependencies = [
381 391
382[[package]] 392[[package]]
383name = "fst" 393name = "fst"
384version = "0.4.1" 394version = "0.4.3"
385source = "registry+https://github.com/rust-lang/crates.io-index" 395source = "registry+https://github.com/rust-lang/crates.io-index"
386checksum = "4eaf9ea41cc964d742f7fc7861db75d2d6e83a3ce0d897d5c6f8b621f015ddc8" 396checksum = "81f9cac32c1741cdf6b66be7dcf0d9c7f25ccf12f8aa84c16cfa31f9f14513b3"
387 397
388[[package]] 398[[package]]
389name = "fuchsia-zircon" 399name = "fuchsia-zircon"
@@ -447,9 +457,9 @@ dependencies = [
447 457
448[[package]] 458[[package]]
449name = "hermit-abi" 459name = "hermit-abi"
450version = "0.1.11" 460version = "0.1.12"
451source = "registry+https://github.com/rust-lang/crates.io-index" 461source = "registry+https://github.com/rust-lang/crates.io-index"
452checksum = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15" 462checksum = "61565ff7aaace3525556587bd2dc31d4a07071957be715e63ce7b1eccf51a8f4"
453dependencies = [ 463dependencies = [
454 "libc", 464 "libc",
455] 465]
@@ -645,9 +655,9 @@ dependencies = [
645 655
646[[package]] 656[[package]]
647name = "lsp-types" 657name = "lsp-types"
648version = "0.73.0" 658version = "0.74.1"
649source = "registry+https://github.com/rust-lang/crates.io-index" 659source = "registry+https://github.com/rust-lang/crates.io-index"
650checksum = "93d0cf64ea141b43d9e055f6b9df13f0bce32b103d84237509ce0a571ab9b159" 660checksum = "57c0e6a2b8837d27b29deb3f3e6dc1c6d2f57947677f9be1024e482ec5b59525"
651dependencies = [ 661dependencies = [
652 "base64", 662 "base64",
653 "bitflags", 663 "bitflags",
@@ -696,9 +706,9 @@ dependencies = [
696 706
697[[package]] 707[[package]]
698name = "mio" 708name = "mio"
699version = "0.6.21" 709version = "0.6.22"
700source = "registry+https://github.com/rust-lang/crates.io-index" 710source = "registry+https://github.com/rust-lang/crates.io-index"
701checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" 711checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430"
702dependencies = [ 712dependencies = [
703 "cfg-if", 713 "cfg-if",
704 "fuchsia-zircon", 714 "fuchsia-zircon",
@@ -739,9 +749,9 @@ dependencies = [
739 749
740[[package]] 750[[package]]
741name = "net2" 751name = "net2"
742version = "0.2.33" 752version = "0.2.34"
743source = "registry+https://github.com/rust-lang/crates.io-index" 753source = "registry+https://github.com/rust-lang/crates.io-index"
744checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 754checksum = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7"
745dependencies = [ 755dependencies = [
746 "cfg-if", 756 "cfg-if",
747 "libc", 757 "libc",
@@ -814,9 +824,9 @@ dependencies = [
814 824
815[[package]] 825[[package]]
816name = "paste" 826name = "paste"
817version = "0.1.10" 827version = "0.1.11"
818source = "registry+https://github.com/rust-lang/crates.io-index" 828source = "registry+https://github.com/rust-lang/crates.io-index"
819checksum = "ab4fb1930692d1b6a9cfabdde3d06ea0a7d186518e2f4d67660d8970e2fa647a" 829checksum = "a3c897744f63f34f7ae3a024d9162bb5001f4ad661dd24bea0dc9f075d2de1c6"
820dependencies = [ 830dependencies = [
821 "paste-impl", 831 "paste-impl",
822 "proc-macro-hack", 832 "proc-macro-hack",
@@ -824,9 +834,9 @@ dependencies = [
824 834
825[[package]] 835[[package]]
826name = "paste-impl" 836name = "paste-impl"
827version = "0.1.10" 837version = "0.1.11"
828source = "registry+https://github.com/rust-lang/crates.io-index" 838source = "registry+https://github.com/rust-lang/crates.io-index"
829checksum = "a62486e111e571b1e93b710b61e8f493c0013be39629b714cb166bdb06aa5a8a" 839checksum = "66fd6f92e3594f2dd7b3fc23e42d82e292f7bcda6d8e5dcd167072327234ab89"
830dependencies = [ 840dependencies = [
831 "proc-macro-hack", 841 "proc-macro-hack",
832 "proc-macro2", 842 "proc-macro2",
@@ -885,9 +895,9 @@ dependencies = [
885 895
886[[package]] 896[[package]]
887name = "quote" 897name = "quote"
888version = "1.0.3" 898version = "1.0.4"
889source = "registry+https://github.com/rust-lang/crates.io-index" 899source = "registry+https://github.com/rust-lang/crates.io-index"
890checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" 900checksum = "4c1f4b0efa5fc5e8ceb705136bfee52cfdb6a4e3509f770b478cd6ed434232a7"
891dependencies = [ 901dependencies = [
892 "proc-macro2", 902 "proc-macro2",
893] 903]
@@ -1023,7 +1033,7 @@ dependencies = [
1023 "chalk-ir", 1033 "chalk-ir",
1024 "chalk-rust-ir", 1034 "chalk-rust-ir",
1025 "chalk-solve", 1035 "chalk-solve",
1026 "ena", 1036 "ena 0.14.0",
1027 "insta", 1037 "insta",
1028 "itertools", 1038 "itertools",
1029 "log", 1039 "log",
@@ -1193,9 +1203,9 @@ dependencies = [
1193 1203
1194[[package]] 1204[[package]]
1195name = "ra_vfs" 1205name = "ra_vfs"
1196version = "0.5.3" 1206version = "0.6.0"
1197source = "registry+https://github.com/rust-lang/crates.io-index" 1207source = "registry+https://github.com/rust-lang/crates.io-index"
1198checksum = "58a265769d5e5655345a9fcbd870a1a7c3658558c0d8efaed79e0669358f46b8" 1208checksum = "fcaa5615f420134aea7667253db101d03a5c5f300eac607872dc2a36407b2ac9"
1199dependencies = [ 1209dependencies = [
1200 "crossbeam-channel", 1210 "crossbeam-channel",
1201 "jod-thread", 1211 "jod-thread",
@@ -1374,9 +1384,9 @@ dependencies = [
1374 1384
1375[[package]] 1385[[package]]
1376name = "rustc-ap-rustc_lexer" 1386name = "rustc-ap-rustc_lexer"
1377version = "652.0.0" 1387version = "656.0.0"
1378source = "registry+https://github.com/rust-lang/crates.io-index" 1388source = "registry+https://github.com/rust-lang/crates.io-index"
1379checksum = "3a6a43c4d0889218c5e2ae68ffea239f303fc05ab1078c73f74e63feb87f7889" 1389checksum = "9cbba98ec46e96a4663197dfa8c0378752de2006e314e5400c0ca74929d6692f"
1380dependencies = [ 1390dependencies = [
1381 "unicode-xid", 1391 "unicode-xid",
1382] 1392]
@@ -1486,18 +1496,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
1486 1496
1487[[package]] 1497[[package]]
1488name = "serde" 1498name = "serde"
1489version = "1.0.104" 1499version = "1.0.106"
1490source = "registry+https://github.com/rust-lang/crates.io-index" 1500source = "registry+https://github.com/rust-lang/crates.io-index"
1491checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" 1501checksum = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399"
1492dependencies = [ 1502dependencies = [
1493 "serde_derive", 1503 "serde_derive",
1494] 1504]
1495 1505
1496[[package]] 1506[[package]]
1497name = "serde_derive" 1507name = "serde_derive"
1498version = "1.0.104" 1508version = "1.0.106"
1499source = "registry+https://github.com/rust-lang/crates.io-index" 1509source = "registry+https://github.com/rust-lang/crates.io-index"
1500checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" 1510checksum = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c"
1501dependencies = [ 1511dependencies = [
1502 "proc-macro2", 1512 "proc-macro2",
1503 "quote", 1513 "quote",
@@ -1506,9 +1516,9 @@ dependencies = [
1506 1516
1507[[package]] 1517[[package]]
1508name = "serde_json" 1518name = "serde_json"
1509version = "1.0.51" 1519version = "1.0.52"
1510source = "registry+https://github.com/rust-lang/crates.io-index" 1520source = "registry+https://github.com/rust-lang/crates.io-index"
1511checksum = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9" 1521checksum = "a7894c8ed05b7a3a279aeb79025fdec1d3158080b75b98a08faf2806bb799edd"
1512dependencies = [ 1522dependencies = [
1513 "itoa", 1523 "itoa",
1514 "ryu", 1524 "ryu",
@@ -1607,6 +1617,16 @@ dependencies = [
1607] 1617]
1608 1618
1609[[package]] 1619[[package]]
1620name = "terminal_size"
1621version = "0.1.12"
1622source = "registry+https://github.com/rust-lang/crates.io-index"
1623checksum = "8038f95fc7a6f351163f4b964af631bd26c9e828f7db085f2a84aca56f70d13b"
1624dependencies = [
1625 "libc",
1626 "winapi 0.3.8",
1627]
1628
1629[[package]]
1610name = "termios" 1630name = "termios"
1611version = "0.3.2" 1631version = "0.3.2"
1612source = "registry+https://github.com/rust-lang/crates.io-index" 1632source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/crates/ra_assists/src/ast_transform.rs b/crates/ra_assists/src/ast_transform.rs
index 52b4c82db..9ac65ab39 100644
--- a/crates/ra_assists/src/ast_transform.rs
+++ b/crates/ra_assists/src/ast_transform.rs
@@ -85,6 +85,7 @@ impl<'a> SubstituteTypeParams<'a> {
85 ast::TypeRef::PathType(path_type) => path_type.path()?, 85 ast::TypeRef::PathType(path_type) => path_type.path()?,
86 _ => return None, 86 _ => return None,
87 }; 87 };
88 // FIXME: use `hir::Path::from_src` instead.
88 let path = hir::Path::from_ast(path)?; 89 let path = hir::Path::from_ast(path)?;
89 let resolution = self.source_scope.resolve_hir_path(&path)?; 90 let resolution = self.source_scope.resolve_hir_path(&path)?;
90 match resolution { 91 match resolution {
@@ -128,6 +129,7 @@ impl<'a> QualifyPaths<'a> {
128 // don't try to qualify `Fn(Foo) -> Bar` paths, they are in prelude anyway 129 // don't try to qualify `Fn(Foo) -> Bar` paths, they are in prelude anyway
129 return None; 130 return None;
130 } 131 }
132 // FIXME: use `hir::Path::from_src` instead.
131 let hir_path = hir::Path::from_ast(p.clone()); 133 let hir_path = hir::Path::from_ast(p.clone());
132 let resolution = self.source_scope.resolve_hir_path(&hir_path?)?; 134 let resolution = self.source_scope.resolve_hir_path(&hir_path?)?;
133 match resolution { 135 match resolution {
diff --git a/crates/ra_assists/src/doc_tests/generated.rs b/crates/ra_assists/src/doc_tests/generated.rs
index e4fa9ee36..6696cc832 100644
--- a/crates/ra_assists/src/doc_tests/generated.rs
+++ b/crates/ra_assists/src/doc_tests/generated.rs
@@ -180,7 +180,9 @@ trait Trait<T> {
180} 180}
181 181
182impl Trait<u32> for () { 182impl Trait<u32> for () {
183 fn foo(&self) -> u32 { todo!() } 183 fn foo(&self) -> u32 {
184 todo!()
185 }
184 186
185} 187}
186"#####, 188"#####,
@@ -726,3 +728,22 @@ use std::{collections::HashMap};
726"#####, 728"#####,
727 ) 729 )
728} 730}
731
732#[test]
733fn doctest_unwrap_block() {
734 check(
735 "unwrap_block",
736 r#####"
737fn foo() {
738 if true {<|>
739 println!("foo");
740 }
741}
742"#####,
743 r#####"
744fn foo() {
745 println!("foo");
746}
747"#####,
748 )
749}
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 03806724a..49deb6701 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,11 +1,12 @@
1use ra_ide_db::RootDatabase;
1use ra_syntax::{ 2use ra_syntax::{
2 ast::{self, AstNode, NameOwner}, 3 ast::{self, AstNode, NameOwner},
3 TextSize, 4 TextSize,
4}; 5};
5use stdx::format_to; 6use stdx::format_to;
6 7
7use crate::{Assist, AssistCtx, AssistId}; 8use crate::{utils::FamousDefs, Assist, AssistCtx, AssistId};
8use ra_ide_db::RootDatabase; 9use test_utils::tested_by;
9 10
10// Assist add_from_impl_for_enum 11// Assist add_from_impl_for_enum
11// 12//
@@ -41,7 +42,8 @@ pub(crate) fn add_from_impl_for_enum(ctx: AssistCtx) -> Option<Assist> {
41 _ => return None, 42 _ => return None,
42 }; 43 };
43 44
44 if already_has_from_impl(ctx.sema, &variant) { 45 if existing_from_impl(ctx.sema, &variant).is_some() {
46 tested_by!(test_add_from_impl_already_exists);
45 return None; 47 return None;
46 } 48 }
47 49
@@ -70,41 +72,33 @@ impl From<{0}> for {1} {{
70 ) 72 )
71} 73}
72 74
73fn already_has_from_impl( 75fn existing_from_impl(
74 sema: &'_ hir::Semantics<'_, RootDatabase>, 76 sema: &'_ hir::Semantics<'_, RootDatabase>,
75 variant: &ast::EnumVariant, 77 variant: &ast::EnumVariant,
76) -> bool { 78) -> Option<()> {
77 let scope = sema.scope(&variant.syntax()); 79 let variant = sema.to_def(variant)?;
80 let enum_ = variant.parent_enum(sema.db);
81 let krate = enum_.module(sema.db).krate();
78 82
79 let from_path = ast::make::path_from_text("From"); 83 let from_trait = FamousDefs(sema, krate).core_convert_From()?;
80 let from_hir_path = match hir::Path::from_ast(from_path) {
81 Some(p) => p,
82 None => return false,
83 };
84 let from_trait = match scope.resolve_hir_path(&from_hir_path) {
85 Some(hir::PathResolution::Def(hir::ModuleDef::Trait(t))) => t,
86 _ => return false,
87 };
88 84
89 let e: hir::Enum = match sema.to_def(&variant.parent_enum()) { 85 let enum_type = enum_.ty(sema.db);
90 Some(e) => e,
91 None => return false,
92 };
93 let e_ty = e.ty(sema.db);
94 86
95 let hir_enum_var: hir::EnumVariant = match sema.to_def(variant) { 87 let wrapped_type = variant.fields(sema.db).get(0)?.signature_ty(sema.db);
96 Some(ev) => ev,
97 None => return false,
98 };
99 let var_ty = hir_enum_var.fields(sema.db)[0].signature_ty(sema.db);
100 88
101 e_ty.impls_trait(sema.db, from_trait, &[var_ty]) 89 if enum_type.impls_trait(sema.db, from_trait, &[wrapped_type]) {
90 Some(())
91 } else {
92 None
93 }
102} 94}
103 95
104#[cfg(test)] 96#[cfg(test)]
105mod tests { 97mod tests {
106 use super::*; 98 use super::*;
99
107 use crate::helpers::{check_assist, check_assist_not_applicable}; 100 use crate::helpers::{check_assist, check_assist_not_applicable};
101 use test_utils::covers;
108 102
109 #[test] 103 #[test]
110 fn test_add_from_impl_for_enum() { 104 fn test_add_from_impl_for_enum() {
@@ -136,36 +130,40 @@ mod tests {
136 ); 130 );
137 } 131 }
138 132
133 fn check_not_applicable(ra_fixture: &str) {
134 let fixture =
135 format!("//- main.rs crate:main deps:core\n{}\n{}", ra_fixture, FamousDefs::FIXTURE);
136 check_assist_not_applicable(add_from_impl_for_enum, &fixture)
137 }
138
139 #[test] 139 #[test]
140 fn test_add_from_impl_no_element() { 140 fn test_add_from_impl_no_element() {
141 check_assist_not_applicable(add_from_impl_for_enum, "enum A { <|>One }"); 141 check_not_applicable("enum A { <|>One }");
142 } 142 }
143 143
144 #[test] 144 #[test]
145 fn test_add_from_impl_more_than_one_element_in_tuple() { 145 fn test_add_from_impl_more_than_one_element_in_tuple() {
146 check_assist_not_applicable(add_from_impl_for_enum, "enum A { <|>One(u32, String) }"); 146 check_not_applicable("enum A { <|>One(u32, String) }");
147 } 147 }
148 148
149 #[test] 149 #[test]
150 fn test_add_from_impl_struct_variant() { 150 fn test_add_from_impl_struct_variant() {
151 check_assist_not_applicable(add_from_impl_for_enum, "enum A { <|>One { x: u32 } }"); 151 check_not_applicable("enum A { <|>One { x: u32 } }");
152 } 152 }
153 153
154 #[test] 154 #[test]
155 fn test_add_from_impl_already_exists() { 155 fn test_add_from_impl_already_exists() {
156 check_assist_not_applicable( 156 covers!(test_add_from_impl_already_exists);
157 add_from_impl_for_enum, 157 check_not_applicable(
158 r#"enum A { <|>One(u32), } 158 r#"
159enum A { <|>One(u32), }
159 160
160impl From<u32> for A { 161impl From<u32> for A {
161 fn from(v: u32) -> Self { 162 fn from(v: u32) -> Self {
162 A::One(v) 163 A::One(v)
163 } 164 }
164} 165}
165 166"#,
166pub trait From<T> {
167 fn from(T) -> Self;
168}"#,
169 ); 167 );
170 } 168 }
171 169
diff --git a/crates/ra_assists/src/handlers/add_missing_impl_members.rs b/crates/ra_assists/src/handlers/add_missing_impl_members.rs
index 2d6d44980..e466c9a86 100644
--- a/crates/ra_assists/src/handlers/add_missing_impl_members.rs
+++ b/crates/ra_assists/src/handlers/add_missing_impl_members.rs
@@ -1,6 +1,10 @@
1use hir::HasSource; 1use hir::HasSource;
2use ra_syntax::{ 2use ra_syntax::{
3 ast::{self, edit, make, AstNode, NameOwner}, 3 ast::{
4 self,
5 edit::{self, IndentLevel},
6 make, AstNode, NameOwner,
7 },
4 SmolStr, 8 SmolStr,
5}; 9};
6 10
@@ -40,7 +44,9 @@ enum AddMissingImplMembersMode {
40// } 44// }
41// 45//
42// impl Trait<u32> for () { 46// impl Trait<u32> for () {
43// fn foo(&self) -> u32 { todo!() } 47// fn foo(&self) -> u32 {
48// todo!()
49// }
44// 50//
45// } 51// }
46// ``` 52// ```
@@ -165,7 +171,9 @@ fn add_missing_impl_members_inner(
165 171
166fn add_body(fn_def: ast::FnDef) -> ast::FnDef { 172fn add_body(fn_def: ast::FnDef) -> ast::FnDef {
167 if fn_def.body().is_none() { 173 if fn_def.body().is_none() {
168 fn_def.with_body(make::block_from_expr(make::expr_todo())) 174 let body = make::block_expr(None, Some(make::expr_todo()));
175 let body = IndentLevel(1).increase_indent(body);
176 fn_def.with_body(body)
169 } else { 177 } else {
170 fn_def 178 fn_def
171 } 179 }
@@ -181,7 +189,7 @@ mod tests {
181 fn test_add_missing_impl_members() { 189 fn test_add_missing_impl_members() {
182 check_assist( 190 check_assist(
183 add_missing_impl_members, 191 add_missing_impl_members,
184 " 192 r#"
185trait Foo { 193trait Foo {
186 type Output; 194 type Output;
187 195
@@ -197,8 +205,8 @@ struct S;
197impl Foo for S { 205impl Foo for S {
198 fn bar(&self) {} 206 fn bar(&self) {}
199<|> 207<|>
200}", 208}"#,
201 " 209 r#"
202trait Foo { 210trait Foo {
203 type Output; 211 type Output;
204 212
@@ -215,10 +223,14 @@ impl Foo for S {
215 fn bar(&self) {} 223 fn bar(&self) {}
216 <|>type Output; 224 <|>type Output;
217 const CONST: usize = 42; 225 const CONST: usize = 42;
218 fn foo(&self) { todo!() } 226 fn foo(&self) {
219 fn baz(&self) { todo!() } 227 todo!()
228 }
229 fn baz(&self) {
230 todo!()
231 }
220 232
221}", 233}"#,
222 ); 234 );
223 } 235 }
224 236
@@ -226,7 +238,7 @@ impl Foo for S {
226 fn test_copied_overriden_members() { 238 fn test_copied_overriden_members() {
227 check_assist( 239 check_assist(
228 add_missing_impl_members, 240 add_missing_impl_members,
229 " 241 r#"
230trait Foo { 242trait Foo {
231 fn foo(&self); 243 fn foo(&self);
232 fn bar(&self) -> bool { true } 244 fn bar(&self) -> bool { true }
@@ -238,8 +250,8 @@ struct S;
238impl Foo for S { 250impl Foo for S {
239 fn bar(&self) {} 251 fn bar(&self) {}
240<|> 252<|>
241}", 253}"#,
242 " 254 r#"
243trait Foo { 255trait Foo {
244 fn foo(&self); 256 fn foo(&self);
245 fn bar(&self) -> bool { true } 257 fn bar(&self) -> bool { true }
@@ -250,9 +262,11 @@ struct S;
250 262
251impl Foo for S { 263impl Foo for S {
252 fn bar(&self) {} 264 fn bar(&self) {}
253 <|>fn foo(&self) { todo!() } 265 <|>fn foo(&self) {
266 todo!()
267 }
254 268
255}", 269}"#,
256 ); 270 );
257 } 271 }
258 272
@@ -260,16 +274,18 @@ impl Foo for S {
260 fn test_empty_impl_def() { 274 fn test_empty_impl_def() {
261 check_assist( 275 check_assist(
262 add_missing_impl_members, 276 add_missing_impl_members,
263 " 277 r#"
264trait Foo { fn foo(&self); } 278trait Foo { fn foo(&self); }
265struct S; 279struct S;
266impl Foo for S { <|> }", 280impl Foo for S { <|> }"#,
267 " 281 r#"
268trait Foo { fn foo(&self); } 282trait Foo { fn foo(&self); }
269struct S; 283struct S;
270impl Foo for S { 284impl Foo for S {
271 <|>fn foo(&self) { todo!() } 285 <|>fn foo(&self) {
272}", 286 todo!()
287 }
288}"#,
273 ); 289 );
274 } 290 }
275 291
@@ -277,16 +293,18 @@ impl Foo for S {
277 fn fill_in_type_params_1() { 293 fn fill_in_type_params_1() {
278 check_assist( 294 check_assist(
279 add_missing_impl_members, 295 add_missing_impl_members,
280 " 296 r#"
281trait Foo<T> { fn foo(&self, t: T) -> &T; } 297trait Foo<T> { fn foo(&self, t: T) -> &T; }
282struct S; 298struct S;
283impl Foo<u32> for S { <|> }", 299impl Foo<u32> for S { <|> }"#,
284 " 300 r#"
285trait Foo<T> { fn foo(&self, t: T) -> &T; } 301trait Foo<T> { fn foo(&self, t: T) -> &T; }
286struct S; 302struct S;
287impl Foo<u32> for S { 303impl Foo<u32> for S {
288 <|>fn foo(&self, t: u32) -> &u32 { todo!() } 304 <|>fn foo(&self, t: u32) -> &u32 {
289}", 305 todo!()
306 }
307}"#,
290 ); 308 );
291 } 309 }
292 310
@@ -294,16 +312,18 @@ impl Foo<u32> for S {
294 fn fill_in_type_params_2() { 312 fn fill_in_type_params_2() {
295 check_assist( 313 check_assist(
296 add_missing_impl_members, 314 add_missing_impl_members,
297 " 315 r#"
298trait Foo<T> { fn foo(&self, t: T) -> &T; } 316trait Foo<T> { fn foo(&self, t: T) -> &T; }
299struct S; 317struct S;
300impl<U> Foo<U> for S { <|> }", 318impl<U> Foo<U> for S { <|> }"#,
301 " 319 r#"
302trait Foo<T> { fn foo(&self, t: T) -> &T; } 320trait Foo<T> { fn foo(&self, t: T) -> &T; }
303struct S; 321struct S;
304impl<U> Foo<U> for S { 322impl<U> Foo<U> for S {
305 <|>fn foo(&self, t: U) -> &U { todo!() } 323 <|>fn foo(&self, t: U) -> &U {
306}", 324 todo!()
325 }
326}"#,
307 ); 327 );
308 } 328 }
309 329
@@ -311,16 +331,18 @@ impl<U> Foo<U> for S {
311 fn test_cursor_after_empty_impl_def() { 331 fn test_cursor_after_empty_impl_def() {
312 check_assist( 332 check_assist(
313 add_missing_impl_members, 333 add_missing_impl_members,
314 " 334 r#"
315trait Foo { fn foo(&self); } 335trait Foo { fn foo(&self); }
316struct S; 336struct S;
317impl Foo for S {}<|>", 337impl Foo for S {}<|>"#,
318 " 338 r#"
319trait Foo { fn foo(&self); } 339trait Foo { fn foo(&self); }
320struct S; 340struct S;
321impl Foo for S { 341impl Foo for S {
322 <|>fn foo(&self) { todo!() } 342 <|>fn foo(&self) {
323}", 343 todo!()
344 }
345}"#,
324 ) 346 )
325 } 347 }
326 348
@@ -328,22 +350,24 @@ impl Foo for S {
328 fn test_qualify_path_1() { 350 fn test_qualify_path_1() {
329 check_assist( 351 check_assist(
330 add_missing_impl_members, 352 add_missing_impl_members,
331 " 353 r#"
332mod foo { 354mod foo {
333 pub struct Bar; 355 pub struct Bar;
334 trait Foo { fn foo(&self, bar: Bar); } 356 trait Foo { fn foo(&self, bar: Bar); }
335} 357}
336struct S; 358struct S;
337impl foo::Foo for S { <|> }", 359impl foo::Foo for S { <|> }"#,
338 " 360 r#"
339mod foo { 361mod foo {
340 pub struct Bar; 362 pub struct Bar;
341 trait Foo { fn foo(&self, bar: Bar); } 363 trait Foo { fn foo(&self, bar: Bar); }
342} 364}
343struct S; 365struct S;
344impl foo::Foo for S { 366impl foo::Foo for S {
345 <|>fn foo(&self, bar: foo::Bar) { todo!() } 367 <|>fn foo(&self, bar: foo::Bar) {
346}", 368 todo!()
369 }
370}"#,
347 ); 371 );
348 } 372 }
349 373
@@ -351,22 +375,24 @@ impl foo::Foo for S {
351 fn test_qualify_path_generic() { 375 fn test_qualify_path_generic() {
352 check_assist( 376 check_assist(
353 add_missing_impl_members, 377 add_missing_impl_members,
354 " 378 r#"
355mod foo { 379mod foo {
356 pub struct Bar<T>; 380 pub struct Bar<T>;
357 trait Foo { fn foo(&self, bar: Bar<u32>); } 381 trait Foo { fn foo(&self, bar: Bar<u32>); }
358} 382}
359struct S; 383struct S;
360impl foo::Foo for S { <|> }", 384impl foo::Foo for S { <|> }"#,
361 " 385 r#"
362mod foo { 386mod foo {
363 pub struct Bar<T>; 387 pub struct Bar<T>;
364 trait Foo { fn foo(&self, bar: Bar<u32>); } 388 trait Foo { fn foo(&self, bar: Bar<u32>); }
365} 389}
366struct S; 390struct S;
367impl foo::Foo for S { 391impl foo::Foo for S {
368 <|>fn foo(&self, bar: foo::Bar<u32>) { todo!() } 392 <|>fn foo(&self, bar: foo::Bar<u32>) {
369}", 393 todo!()
394 }
395}"#,
370 ); 396 );
371 } 397 }
372 398
@@ -374,22 +400,24 @@ impl foo::Foo for S {
374 fn test_qualify_path_and_substitute_param() { 400 fn test_qualify_path_and_substitute_param() {
375 check_assist( 401 check_assist(
376 add_missing_impl_members, 402 add_missing_impl_members,
377 " 403 r#"
378mod foo { 404mod foo {
379 pub struct Bar<T>; 405 pub struct Bar<T>;
380 trait Foo<T> { fn foo(&self, bar: Bar<T>); } 406 trait Foo<T> { fn foo(&self, bar: Bar<T>); }
381} 407}
382struct S; 408struct S;
383impl foo::Foo<u32> for S { <|> }", 409impl foo::Foo<u32> for S { <|> }"#,
384 " 410 r#"
385mod foo { 411mod foo {
386 pub struct Bar<T>; 412 pub struct Bar<T>;
387 trait Foo<T> { fn foo(&self, bar: Bar<T>); } 413 trait Foo<T> { fn foo(&self, bar: Bar<T>); }
388} 414}
389struct S; 415struct S;
390impl foo::Foo<u32> for S { 416impl foo::Foo<u32> for S {
391 <|>fn foo(&self, bar: foo::Bar<u32>) { todo!() } 417 <|>fn foo(&self, bar: foo::Bar<u32>) {
392}", 418 todo!()
419 }
420}"#,
393 ); 421 );
394 } 422 }
395 423
@@ -398,15 +426,15 @@ impl foo::Foo<u32> for S {
398 // when substituting params, the substituted param should not be qualified! 426 // when substituting params, the substituted param should not be qualified!
399 check_assist( 427 check_assist(
400 add_missing_impl_members, 428 add_missing_impl_members,
401 " 429 r#"
402mod foo { 430mod foo {
403 trait Foo<T> { fn foo(&self, bar: T); } 431 trait Foo<T> { fn foo(&self, bar: T); }
404 pub struct Param; 432 pub struct Param;
405} 433}
406struct Param; 434struct Param;
407struct S; 435struct S;
408impl foo::Foo<Param> for S { <|> }", 436impl foo::Foo<Param> for S { <|> }"#,
409 " 437 r#"
410mod foo { 438mod foo {
411 trait Foo<T> { fn foo(&self, bar: T); } 439 trait Foo<T> { fn foo(&self, bar: T); }
412 pub struct Param; 440 pub struct Param;
@@ -414,8 +442,10 @@ mod foo {
414struct Param; 442struct Param;
415struct S; 443struct S;
416impl foo::Foo<Param> for S { 444impl foo::Foo<Param> for S {
417 <|>fn foo(&self, bar: Param) { todo!() } 445 <|>fn foo(&self, bar: Param) {
418}", 446 todo!()
447 }
448}"#,
419 ); 449 );
420 } 450 }
421 451
@@ -423,15 +453,15 @@ impl foo::Foo<Param> for S {
423 fn test_qualify_path_associated_item() { 453 fn test_qualify_path_associated_item() {
424 check_assist( 454 check_assist(
425 add_missing_impl_members, 455 add_missing_impl_members,
426 " 456 r#"
427mod foo { 457mod foo {
428 pub struct Bar<T>; 458 pub struct Bar<T>;
429 impl Bar<T> { type Assoc = u32; } 459 impl Bar<T> { type Assoc = u32; }
430 trait Foo { fn foo(&self, bar: Bar<u32>::Assoc); } 460 trait Foo { fn foo(&self, bar: Bar<u32>::Assoc); }
431} 461}
432struct S; 462struct S;
433impl foo::Foo for S { <|> }", 463impl foo::Foo for S { <|> }"#,
434 " 464 r#"
435mod foo { 465mod foo {
436 pub struct Bar<T>; 466 pub struct Bar<T>;
437 impl Bar<T> { type Assoc = u32; } 467 impl Bar<T> { type Assoc = u32; }
@@ -439,8 +469,10 @@ mod foo {
439} 469}
440struct S; 470struct S;
441impl foo::Foo for S { 471impl foo::Foo for S {
442 <|>fn foo(&self, bar: foo::Bar<u32>::Assoc) { todo!() } 472 <|>fn foo(&self, bar: foo::Bar<u32>::Assoc) {
443}", 473 todo!()
474 }
475}"#,
444 ); 476 );
445 } 477 }
446 478
@@ -448,15 +480,15 @@ impl foo::Foo for S {
448 fn test_qualify_path_nested() { 480 fn test_qualify_path_nested() {
449 check_assist( 481 check_assist(
450 add_missing_impl_members, 482 add_missing_impl_members,
451 " 483 r#"
452mod foo { 484mod foo {
453 pub struct Bar<T>; 485 pub struct Bar<T>;
454 pub struct Baz; 486 pub struct Baz;
455 trait Foo { fn foo(&self, bar: Bar<Baz>); } 487 trait Foo { fn foo(&self, bar: Bar<Baz>); }
456} 488}
457struct S; 489struct S;
458impl foo::Foo for S { <|> }", 490impl foo::Foo for S { <|> }"#,
459 " 491 r#"
460mod foo { 492mod foo {
461 pub struct Bar<T>; 493 pub struct Bar<T>;
462 pub struct Baz; 494 pub struct Baz;
@@ -464,8 +496,10 @@ mod foo {
464} 496}
465struct S; 497struct S;
466impl foo::Foo for S { 498impl foo::Foo for S {
467 <|>fn foo(&self, bar: foo::Bar<foo::Baz>) { todo!() } 499 <|>fn foo(&self, bar: foo::Bar<foo::Baz>) {
468}", 500 todo!()
501 }
502}"#,
469 ); 503 );
470 } 504 }
471 505
@@ -473,22 +507,24 @@ impl foo::Foo for S {
473 fn test_qualify_path_fn_trait_notation() { 507 fn test_qualify_path_fn_trait_notation() {
474 check_assist( 508 check_assist(
475 add_missing_impl_members, 509 add_missing_impl_members,
476 " 510 r#"
477mod foo { 511mod foo {
478 pub trait Fn<Args> { type Output; } 512 pub trait Fn<Args> { type Output; }
479 trait Foo { fn foo(&self, bar: dyn Fn(u32) -> i32); } 513 trait Foo { fn foo(&self, bar: dyn Fn(u32) -> i32); }
480} 514}
481struct S; 515struct S;
482impl foo::Foo for S { <|> }", 516impl foo::Foo for S { <|> }"#,
483 " 517 r#"
484mod foo { 518mod foo {
485 pub trait Fn<Args> { type Output; } 519 pub trait Fn<Args> { type Output; }
486 trait Foo { fn foo(&self, bar: dyn Fn(u32) -> i32); } 520 trait Foo { fn foo(&self, bar: dyn Fn(u32) -> i32); }
487} 521}
488struct S; 522struct S;
489impl foo::Foo for S { 523impl foo::Foo for S {
490 <|>fn foo(&self, bar: dyn Fn(u32) -> i32) { todo!() } 524 <|>fn foo(&self, bar: dyn Fn(u32) -> i32) {
491}", 525 todo!()
526 }
527}"#,
492 ); 528 );
493 } 529 }
494 530
@@ -496,10 +532,10 @@ impl foo::Foo for S {
496 fn test_empty_trait() { 532 fn test_empty_trait() {
497 check_assist_not_applicable( 533 check_assist_not_applicable(
498 add_missing_impl_members, 534 add_missing_impl_members,
499 " 535 r#"
500trait Foo; 536trait Foo;
501struct S; 537struct S;
502impl Foo for S { <|> }", 538impl Foo for S { <|> }"#,
503 ) 539 )
504 } 540 }
505 541
@@ -507,13 +543,13 @@ impl Foo for S { <|> }",
507 fn test_ignore_unnamed_trait_members_and_default_methods() { 543 fn test_ignore_unnamed_trait_members_and_default_methods() {
508 check_assist_not_applicable( 544 check_assist_not_applicable(
509 add_missing_impl_members, 545 add_missing_impl_members,
510 " 546 r#"
511trait Foo { 547trait Foo {
512 fn (arg: u32); 548 fn (arg: u32);
513 fn valid(some: u32) -> bool { false } 549 fn valid(some: u32) -> bool { false }
514} 550}
515struct S; 551struct S;
516impl Foo for S { <|> }", 552impl Foo for S { <|> }"#,
517 ) 553 )
518 } 554 }
519 555
@@ -544,7 +580,9 @@ trait Foo {
544struct S; 580struct S;
545impl Foo for S { 581impl Foo for S {
546 <|>type Output; 582 <|>type Output;
547 fn foo(&self) { todo!() } 583 fn foo(&self) {
584 todo!()
585 }
548}"#, 586}"#,
549 ) 587 )
550 } 588 }
@@ -553,7 +591,7 @@ impl Foo for S {
553 fn test_default_methods() { 591 fn test_default_methods() {
554 check_assist( 592 check_assist(
555 add_missing_default_members, 593 add_missing_default_members,
556 " 594 r#"
557trait Foo { 595trait Foo {
558 type Output; 596 type Output;
559 597
@@ -563,8 +601,8 @@ trait Foo {
563 fn foo(some: u32) -> bool; 601 fn foo(some: u32) -> bool;
564} 602}
565struct S; 603struct S;
566impl Foo for S { <|> }", 604impl Foo for S { <|> }"#,
567 " 605 r#"
568trait Foo { 606trait Foo {
569 type Output; 607 type Output;
570 608
@@ -576,7 +614,7 @@ trait Foo {
576struct S; 614struct S;
577impl Foo for S { 615impl Foo for S {
578 <|>fn valid(some: u32) -> bool { false } 616 <|>fn valid(some: u32) -> bool { false }
579}", 617}"#,
580 ) 618 )
581 } 619 }
582} 620}
diff --git a/crates/ra_assists/src/handlers/early_return.rs b/crates/ra_assists/src/handlers/early_return.rs
index ea6c56f8c..eede2fe91 100644
--- a/crates/ra_assists/src/handlers/early_return.rs
+++ b/crates/ra_assists/src/handlers/early_return.rs
@@ -2,7 +2,7 @@ use std::{iter::once, ops::RangeInclusive};
2 2
3use ra_syntax::{ 3use ra_syntax::{
4 algo::replace_children, 4 algo::replace_children,
5 ast::{self, edit::IndentLevel, make, Block, Pat::TupleStructPat}, 5 ast::{self, edit::IndentLevel, make},
6 AstNode, 6 AstNode,
7 SyntaxKind::{FN_DEF, LOOP_EXPR, L_CURLY, R_CURLY, WHILE_EXPR, WHITESPACE}, 7 SyntaxKind::{FN_DEF, LOOP_EXPR, L_CURLY, R_CURLY, WHILE_EXPR, WHITESPACE},
8 SyntaxNode, 8 SyntaxNode,
@@ -47,7 +47,7 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> {
47 // Check if there is an IfLet that we can handle. 47 // Check if there is an IfLet that we can handle.
48 let if_let_pat = match cond.pat() { 48 let if_let_pat = match cond.pat() {
49 None => None, // No IfLet, supported. 49 None => None, // No IfLet, supported.
50 Some(TupleStructPat(pat)) if pat.args().count() == 1 => { 50 Some(ast::Pat::TupleStructPat(pat)) if pat.args().count() == 1 => {
51 let path = pat.path()?; 51 let path = pat.path()?;
52 match path.qualifier() { 52 match path.qualifier() {
53 None => { 53 None => {
@@ -61,9 +61,9 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> {
61 }; 61 };
62 62
63 let cond_expr = cond.expr()?; 63 let cond_expr = cond.expr()?;
64 let then_block = if_expr.then_branch()?.block()?; 64 let then_block = if_expr.then_branch()?;
65 65
66 let parent_block = if_expr.syntax().parent()?.ancestors().find_map(ast::Block::cast)?; 66 let parent_block = if_expr.syntax().parent()?.ancestors().find_map(ast::BlockExpr::cast)?;
67 67
68 if parent_block.expr()? != if_expr.clone().into() { 68 if parent_block.expr()? != if_expr.clone().into() {
69 return None; 69 return None;
@@ -80,7 +80,7 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> {
80 return None; 80 return None;
81 } 81 }
82 82
83 let parent_container = parent_block.syntax().parent()?.parent()?; 83 let parent_container = parent_block.syntax().parent()?;
84 84
85 let early_expression: ast::Expr = match parent_container.kind() { 85 let early_expression: ast::Expr = match parent_container.kind() {
86 WHILE_EXPR | LOOP_EXPR => make::expr_continue(), 86 WHILE_EXPR | LOOP_EXPR => make::expr_continue(),
@@ -144,13 +144,13 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> {
144 } 144 }
145 }; 145 };
146 edit.target(if_expr.syntax().text_range()); 146 edit.target(if_expr.syntax().text_range());
147 edit.replace_ast(parent_block, ast::Block::cast(new_block).unwrap()); 147 edit.replace_ast(parent_block, ast::BlockExpr::cast(new_block).unwrap());
148 edit.set_cursor(cursor_position); 148 edit.set_cursor(cursor_position);
149 149
150 fn replace( 150 fn replace(
151 new_expr: &SyntaxNode, 151 new_expr: &SyntaxNode,
152 then_block: &Block, 152 then_block: &ast::BlockExpr,
153 parent_block: &Block, 153 parent_block: &ast::BlockExpr,
154 if_expr: &ast::IfExpr, 154 if_expr: &ast::IfExpr,
155 ) -> SyntaxNode { 155 ) -> SyntaxNode {
156 let then_block_items = IndentLevel::from(1).decrease_indent(then_block.clone()); 156 let then_block_items = IndentLevel::from(1).decrease_indent(then_block.clone());
diff --git a/crates/ra_assists/src/handlers/inline_local_variable.rs b/crates/ra_assists/src/handlers/inline_local_variable.rs
index f5702f6e0..60ec536a7 100644
--- a/crates/ra_assists/src/handlers/inline_local_variable.rs
+++ b/crates/ra_assists/src/handlers/inline_local_variable.rs
@@ -89,6 +89,7 @@ pub(crate) fn inline_local_variable(ctx: AssistCtx) -> Option<Assist> {
89 | (ast::Expr::ParenExpr(_), _) 89 | (ast::Expr::ParenExpr(_), _)
90 | (ast::Expr::PathExpr(_), _) 90 | (ast::Expr::PathExpr(_), _)
91 | (ast::Expr::BlockExpr(_), _) 91 | (ast::Expr::BlockExpr(_), _)
92 | (ast::Expr::EffectExpr(_), _)
92 | (_, ast::Expr::CallExpr(_)) 93 | (_, ast::Expr::CallExpr(_))
93 | (_, ast::Expr::TupleExpr(_)) 94 | (_, ast::Expr::TupleExpr(_))
94 | (_, ast::Expr::ArrayExpr(_)) 95 | (_, ast::Expr::ArrayExpr(_))
diff --git a/crates/ra_assists/src/handlers/introduce_variable.rs b/crates/ra_assists/src/handlers/introduce_variable.rs
index eda9ac296..39c656305 100644
--- a/crates/ra_assists/src/handlers/introduce_variable.rs
+++ b/crates/ra_assists/src/handlers/introduce_variable.rs
@@ -111,7 +111,7 @@ fn valid_target_expr(node: SyntaxNode) -> Option<ast::Expr> {
111/// expression like a lambda or match arm. 111/// expression like a lambda or match arm.
112fn anchor_stmt(expr: ast::Expr) -> Option<(SyntaxNode, bool)> { 112fn anchor_stmt(expr: ast::Expr) -> Option<(SyntaxNode, bool)> {
113 expr.syntax().ancestors().find_map(|node| { 113 expr.syntax().ancestors().find_map(|node| {
114 if let Some(expr) = node.parent().and_then(ast::Block::cast).and_then(|it| it.expr()) { 114 if let Some(expr) = node.parent().and_then(ast::BlockExpr::cast).and_then(|it| it.expr()) {
115 if expr.syntax() == &node { 115 if expr.syntax() == &node {
116 tested_by!(test_introduce_var_last_expr); 116 tested_by!(test_introduce_var_last_expr);
117 return Some((node, false)); 117 return Some((node, false));
diff --git a/crates/ra_assists/src/handlers/move_guard.rs b/crates/ra_assists/src/handlers/move_guard.rs
index d5ccdd91c..b084dd9ee 100644
--- a/crates/ra_assists/src/handlers/move_guard.rs
+++ b/crates/ra_assists/src/handlers/move_guard.rs
@@ -113,9 +113,9 @@ pub(crate) fn move_arm_cond_to_match_guard(ctx: AssistCtx) -> Option<Assist> {
113 "Move condition to match guard", 113 "Move condition to match guard",
114 |edit| { 114 |edit| {
115 edit.target(if_expr.syntax().text_range()); 115 edit.target(if_expr.syntax().text_range());
116 let then_only_expr = then_block.block().and_then(|it| it.statements().next()).is_none(); 116 let then_only_expr = then_block.statements().next().is_none();
117 117
118 match &then_block.block().and_then(|it| it.expr()) { 118 match &then_block.expr() {
119 Some(then_expr) if then_only_expr => { 119 Some(then_expr) if then_only_expr => {
120 edit.replace(if_expr.syntax().text_range(), then_expr.syntax().text()) 120 edit.replace(if_expr.syntax().text_range(), then_expr.syntax().text())
121 } 121 }
diff --git a/crates/ra_assists/src/handlers/replace_if_let_with_match.rs b/crates/ra_assists/src/handlers/replace_if_let_with_match.rs
index 0a0a88f3d..9841f6980 100644
--- a/crates/ra_assists/src/handlers/replace_if_let_with_match.rs
+++ b/crates/ra_assists/src/handlers/replace_if_let_with_match.rs
@@ -1,11 +1,10 @@
1use ra_fmt::unwrap_trivial_block; 1use ra_fmt::unwrap_trivial_block;
2use ra_syntax::{ 2use ra_syntax::{
3 ast::{self, make}, 3 ast::{self, edit::IndentLevel, make},
4 AstNode, 4 AstNode,
5}; 5};
6 6
7use crate::{Assist, AssistCtx, AssistId}; 7use crate::{utils::TryEnum, Assist, AssistCtx, AssistId};
8use ast::edit::IndentLevel;
9 8
10// Assist: replace_if_let_with_match 9// Assist: replace_if_let_with_match
11// 10//
@@ -44,15 +43,21 @@ pub(crate) fn replace_if_let_with_match(ctx: AssistCtx) -> Option<Assist> {
44 ast::ElseBranch::IfExpr(_) => return None, 43 ast::ElseBranch::IfExpr(_) => return None,
45 }; 44 };
46 45
47 ctx.add_assist(AssistId("replace_if_let_with_match"), "Replace with match", |edit| { 46 let sema = ctx.sema;
47 ctx.add_assist(AssistId("replace_if_let_with_match"), "Replace with match", move |edit| {
48 let match_expr = { 48 let match_expr = {
49 let then_arm = { 49 let then_arm = {
50 let then_expr = unwrap_trivial_block(then_block); 50 let then_expr = unwrap_trivial_block(then_block);
51 make::match_arm(vec![pat], then_expr) 51 make::match_arm(vec![pat.clone()], then_expr)
52 }; 52 };
53 let else_arm = { 53 let else_arm = {
54 let pattern = sema
55 .type_of_pat(&pat)
56 .and_then(|ty| TryEnum::from_ty(sema, &ty))
57 .map(|it| it.sad_pattern())
58 .unwrap_or_else(|| make::placeholder_pat().into());
54 let else_expr = unwrap_trivial_block(else_block); 59 let else_expr = unwrap_trivial_block(else_block);
55 make::match_arm(vec![make::placeholder_pat().into()], else_expr) 60 make::match_arm(vec![pattern], else_expr)
56 }; 61 };
57 make::expr_match(expr, make::match_arm_list(vec![then_arm, else_arm])) 62 make::expr_match(expr, make::match_arm_list(vec![then_arm, else_arm]))
58 }; 63 };
@@ -68,6 +73,7 @@ pub(crate) fn replace_if_let_with_match(ctx: AssistCtx) -> Option<Assist> {
68#[cfg(test)] 73#[cfg(test)]
69mod tests { 74mod tests {
70 use super::*; 75 use super::*;
76
71 use crate::helpers::{check_assist, check_assist_target}; 77 use crate::helpers::{check_assist, check_assist_target};
72 78
73 #[test] 79 #[test]
@@ -145,4 +151,64 @@ impl VariantData {
145 }", 151 }",
146 ); 152 );
147 } 153 }
154
155 #[test]
156 fn special_case_option() {
157 check_assist(
158 replace_if_let_with_match,
159 r#"
160enum Option<T> { Some(T), None }
161use Option::*;
162
163fn foo(x: Option<i32>) {
164 <|>if let Some(x) = x {
165 println!("{}", x)
166 } else {
167 println!("none")
168 }
169}
170 "#,
171 r#"
172enum Option<T> { Some(T), None }
173use Option::*;
174
175fn foo(x: Option<i32>) {
176 <|>match x {
177 Some(x) => println!("{}", x),
178 None => println!("none"),
179 }
180}
181 "#,
182 );
183 }
184
185 #[test]
186 fn special_case_result() {
187 check_assist(
188 replace_if_let_with_match,
189 r#"
190enum Result<T, E> { Ok(T), Err(E) }
191use Result::*;
192
193fn foo(x: Result<i32, ()>) {
194 <|>if let Ok(x) = x {
195 println!("{}", x)
196 } else {
197 println!("none")
198 }
199}
200 "#,
201 r#"
202enum Result<T, E> { Ok(T), Err(E) }
203use Result::*;
204
205fn foo(x: Result<i32, ()>) {
206 <|>match x {
207 Ok(x) => println!("{}", x),
208 Err(_) => println!("none"),
209 }
210}
211 "#,
212 );
213 }
148} 214}
diff --git a/crates/ra_assists/src/handlers/replace_let_with_if_let.rs b/crates/ra_assists/src/handlers/replace_let_with_if_let.rs
index bdbaae389..0cf23b754 100644
--- a/crates/ra_assists/src/handlers/replace_let_with_if_let.rs
+++ b/crates/ra_assists/src/handlers/replace_let_with_if_let.rs
@@ -1,6 +1,5 @@
1use std::iter::once; 1use std::iter::once;
2 2
3use hir::Adt;
4use ra_syntax::{ 3use ra_syntax::{
5 ast::{ 4 ast::{
6 self, 5 self,
@@ -12,6 +11,7 @@ use ra_syntax::{
12 11
13use crate::{ 12use crate::{
14 assist_ctx::{Assist, AssistCtx}, 13 assist_ctx::{Assist, AssistCtx},
14 utils::TryEnum,
15 AssistId, 15 AssistId,
16}; 16};
17 17
@@ -45,20 +45,10 @@ pub(crate) fn replace_let_with_if_let(ctx: AssistCtx) -> Option<Assist> {
45 let init = let_stmt.initializer()?; 45 let init = let_stmt.initializer()?;
46 let original_pat = let_stmt.pat()?; 46 let original_pat = let_stmt.pat()?;
47 let ty = ctx.sema.type_of_expr(&init)?; 47 let ty = ctx.sema.type_of_expr(&init)?;
48 let enum_ = match ty.as_adt() { 48 let happy_variant = TryEnum::from_ty(ctx.sema, &ty).map(|it| it.happy_case());
49 Some(Adt::Enum(it)) => it,
50 _ => return None,
51 };
52 let happy_case =
53 [("Result", "Ok"), ("Option", "Some")].iter().find_map(|(known_type, happy_case)| {
54 if &enum_.name(ctx.db).to_string() == known_type {
55 return Some(happy_case);
56 }
57 None
58 });
59 49
60 ctx.add_assist(AssistId("replace_let_with_if_let"), "Replace with if-let", |edit| { 50 ctx.add_assist(AssistId("replace_let_with_if_let"), "Replace with if-let", |edit| {
61 let with_placeholder: ast::Pat = match happy_case { 51 let with_placeholder: ast::Pat = match happy_variant {
62 None => make::placeholder_pat().into(), 52 None => make::placeholder_pat().into(),
63 Some(var_name) => make::tuple_struct_pat( 53 Some(var_name) => make::tuple_struct_pat(
64 make::path_unqualified(make::path_segment(make::name_ref(var_name))), 54 make::path_unqualified(make::path_segment(make::name_ref(var_name))),
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 2f02df303..918e8dd8d 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
@@ -27,7 +27,7 @@ pub(crate) fn replace_qualified_name_with_use(ctx: AssistCtx) -> Option<Assist>
27 return None; 27 return None;
28 } 28 }
29 29
30 let hir_path = hir::Path::from_ast(path.clone())?; 30 let hir_path = ctx.sema.lower_path(&path)?;
31 let segments = collect_hir_path_segments(&hir_path)?; 31 let segments = collect_hir_path_segments(&hir_path)?;
32 if segments.len() < 2 { 32 if segments.len() < 2 {
33 return None; 33 return None;
diff --git a/crates/ra_assists/src/handlers/replace_unwrap_with_match.rs b/crates/ra_assists/src/handlers/replace_unwrap_with_match.rs
index 62cb7a763..62d4ea522 100644
--- a/crates/ra_assists/src/handlers/replace_unwrap_with_match.rs
+++ b/crates/ra_assists/src/handlers/replace_unwrap_with_match.rs
@@ -1,12 +1,11 @@
1use std::iter; 1use std::iter;
2 2
3use ra_syntax::{ 3use ra_syntax::{
4 ast::{self, make}, 4 ast::{self, edit::IndentLevel, make},
5 AstNode, 5 AstNode,
6}; 6};
7 7
8use crate::{Assist, AssistCtx, AssistId}; 8use crate::{utils::TryEnum, Assist, AssistCtx, AssistId};
9use ast::edit::IndentLevel;
10 9
11// Assist: replace_unwrap_with_match 10// Assist: replace_unwrap_with_match
12// 11//
@@ -38,42 +37,27 @@ pub(crate) fn replace_unwrap_with_match(ctx: AssistCtx) -> Option<Assist> {
38 } 37 }
39 let caller = method_call.expr()?; 38 let caller = method_call.expr()?;
40 let ty = ctx.sema.type_of_expr(&caller)?; 39 let ty = ctx.sema.type_of_expr(&caller)?;
40 let happy_variant = TryEnum::from_ty(ctx.sema, &ty)?.happy_case();
41 41
42 let type_name = ty.as_adt()?.name(ctx.sema.db).to_string(); 42 ctx.add_assist(AssistId("replace_unwrap_with_match"), "Replace unwrap with match", |edit| {
43 let ok_path = make::path_unqualified(make::path_segment(make::name_ref(happy_variant)));
44 let it = make::bind_pat(make::name("a")).into();
45 let ok_tuple = make::tuple_struct_pat(ok_path, iter::once(it)).into();
43 46
44 for (unwrap_type, variant_name) in [("Result", "Ok"), ("Option", "Some")].iter() { 47 let bind_path = make::path_unqualified(make::path_segment(make::name_ref("a")));
45 if &type_name == unwrap_type { 48 let ok_arm = make::match_arm(iter::once(ok_tuple), make::expr_path(bind_path));
46 return ctx.add_assist(
47 AssistId("replace_unwrap_with_match"),
48 "Replace unwrap with match",
49 |edit| {
50 let ok_path =
51 make::path_unqualified(make::path_segment(make::name_ref(variant_name)));
52 let it = make::bind_pat(make::name("a")).into();
53 let ok_tuple = make::tuple_struct_pat(ok_path, iter::once(it)).into();
54 49
55 let bind_path = make::path_unqualified(make::path_segment(make::name_ref("a"))); 50 let unreachable_call = make::unreachable_macro_call().into();
56 let ok_arm = make::match_arm(iter::once(ok_tuple), make::expr_path(bind_path)); 51 let err_arm = make::match_arm(iter::once(make::placeholder_pat().into()), unreachable_call);
57 52
58 let unreachable_call = make::unreachable_macro_call().into(); 53 let match_arm_list = make::match_arm_list(vec![ok_arm, err_arm]);
59 let err_arm = make::match_arm( 54 let match_expr = make::expr_match(caller.clone(), match_arm_list);
60 iter::once(make::placeholder_pat().into()), 55 let match_expr = IndentLevel::from_node(method_call.syntax()).increase_indent(match_expr);
61 unreachable_call,
62 );
63 56
64 let match_arm_list = make::match_arm_list(vec![ok_arm, err_arm]); 57 edit.target(method_call.syntax().text_range());
65 let match_expr = make::expr_match(caller.clone(), match_arm_list); 58 edit.set_cursor(caller.syntax().text_range().start());
66 let match_expr = 59 edit.replace_ast::<ast::Expr>(method_call.into(), match_expr);
67 IndentLevel::from_node(method_call.syntax()).increase_indent(match_expr); 60 })
68
69 edit.target(method_call.syntax().text_range());
70 edit.set_cursor(caller.syntax().text_range().start());
71 edit.replace_ast::<ast::Expr>(method_call.into(), match_expr);
72 },
73 );
74 }
75 }
76 None
77} 61}
78 62
79#[cfg(test)] 63#[cfg(test)]
diff --git a/crates/ra_assists/src/handlers/unwrap_block.rs b/crates/ra_assists/src/handlers/unwrap_block.rs
new file mode 100644
index 000000000..58649c47e
--- /dev/null
+++ b/crates/ra_assists/src/handlers/unwrap_block.rs
@@ -0,0 +1,348 @@
1use crate::{Assist, AssistCtx, AssistId};
2
3use ast::{BlockExpr, Expr, ForExpr, IfExpr, LoopBodyOwner, LoopExpr, WhileExpr};
4use ra_fmt::unwrap_trivial_block;
5use ra_syntax::{ast, AstNode, TextRange, T};
6
7// Assist: unwrap_block
8//
9// This assist removes if...else, for, while and loop control statements to just keep the body.
10//
11// ```
12// fn foo() {
13// if true {<|>
14// println!("foo");
15// }
16// }
17// ```
18// ->
19// ```
20// fn foo() {
21// println!("foo");
22// }
23// ```
24pub(crate) fn unwrap_block(ctx: AssistCtx) -> Option<Assist> {
25 let l_curly_token = ctx.find_token_at_offset(T!['{'])?;
26
27 let res = if let Some(if_expr) = l_curly_token.ancestors().find_map(IfExpr::cast) {
28 // if expression
29 let expr_to_unwrap = if_expr.blocks().find_map(|expr| extract_expr(ctx.frange.range, expr));
30 let expr_to_unwrap = expr_to_unwrap?;
31 // Find if we are in a else if block
32 let ancestor = if_expr.syntax().ancestors().skip(1).find_map(ast::IfExpr::cast);
33
34 if let Some(ancestor) = ancestor {
35 Some((ast::Expr::IfExpr(ancestor), expr_to_unwrap))
36 } else {
37 Some((ast::Expr::IfExpr(if_expr), expr_to_unwrap))
38 }
39 } else if let Some(for_expr) = l_curly_token.ancestors().find_map(ForExpr::cast) {
40 // for expression
41 let block_expr = for_expr.loop_body()?;
42 extract_expr(ctx.frange.range, block_expr)
43 .map(|expr_to_unwrap| (ast::Expr::ForExpr(for_expr), expr_to_unwrap))
44 } else if let Some(while_expr) = l_curly_token.ancestors().find_map(WhileExpr::cast) {
45 // while expression
46 let block_expr = while_expr.loop_body()?;
47 extract_expr(ctx.frange.range, block_expr)
48 .map(|expr_to_unwrap| (ast::Expr::WhileExpr(while_expr), expr_to_unwrap))
49 } else if let Some(loop_expr) = l_curly_token.ancestors().find_map(LoopExpr::cast) {
50 // loop expression
51 let block_expr = loop_expr.loop_body()?;
52 extract_expr(ctx.frange.range, block_expr)
53 .map(|expr_to_unwrap| (ast::Expr::LoopExpr(loop_expr), expr_to_unwrap))
54 } else {
55 None
56 };
57
58 let (expr, expr_to_unwrap) = res?;
59 ctx.add_assist(AssistId("unwrap_block"), "Unwrap block", |edit| {
60 edit.set_cursor(expr.syntax().text_range().start());
61 edit.target(expr_to_unwrap.syntax().text_range());
62
63 let pat_start: &[_] = &[' ', '{', '\n'];
64 let expr_to_unwrap = expr_to_unwrap.to_string();
65 let expr_string = expr_to_unwrap.trim_start_matches(pat_start);
66 let mut expr_string_lines: Vec<&str> = expr_string.lines().collect();
67 expr_string_lines.pop(); // Delete last line
68
69 let expr_string = expr_string_lines
70 .into_iter()
71 .map(|line| line.replacen(" ", "", 1)) // Delete indentation
72 .collect::<Vec<String>>()
73 .join("\n");
74
75 edit.replace(expr.syntax().text_range(), expr_string);
76 })
77}
78
79fn extract_expr(cursor_range: TextRange, block: BlockExpr) -> Option<Expr> {
80 let cursor_in_range = block.l_curly_token()?.text_range().contains_range(cursor_range);
81
82 if cursor_in_range {
83 Some(unwrap_trivial_block(block))
84 } else {
85 None
86 }
87}
88
89#[cfg(test)]
90mod tests {
91 use crate::helpers::{check_assist, check_assist_not_applicable};
92
93 use super::*;
94
95 #[test]
96 fn simple_if() {
97 check_assist(
98 unwrap_block,
99 r#"
100 fn main() {
101 bar();
102 if true {<|>
103 foo();
104
105 //comment
106 bar();
107 } else {
108 println!("bar");
109 }
110 }
111 "#,
112 r#"
113 fn main() {
114 bar();
115 <|>foo();
116
117 //comment
118 bar();
119 }
120 "#,
121 );
122 }
123
124 #[test]
125 fn simple_if_else() {
126 check_assist(
127 unwrap_block,
128 r#"
129 fn main() {
130 bar();
131 if true {
132 foo();
133
134 //comment
135 bar();
136 } else {<|>
137 println!("bar");
138 }
139 }
140 "#,
141 r#"
142 fn main() {
143 bar();
144 <|>println!("bar");
145 }
146 "#,
147 );
148 }
149
150 #[test]
151 fn simple_if_else_if() {
152 check_assist(
153 unwrap_block,
154 r#"
155 fn main() {
156 //bar();
157 if true {
158 println!("true");
159
160 //comment
161 //bar();
162 } else if false {<|>
163 println!("bar");
164 } else {
165 println!("foo");
166 }
167 }
168 "#,
169 r#"
170 fn main() {
171 //bar();
172 <|>println!("bar");
173 }
174 "#,
175 );
176 }
177
178 #[test]
179 fn simple_if_bad_cursor_position() {
180 check_assist_not_applicable(
181 unwrap_block,
182 r#"
183 fn main() {
184 bar();<|>
185 if true {
186 foo();
187
188 //comment
189 bar();
190 } else {
191 println!("bar");
192 }
193 }
194 "#,
195 );
196 }
197
198 #[test]
199 fn simple_for() {
200 check_assist(
201 unwrap_block,
202 r#"
203 fn main() {
204 for i in 0..5 {<|>
205 if true {
206 foo();
207
208 //comment
209 bar();
210 } else {
211 println!("bar");
212 }
213 }
214 }
215 "#,
216 r#"
217 fn main() {
218 <|>if true {
219 foo();
220
221 //comment
222 bar();
223 } else {
224 println!("bar");
225 }
226 }
227 "#,
228 );
229 }
230
231 #[test]
232 fn simple_if_in_for() {
233 check_assist(
234 unwrap_block,
235 r#"
236 fn main() {
237 for i in 0..5 {
238 if true {<|>
239 foo();
240
241 //comment
242 bar();
243 } else {
244 println!("bar");
245 }
246 }
247 }
248 "#,
249 r#"
250 fn main() {
251 for i in 0..5 {
252 <|>foo();
253
254 //comment
255 bar();
256 }
257 }
258 "#,
259 );
260 }
261
262 #[test]
263 fn simple_loop() {
264 check_assist(
265 unwrap_block,
266 r#"
267 fn main() {
268 loop {<|>
269 if true {
270 foo();
271
272 //comment
273 bar();
274 } else {
275 println!("bar");
276 }
277 }
278 }
279 "#,
280 r#"
281 fn main() {
282 <|>if true {
283 foo();
284
285 //comment
286 bar();
287 } else {
288 println!("bar");
289 }
290 }
291 "#,
292 );
293 }
294
295 #[test]
296 fn simple_while() {
297 check_assist(
298 unwrap_block,
299 r#"
300 fn main() {
301 while true {<|>
302 if true {
303 foo();
304
305 //comment
306 bar();
307 } else {
308 println!("bar");
309 }
310 }
311 }
312 "#,
313 r#"
314 fn main() {
315 <|>if true {
316 foo();
317
318 //comment
319 bar();
320 } else {
321 println!("bar");
322 }
323 }
324 "#,
325 );
326 }
327
328 #[test]
329 fn simple_if_in_while_bad_cursor_position() {
330 check_assist_not_applicable(
331 unwrap_block,
332 r#"
333 fn main() {
334 while true {
335 if true {
336 foo();<|>
337
338 //comment
339 bar();
340 } else {
341 println!("bar");
342 }
343 }
344 }
345 "#,
346 );
347 }
348}
diff --git a/crates/ra_assists/src/lib.rs b/crates/ra_assists/src/lib.rs
index 64bd87afb..c5df86600 100644
--- a/crates/ra_assists/src/lib.rs
+++ b/crates/ra_assists/src/lib.rs
@@ -143,6 +143,7 @@ mod handlers {
143 mod split_import; 143 mod split_import;
144 mod add_from_impl_for_enum; 144 mod add_from_impl_for_enum;
145 mod reorder_fields; 145 mod reorder_fields;
146 mod unwrap_block;
146 147
147 pub(crate) fn all() -> &'static [AssistHandler] { 148 pub(crate) fn all() -> &'static [AssistHandler] {
148 &[ 149 &[
@@ -181,6 +182,7 @@ mod handlers {
181 replace_unwrap_with_match::replace_unwrap_with_match, 182 replace_unwrap_with_match::replace_unwrap_with_match,
182 split_import::split_import, 183 split_import::split_import,
183 add_from_impl_for_enum::add_from_impl_for_enum, 184 add_from_impl_for_enum::add_from_impl_for_enum,
185 unwrap_block::unwrap_block,
184 // These are manually sorted for better priorities 186 // These are manually sorted for better priorities
185 add_missing_impl_members::add_missing_impl_members, 187 add_missing_impl_members::add_missing_impl_members,
186 add_missing_impl_members::add_missing_default_members, 188 add_missing_impl_members::add_missing_default_members,
diff --git a/crates/ra_assists/src/marks.rs b/crates/ra_assists/src/marks.rs
index 6c2a2b8b6..8d910205f 100644
--- a/crates/ra_assists/src/marks.rs
+++ b/crates/ra_assists/src/marks.rs
@@ -8,4 +8,5 @@ test_utils::marks![
8 test_not_inline_mut_variable 8 test_not_inline_mut_variable
9 test_not_applicable_if_variable_unused 9 test_not_applicable_if_variable_unused
10 change_visibility_field_false_positive 10 change_visibility_field_false_positive
11 test_add_from_impl_already_exists
11]; 12];
diff --git a/crates/ra_assists/src/utils.rs b/crates/ra_assists/src/utils.rs
index 3d6c59bda..efd988697 100644
--- a/crates/ra_assists/src/utils.rs
+++ b/crates/ra_assists/src/utils.rs
@@ -1,7 +1,9 @@
1//! Assorted functions shared by several assists. 1//! Assorted functions shared by several assists.
2pub(crate) mod insert_use; 2pub(crate) mod insert_use;
3 3
4use hir::Semantics; 4use std::iter;
5
6use hir::{Adt, Crate, Semantics, Trait, Type};
5use ra_ide_db::RootDatabase; 7use ra_ide_db::RootDatabase;
6use ra_syntax::{ 8use ra_syntax::{
7 ast::{self, make, NameOwner}, 9 ast::{self, make, NameOwner},
@@ -99,3 +101,109 @@ fn invert_special_case(expr: &ast::Expr) -> Option<ast::Expr> {
99 _ => None, 101 _ => None,
100 } 102 }
101} 103}
104
105#[derive(Clone, Copy)]
106pub(crate) enum TryEnum {
107 Result,
108 Option,
109}
110
111impl TryEnum {
112 const ALL: [TryEnum; 2] = [TryEnum::Option, TryEnum::Result];
113
114 pub(crate) fn from_ty(sema: &Semantics<RootDatabase>, ty: &Type) -> Option<TryEnum> {
115 let enum_ = match ty.as_adt() {
116 Some(Adt::Enum(it)) => it,
117 _ => return None,
118 };
119 TryEnum::ALL.iter().find_map(|&var| {
120 if &enum_.name(sema.db).to_string() == var.type_name() {
121 return Some(var);
122 }
123 None
124 })
125 }
126
127 pub(crate) fn happy_case(self) -> &'static str {
128 match self {
129 TryEnum::Result => "Ok",
130 TryEnum::Option => "Some",
131 }
132 }
133
134 pub(crate) fn sad_pattern(self) -> ast::Pat {
135 match self {
136 TryEnum::Result => make::tuple_struct_pat(
137 make::path_unqualified(make::path_segment(make::name_ref("Err"))),
138 iter::once(make::placeholder_pat().into()),
139 )
140 .into(),
141 TryEnum::Option => make::bind_pat(make::name("None")).into(),
142 }
143 }
144
145 fn type_name(self) -> &'static str {
146 match self {
147 TryEnum::Result => "Result",
148 TryEnum::Option => "Option",
149 }
150 }
151}
152
153/// Helps with finding well-know things inside the standard library. This is
154/// somewhat similar to the known paths infra inside hir, but it different; We
155/// want to make sure that IDE specific paths don't become interesting inside
156/// the compiler itself as well.
157pub(crate) struct FamousDefs<'a, 'b>(pub(crate) &'a Semantics<'b, RootDatabase>, pub(crate) Crate);
158
159#[allow(non_snake_case)]
160impl FamousDefs<'_, '_> {
161 #[cfg(test)]
162 pub(crate) const FIXTURE: &'static str = r#"
163//- /libcore.rs crate:core
164pub mod convert{
165 pub trait From<T> {
166 fn from(T) -> Self;
167 }
168}
169
170pub mod prelude { pub use crate::convert::From }
171#[prelude_import]
172pub use prelude::*;
173"#;
174
175 pub(crate) fn core_convert_From(&self) -> Option<Trait> {
176 self.find_trait("core:convert:From")
177 }
178
179 fn find_trait(&self, path: &str) -> Option<Trait> {
180 let db = self.0.db;
181 let mut path = path.split(':');
182 let trait_ = path.next_back()?;
183 let std_crate = path.next()?;
184 let std_crate = self
185 .1
186 .dependencies(db)
187 .into_iter()
188 .find(|dep| &dep.name.to_string() == std_crate)?
189 .krate;
190
191 let mut module = std_crate.root_module(db)?;
192 for segment in path {
193 module = module.children(db).find_map(|child| {
194 let name = child.name(db)?;
195 if &name.to_string() == segment {
196 Some(child)
197 } else {
198 None
199 }
200 })?;
201 }
202 let def =
203 module.scope(db, None).into_iter().find(|(name, _def)| &name.to_string() == trait_)?.1;
204 match def {
205 hir::ScopeDef::ModuleDef(hir::ModuleDef::Trait(it)) => Some(it),
206 _ => None,
207 }
208 }
209}
diff --git a/crates/ra_flycheck/Cargo.toml b/crates/ra_flycheck/Cargo.toml
index 76e5cada4..324c33d9d 100644
--- a/crates/ra_flycheck/Cargo.toml
+++ b/crates/ra_flycheck/Cargo.toml
@@ -6,7 +6,7 @@ authors = ["rust-analyzer developers"]
6 6
7[dependencies] 7[dependencies]
8crossbeam-channel = "0.4.0" 8crossbeam-channel = "0.4.0"
9lsp-types = { version = "0.73.0", features = ["proposed"] } 9lsp-types = { version = "0.74.0", features = ["proposed"] }
10log = "0.4.8" 10log = "0.4.8"
11cargo_metadata = "0.9.1" 11cargo_metadata = "0.9.1"
12serde_json = "1.0.48" 12serde_json = "1.0.48"
diff --git a/crates/ra_fmt/src/lib.rs b/crates/ra_fmt/src/lib.rs
index 0b4ba1bbe..f910ded9d 100644
--- a/crates/ra_fmt/src/lib.rs
+++ b/crates/ra_fmt/src/lib.rs
@@ -42,7 +42,6 @@ pub fn unwrap_trivial_block(block: ast::BlockExpr) -> ast::Expr {
42} 42}
43 43
44pub fn extract_trivial_expression(block: &ast::BlockExpr) -> Option<ast::Expr> { 44pub fn extract_trivial_expression(block: &ast::BlockExpr) -> Option<ast::Expr> {
45 let block = block.block()?;
46 let has_anything_else = |thing: &SyntaxNode| -> bool { 45 let has_anything_else = |thing: &SyntaxNode| -> bool {
47 let mut non_trivial_children = 46 let mut non_trivial_children =
48 block.syntax().children_with_tokens().filter(|it| match it.kind() { 47 block.syntax().children_with_tokens().filter(|it| match it.kind() {
@@ -57,18 +56,17 @@ pub fn extract_trivial_expression(block: &ast::BlockExpr) -> Option<ast::Expr> {
57 return None; 56 return None;
58 } 57 }
59 return Some(expr); 58 return Some(expr);
60 } else { 59 }
61 // Unwrap `{ continue; }` 60 // Unwrap `{ continue; }`
62 let (stmt,) = block.statements().next_tuple()?; 61 let (stmt,) = block.statements().next_tuple()?;
63 if let ast::Stmt::ExprStmt(expr_stmt) = stmt { 62 if let ast::Stmt::ExprStmt(expr_stmt) = stmt {
64 if has_anything_else(expr_stmt.syntax()) { 63 if has_anything_else(expr_stmt.syntax()) {
65 return None; 64 return None;
66 } 65 }
67 let expr = expr_stmt.expr()?; 66 let expr = expr_stmt.expr()?;
68 match expr.syntax().kind() { 67 match expr.syntax().kind() {
69 CONTINUE_EXPR | BREAK_EXPR | RETURN_EXPR => return Some(expr), 68 CONTINUE_EXPR | BREAK_EXPR | RETURN_EXPR => return Some(expr),
70 _ => (), 69 _ => (),
71 }
72 } 70 }
73 } 71 }
74 None 72 None
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index fb788736d..af59aa1b6 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -953,6 +953,16 @@ impl TypeParam {
953 pub fn module(self, db: &dyn HirDatabase) -> Module { 953 pub fn module(self, db: &dyn HirDatabase) -> Module {
954 self.id.parent.module(db.upcast()).into() 954 self.id.parent.module(db.upcast()).into()
955 } 955 }
956
957 pub fn ty(self, db: &dyn HirDatabase) -> Type {
958 let resolver = self.id.parent.resolver(db.upcast());
959 let environment = TraitEnvironment::lower(db, &resolver);
960 let ty = Ty::Placeholder(self.id);
961 Type {
962 krate: self.id.parent.module(db.upcast()).krate,
963 ty: InEnvironment { value: ty, environment },
964 }
965 }
956} 966}
957 967
958// FIXME: rename from `ImplDef` to `Impl` 968// FIXME: rename from `ImplDef` to `Impl`
@@ -1157,18 +1167,21 @@ impl Type {
1157 1167
1158 pub fn fields(&self, db: &dyn HirDatabase) -> Vec<(Field, Type)> { 1168 pub fn fields(&self, db: &dyn HirDatabase) -> Vec<(Field, Type)> {
1159 if let Ty::Apply(a_ty) = &self.ty.value { 1169 if let Ty::Apply(a_ty) = &self.ty.value {
1160 if let TypeCtor::Adt(AdtId::StructId(s)) = a_ty.ctor { 1170 let variant_id = match a_ty.ctor {
1161 let var_def = s.into(); 1171 TypeCtor::Adt(AdtId::StructId(s)) => s.into(),
1162 return db 1172 TypeCtor::Adt(AdtId::UnionId(u)) => u.into(),
1163 .field_types(var_def) 1173 _ => return Vec::new(),
1164 .iter() 1174 };
1165 .map(|(local_id, ty)| { 1175
1166 let def = Field { parent: var_def.into(), id: local_id }; 1176 return db
1167 let ty = ty.clone().subst(&a_ty.parameters); 1177 .field_types(variant_id)
1168 (def, self.derived(ty)) 1178 .iter()
1169 }) 1179 .map(|(local_id, ty)| {
1170 .collect(); 1180 let def = Field { parent: variant_id.into(), id: local_id };
1171 } 1181 let ty = ty.clone().subst(&a_ty.parameters);
1182 (def, self.derived(ty))
1183 })
1184 .collect();
1172 }; 1185 };
1173 Vec::new() 1186 Vec::new()
1174 } 1187 }
diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs
index 312ef3814..c5df4ac24 100644
--- a/crates/ra_hir/src/lib.rs
+++ b/crates/ra_hir/src/lib.rs
@@ -70,6 +70,7 @@ pub use hir_def::{
70 type_ref::Mutability, 70 type_ref::Mutability,
71}; 71};
72pub use hir_expand::{ 72pub use hir_expand::{
73 name::Name, HirFileId, InFile, MacroCallId, MacroCallLoc, MacroDefId, MacroFile, Origin, 73 hygiene::Hygiene, name::Name, HirFileId, InFile, MacroCallId, MacroCallLoc, MacroDefId,
74 MacroFile, Origin,
74}; 75};
75pub use hir_ty::{display::HirDisplay, CallableDef}; 76pub use hir_ty::{display::HirDisplay, CallableDef};
diff --git a/crates/ra_hir/src/semantics.rs b/crates/ra_hir/src/semantics.rs
index 86bfb416c..515e5eb17 100644
--- a/crates/ra_hir/src/semantics.rs
+++ b/crates/ra_hir/src/semantics.rs
@@ -8,7 +8,8 @@ use hir_def::{
8 resolver::{self, HasResolver, Resolver}, 8 resolver::{self, HasResolver, Resolver},
9 AsMacroCall, TraitId, 9 AsMacroCall, TraitId,
10}; 10};
11use hir_expand::ExpansionInfo; 11use hir_expand::{hygiene::Hygiene, ExpansionInfo};
12use hir_ty::associated_type_shorthand_candidates;
12use itertools::Itertools; 13use itertools::Itertools;
13use ra_db::{FileId, FileRange}; 14use ra_db::{FileId, FileRange};
14use ra_prof::profile; 15use ra_prof::profile;
@@ -24,8 +25,9 @@ use crate::{
24 semantics::source_to_def::{ChildContainer, SourceToDefCache, SourceToDefCtx}, 25 semantics::source_to_def::{ChildContainer, SourceToDefCache, SourceToDefCtx},
25 source_analyzer::{resolve_hir_path, SourceAnalyzer}, 26 source_analyzer::{resolve_hir_path, SourceAnalyzer},
26 AssocItem, Field, Function, HirFileId, ImplDef, InFile, Local, MacroDef, Module, ModuleDef, 27 AssocItem, Field, Function, HirFileId, ImplDef, InFile, Local, MacroDef, Module, ModuleDef,
27 Name, Origin, Path, ScopeDef, Trait, Type, TypeParam, 28 Name, Origin, Path, ScopeDef, Trait, Type, TypeAlias, TypeParam,
28}; 29};
30use resolver::TypeNs;
29 31
30#[derive(Debug, Clone, PartialEq, Eq)] 32#[derive(Debug, Clone, PartialEq, Eq)]
31pub enum PathResolution { 33pub enum PathResolution {
@@ -40,6 +42,44 @@ pub enum PathResolution {
40 AssocItem(AssocItem), 42 AssocItem(AssocItem),
41} 43}
42 44
45impl PathResolution {
46 fn in_type_ns(&self) -> Option<TypeNs> {
47 match self {
48 PathResolution::Def(ModuleDef::Adt(adt)) => Some(TypeNs::AdtId((*adt).into())),
49 PathResolution::Def(ModuleDef::BuiltinType(builtin)) => {
50 Some(TypeNs::BuiltinType(*builtin))
51 }
52 PathResolution::Def(ModuleDef::Const(_))
53 | PathResolution::Def(ModuleDef::EnumVariant(_))
54 | PathResolution::Def(ModuleDef::Function(_))
55 | PathResolution::Def(ModuleDef::Module(_))
56 | PathResolution::Def(ModuleDef::Static(_))
57 | PathResolution::Def(ModuleDef::Trait(_)) => None,
58 PathResolution::Def(ModuleDef::TypeAlias(alias)) => {
59 Some(TypeNs::TypeAliasId((*alias).into()))
60 }
61 PathResolution::Local(_) | PathResolution::Macro(_) => None,
62 PathResolution::TypeParam(param) => Some(TypeNs::GenericParam((*param).into())),
63 PathResolution::SelfType(impl_def) => Some(TypeNs::SelfType((*impl_def).into())),
64 PathResolution::AssocItem(AssocItem::Const(_))
65 | PathResolution::AssocItem(AssocItem::Function(_)) => None,
66 PathResolution::AssocItem(AssocItem::TypeAlias(alias)) => {
67 Some(TypeNs::TypeAliasId((*alias).into()))
68 }
69 }
70 }
71
72 /// Returns an iterator over associated types that may be specified after this path (using
73 /// `Ty::Assoc` syntax).
74 pub fn assoc_type_shorthand_candidates<R>(
75 &self,
76 db: &dyn HirDatabase,
77 mut cb: impl FnMut(TypeAlias) -> Option<R>,
78 ) -> Option<R> {
79 associated_type_shorthand_candidates(db, self.in_type_ns()?, |_, _, id| cb(id.into()))
80 }
81}
82
43/// Primary API to get semantic information, like types, from syntax trees. 83/// Primary API to get semantic information, like types, from syntax trees.
44pub struct Semantics<'db, DB> { 84pub struct Semantics<'db, DB> {
45 pub db: &'db DB, 85 pub db: &'db DB,
@@ -206,6 +246,11 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
206 self.analyze(path.syntax()).resolve_path(self.db, path) 246 self.analyze(path.syntax()).resolve_path(self.db, path)
207 } 247 }
208 248
249 pub fn lower_path(&self, path: &ast::Path) -> Option<Path> {
250 let src = self.find_file(path.syntax().clone());
251 Path::from_src(path.clone(), &Hygiene::new(self.db.upcast(), src.file_id.into()))
252 }
253
209 pub fn resolve_bind_pat_to_const(&self, pat: &ast::BindPat) -> Option<ModuleDef> { 254 pub fn resolve_bind_pat_to_const(&self, pat: &ast::BindPat) -> Option<ModuleDef> {
210 self.analyze(pat.syntax()).resolve_bind_pat_to_const(self.db, pat) 255 self.analyze(pat.syntax()).resolve_bind_pat_to_const(self.db, pat)
211 } 256 }
diff --git a/crates/ra_hir/src/semantics/source_to_def.rs b/crates/ra_hir/src/semantics/source_to_def.rs
index 6f3b5b2da..8af64fdc1 100644
--- a/crates/ra_hir/src/semantics/source_to_def.rs
+++ b/crates/ra_hir/src/semantics/source_to_def.rs
@@ -151,7 +151,7 @@ impl SourceToDefCtx<'_, '_> {
151 let krate = self.file_to_def(file_id)?.krate; 151 let krate = self.file_to_def(file_id)?.krate;
152 let file_ast_id = self.db.ast_id_map(src.file_id).ast_id(&src.value); 152 let file_ast_id = self.db.ast_id_map(src.file_id).ast_id(&src.value);
153 let ast_id = Some(AstId::new(src.file_id, file_ast_id)); 153 let ast_id = Some(AstId::new(src.file_id, file_ast_id));
154 Some(MacroDefId { krate: Some(krate), ast_id, kind }) 154 Some(MacroDefId { krate: Some(krate), ast_id, kind, local_inner: false })
155 } 155 }
156 156
157 pub(super) fn find_container(&mut self, src: InFile<&SyntaxNode>) -> Option<ChildContainer> { 157 pub(super) fn find_container(&mut self, src: InFile<&SyntaxNode>) -> Option<ChildContainer> {
diff --git a/crates/ra_hir/src/source_analyzer.rs b/crates/ra_hir/src/source_analyzer.rs
index 74d64c97d..c63d1b847 100644
--- a/crates/ra_hir/src/source_analyzer.rs
+++ b/crates/ra_hir/src/source_analyzer.rs
@@ -224,7 +224,8 @@ impl SourceAnalyzer {
224 } 224 }
225 } 225 }
226 // This must be a normal source file rather than macro file. 226 // This must be a normal source file rather than macro file.
227 let hir_path = crate::Path::from_ast(path.clone())?; 227 let hir_path =
228 crate::Path::from_src(path.clone(), &Hygiene::new(db.upcast(), self.file_id))?;
228 resolve_hir_path(db, &self.resolver, &hir_path) 229 resolve_hir_path(db, &self.resolver, &hir_path)
229 } 230 }
230 231
diff --git a/crates/ra_hir_def/src/adt.rs b/crates/ra_hir_def/src/adt.rs
index 753becc3d..8eef51828 100644
--- a/crates/ra_hir_def/src/adt.rs
+++ b/crates/ra_hir_def/src/adt.rs
@@ -12,9 +12,15 @@ use ra_prof::profile;
12use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner, VisibilityOwner}; 12use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner, VisibilityOwner};
13 13
14use crate::{ 14use crate::{
15 body::CfgExpander, db::DefDatabase, src::HasChildSource, src::HasSource, trace::Trace, 15 body::{CfgExpander, LowerCtx},
16 type_ref::TypeRef, visibility::RawVisibility, EnumId, HasModule, LocalEnumVariantId, 16 db::DefDatabase,
17 LocalFieldId, Lookup, ModuleId, StructId, UnionId, VariantId, 17 src::HasChildSource,
18 src::HasSource,
19 trace::Trace,
20 type_ref::TypeRef,
21 visibility::RawVisibility,
22 EnumId, HasModule, LocalEnumVariantId, LocalFieldId, Lookup, ModuleId, StructId, UnionId,
23 VariantId,
18}; 24};
19 25
20/// Note that we use `StructData` for unions as well! 26/// Note that we use `StructData` for unions as well!
@@ -198,6 +204,8 @@ fn lower_struct(
198 trace: &mut Trace<FieldData, Either<ast::TupleFieldDef, ast::RecordFieldDef>>, 204 trace: &mut Trace<FieldData, Either<ast::TupleFieldDef, ast::RecordFieldDef>>,
199 ast: &InFile<ast::StructKind>, 205 ast: &InFile<ast::StructKind>,
200) -> StructKind { 206) -> StructKind {
207 let ctx = LowerCtx::new(db, ast.file_id);
208
201 match &ast.value { 209 match &ast.value {
202 ast::StructKind::Tuple(fl) => { 210 ast::StructKind::Tuple(fl) => {
203 for (i, fd) in fl.fields().enumerate() { 211 for (i, fd) in fl.fields().enumerate() {
@@ -210,7 +218,7 @@ fn lower_struct(
210 || Either::Left(fd.clone()), 218 || Either::Left(fd.clone()),
211 || FieldData { 219 || FieldData {
212 name: Name::new_tuple_field(i), 220 name: Name::new_tuple_field(i),
213 type_ref: TypeRef::from_ast_opt(fd.type_ref()), 221 type_ref: TypeRef::from_ast_opt(&ctx, fd.type_ref()),
214 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())), 222 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())),
215 }, 223 },
216 ); 224 );
@@ -228,7 +236,7 @@ fn lower_struct(
228 || Either::Right(fd.clone()), 236 || Either::Right(fd.clone()),
229 || FieldData { 237 || FieldData {
230 name: fd.name().map(|n| n.as_name()).unwrap_or_else(Name::missing), 238 name: fd.name().map(|n| n.as_name()).unwrap_or_else(Name::missing),
231 type_ref: TypeRef::from_ast_opt(fd.ascribed_type()), 239 type_ref: TypeRef::from_ast_opt(&ctx, fd.ascribed_type()),
232 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())), 240 visibility: RawVisibility::from_ast(db, ast.with_value(fd.visibility())),
233 }, 241 },
234 ); 242 );
diff --git a/crates/ra_hir_def/src/attr.rs b/crates/ra_hir_def/src/attr.rs
index 5a86af8ba..576cd0c65 100644
--- a/crates/ra_hir_def/src/attr.rs
+++ b/crates/ra_hir_def/src/attr.rs
@@ -140,6 +140,7 @@ impl Attr {
140 } 140 }
141} 141}
142 142
143#[derive(Debug, Clone, Copy)]
143pub struct AttrQuery<'a> { 144pub struct AttrQuery<'a> {
144 attrs: &'a Attrs, 145 attrs: &'a Attrs,
145 key: &'static str, 146 key: &'static str,
diff --git a/crates/ra_hir_def/src/body.rs b/crates/ra_hir_def/src/body.rs
index 890cefcaf..4edaad960 100644
--- a/crates/ra_hir_def/src/body.rs
+++ b/crates/ra_hir_def/src/body.rs
@@ -15,6 +15,8 @@ use ra_prof::profile;
15use ra_syntax::{ast, AstNode, AstPtr}; 15use ra_syntax::{ast, AstNode, AstPtr};
16use rustc_hash::FxHashMap; 16use rustc_hash::FxHashMap;
17 17
18pub(crate) use lower::LowerCtx;
19
18use crate::{ 20use crate::{
19 attr::Attrs, 21 attr::Attrs,
20 db::DefDatabase, 22 db::DefDatabase,
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs
index 571603854..687216dc3 100644
--- a/crates/ra_hir_def/src/body/lower.rs
+++ b/crates/ra_hir_def/src/body/lower.rs
@@ -3,8 +3,9 @@
3 3
4use either::Either; 4use either::Either;
5use hir_expand::{ 5use hir_expand::{
6 hygiene::Hygiene,
6 name::{name, AsName, Name}, 7 name::{name, AsName, Name},
7 MacroDefId, MacroDefKind, 8 HirFileId, MacroDefId, MacroDefKind,
8}; 9};
9use ra_arena::Arena; 10use ra_arena::Arena;
10use ra_syntax::{ 11use ra_syntax::{
@@ -26,7 +27,7 @@ use crate::{
26 LogicOp, MatchArm, Ordering, Pat, PatId, RecordFieldPat, RecordLitField, Statement, 27 LogicOp, MatchArm, Ordering, Pat, PatId, RecordFieldPat, RecordLitField, Statement,
27 }, 28 },
28 item_scope::BuiltinShadowMode, 29 item_scope::BuiltinShadowMode,
29 path::GenericArgs, 30 path::{GenericArgs, Path},
30 type_ref::{Mutability, TypeRef}, 31 type_ref::{Mutability, TypeRef},
31 AdtId, ConstLoc, ContainerId, DefWithBodyId, EnumLoc, FunctionLoc, Intern, ModuleDefId, 32 AdtId, ConstLoc, ContainerId, DefWithBodyId, EnumLoc, FunctionLoc, Intern, ModuleDefId,
32 StaticLoc, StructLoc, TraitLoc, TypeAliasLoc, UnionLoc, 33 StaticLoc, StructLoc, TraitLoc, TypeAliasLoc, UnionLoc,
@@ -35,6 +36,23 @@ use crate::{
35use super::{ExprSource, PatSource}; 36use super::{ExprSource, PatSource};
36use ast::AstChildren; 37use ast::AstChildren;
37 38
39pub(crate) struct LowerCtx {
40 hygiene: Hygiene,
41}
42
43impl LowerCtx {
44 pub fn new(db: &dyn DefDatabase, file_id: HirFileId) -> Self {
45 LowerCtx { hygiene: Hygiene::new(db.upcast(), file_id) }
46 }
47 pub fn with_hygiene(hygiene: &Hygiene) -> Self {
48 LowerCtx { hygiene: hygiene.clone() }
49 }
50
51 pub fn lower_path(&self, ast: ast::Path) -> Option<Path> {
52 Path::from_src(ast, &self.hygiene)
53 }
54}
55
38pub(super) fn lower( 56pub(super) fn lower(
39 db: &dyn DefDatabase, 57 db: &dyn DefDatabase,
40 def: DefWithBodyId, 58 def: DefWithBodyId,
@@ -42,10 +60,13 @@ pub(super) fn lower(
42 params: Option<ast::ParamList>, 60 params: Option<ast::ParamList>,
43 body: Option<ast::Expr>, 61 body: Option<ast::Expr>,
44) -> (Body, BodySourceMap) { 62) -> (Body, BodySourceMap) {
63 let ctx = LowerCtx::new(db, expander.current_file_id.clone());
64
45 ExprCollector { 65 ExprCollector {
46 db, 66 db,
47 def, 67 def,
48 expander, 68 expander,
69 ctx,
49 source_map: BodySourceMap::default(), 70 source_map: BodySourceMap::default(),
50 body: Body { 71 body: Body {
51 exprs: Arena::default(), 72 exprs: Arena::default(),
@@ -62,7 +83,7 @@ struct ExprCollector<'a> {
62 db: &'a dyn DefDatabase, 83 db: &'a dyn DefDatabase,
63 def: DefWithBodyId, 84 def: DefWithBodyId,
64 expander: Expander, 85 expander: Expander,
65 86 ctx: LowerCtx,
66 body: Body, 87 body: Body,
67 source_map: BodySourceMap, 88 source_map: BodySourceMap,
68} 89}
@@ -182,10 +203,16 @@ impl ExprCollector<'_> {
182 203
183 self.alloc_expr(Expr::If { condition, then_branch, else_branch }, syntax_ptr) 204 self.alloc_expr(Expr::If { condition, then_branch, else_branch }, syntax_ptr)
184 } 205 }
185 ast::Expr::TryBlockExpr(e) => { 206 ast::Expr::EffectExpr(e) => match e.effect() {
186 let body = self.collect_block_opt(e.body()); 207 ast::Effect::Try(_) => {
187 self.alloc_expr(Expr::TryBlock { body }, syntax_ptr) 208 let body = self.collect_block_opt(e.block_expr());
188 } 209 self.alloc_expr(Expr::TryBlock { body }, syntax_ptr)
210 }
211 // FIXME: we need to record these effects somewhere...
212 ast::Effect::Async(_) | ast::Effect::Label(_) | ast::Effect::Unsafe(_) => {
213 self.collect_block_opt(e.block_expr())
214 }
215 },
189 ast::Expr::BlockExpr(e) => self.collect_block(e), 216 ast::Expr::BlockExpr(e) => self.collect_block(e),
190 ast::Expr::LoopExpr(e) => { 217 ast::Expr::LoopExpr(e) => {
191 let body = self.collect_block_opt(e.loop_body()); 218 let body = self.collect_block_opt(e.loop_body());
@@ -241,7 +268,8 @@ impl ExprCollector<'_> {
241 Vec::new() 268 Vec::new()
242 }; 269 };
243 let method_name = e.name_ref().map(|nr| nr.as_name()).unwrap_or_else(Name::missing); 270 let method_name = e.name_ref().map(|nr| nr.as_name()).unwrap_or_else(Name::missing);
244 let generic_args = e.type_arg_list().and_then(GenericArgs::from_ast); 271 let generic_args =
272 e.type_arg_list().and_then(|it| GenericArgs::from_ast(&self.ctx, it));
245 self.alloc_expr( 273 self.alloc_expr(
246 Expr::MethodCall { receiver, method_name, args, generic_args }, 274 Expr::MethodCall { receiver, method_name, args, generic_args },
247 syntax_ptr, 275 syntax_ptr,
@@ -347,7 +375,7 @@ impl ExprCollector<'_> {
347 } 375 }
348 ast::Expr::CastExpr(e) => { 376 ast::Expr::CastExpr(e) => {
349 let expr = self.collect_expr_opt(e.expr()); 377 let expr = self.collect_expr_opt(e.expr());
350 let type_ref = TypeRef::from_ast_opt(e.type_ref()); 378 let type_ref = TypeRef::from_ast_opt(&self.ctx, e.type_ref());
351 self.alloc_expr(Expr::Cast { expr, type_ref }, syntax_ptr) 379 self.alloc_expr(Expr::Cast { expr, type_ref }, syntax_ptr)
352 } 380 }
353 ast::Expr::RefExpr(e) => { 381 ast::Expr::RefExpr(e) => {
@@ -369,12 +397,16 @@ impl ExprCollector<'_> {
369 if let Some(pl) = e.param_list() { 397 if let Some(pl) = e.param_list() {
370 for param in pl.params() { 398 for param in pl.params() {
371 let pat = self.collect_pat_opt(param.pat()); 399 let pat = self.collect_pat_opt(param.pat());
372 let type_ref = param.ascribed_type().map(TypeRef::from_ast); 400 let type_ref =
401 param.ascribed_type().map(|it| TypeRef::from_ast(&self.ctx, it));
373 args.push(pat); 402 args.push(pat);
374 arg_types.push(type_ref); 403 arg_types.push(type_ref);
375 } 404 }
376 } 405 }
377 let ret_type = e.ret_type().and_then(|r| r.type_ref()).map(TypeRef::from_ast); 406 let ret_type = e
407 .ret_type()
408 .and_then(|r| r.type_ref())
409 .map(|it| TypeRef::from_ast(&self.ctx, it));
378 let body = self.collect_expr_opt(e.body()); 410 let body = self.collect_expr_opt(e.body());
379 self.alloc_expr(Expr::Lambda { args, arg_types, ret_type, body }, syntax_ptr) 411 self.alloc_expr(Expr::Lambda { args, arg_types, ret_type, body }, syntax_ptr)
380 } 412 }
@@ -434,6 +466,7 @@ impl ExprCollector<'_> {
434 krate: Some(self.expander.module.krate), 466 krate: Some(self.expander.module.krate),
435 ast_id: Some(self.expander.ast_id(&e)), 467 ast_id: Some(self.expander.ast_id(&e)),
436 kind: MacroDefKind::Declarative, 468 kind: MacroDefKind::Declarative,
469 local_inner: false,
437 }; 470 };
438 self.body.item_scope.define_legacy_macro(name, mac); 471 self.body.item_scope.define_legacy_macro(name, mac);
439 472
@@ -468,19 +501,15 @@ impl ExprCollector<'_> {
468 } 501 }
469 } 502 }
470 503
471 fn collect_block(&mut self, expr: ast::BlockExpr) -> ExprId { 504 fn collect_block(&mut self, block: ast::BlockExpr) -> ExprId {
472 let syntax_node_ptr = AstPtr::new(&expr.clone().into()); 505 let syntax_node_ptr = AstPtr::new(&block.clone().into());
473 let block = match expr.block() {
474 Some(block) => block,
475 None => return self.alloc_expr(Expr::Missing, syntax_node_ptr),
476 };
477 self.collect_block_items(&block); 506 self.collect_block_items(&block);
478 let statements = block 507 let statements = block
479 .statements() 508 .statements()
480 .map(|s| match s { 509 .map(|s| match s {
481 ast::Stmt::LetStmt(stmt) => { 510 ast::Stmt::LetStmt(stmt) => {
482 let pat = self.collect_pat_opt(stmt.pat()); 511 let pat = self.collect_pat_opt(stmt.pat());
483 let type_ref = stmt.ascribed_type().map(TypeRef::from_ast); 512 let type_ref = stmt.ascribed_type().map(|it| TypeRef::from_ast(&self.ctx, it));
484 let initializer = stmt.initializer().map(|e| self.collect_expr(e)); 513 let initializer = stmt.initializer().map(|e| self.collect_expr(e));
485 Statement::Let { pat, type_ref, initializer } 514 Statement::Let { pat, type_ref, initializer }
486 } 515 }
@@ -491,7 +520,7 @@ impl ExprCollector<'_> {
491 self.alloc_expr(Expr::Block { statements, tail }, syntax_node_ptr) 520 self.alloc_expr(Expr::Block { statements, tail }, syntax_node_ptr)
492 } 521 }
493 522
494 fn collect_block_items(&mut self, block: &ast::Block) { 523 fn collect_block_items(&mut self, block: &ast::BlockExpr) {
495 let container = ContainerId::DefWithBodyId(self.def); 524 let container = ContainerId::DefWithBodyId(self.def);
496 for item in block.items() { 525 for item in block.items() {
497 let (def, name): (ModuleDefId, Option<ast::Name>) = match item { 526 let (def, name): (ModuleDefId, Option<ast::Name>) = match item {
diff --git a/crates/ra_hir_def/src/data.rs b/crates/ra_hir_def/src/data.rs
index ccb682f9a..7a2067e49 100644
--- a/crates/ra_hir_def/src/data.rs
+++ b/crates/ra_hir_def/src/data.rs
@@ -15,6 +15,7 @@ use ra_syntax::ast::{
15 15
16use crate::{ 16use crate::{
17 attr::Attrs, 17 attr::Attrs,
18 body::LowerCtx,
18 db::DefDatabase, 19 db::DefDatabase,
19 path::{path, AssociatedTypeBinding, GenericArgs, Path}, 20 path::{path, AssociatedTypeBinding, GenericArgs, Path},
20 src::HasSource, 21 src::HasSource,
@@ -40,13 +41,14 @@ impl FunctionData {
40 pub(crate) fn fn_data_query(db: &impl DefDatabase, func: FunctionId) -> Arc<FunctionData> { 41 pub(crate) fn fn_data_query(db: &impl DefDatabase, func: FunctionId) -> Arc<FunctionData> {
41 let loc = func.lookup(db); 42 let loc = func.lookup(db);
42 let src = loc.source(db); 43 let src = loc.source(db);
44 let ctx = LowerCtx::new(db, src.file_id);
43 let name = src.value.name().map(|n| n.as_name()).unwrap_or_else(Name::missing); 45 let name = src.value.name().map(|n| n.as_name()).unwrap_or_else(Name::missing);
44 let mut params = Vec::new(); 46 let mut params = Vec::new();
45 let mut has_self_param = false; 47 let mut has_self_param = false;
46 if let Some(param_list) = src.value.param_list() { 48 if let Some(param_list) = src.value.param_list() {
47 if let Some(self_param) = param_list.self_param() { 49 if let Some(self_param) = param_list.self_param() {
48 let self_type = if let Some(type_ref) = self_param.ascribed_type() { 50 let self_type = if let Some(type_ref) = self_param.ascribed_type() {
49 TypeRef::from_ast(type_ref) 51 TypeRef::from_ast(&ctx, type_ref)
50 } else { 52 } else {
51 let self_type = TypeRef::Path(name![Self].into()); 53 let self_type = TypeRef::Path(name![Self].into());
52 match self_param.kind() { 54 match self_param.kind() {
@@ -63,14 +65,14 @@ impl FunctionData {
63 has_self_param = true; 65 has_self_param = true;
64 } 66 }
65 for param in param_list.params() { 67 for param in param_list.params() {
66 let type_ref = TypeRef::from_ast_opt(param.ascribed_type()); 68 let type_ref = TypeRef::from_ast_opt(&ctx, param.ascribed_type());
67 params.push(type_ref); 69 params.push(type_ref);
68 } 70 }
69 } 71 }
70 let attrs = Attrs::new(&src.value, &Hygiene::new(db.upcast(), src.file_id)); 72 let attrs = Attrs::new(&src.value, &Hygiene::new(db.upcast(), src.file_id));
71 73
72 let ret_type = if let Some(type_ref) = src.value.ret_type().and_then(|rt| rt.type_ref()) { 74 let ret_type = if let Some(type_ref) = src.value.ret_type().and_then(|rt| rt.type_ref()) {
73 TypeRef::from_ast(type_ref) 75 TypeRef::from_ast(&ctx, type_ref)
74 } else { 76 } else {
75 TypeRef::unit() 77 TypeRef::unit()
76 }; 78 };
@@ -122,7 +124,8 @@ impl TypeAliasData {
122 let loc = typ.lookup(db); 124 let loc = typ.lookup(db);
123 let node = loc.source(db); 125 let node = loc.source(db);
124 let name = node.value.name().map_or_else(Name::missing, |n| n.as_name()); 126 let name = node.value.name().map_or_else(Name::missing, |n| n.as_name());
125 let type_ref = node.value.type_ref().map(TypeRef::from_ast); 127 let lower_ctx = LowerCtx::new(db, node.file_id);
128 let type_ref = node.value.type_ref().map(|it| TypeRef::from_ast(&lower_ctx, it));
126 let vis_default = RawVisibility::default_for_container(loc.container); 129 let vis_default = RawVisibility::default_for_container(loc.container);
127 let visibility = RawVisibility::from_ast_with_default( 130 let visibility = RawVisibility::from_ast_with_default(
128 db, 131 db,
@@ -130,7 +133,7 @@ impl TypeAliasData {
130 node.as_ref().map(|n| n.visibility()), 133 node.as_ref().map(|n| n.visibility()),
131 ); 134 );
132 let bounds = if let Some(bound_list) = node.value.type_bound_list() { 135 let bounds = if let Some(bound_list) = node.value.type_bound_list() {
133 bound_list.bounds().map(TypeBound::from_ast).collect() 136 bound_list.bounds().map(|it| TypeBound::from_ast(&lower_ctx, it)).collect()
134 } else { 137 } else {
135 Vec::new() 138 Vec::new()
136 }; 139 };
@@ -223,9 +226,10 @@ impl ImplData {
223 let _p = profile("impl_data_query"); 226 let _p = profile("impl_data_query");
224 let impl_loc = id.lookup(db); 227 let impl_loc = id.lookup(db);
225 let src = impl_loc.source(db); 228 let src = impl_loc.source(db);
229 let lower_ctx = LowerCtx::new(db, src.file_id);
226 230
227 let target_trait = src.value.target_trait().map(TypeRef::from_ast); 231 let target_trait = src.value.target_trait().map(|it| TypeRef::from_ast(&lower_ctx, it));
228 let target_type = TypeRef::from_ast_opt(src.value.target_type()); 232 let target_type = TypeRef::from_ast_opt(&lower_ctx, src.value.target_type());
229 let is_negative = src.value.excl_token().is_some(); 233 let is_negative = src.value.excl_token().is_some();
230 let module_id = impl_loc.container.module(db); 234 let module_id = impl_loc.container.module(db);
231 235
@@ -279,8 +283,9 @@ impl ConstData {
279 vis_default: RawVisibility, 283 vis_default: RawVisibility,
280 node: InFile<N>, 284 node: InFile<N>,
281 ) -> ConstData { 285 ) -> ConstData {
286 let ctx = LowerCtx::new(db, node.file_id);
282 let name = node.value.name().map(|n| n.as_name()); 287 let name = node.value.name().map(|n| n.as_name());
283 let type_ref = TypeRef::from_ast_opt(node.value.ascribed_type()); 288 let type_ref = TypeRef::from_ast_opt(&ctx, node.value.ascribed_type());
284 let visibility = 289 let visibility =
285 RawVisibility::from_ast_with_default(db, vis_default, node.map(|n| n.visibility())); 290 RawVisibility::from_ast_with_default(db, vis_default, node.map(|n| n.visibility()));
286 ConstData { name, type_ref, visibility } 291 ConstData { name, type_ref, visibility }
diff --git a/crates/ra_hir_def/src/generics.rs b/crates/ra_hir_def/src/generics.rs
index d850244c4..09a5241f7 100644
--- a/crates/ra_hir_def/src/generics.rs
+++ b/crates/ra_hir_def/src/generics.rs
@@ -15,6 +15,7 @@ use ra_prof::profile;
15use ra_syntax::ast::{self, NameOwner, TypeBoundsOwner, TypeParamsOwner}; 15use ra_syntax::ast::{self, NameOwner, TypeBoundsOwner, TypeParamsOwner};
16 16
17use crate::{ 17use crate::{
18 body::LowerCtx,
18 child_by_source::ChildBySource, 19 child_by_source::ChildBySource,
19 db::DefDatabase, 20 db::DefDatabase,
20 dyn_map::DynMap, 21 dyn_map::DynMap,
@@ -80,11 +81,13 @@ impl GenericParams {
80 fn new(db: &dyn DefDatabase, def: GenericDefId) -> (GenericParams, InFile<SourceMap>) { 81 fn new(db: &dyn DefDatabase, def: GenericDefId) -> (GenericParams, InFile<SourceMap>) {
81 let mut generics = GenericParams { types: Arena::default(), where_predicates: Vec::new() }; 82 let mut generics = GenericParams { types: Arena::default(), where_predicates: Vec::new() };
82 let mut sm = ArenaMap::default(); 83 let mut sm = ArenaMap::default();
84
83 // FIXME: add `: Sized` bound for everything except for `Self` in traits 85 // FIXME: add `: Sized` bound for everything except for `Self` in traits
84 let file_id = match def { 86 let file_id = match def {
85 GenericDefId::FunctionId(it) => { 87 GenericDefId::FunctionId(it) => {
86 let src = it.lookup(db).source(db); 88 let src = it.lookup(db).source(db);
87 generics.fill(&mut sm, &src.value); 89 let lower_ctx = LowerCtx::new(db, src.file_id);
90 generics.fill(&lower_ctx, &mut sm, &src.value);
88 // lower `impl Trait` in arguments 91 // lower `impl Trait` in arguments
89 let data = db.function_data(it); 92 let data = db.function_data(it);
90 for param in &data.params { 93 for param in &data.params {
@@ -94,21 +97,25 @@ impl GenericParams {
94 } 97 }
95 GenericDefId::AdtId(AdtId::StructId(it)) => { 98 GenericDefId::AdtId(AdtId::StructId(it)) => {
96 let src = it.lookup(db).source(db); 99 let src = it.lookup(db).source(db);
97 generics.fill(&mut sm, &src.value); 100 let lower_ctx = LowerCtx::new(db, src.file_id);
101 generics.fill(&lower_ctx, &mut sm, &src.value);
98 src.file_id 102 src.file_id
99 } 103 }
100 GenericDefId::AdtId(AdtId::UnionId(it)) => { 104 GenericDefId::AdtId(AdtId::UnionId(it)) => {
101 let src = it.lookup(db).source(db); 105 let src = it.lookup(db).source(db);
102 generics.fill(&mut sm, &src.value); 106 let lower_ctx = LowerCtx::new(db, src.file_id);
107 generics.fill(&lower_ctx, &mut sm, &src.value);
103 src.file_id 108 src.file_id
104 } 109 }
105 GenericDefId::AdtId(AdtId::EnumId(it)) => { 110 GenericDefId::AdtId(AdtId::EnumId(it)) => {
106 let src = it.lookup(db).source(db); 111 let src = it.lookup(db).source(db);
107 generics.fill(&mut sm, &src.value); 112 let lower_ctx = LowerCtx::new(db, src.file_id);
113 generics.fill(&lower_ctx, &mut sm, &src.value);
108 src.file_id 114 src.file_id
109 } 115 }
110 GenericDefId::TraitId(it) => { 116 GenericDefId::TraitId(it) => {
111 let src = it.lookup(db).source(db); 117 let src = it.lookup(db).source(db);
118 let lower_ctx = LowerCtx::new(db, src.file_id);
112 119
113 // traits get the Self type as an implicit first type parameter 120 // traits get the Self type as an implicit first type parameter
114 let self_param_id = generics.types.alloc(TypeParamData { 121 let self_param_id = generics.types.alloc(TypeParamData {
@@ -120,14 +127,16 @@ impl GenericParams {
120 // add super traits as bounds on Self 127 // add super traits as bounds on Self
121 // i.e., trait Foo: Bar is equivalent to trait Foo where Self: Bar 128 // i.e., trait Foo: Bar is equivalent to trait Foo where Self: Bar
122 let self_param = TypeRef::Path(name![Self].into()); 129 let self_param = TypeRef::Path(name![Self].into());
123 generics.fill_bounds(&src.value, self_param); 130 generics.fill_bounds(&lower_ctx, &src.value, self_param);
124 131
125 generics.fill(&mut sm, &src.value); 132 generics.fill(&lower_ctx, &mut sm, &src.value);
126 src.file_id 133 src.file_id
127 } 134 }
128 GenericDefId::TypeAliasId(it) => { 135 GenericDefId::TypeAliasId(it) => {
129 let src = it.lookup(db).source(db); 136 let src = it.lookup(db).source(db);
130 generics.fill(&mut sm, &src.value); 137 let lower_ctx = LowerCtx::new(db, src.file_id);
138
139 generics.fill(&lower_ctx, &mut sm, &src.value);
131 src.file_id 140 src.file_id
132 } 141 }
133 // Note that we don't add `Self` here: in `impl`s, `Self` is not a 142 // Note that we don't add `Self` here: in `impl`s, `Self` is not a
@@ -135,7 +144,9 @@ impl GenericParams {
135 // type, so this is handled by the resolver. 144 // type, so this is handled by the resolver.
136 GenericDefId::ImplId(it) => { 145 GenericDefId::ImplId(it) => {
137 let src = it.lookup(db).source(db); 146 let src = it.lookup(db).source(db);
138 generics.fill(&mut sm, &src.value); 147 let lower_ctx = LowerCtx::new(db, src.file_id);
148
149 generics.fill(&lower_ctx, &mut sm, &src.value);
139 src.file_id 150 src.file_id
140 } 151 }
141 // We won't be using this ID anyway 152 // We won't be using this ID anyway
@@ -145,28 +156,38 @@ impl GenericParams {
145 (generics, InFile::new(file_id, sm)) 156 (generics, InFile::new(file_id, sm))
146 } 157 }
147 158
148 fn fill(&mut self, sm: &mut SourceMap, node: &dyn TypeParamsOwner) { 159 fn fill(&mut self, lower_ctx: &LowerCtx, sm: &mut SourceMap, node: &dyn TypeParamsOwner) {
149 if let Some(params) = node.type_param_list() { 160 if let Some(params) = node.type_param_list() {
150 self.fill_params(sm, params) 161 self.fill_params(lower_ctx, sm, params)
151 } 162 }
152 if let Some(where_clause) = node.where_clause() { 163 if let Some(where_clause) = node.where_clause() {
153 self.fill_where_predicates(where_clause); 164 self.fill_where_predicates(lower_ctx, where_clause);
154 } 165 }
155 } 166 }
156 167
157 fn fill_bounds(&mut self, node: &dyn ast::TypeBoundsOwner, type_ref: TypeRef) { 168 fn fill_bounds(
169 &mut self,
170 lower_ctx: &LowerCtx,
171 node: &dyn ast::TypeBoundsOwner,
172 type_ref: TypeRef,
173 ) {
158 for bound in 174 for bound in
159 node.type_bound_list().iter().flat_map(|type_bound_list| type_bound_list.bounds()) 175 node.type_bound_list().iter().flat_map(|type_bound_list| type_bound_list.bounds())
160 { 176 {
161 self.add_where_predicate_from_bound(bound, type_ref.clone()); 177 self.add_where_predicate_from_bound(lower_ctx, bound, type_ref.clone());
162 } 178 }
163 } 179 }
164 180
165 fn fill_params(&mut self, sm: &mut SourceMap, params: ast::TypeParamList) { 181 fn fill_params(
182 &mut self,
183 lower_ctx: &LowerCtx,
184 sm: &mut SourceMap,
185 params: ast::TypeParamList,
186 ) {
166 for type_param in params.type_params() { 187 for type_param in params.type_params() {
167 let name = type_param.name().map_or_else(Name::missing, |it| it.as_name()); 188 let name = type_param.name().map_or_else(Name::missing, |it| it.as_name());
168 // FIXME: Use `Path::from_src` 189 // FIXME: Use `Path::from_src`
169 let default = type_param.default_type().map(TypeRef::from_ast); 190 let default = type_param.default_type().map(|it| TypeRef::from_ast(lower_ctx, it));
170 let param = TypeParamData { 191 let param = TypeParamData {
171 name: Some(name.clone()), 192 name: Some(name.clone()),
172 default, 193 default,
@@ -176,29 +197,34 @@ impl GenericParams {
176 sm.insert(param_id, Either::Right(type_param.clone())); 197 sm.insert(param_id, Either::Right(type_param.clone()));
177 198
178 let type_ref = TypeRef::Path(name.into()); 199 let type_ref = TypeRef::Path(name.into());
179 self.fill_bounds(&type_param, type_ref); 200 self.fill_bounds(&lower_ctx, &type_param, type_ref);
180 } 201 }
181 } 202 }
182 203
183 fn fill_where_predicates(&mut self, where_clause: ast::WhereClause) { 204 fn fill_where_predicates(&mut self, lower_ctx: &LowerCtx, where_clause: ast::WhereClause) {
184 for pred in where_clause.predicates() { 205 for pred in where_clause.predicates() {
185 let type_ref = match pred.type_ref() { 206 let type_ref = match pred.type_ref() {
186 Some(type_ref) => type_ref, 207 Some(type_ref) => type_ref,
187 None => continue, 208 None => continue,
188 }; 209 };
189 let type_ref = TypeRef::from_ast(type_ref); 210 let type_ref = TypeRef::from_ast(lower_ctx, type_ref);
190 for bound in pred.type_bound_list().iter().flat_map(|l| l.bounds()) { 211 for bound in pred.type_bound_list().iter().flat_map(|l| l.bounds()) {
191 self.add_where_predicate_from_bound(bound, type_ref.clone()); 212 self.add_where_predicate_from_bound(lower_ctx, bound, type_ref.clone());
192 } 213 }
193 } 214 }
194 } 215 }
195 216
196 fn add_where_predicate_from_bound(&mut self, bound: ast::TypeBound, type_ref: TypeRef) { 217 fn add_where_predicate_from_bound(
218 &mut self,
219 lower_ctx: &LowerCtx,
220 bound: ast::TypeBound,
221 type_ref: TypeRef,
222 ) {
197 if bound.question_token().is_some() { 223 if bound.question_token().is_some() {
198 // FIXME: remove this bound 224 // FIXME: remove this bound
199 return; 225 return;
200 } 226 }
201 let bound = TypeBound::from_ast(bound); 227 let bound = TypeBound::from_ast(lower_ctx, bound);
202 self.where_predicates 228 self.where_predicates
203 .push(WherePredicate { target: WherePredicateTarget::TypeRef(type_ref), bound }); 229 .push(WherePredicate { target: WherePredicateTarget::TypeRef(type_ref), bound });
204 } 230 }
diff --git a/crates/ra_hir_def/src/nameres/collector.rs b/crates/ra_hir_def/src/nameres/collector.rs
index 98c74fe25..bf3968bd6 100644
--- a/crates/ra_hir_def/src/nameres/collector.rs
+++ b/crates/ra_hir_def/src/nameres/collector.rs
@@ -204,6 +204,7 @@ impl DefCollector<'_> {
204 ast_id: None, 204 ast_id: None,
205 krate: Some(krate), 205 krate: Some(krate),
206 kind: MacroDefKind::CustomDerive(expander), 206 kind: MacroDefKind::CustomDerive(expander),
207 local_inner: false,
207 }; 208 };
208 209
209 self.define_proc_macro(name.clone(), macro_id); 210 self.define_proc_macro(name.clone(), macro_id);
@@ -941,6 +942,7 @@ impl ModCollector<'_, '_> {
941 ast_id: Some(ast_id.ast_id), 942 ast_id: Some(ast_id.ast_id),
942 krate: Some(self.def_collector.def_map.krate), 943 krate: Some(self.def_collector.def_map.krate),
943 kind: MacroDefKind::Declarative, 944 kind: MacroDefKind::Declarative,
945 local_inner: mac.local_inner,
944 }; 946 };
945 self.def_collector.define_macro(self.module_id, name.clone(), macro_id, mac.export); 947 self.def_collector.define_macro(self.module_id, name.clone(), macro_id, mac.export);
946 } 948 }
diff --git a/crates/ra_hir_def/src/nameres/raw.rs b/crates/ra_hir_def/src/nameres/raw.rs
index 39b011ad7..a71503c76 100644
--- a/crates/ra_hir_def/src/nameres/raw.rs
+++ b/crates/ra_hir_def/src/nameres/raw.rs
@@ -188,6 +188,7 @@ pub(super) struct MacroData {
188 pub(super) path: ModPath, 188 pub(super) path: ModPath,
189 pub(super) name: Option<Name>, 189 pub(super) name: Option<Name>,
190 pub(super) export: bool, 190 pub(super) export: bool,
191 pub(super) local_inner: bool,
191 pub(super) builtin: bool, 192 pub(super) builtin: bool,
192} 193}
193 194
@@ -401,14 +402,32 @@ impl RawItemsCollector {
401 402
402 let name = m.name().map(|it| it.as_name()); 403 let name = m.name().map(|it| it.as_name());
403 let ast_id = self.source_ast_id_map.ast_id(&m); 404 let ast_id = self.source_ast_id_map.ast_id(&m);
404 // FIXME: cfg_attr
405 let export = m.attrs().filter_map(|x| x.simple_name()).any(|name| name == "macro_export");
406 405
407 // FIXME: cfg_attr 406 // FIXME: cfg_attr
408 let builtin = 407 let export_attr = attrs.by_key("macro_export");
409 m.attrs().filter_map(|x| x.simple_name()).any(|name| name == "rustc_builtin_macro"); 408
409 let export = export_attr.exists();
410 let local_inner = if export {
411 export_attr.tt_values().map(|it| &it.token_trees).flatten().any(|it| match it {
412 tt::TokenTree::Leaf(tt::Leaf::Ident(ident)) => {
413 ident.text.contains("local_inner_macros")
414 }
415 _ => false,
416 })
417 } else {
418 false
419 };
420
421 let builtin = attrs.by_key("rustc_builtin_macro").exists();
410 422
411 let m = self.raw_items.macros.alloc(MacroData { ast_id, path, name, export, builtin }); 423 let m = self.raw_items.macros.alloc(MacroData {
424 ast_id,
425 path,
426 name,
427 export,
428 local_inner,
429 builtin,
430 });
412 self.push_item(current_module, attrs, RawItemKind::Macro(m)); 431 self.push_item(current_module, attrs, RawItemKind::Macro(m));
413 } 432 }
414 433
diff --git a/crates/ra_hir_def/src/nameres/tests/macros.rs b/crates/ra_hir_def/src/nameres/tests/macros.rs
index b0befdfbd..9bc0e6287 100644
--- a/crates/ra_hir_def/src/nameres/tests/macros.rs
+++ b/crates/ra_hir_def/src/nameres/tests/macros.rs
@@ -136,6 +136,43 @@ fn macro_rules_export_with_local_inner_macros_are_visible() {
136} 136}
137 137
138#[test] 138#[test]
139fn local_inner_macros_makes_local_macros_usable() {
140 let map = def_map(
141 "
142 //- /main.rs crate:main deps:foo
143 foo::structs!(Foo, Bar);
144 mod bar;
145 //- /bar.rs
146 use crate::*;
147 //- /lib.rs crate:foo
148 #[macro_export(local_inner_macros)]
149 macro_rules! structs {
150 ($($i:ident),*) => {
151 inner!($($i),*);
152 }
153 }
154 #[macro_export]
155 macro_rules! inner {
156 ($($i:ident),*) => {
157 $(struct $i { field: u32 } )*
158 }
159 }
160 ",
161 );
162 assert_snapshot!(map, @r###"
163 â‹®crate
164 â‹®Bar: t v
165 â‹®Foo: t v
166 â‹®bar: t
167 â‹®
168 â‹®crate::bar
169 â‹®Bar: t v
170 â‹®Foo: t v
171 â‹®bar: t
172 "###);
173}
174
175#[test]
139fn unexpanded_macro_should_expand_by_fixedpoint_loop() { 176fn unexpanded_macro_should_expand_by_fixedpoint_loop() {
140 let map = def_map( 177 let map = def_map(
141 " 178 "
diff --git a/crates/ra_hir_def/src/path.rs b/crates/ra_hir_def/src/path.rs
index 162b3c8c7..e84efe2ab 100644
--- a/crates/ra_hir_def/src/path.rs
+++ b/crates/ra_hir_def/src/path.rs
@@ -7,6 +7,7 @@ use std::{
7 sync::Arc, 7 sync::Arc,
8}; 8};
9 9
10use crate::body::LowerCtx;
10use hir_expand::{ 11use hir_expand::{
11 hygiene::Hygiene, 12 hygiene::Hygiene,
12 name::{AsName, Name}, 13 name::{AsName, Name},
@@ -244,8 +245,8 @@ impl<'a> PathSegments<'a> {
244} 245}
245 246
246impl GenericArgs { 247impl GenericArgs {
247 pub(crate) fn from_ast(node: ast::TypeArgList) -> Option<GenericArgs> { 248 pub(crate) fn from_ast(lower_ctx: &LowerCtx, node: ast::TypeArgList) -> Option<GenericArgs> {
248 lower::lower_generic_args(node) 249 lower::lower_generic_args(lower_ctx, node)
249 } 250 }
250 251
251 pub(crate) fn empty() -> GenericArgs { 252 pub(crate) fn empty() -> GenericArgs {
diff --git a/crates/ra_hir_def/src/path/lower.rs b/crates/ra_hir_def/src/path/lower.rs
index 9ec2e0dcd..6a0c019fd 100644
--- a/crates/ra_hir_def/src/path/lower.rs
+++ b/crates/ra_hir_def/src/path/lower.rs
@@ -13,6 +13,7 @@ use ra_syntax::ast::{self, AstNode, TypeAscriptionOwner, TypeBoundsOwner};
13 13
14use super::AssociatedTypeBinding; 14use super::AssociatedTypeBinding;
15use crate::{ 15use crate::{
16 body::LowerCtx,
16 path::{GenericArg, GenericArgs, ModPath, Path, PathKind}, 17 path::{GenericArg, GenericArgs, ModPath, Path, PathKind},
17 type_ref::{TypeBound, TypeRef}, 18 type_ref::{TypeBound, TypeRef},
18}; 19};
@@ -26,6 +27,7 @@ pub(super) fn lower_path(mut path: ast::Path, hygiene: &Hygiene) -> Option<Path>
26 let mut type_anchor = None; 27 let mut type_anchor = None;
27 let mut segments = Vec::new(); 28 let mut segments = Vec::new();
28 let mut generic_args = Vec::new(); 29 let mut generic_args = Vec::new();
30 let ctx = LowerCtx::with_hygiene(hygiene);
29 loop { 31 loop {
30 let segment = path.segment()?; 32 let segment = path.segment()?;
31 33
@@ -40,9 +42,10 @@ pub(super) fn lower_path(mut path: ast::Path, hygiene: &Hygiene) -> Option<Path>
40 Either::Left(name) => { 42 Either::Left(name) => {
41 let args = segment 43 let args = segment
42 .type_arg_list() 44 .type_arg_list()
43 .and_then(lower_generic_args) 45 .and_then(|it| lower_generic_args(&ctx, it))
44 .or_else(|| { 46 .or_else(|| {
45 lower_generic_args_from_fn_path( 47 lower_generic_args_from_fn_path(
48 &ctx,
46 segment.param_list(), 49 segment.param_list(),
47 segment.ret_type(), 50 segment.ret_type(),
48 ) 51 )
@@ -60,7 +63,7 @@ pub(super) fn lower_path(mut path: ast::Path, hygiene: &Hygiene) -> Option<Path>
60 ast::PathSegmentKind::Type { type_ref, trait_ref } => { 63 ast::PathSegmentKind::Type { type_ref, trait_ref } => {
61 assert!(path.qualifier().is_none()); // this can only occur at the first segment 64 assert!(path.qualifier().is_none()); // this can only occur at the first segment
62 65
63 let self_type = TypeRef::from_ast(type_ref?); 66 let self_type = TypeRef::from_ast(&ctx, type_ref?);
64 67
65 match trait_ref { 68 match trait_ref {
66 // <T>::foo 69 // <T>::foo
@@ -113,6 +116,21 @@ pub(super) fn lower_path(mut path: ast::Path, hygiene: &Hygiene) -> Option<Path>
113 } 116 }
114 segments.reverse(); 117 segments.reverse();
115 generic_args.reverse(); 118 generic_args.reverse();
119
120 // handle local_inner_macros :
121 // Basically, even in rustc it is quite hacky:
122 // https://github.com/rust-lang/rust/blob/614f273e9388ddd7804d5cbc80b8865068a3744e/src/librustc_resolve/macros.rs#L456
123 // We follow what it did anyway :)
124 if segments.len() == 1 && kind == PathKind::Plain {
125 if let Some(macro_call) = path.syntax().parent().and_then(ast::MacroCall::cast) {
126 if macro_call.is_bang() {
127 if let Some(crate_id) = hygiene.local_inner_macros() {
128 kind = PathKind::DollarCrate(crate_id);
129 }
130 }
131 }
132 }
133
116 let mod_path = ModPath { kind, segments }; 134 let mod_path = ModPath { kind, segments };
117 return Some(Path { type_anchor, mod_path, generic_args }); 135 return Some(Path { type_anchor, mod_path, generic_args });
118 136
@@ -128,10 +146,13 @@ pub(super) fn lower_path(mut path: ast::Path, hygiene: &Hygiene) -> Option<Path>
128 } 146 }
129} 147}
130 148
131pub(super) fn lower_generic_args(node: ast::TypeArgList) -> Option<GenericArgs> { 149pub(super) fn lower_generic_args(
150 lower_ctx: &LowerCtx,
151 node: ast::TypeArgList,
152) -> Option<GenericArgs> {
132 let mut args = Vec::new(); 153 let mut args = Vec::new();
133 for type_arg in node.type_args() { 154 for type_arg in node.type_args() {
134 let type_ref = TypeRef::from_ast_opt(type_arg.type_ref()); 155 let type_ref = TypeRef::from_ast_opt(lower_ctx, type_arg.type_ref());
135 args.push(GenericArg::Type(type_ref)); 156 args.push(GenericArg::Type(type_ref));
136 } 157 }
137 // lifetimes ignored for now 158 // lifetimes ignored for now
@@ -140,9 +161,9 @@ pub(super) fn lower_generic_args(node: ast::TypeArgList) -> Option<GenericArgs>
140 let assoc_type_arg: ast::AssocTypeArg = assoc_type_arg; 161 let assoc_type_arg: ast::AssocTypeArg = assoc_type_arg;
141 if let Some(name_ref) = assoc_type_arg.name_ref() { 162 if let Some(name_ref) = assoc_type_arg.name_ref() {
142 let name = name_ref.as_name(); 163 let name = name_ref.as_name();
143 let type_ref = assoc_type_arg.type_ref().map(TypeRef::from_ast); 164 let type_ref = assoc_type_arg.type_ref().map(|it| TypeRef::from_ast(lower_ctx, it));
144 let bounds = if let Some(l) = assoc_type_arg.type_bound_list() { 165 let bounds = if let Some(l) = assoc_type_arg.type_bound_list() {
145 l.bounds().map(TypeBound::from_ast).collect() 166 l.bounds().map(|it| TypeBound::from_ast(lower_ctx, it)).collect()
146 } else { 167 } else {
147 Vec::new() 168 Vec::new()
148 }; 169 };
@@ -159,6 +180,7 @@ pub(super) fn lower_generic_args(node: ast::TypeArgList) -> Option<GenericArgs>
159/// Collect `GenericArgs` from the parts of a fn-like path, i.e. `Fn(X, Y) 180/// Collect `GenericArgs` from the parts of a fn-like path, i.e. `Fn(X, Y)
160/// -> Z` (which desugars to `Fn<(X, Y), Output=Z>`). 181/// -> Z` (which desugars to `Fn<(X, Y), Output=Z>`).
161fn lower_generic_args_from_fn_path( 182fn lower_generic_args_from_fn_path(
183 ctx: &LowerCtx,
162 params: Option<ast::ParamList>, 184 params: Option<ast::ParamList>,
163 ret_type: Option<ast::RetType>, 185 ret_type: Option<ast::RetType>,
164) -> Option<GenericArgs> { 186) -> Option<GenericArgs> {
@@ -167,14 +189,14 @@ fn lower_generic_args_from_fn_path(
167 if let Some(params) = params { 189 if let Some(params) = params {
168 let mut param_types = Vec::new(); 190 let mut param_types = Vec::new();
169 for param in params.params() { 191 for param in params.params() {
170 let type_ref = TypeRef::from_ast_opt(param.ascribed_type()); 192 let type_ref = TypeRef::from_ast_opt(&ctx, param.ascribed_type());
171 param_types.push(type_ref); 193 param_types.push(type_ref);
172 } 194 }
173 let arg = GenericArg::Type(TypeRef::Tuple(param_types)); 195 let arg = GenericArg::Type(TypeRef::Tuple(param_types));
174 args.push(arg); 196 args.push(arg);
175 } 197 }
176 if let Some(ret_type) = ret_type { 198 if let Some(ret_type) = ret_type {
177 let type_ref = TypeRef::from_ast_opt(ret_type.type_ref()); 199 let type_ref = TypeRef::from_ast_opt(&ctx, ret_type.type_ref());
178 bindings.push(AssociatedTypeBinding { 200 bindings.push(AssociatedTypeBinding {
179 name: name![Output], 201 name: name![Output],
180 type_ref: Some(type_ref), 202 type_ref: Some(type_ref),
diff --git a/crates/ra_hir_def/src/type_ref.rs b/crates/ra_hir_def/src/type_ref.rs
index f308c6bdf..5bdad9efd 100644
--- a/crates/ra_hir_def/src/type_ref.rs
+++ b/crates/ra_hir_def/src/type_ref.rs
@@ -3,7 +3,7 @@
3 3
4use ra_syntax::ast::{self, TypeAscriptionOwner, TypeBoundsOwner}; 4use ra_syntax::ast::{self, TypeAscriptionOwner, TypeBoundsOwner};
5 5
6use crate::path::Path; 6use crate::{body::LowerCtx, path::Path};
7 7
8#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)] 8#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9pub enum Mutability { 9pub enum Mutability {
@@ -64,30 +64,34 @@ pub enum TypeBound {
64 64
65impl TypeRef { 65impl TypeRef {
66 /// Converts an `ast::TypeRef` to a `hir::TypeRef`. 66 /// Converts an `ast::TypeRef` to a `hir::TypeRef`.
67 pub(crate) fn from_ast(node: ast::TypeRef) -> Self { 67 pub(crate) fn from_ast(ctx: &LowerCtx, node: ast::TypeRef) -> Self {
68 match node { 68 match node {
69 ast::TypeRef::ParenType(inner) => TypeRef::from_ast_opt(inner.type_ref()), 69 ast::TypeRef::ParenType(inner) => TypeRef::from_ast_opt(&ctx, inner.type_ref()),
70 ast::TypeRef::TupleType(inner) => { 70 ast::TypeRef::TupleType(inner) => {
71 TypeRef::Tuple(inner.fields().map(TypeRef::from_ast).collect()) 71 TypeRef::Tuple(inner.fields().map(|it| TypeRef::from_ast(ctx, it)).collect())
72 } 72 }
73 ast::TypeRef::NeverType(..) => TypeRef::Never, 73 ast::TypeRef::NeverType(..) => TypeRef::Never,
74 ast::TypeRef::PathType(inner) => { 74 ast::TypeRef::PathType(inner) => {
75 // FIXME: Use `Path::from_src` 75 // FIXME: Use `Path::from_src`
76 inner.path().and_then(Path::from_ast).map(TypeRef::Path).unwrap_or(TypeRef::Error) 76 inner
77 .path()
78 .and_then(|it| ctx.lower_path(it))
79 .map(TypeRef::Path)
80 .unwrap_or(TypeRef::Error)
77 } 81 }
78 ast::TypeRef::PointerType(inner) => { 82 ast::TypeRef::PointerType(inner) => {
79 let inner_ty = TypeRef::from_ast_opt(inner.type_ref()); 83 let inner_ty = TypeRef::from_ast_opt(&ctx, inner.type_ref());
80 let mutability = Mutability::from_mutable(inner.mut_token().is_some()); 84 let mutability = Mutability::from_mutable(inner.mut_token().is_some());
81 TypeRef::RawPtr(Box::new(inner_ty), mutability) 85 TypeRef::RawPtr(Box::new(inner_ty), mutability)
82 } 86 }
83 ast::TypeRef::ArrayType(inner) => { 87 ast::TypeRef::ArrayType(inner) => {
84 TypeRef::Array(Box::new(TypeRef::from_ast_opt(inner.type_ref()))) 88 TypeRef::Array(Box::new(TypeRef::from_ast_opt(&ctx, inner.type_ref())))
85 } 89 }
86 ast::TypeRef::SliceType(inner) => { 90 ast::TypeRef::SliceType(inner) => {
87 TypeRef::Slice(Box::new(TypeRef::from_ast_opt(inner.type_ref()))) 91 TypeRef::Slice(Box::new(TypeRef::from_ast_opt(&ctx, inner.type_ref())))
88 } 92 }
89 ast::TypeRef::ReferenceType(inner) => { 93 ast::TypeRef::ReferenceType(inner) => {
90 let inner_ty = TypeRef::from_ast_opt(inner.type_ref()); 94 let inner_ty = TypeRef::from_ast_opt(&ctx, inner.type_ref());
91 let mutability = Mutability::from_mutable(inner.mut_token().is_some()); 95 let mutability = Mutability::from_mutable(inner.mut_token().is_some());
92 TypeRef::Reference(Box::new(inner_ty), mutability) 96 TypeRef::Reference(Box::new(inner_ty), mutability)
93 } 97 }
@@ -96,10 +100,13 @@ impl TypeRef {
96 let ret_ty = inner 100 let ret_ty = inner
97 .ret_type() 101 .ret_type()
98 .and_then(|rt| rt.type_ref()) 102 .and_then(|rt| rt.type_ref())
99 .map(TypeRef::from_ast) 103 .map(|it| TypeRef::from_ast(ctx, it))
100 .unwrap_or_else(|| TypeRef::Tuple(Vec::new())); 104 .unwrap_or_else(|| TypeRef::Tuple(Vec::new()));
101 let mut params = if let Some(pl) = inner.param_list() { 105 let mut params = if let Some(pl) = inner.param_list() {
102 pl.params().map(|p| p.ascribed_type()).map(TypeRef::from_ast_opt).collect() 106 pl.params()
107 .map(|p| p.ascribed_type())
108 .map(|it| TypeRef::from_ast_opt(&ctx, it))
109 .collect()
103 } else { 110 } else {
104 Vec::new() 111 Vec::new()
105 }; 112 };
@@ -107,19 +114,19 @@ impl TypeRef {
107 TypeRef::Fn(params) 114 TypeRef::Fn(params)
108 } 115 }
109 // for types are close enough for our purposes to the inner type for now... 116 // for types are close enough for our purposes to the inner type for now...
110 ast::TypeRef::ForType(inner) => TypeRef::from_ast_opt(inner.type_ref()), 117 ast::TypeRef::ForType(inner) => TypeRef::from_ast_opt(&ctx, inner.type_ref()),
111 ast::TypeRef::ImplTraitType(inner) => { 118 ast::TypeRef::ImplTraitType(inner) => {
112 TypeRef::ImplTrait(type_bounds_from_ast(inner.type_bound_list())) 119 TypeRef::ImplTrait(type_bounds_from_ast(ctx, inner.type_bound_list()))
113 } 120 }
114 ast::TypeRef::DynTraitType(inner) => { 121 ast::TypeRef::DynTraitType(inner) => {
115 TypeRef::DynTrait(type_bounds_from_ast(inner.type_bound_list())) 122 TypeRef::DynTrait(type_bounds_from_ast(ctx, inner.type_bound_list()))
116 } 123 }
117 } 124 }
118 } 125 }
119 126
120 pub(crate) fn from_ast_opt(node: Option<ast::TypeRef>) -> Self { 127 pub(crate) fn from_ast_opt(ctx: &LowerCtx, node: Option<ast::TypeRef>) -> Self {
121 if let Some(node) = node { 128 if let Some(node) = node {
122 TypeRef::from_ast(node) 129 TypeRef::from_ast(ctx, node)
123 } else { 130 } else {
124 TypeRef::Error 131 TypeRef::Error
125 } 132 }
@@ -180,24 +187,27 @@ impl TypeRef {
180 } 187 }
181} 188}
182 189
183pub(crate) fn type_bounds_from_ast(type_bounds_opt: Option<ast::TypeBoundList>) -> Vec<TypeBound> { 190pub(crate) fn type_bounds_from_ast(
191 lower_ctx: &LowerCtx,
192 type_bounds_opt: Option<ast::TypeBoundList>,
193) -> Vec<TypeBound> {
184 if let Some(type_bounds) = type_bounds_opt { 194 if let Some(type_bounds) = type_bounds_opt {
185 type_bounds.bounds().map(TypeBound::from_ast).collect() 195 type_bounds.bounds().map(|it| TypeBound::from_ast(lower_ctx, it)).collect()
186 } else { 196 } else {
187 vec![] 197 vec![]
188 } 198 }
189} 199}
190 200
191impl TypeBound { 201impl TypeBound {
192 pub(crate) fn from_ast(node: ast::TypeBound) -> Self { 202 pub(crate) fn from_ast(ctx: &LowerCtx, node: ast::TypeBound) -> Self {
193 match node.kind() { 203 match node.kind() {
194 ast::TypeBoundKind::PathType(path_type) => { 204 ast::TypeBoundKind::PathType(path_type) => {
195 let path = match path_type.path() { 205 let path = match path_type.path() {
196 Some(p) => p, 206 Some(p) => p,
197 None => return TypeBound::Error, 207 None => return TypeBound::Error,
198 }; 208 };
199 // FIXME: Use `Path::from_src` 209
200 let path = match Path::from_ast(path) { 210 let path = match ctx.lower_path(path) {
201 Some(p) => p, 211 Some(p) => p,
202 None => return TypeBound::Error, 212 None => return TypeBound::Error,
203 }; 213 };
diff --git a/crates/ra_hir_expand/src/builtin_derive.rs b/crates/ra_hir_expand/src/builtin_derive.rs
index e60f879a3..1dc9cac66 100644
--- a/crates/ra_hir_expand/src/builtin_derive.rs
+++ b/crates/ra_hir_expand/src/builtin_derive.rs
@@ -38,7 +38,7 @@ macro_rules! register_builtin {
38 _ => return None, 38 _ => return None,
39 }; 39 };
40 40
41 Some(MacroDefId { krate: None, ast_id: None, kind: MacroDefKind::BuiltInDerive(kind) }) 41 Some(MacroDefId { krate: None, ast_id: None, kind: MacroDefKind::BuiltInDerive(kind), local_inner: false })
42 } 42 }
43 }; 43 };
44} 44}
diff --git a/crates/ra_hir_expand/src/builtin_macro.rs b/crates/ra_hir_expand/src/builtin_macro.rs
index e0fef613d..d8b3d342c 100644
--- a/crates/ra_hir_expand/src/builtin_macro.rs
+++ b/crates/ra_hir_expand/src/builtin_macro.rs
@@ -73,11 +73,13 @@ pub fn find_builtin_macro(
73 krate: Some(krate), 73 krate: Some(krate),
74 ast_id: Some(ast_id), 74 ast_id: Some(ast_id),
75 kind: MacroDefKind::BuiltIn(kind), 75 kind: MacroDefKind::BuiltIn(kind),
76 local_inner: false,
76 }), 77 }),
77 Either::Right(kind) => Some(MacroDefId { 78 Either::Right(kind) => Some(MacroDefId {
78 krate: Some(krate), 79 krate: Some(krate),
79 ast_id: Some(ast_id), 80 ast_id: Some(ast_id),
80 kind: MacroDefKind::BuiltInEager(kind), 81 kind: MacroDefKind::BuiltInEager(kind),
82 local_inner: false,
81 }), 83 }),
82 } 84 }
83} 85}
@@ -406,6 +408,7 @@ mod tests {
406 krate: Some(CrateId(0)), 408 krate: Some(CrateId(0)),
407 ast_id: Some(AstId::new(file_id.into(), ast_id_map.ast_id(&macro_calls[0]))), 409 ast_id: Some(AstId::new(file_id.into(), ast_id_map.ast_id(&macro_calls[0]))),
408 kind: MacroDefKind::BuiltIn(expander), 410 kind: MacroDefKind::BuiltIn(expander),
411 local_inner: false,
409 }; 412 };
410 413
411 let loc = MacroCallLoc { 414 let loc = MacroCallLoc {
@@ -425,6 +428,7 @@ mod tests {
425 krate: Some(CrateId(0)), 428 krate: Some(CrateId(0)),
426 ast_id: Some(AstId::new(file_id.into(), ast_id_map.ast_id(&macro_calls[0]))), 429 ast_id: Some(AstId::new(file_id.into(), ast_id_map.ast_id(&macro_calls[0]))),
427 kind: MacroDefKind::BuiltInEager(expander), 430 kind: MacroDefKind::BuiltInEager(expander),
431 local_inner: false,
428 }; 432 };
429 433
430 let args = macro_calls[1].token_tree().unwrap(); 434 let args = macro_calls[1].token_tree().unwrap();
diff --git a/crates/ra_hir_expand/src/db.rs b/crates/ra_hir_expand/src/db.rs
index 047452306..4c12d0a15 100644
--- a/crates/ra_hir_expand/src/db.rs
+++ b/crates/ra_hir_expand/src/db.rs
@@ -330,7 +330,7 @@ fn to_fragment_kind(db: &dyn AstDatabase, id: MacroCallId) -> FragmentKind {
330 FragmentKind::Expr 330 FragmentKind::Expr
331 } 331 }
332 // FIXME: Expand to statements in appropriate positions; HIR lowering needs to handle that 332 // FIXME: Expand to statements in appropriate positions; HIR lowering needs to handle that
333 EXPR_STMT | BLOCK => FragmentKind::Expr, 333 EXPR_STMT | BLOCK_EXPR => FragmentKind::Expr,
334 ARG_LIST => FragmentKind::Expr, 334 ARG_LIST => FragmentKind::Expr,
335 TRY_EXPR => FragmentKind::Expr, 335 TRY_EXPR => FragmentKind::Expr,
336 TUPLE_EXPR => FragmentKind::Expr, 336 TUPLE_EXPR => FragmentKind::Expr,
@@ -342,7 +342,6 @@ fn to_fragment_kind(db: &dyn AstDatabase, id: MacroCallId) -> FragmentKind {
342 CONDITION => FragmentKind::Expr, 342 CONDITION => FragmentKind::Expr,
343 BREAK_EXPR => FragmentKind::Expr, 343 BREAK_EXPR => FragmentKind::Expr,
344 RETURN_EXPR => FragmentKind::Expr, 344 RETURN_EXPR => FragmentKind::Expr,
345 BLOCK_EXPR => FragmentKind::Expr,
346 MATCH_EXPR => FragmentKind::Expr, 345 MATCH_EXPR => FragmentKind::Expr,
347 MATCH_ARM => FragmentKind::Expr, 346 MATCH_ARM => FragmentKind::Expr,
348 MATCH_GUARD => FragmentKind::Expr, 347 MATCH_GUARD => FragmentKind::Expr,
diff --git a/crates/ra_hir_expand/src/hygiene.rs b/crates/ra_hir_expand/src/hygiene.rs
index 0b41d0e95..6b482a60c 100644
--- a/crates/ra_hir_expand/src/hygiene.rs
+++ b/crates/ra_hir_expand/src/hygiene.rs
@@ -12,35 +12,38 @@ use crate::{
12 HirFileId, HirFileIdRepr, MacroCallId, MacroDefKind, 12 HirFileId, HirFileIdRepr, MacroCallId, MacroDefKind,
13}; 13};
14 14
15#[derive(Debug)] 15#[derive(Clone, Debug)]
16pub struct Hygiene { 16pub struct Hygiene {
17 // This is what `$crate` expands to 17 // This is what `$crate` expands to
18 def_crate: Option<CrateId>, 18 def_crate: Option<CrateId>,
19
20 // Indiciate this is a local inner macro
21 local_inner: bool,
19} 22}
20 23
21impl Hygiene { 24impl Hygiene {
22 pub fn new(db: &dyn AstDatabase, file_id: HirFileId) -> Hygiene { 25 pub fn new(db: &dyn AstDatabase, file_id: HirFileId) -> Hygiene {
23 let def_crate = match file_id.0 { 26 let (def_crate, local_inner) = match file_id.0 {
24 HirFileIdRepr::FileId(_) => None, 27 HirFileIdRepr::FileId(_) => (None, false),
25 HirFileIdRepr::MacroFile(macro_file) => match macro_file.macro_call_id { 28 HirFileIdRepr::MacroFile(macro_file) => match macro_file.macro_call_id {
26 MacroCallId::LazyMacro(id) => { 29 MacroCallId::LazyMacro(id) => {
27 let loc = db.lookup_intern_macro(id); 30 let loc = db.lookup_intern_macro(id);
28 match loc.def.kind { 31 match loc.def.kind {
29 MacroDefKind::Declarative => loc.def.krate, 32 MacroDefKind::Declarative => (loc.def.krate, loc.def.local_inner),
30 MacroDefKind::BuiltIn(_) => None, 33 MacroDefKind::BuiltIn(_) => (None, false),
31 MacroDefKind::BuiltInDerive(_) => None, 34 MacroDefKind::BuiltInDerive(_) => (None, false),
32 MacroDefKind::BuiltInEager(_) => None, 35 MacroDefKind::BuiltInEager(_) => (None, false),
33 MacroDefKind::CustomDerive(_) => None, 36 MacroDefKind::CustomDerive(_) => (None, false),
34 } 37 }
35 } 38 }
36 MacroCallId::EagerMacro(_id) => None, 39 MacroCallId::EagerMacro(_id) => (None, false),
37 }, 40 },
38 }; 41 };
39 Hygiene { def_crate } 42 Hygiene { def_crate, local_inner }
40 } 43 }
41 44
42 pub fn new_unhygienic() -> Hygiene { 45 pub fn new_unhygienic() -> Hygiene {
43 Hygiene { def_crate: None } 46 Hygiene { def_crate: None, local_inner: false }
44 } 47 }
45 48
46 // FIXME: this should just return name 49 // FIXME: this should just return name
@@ -52,4 +55,12 @@ impl Hygiene {
52 } 55 }
53 Either::Left(name_ref.as_name()) 56 Either::Left(name_ref.as_name())
54 } 57 }
58
59 pub fn local_inner_macros(&self) -> Option<CrateId> {
60 if self.local_inner {
61 self.def_crate
62 } else {
63 None
64 }
65 }
55} 66}
diff --git a/crates/ra_hir_expand/src/lib.rs b/crates/ra_hir_expand/src/lib.rs
index 754a0f005..f440c073b 100644
--- a/crates/ra_hir_expand/src/lib.rs
+++ b/crates/ra_hir_expand/src/lib.rs
@@ -204,6 +204,8 @@ pub struct MacroDefId {
204 pub krate: Option<CrateId>, 204 pub krate: Option<CrateId>,
205 pub ast_id: Option<AstId<ast::MacroCall>>, 205 pub ast_id: Option<AstId<ast::MacroCall>>,
206 pub kind: MacroDefKind, 206 pub kind: MacroDefKind,
207
208 pub local_inner: bool,
207} 209}
208 210
209impl MacroDefId { 211impl MacroDefId {
diff --git a/crates/ra_hir_ty/Cargo.toml b/crates/ra_hir_ty/Cargo.toml
index 04d3cd6a2..65db6d1b0 100644
--- a/crates/ra_hir_ty/Cargo.toml
+++ b/crates/ra_hir_ty/Cargo.toml
@@ -11,7 +11,7 @@ doctest = false
11itertools = "0.9.0" 11itertools = "0.9.0"
12arrayvec = "0.5.1" 12arrayvec = "0.5.1"
13smallvec = "1.2.0" 13smallvec = "1.2.0"
14ena = "0.13.1" 14ena = "0.14.0"
15log = "0.4.8" 15log = "0.4.8"
16rustc-hash = "1.1.0" 16rustc-hash = "1.1.0"
17 17
diff --git a/crates/ra_hir_ty/src/lib.rs b/crates/ra_hir_ty/src/lib.rs
index a8ef32ec5..a6f56c661 100644
--- a/crates/ra_hir_ty/src/lib.rs
+++ b/crates/ra_hir_ty/src/lib.rs
@@ -66,7 +66,8 @@ pub use autoderef::autoderef;
66pub use infer::{InferTy, InferenceResult}; 66pub use infer::{InferTy, InferenceResult};
67pub use lower::CallableDef; 67pub use lower::CallableDef;
68pub use lower::{ 68pub use lower::{
69 callable_item_sig, ImplTraitLoweringMode, TyDefId, TyLoweringContext, ValueTyDefId, 69 associated_type_shorthand_candidates, callable_item_sig, ImplTraitLoweringMode, TyDefId,
70 TyLoweringContext, ValueTyDefId,
70}; 71};
71pub use traits::{InEnvironment, Obligation, ProjectionPredicate, TraitEnvironment}; 72pub use traits::{InEnvironment, Obligation, ProjectionPredicate, TraitEnvironment};
72 73
diff --git a/crates/ra_hir_ty/src/lower.rs b/crates/ra_hir_ty/src/lower.rs
index a6f893037..9ad6dbe07 100644
--- a/crates/ra_hir_ty/src/lower.rs
+++ b/crates/ra_hir_ty/src/lower.rs
@@ -17,9 +17,9 @@ use hir_def::{
17 path::{GenericArg, Path, PathSegment, PathSegments}, 17 path::{GenericArg, Path, PathSegment, PathSegments},
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, AssocItemId, ConstId, EnumId, EnumVariantId, FunctionId, GenericDefId,
21 ImplId, LocalFieldId, Lookup, StaticId, StructId, TraitId, TypeAliasId, TypeParamId, UnionId, 21 HasModule, ImplId, LocalFieldId, Lookup, StaticId, StructId, TraitId, TypeAliasId, TypeParamId,
22 VariantId, 22 UnionId, VariantId,
23}; 23};
24use ra_arena::map::ArenaMap; 24use ra_arena::map::ArenaMap;
25use ra_db::CrateId; 25use ra_db::CrateId;
@@ -34,6 +34,7 @@ use crate::{
34 Binders, BoundVar, DebruijnIndex, FnSig, GenericPredicate, PolyFnSig, ProjectionPredicate, 34 Binders, BoundVar, DebruijnIndex, FnSig, GenericPredicate, PolyFnSig, ProjectionPredicate,
35 ProjectionTy, Substs, TraitEnvironment, TraitRef, Ty, TypeCtor, TypeWalk, 35 ProjectionTy, Substs, TraitEnvironment, TraitRef, Ty, TypeCtor, TypeWalk,
36}; 36};
37use hir_expand::name::Name;
37 38
38#[derive(Debug)] 39#[derive(Debug)]
39pub struct TyLoweringContext<'a> { 40pub struct TyLoweringContext<'a> {
@@ -383,61 +384,38 @@ impl Ty {
383 res: Option<TypeNs>, 384 res: Option<TypeNs>,
384 segment: PathSegment<'_>, 385 segment: PathSegment<'_>,
385 ) -> Ty { 386 ) -> Ty {
386 let traits_from_env: Vec<_> = match res { 387 if let Some(res) = res {
387 Some(TypeNs::SelfType(impl_id)) => match ctx.db.impl_trait(impl_id) { 388 let ty =
388 None => return Ty::Unknown, 389 associated_type_shorthand_candidates(ctx.db, res, move |name, t, associated_ty| {
389 Some(trait_ref) => vec![trait_ref.value], 390 if name == segment.name {
390 }, 391 let substs = match ctx.type_param_mode {
391 Some(TypeNs::GenericParam(param_id)) => { 392 TypeParamLoweringMode::Placeholder => {
392 let predicates = ctx.db.generic_predicates_for_param(param_id); 393 // if we're lowering to placeholders, we have to put
393 let mut traits_: Vec<_> = predicates 394 // them in now
394 .iter() 395 let s = Substs::type_params(
395 .filter_map(|pred| match &pred.value { 396 ctx.db,
396 GenericPredicate::Implemented(tr) => Some(tr.clone()), 397 ctx.resolver.generic_def().expect(
397 _ => None, 398 "there should be generics if there's a generic param",
398 }) 399 ),
399 .collect(); 400 );
400 // Handle `Self::Type` referring to own associated type in trait definitions 401 t.substs.clone().subst_bound_vars(&s)
401 if let GenericDefId::TraitId(trait_id) = param_id.parent { 402 }
402 let generics = generics(ctx.db.upcast(), trait_id.into()); 403 TypeParamLoweringMode::Variable => t.substs.clone(),
403 if generics.params.types[param_id.local_id].provenance
404 == TypeParamProvenance::TraitSelf
405 {
406 let trait_ref = TraitRef {
407 trait_: trait_id,
408 substs: Substs::bound_vars(&generics, DebruijnIndex::INNERMOST),
409 }; 404 };
410 traits_.push(trait_ref); 405 // FIXME handle type parameters on the segment
406 return Some(Ty::Projection(ProjectionTy {
407 associated_ty,
408 parameters: substs,
409 }));
411 } 410 }
412 } 411
413 traits_ 412 None
414 } 413 });
415 _ => return Ty::Unknown, 414
416 }; 415 ty.unwrap_or(Ty::Unknown)
417 let traits = traits_from_env.into_iter().flat_map(|t| all_super_trait_refs(ctx.db, t)); 416 } else {
418 for t in traits { 417 Ty::Unknown
419 if let Some(associated_ty) =
420 ctx.db.trait_data(t.trait_).associated_type_by_name(&segment.name)
421 {
422 let substs = match ctx.type_param_mode {
423 TypeParamLoweringMode::Placeholder => {
424 // if we're lowering to placeholders, we have to put
425 // them in now
426 let s = Substs::type_params(
427 ctx.db,
428 ctx.resolver
429 .generic_def()
430 .expect("there should be generics if there's a generic param"),
431 );
432 t.substs.subst_bound_vars(&s)
433 }
434 TypeParamLoweringMode::Variable => t.substs,
435 };
436 // FIXME handle (forbid) type parameters on the segment
437 return Ty::Projection(ProjectionTy { associated_ty, parameters: substs });
438 }
439 } 418 }
440 Ty::Unknown
441 } 419 }
442 420
443 fn from_hir_path_inner( 421 fn from_hir_path_inner(
@@ -694,6 +672,61 @@ pub fn callable_item_sig(db: &dyn HirDatabase, def: CallableDef) -> PolyFnSig {
694 } 672 }
695} 673}
696 674
675pub fn associated_type_shorthand_candidates<R>(
676 db: &dyn HirDatabase,
677 res: TypeNs,
678 mut cb: impl FnMut(&Name, &TraitRef, TypeAliasId) -> Option<R>,
679) -> Option<R> {
680 let traits_from_env: Vec<_> = match res {
681 TypeNs::SelfType(impl_id) => match db.impl_trait(impl_id) {
682 None => vec![],
683 Some(trait_ref) => vec![trait_ref.value],
684 },
685 TypeNs::GenericParam(param_id) => {
686 let predicates = db.generic_predicates_for_param(param_id);
687 let mut traits_: Vec<_> = predicates
688 .iter()
689 .filter_map(|pred| match &pred.value {
690 GenericPredicate::Implemented(tr) => Some(tr.clone()),
691 _ => None,
692 })
693 .collect();
694 // Handle `Self::Type` referring to own associated type in trait definitions
695 if let GenericDefId::TraitId(trait_id) = param_id.parent {
696 let generics = generics(db.upcast(), trait_id.into());
697 if generics.params.types[param_id.local_id].provenance
698 == TypeParamProvenance::TraitSelf
699 {
700 let trait_ref = TraitRef {
701 trait_: trait_id,
702 substs: Substs::bound_vars(&generics, DebruijnIndex::INNERMOST),
703 };
704 traits_.push(trait_ref);
705 }
706 }
707 traits_
708 }
709 _ => vec![],
710 };
711
712 for t in traits_from_env.into_iter().flat_map(move |t| all_super_trait_refs(db, t)) {
713 let data = db.trait_data(t.trait_);
714
715 for (name, assoc_id) in &data.items {
716 match assoc_id {
717 AssocItemId::TypeAliasId(alias) => {
718 if let Some(result) = cb(name, &t, *alias) {
719 return Some(result);
720 }
721 }
722 AssocItemId::FunctionId(_) | AssocItemId::ConstId(_) => {}
723 }
724 }
725 }
726
727 None
728}
729
697/// Build the type of all specific fields of a struct or enum variant. 730/// Build the type of all specific fields of a struct or enum variant.
698pub(crate) fn field_types_query( 731pub(crate) fn field_types_query(
699 db: &dyn HirDatabase, 732 db: &dyn HirDatabase,
diff --git a/crates/ra_hir_ty/src/tests/macros.rs b/crates/ra_hir_ty/src/tests/macros.rs
index 5ddecbdc6..29e38a06c 100644
--- a/crates/ra_hir_ty/src/tests/macros.rs
+++ b/crates/ra_hir_ty/src/tests/macros.rs
@@ -339,6 +339,46 @@ pub fn baz() -> usize { 31usize }
339} 339}
340 340
341#[test] 341#[test]
342fn infer_macro_with_dollar_crate_is_correct_in_trait_associate_type() {
343 let (db, pos) = TestDB::with_position(
344 r#"
345//- /main.rs crate:main deps:foo
346use foo::Trait;
347
348fn test() {
349 let msg = foo::Message(foo::MessageRef);
350 let r = msg.deref();
351 r<|>;
352}
353
354//- /lib.rs crate:foo
355pub struct MessageRef;
356pub struct Message(MessageRef);
357
358pub trait Trait {
359 type Target;
360 fn deref(&self) -> &Self::Target;
361}
362
363#[macro_export]
364macro_rules! expand {
365 () => {
366 impl Trait for Message {
367 type Target = $crate::MessageRef;
368 fn deref(&self) -> &Self::Target {
369 &self.0
370 }
371 }
372 }
373}
374
375expand!();
376"#,
377 );
378 assert_eq!("&MessageRef", type_at_pos(&db, pos));
379}
380
381#[test]
342fn infer_type_value_non_legacy_macro_use_as() { 382fn infer_type_value_non_legacy_macro_use_as() {
343 assert_snapshot!( 383 assert_snapshot!(
344 infer(r#" 384 infer(r#"
@@ -388,6 +428,32 @@ fn main() {
388} 428}
389 429
390#[test] 430#[test]
431fn infer_local_inner_macros() {
432 let (db, pos) = TestDB::with_position(
433 r#"
434//- /main.rs crate:main deps:foo
435fn test() {
436 let x = foo::foo!(1);
437 x<|>;
438}
439
440//- /lib.rs crate:foo
441#[macro_export(local_inner_macros)]
442macro_rules! foo {
443 (1) => { bar!() };
444}
445
446#[macro_export]
447macro_rules! bar {
448 () => { 42 }
449}
450
451"#,
452 );
453 assert_eq!("i32", type_at_pos(&db, pos));
454}
455
456#[test]
391fn infer_builtin_macros_line() { 457fn infer_builtin_macros_line() {
392 assert_snapshot!( 458 assert_snapshot!(
393 infer(r#" 459 infer(r#"
diff --git a/crates/ra_hir_ty/src/tests/simple.rs b/crates/ra_hir_ty/src/tests/simple.rs
index 56abc65b8..3d3088965 100644
--- a/crates/ra_hir_ty/src/tests/simple.rs
+++ b/crates/ra_hir_ty/src/tests/simple.rs
@@ -1755,3 +1755,35 @@ fn main() {
1755 "### 1755 "###
1756 ); 1756 );
1757} 1757}
1758
1759#[test]
1760fn effects_smoke_test() {
1761 assert_snapshot!(
1762 infer(r#"
1763fn main() {
1764 let x = unsafe { 92 };
1765 let y = async { async { () }.await };
1766 let z = try { () };
1767 let t = 'a: { 92 };
1768}
1769"#),
1770 @r###"
1771 11..131 '{ ...2 }; }': ()
1772 21..22 'x': i32
1773 32..38 '{ 92 }': i32
1774 34..36 '92': i32
1775 48..49 'y': {unknown}
1776 58..80 '{ asyn...wait }': {unknown}
1777 60..78 'async ....await': {unknown}
1778 66..72 '{ () }': ()
1779 68..70 '()': ()
1780 90..91 'z': {unknown}
1781 94..104 'try { () }': {unknown}
1782 98..104 '{ () }': ()
1783 100..102 '()': ()
1784 114..115 't': i32
1785 122..128 '{ 92 }': i32
1786 124..126 '92': i32
1787 "###
1788 )
1789}
diff --git a/crates/ra_ide/src/completion/complete_dot.rs b/crates/ra_ide/src/completion/complete_dot.rs
index 814354ffa..05f825c6f 100644
--- a/crates/ra_ide/src/completion/complete_dot.rs
+++ b/crates/ra_ide/src/completion/complete_dot.rs
@@ -250,6 +250,44 @@ mod tests {
250 } 250 }
251 251
252 #[test] 252 #[test]
253 fn test_union_field_completion() {
254 assert_debug_snapshot!(
255 do_ref_completion(
256 r"
257 union Un {
258 field: u8,
259 other: u16,
260 }
261
262 fn foo(u: Un) {
263 u.<|>
264 }
265 ",
266 ),
267 @r###"
268 [
269 CompletionItem {
270 label: "field",
271 source_range: 140..140,
272 delete: 140..140,
273 insert: "field",
274 kind: Field,
275 detail: "u8",
276 },
277 CompletionItem {
278 label: "other",
279 source_range: 140..140,
280 delete: 140..140,
281 insert: "other",
282 kind: Field,
283 detail: "u16",
284 },
285 ]
286 "###
287 );
288 }
289
290 #[test]
253 fn test_method_completion() { 291 fn test_method_completion() {
254 assert_debug_snapshot!( 292 assert_debug_snapshot!(
255 do_ref_completion( 293 do_ref_completion(
diff --git a/crates/ra_ide/src/completion/complete_qualified_path.rs b/crates/ra_ide/src/completion/complete_qualified_path.rs
index dd10f74e6..aa56a5cd8 100644
--- a/crates/ra_ide/src/completion/complete_qualified_path.rs
+++ b/crates/ra_ide/src/completion/complete_qualified_path.rs
@@ -5,19 +5,29 @@ use ra_syntax::AstNode;
5use test_utils::tested_by; 5use test_utils::tested_by;
6 6
7use crate::completion::{CompletionContext, Completions}; 7use crate::completion::{CompletionContext, Completions};
8use rustc_hash::FxHashSet;
8 9
9pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionContext) { 10pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionContext) {
10 let path = match &ctx.path_prefix { 11 let path = match &ctx.path_prefix {
11 Some(path) => path.clone(), 12 Some(path) => path.clone(),
12 _ => return, 13 _ => return,
13 }; 14 };
14 let def = match ctx.scope().resolve_hir_path(&path) { 15 let scope = ctx.scope();
15 Some(PathResolution::Def(def)) => def, 16 let context_module = scope.module();
16 _ => return, 17
18 let res = match scope.resolve_hir_path(&path) {
19 Some(res) => res,
20 None => return,
17 }; 21 };
18 let context_module = ctx.scope().module(); 22
19 match def { 23 // Add associated types on type parameters and `Self`.
20 hir::ModuleDef::Module(module) => { 24 res.assoc_type_shorthand_candidates(ctx.db, |alias| {
25 acc.add_type_alias(ctx, alias);
26 None::<()>
27 });
28
29 match res {
30 PathResolution::Def(hir::ModuleDef::Module(module)) => {
21 let module_scope = module.scope(ctx.db, context_module); 31 let module_scope = module.scope(ctx.db, context_module);
22 for (name, def) in module_scope { 32 for (name, def) in module_scope {
23 if ctx.use_item_syntax.is_some() { 33 if ctx.use_item_syntax.is_some() {
@@ -35,7 +45,8 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
35 acc.add_resolution(ctx, name.to_string(), &def); 45 acc.add_resolution(ctx, name.to_string(), &def);
36 } 46 }
37 } 47 }
38 hir::ModuleDef::Adt(_) | hir::ModuleDef::TypeAlias(_) => { 48 PathResolution::Def(def @ hir::ModuleDef::Adt(_))
49 | PathResolution::Def(def @ hir::ModuleDef::TypeAlias(_)) => {
39 if let hir::ModuleDef::Adt(Adt::Enum(e)) = def { 50 if let hir::ModuleDef::Adt(Adt::Enum(e)) = def {
40 for variant in e.variants(ctx.db) { 51 for variant in e.variants(ctx.db) {
41 acc.add_enum_variant(ctx, variant, None); 52 acc.add_enum_variant(ctx, variant, None);
@@ -46,8 +57,10 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
46 hir::ModuleDef::TypeAlias(a) => a.ty(ctx.db), 57 hir::ModuleDef::TypeAlias(a) => a.ty(ctx.db),
47 _ => unreachable!(), 58 _ => unreachable!(),
48 }; 59 };
49 // Iterate assoc types separately 60
50 // FIXME: complete T::AssocType 61 // XXX: For parity with Rust bug #22519, this does not complete Ty::AssocType.
62 // (where AssocType is defined on a trait, not an inherent impl)
63
51 let krate = ctx.krate; 64 let krate = ctx.krate;
52 if let Some(krate) = krate { 65 if let Some(krate) = krate {
53 let traits_in_scope = ctx.scope().traits_in_scope(); 66 let traits_in_scope = ctx.scope().traits_in_scope();
@@ -65,6 +78,7 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
65 None::<()> 78 None::<()>
66 }); 79 });
67 80
81 // Iterate assoc types separately
68 ty.iterate_impl_items(ctx.db, krate, |item| { 82 ty.iterate_impl_items(ctx.db, krate, |item| {
69 if context_module.map_or(false, |m| !item.is_visible_from(ctx.db, m)) { 83 if context_module.map_or(false, |m| !item.is_visible_from(ctx.db, m)) {
70 return None; 84 return None;
@@ -77,7 +91,8 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
77 }); 91 });
78 } 92 }
79 } 93 }
80 hir::ModuleDef::Trait(t) => { 94 PathResolution::Def(hir::ModuleDef::Trait(t)) => {
95 // Handles `Trait::assoc` as well as `<Ty as Trait>::assoc`.
81 for item in t.items(ctx.db) { 96 for item in t.items(ctx.db) {
82 if context_module.map_or(false, |m| !item.is_visible_from(ctx.db, m)) { 97 if context_module.map_or(false, |m| !item.is_visible_from(ctx.db, m)) {
83 continue; 98 continue;
@@ -91,8 +106,38 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
91 } 106 }
92 } 107 }
93 } 108 }
109 PathResolution::TypeParam(_) | PathResolution::SelfType(_) => {
110 if let Some(krate) = ctx.krate {
111 let ty = match res {
112 PathResolution::TypeParam(param) => param.ty(ctx.db),
113 PathResolution::SelfType(impl_def) => impl_def.target_ty(ctx.db),
114 _ => return,
115 };
116
117 let traits_in_scope = ctx.scope().traits_in_scope();
118 let mut seen = FxHashSet::default();
119 ty.iterate_path_candidates(ctx.db, krate, &traits_in_scope, None, |_ty, item| {
120 if context_module.map_or(false, |m| !item.is_visible_from(ctx.db, m)) {
121 return None;
122 }
123
124 // We might iterate candidates of a trait multiple times here, so deduplicate
125 // them.
126 if seen.insert(item) {
127 match item {
128 hir::AssocItem::Function(func) => {
129 acc.add_function(ctx, func, None);
130 }
131 hir::AssocItem::Const(ct) => acc.add_const(ctx, ct),
132 hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty),
133 }
134 }
135 None::<()>
136 });
137 }
138 }
94 _ => {} 139 _ => {}
95 }; 140 }
96} 141}
97 142
98#[cfg(test)] 143#[cfg(test)]
@@ -844,6 +889,211 @@ mod tests {
844 } 889 }
845 890
846 #[test] 891 #[test]
892 fn completes_ty_param_assoc_ty() {
893 assert_debug_snapshot!(
894 do_reference_completion(
895 "
896 //- /lib.rs
897 trait Super {
898 type Ty;
899 const CONST: u8;
900 fn func() {}
901 fn method(&self) {}
902 }
903
904 trait Sub: Super {
905 type SubTy;
906 const C2: ();
907 fn subfunc() {}
908 fn submethod(&self) {}
909 }
910
911 fn foo<T: Sub>() {
912 T::<|>
913 }
914 "
915 ),
916 @r###"
917 [
918 CompletionItem {
919 label: "C2",
920 source_range: 219..219,
921 delete: 219..219,
922 insert: "C2",
923 kind: Const,
924 detail: "const C2: ();",
925 },
926 CompletionItem {
927 label: "CONST",
928 source_range: 219..219,
929 delete: 219..219,
930 insert: "CONST",
931 kind: Const,
932 detail: "const CONST: u8;",
933 },
934 CompletionItem {
935 label: "SubTy",
936 source_range: 219..219,
937 delete: 219..219,
938 insert: "SubTy",
939 kind: TypeAlias,
940 detail: "type SubTy;",
941 },
942 CompletionItem {
943 label: "Ty",
944 source_range: 219..219,
945 delete: 219..219,
946 insert: "Ty",
947 kind: TypeAlias,
948 detail: "type Ty;",
949 },
950 CompletionItem {
951 label: "func()",
952 source_range: 219..219,
953 delete: 219..219,
954 insert: "func()$0",
955 kind: Function,
956 lookup: "func",
957 detail: "fn func()",
958 },
959 CompletionItem {
960 label: "method()",
961 source_range: 219..219,
962 delete: 219..219,
963 insert: "method()$0",
964 kind: Method,
965 lookup: "method",
966 detail: "fn method(&self)",
967 },
968 CompletionItem {
969 label: "subfunc()",
970 source_range: 219..219,
971 delete: 219..219,
972 insert: "subfunc()$0",
973 kind: Function,
974 lookup: "subfunc",
975 detail: "fn subfunc()",
976 },
977 CompletionItem {
978 label: "submethod()",
979 source_range: 219..219,
980 delete: 219..219,
981 insert: "submethod()$0",
982 kind: Method,
983 lookup: "submethod",
984 detail: "fn submethod(&self)",
985 },
986 ]
987 "###
988 );
989 }
990
991 #[test]
992 fn completes_self_param_assoc_ty() {
993 assert_debug_snapshot!(
994 do_reference_completion(
995 "
996 //- /lib.rs
997 trait Super {
998 type Ty;
999 const CONST: u8 = 0;
1000 fn func() {}
1001 fn method(&self) {}
1002 }
1003
1004 trait Sub: Super {
1005 type SubTy;
1006 const C2: () = ();
1007 fn subfunc() {}
1008 fn submethod(&self) {}
1009 }
1010
1011 struct Wrap<T>(T);
1012 impl<T> Super for Wrap<T> {}
1013 impl<T> Sub for Wrap<T> {
1014 fn subfunc() {
1015 // Should be able to assume `Self: Sub + Super`
1016 Self::<|>
1017 }
1018 }
1019 "
1020 ),
1021 @r###"
1022 [
1023 CompletionItem {
1024 label: "C2",
1025 source_range: 365..365,
1026 delete: 365..365,
1027 insert: "C2",
1028 kind: Const,
1029 detail: "const C2: () = ();",
1030 },
1031 CompletionItem {
1032 label: "CONST",
1033 source_range: 365..365,
1034 delete: 365..365,
1035 insert: "CONST",
1036 kind: Const,
1037 detail: "const CONST: u8 = 0;",
1038 },
1039 CompletionItem {
1040 label: "SubTy",
1041 source_range: 365..365,
1042 delete: 365..365,
1043 insert: "SubTy",
1044 kind: TypeAlias,
1045 detail: "type SubTy;",
1046 },
1047 CompletionItem {
1048 label: "Ty",
1049 source_range: 365..365,
1050 delete: 365..365,
1051 insert: "Ty",
1052 kind: TypeAlias,
1053 detail: "type Ty;",
1054 },
1055 CompletionItem {
1056 label: "func()",
1057 source_range: 365..365,
1058 delete: 365..365,
1059 insert: "func()$0",
1060 kind: Function,
1061 lookup: "func",
1062 detail: "fn func()",
1063 },
1064 CompletionItem {
1065 label: "method()",
1066 source_range: 365..365,
1067 delete: 365..365,
1068 insert: "method()$0",
1069 kind: Method,
1070 lookup: "method",
1071 detail: "fn method(&self)",
1072 },
1073 CompletionItem {
1074 label: "subfunc()",
1075 source_range: 365..365,
1076 delete: 365..365,
1077 insert: "subfunc()$0",
1078 kind: Function,
1079 lookup: "subfunc",
1080 detail: "fn subfunc()",
1081 },
1082 CompletionItem {
1083 label: "submethod()",
1084 source_range: 365..365,
1085 delete: 365..365,
1086 insert: "submethod()$0",
1087 kind: Method,
1088 lookup: "submethod",
1089 detail: "fn submethod(&self)",
1090 },
1091 ]
1092 "###
1093 );
1094 }
1095
1096 #[test]
847 fn completes_type_alias() { 1097 fn completes_type_alias() {
848 assert_debug_snapshot!( 1098 assert_debug_snapshot!(
849 do_reference_completion( 1099 do_reference_completion(
diff --git a/crates/ra_ide/src/completion/complete_unqualified_path.rs b/crates/ra_ide/src/completion/complete_unqualified_path.rs
index f559f2b97..a6a5568de 100644
--- a/crates/ra_ide/src/completion/complete_unqualified_path.rs
+++ b/crates/ra_ide/src/completion/complete_unqualified_path.rs
@@ -53,7 +53,7 @@ fn complete_enum_variants(acc: &mut Completions, ctx: &CompletionContext, ty: &T
53 // Variants with trivial paths are already added by the existing completion logic, 53 // Variants with trivial paths are already added by the existing completion logic,
54 // so we should avoid adding these twice 54 // so we should avoid adding these twice
55 if path.segments.len() > 1 { 55 if path.segments.len() > 1 {
56 acc.add_enum_variant(ctx, variant, Some(path.to_string())); 56 acc.add_qualified_enum_variant(ctx, variant, path);
57 } 57 }
58 } 58 }
59 } 59 }
@@ -1173,6 +1173,7 @@ mod tests {
1173 delete: 248..250, 1173 delete: 248..250,
1174 insert: "Foo::Bar", 1174 insert: "Foo::Bar",
1175 kind: EnumVariant, 1175 kind: EnumVariant,
1176 lookup: "Bar",
1176 detail: "()", 1177 detail: "()",
1177 }, 1178 },
1178 CompletionItem { 1179 CompletionItem {
@@ -1181,6 +1182,7 @@ mod tests {
1181 delete: 248..250, 1182 delete: 248..250,
1182 insert: "Foo::Baz", 1183 insert: "Foo::Baz",
1183 kind: EnumVariant, 1184 kind: EnumVariant,
1185 lookup: "Baz",
1184 detail: "()", 1186 detail: "()",
1185 }, 1187 },
1186 CompletionItem { 1188 CompletionItem {
@@ -1189,6 +1191,7 @@ mod tests {
1189 delete: 248..250, 1191 delete: 248..250,
1190 insert: "Foo::Quux", 1192 insert: "Foo::Quux",
1191 kind: EnumVariant, 1193 kind: EnumVariant,
1194 lookup: "Quux",
1192 detail: "()", 1195 detail: "()",
1193 }, 1196 },
1194 ] 1197 ]
@@ -1231,6 +1234,7 @@ mod tests {
1231 delete: 219..221, 1234 delete: 219..221,
1232 insert: "Foo::Bar", 1235 insert: "Foo::Bar",
1233 kind: EnumVariant, 1236 kind: EnumVariant,
1237 lookup: "Bar",
1234 detail: "()", 1238 detail: "()",
1235 }, 1239 },
1236 CompletionItem { 1240 CompletionItem {
@@ -1239,6 +1243,7 @@ mod tests {
1239 delete: 219..221, 1243 delete: 219..221,
1240 insert: "Foo::Baz", 1244 insert: "Foo::Baz",
1241 kind: EnumVariant, 1245 kind: EnumVariant,
1246 lookup: "Baz",
1242 detail: "()", 1247 detail: "()",
1243 }, 1248 },
1244 CompletionItem { 1249 CompletionItem {
@@ -1247,6 +1252,7 @@ mod tests {
1247 delete: 219..221, 1252 delete: 219..221,
1248 insert: "Foo::Quux", 1253 insert: "Foo::Quux",
1249 kind: EnumVariant, 1254 kind: EnumVariant,
1255 lookup: "Quux",
1250 detail: "()", 1256 detail: "()",
1251 }, 1257 },
1252 ] 1258 ]
@@ -1285,6 +1291,7 @@ mod tests {
1285 delete: 185..186, 1291 delete: 185..186,
1286 insert: "Foo::Bar", 1292 insert: "Foo::Bar",
1287 kind: EnumVariant, 1293 kind: EnumVariant,
1294 lookup: "Bar",
1288 detail: "()", 1295 detail: "()",
1289 }, 1296 },
1290 CompletionItem { 1297 CompletionItem {
@@ -1293,6 +1300,7 @@ mod tests {
1293 delete: 185..186, 1300 delete: 185..186,
1294 insert: "Foo::Baz", 1301 insert: "Foo::Baz",
1295 kind: EnumVariant, 1302 kind: EnumVariant,
1303 lookup: "Baz",
1296 detail: "()", 1304 detail: "()",
1297 }, 1305 },
1298 CompletionItem { 1306 CompletionItem {
@@ -1301,6 +1309,7 @@ mod tests {
1301 delete: 185..186, 1309 delete: 185..186,
1302 insert: "Foo::Quux", 1310 insert: "Foo::Quux",
1303 kind: EnumVariant, 1311 kind: EnumVariant,
1312 lookup: "Quux",
1304 detail: "()", 1313 detail: "()",
1305 }, 1314 },
1306 CompletionItem { 1315 CompletionItem {
@@ -1353,6 +1362,7 @@ mod tests {
1353 delete: 98..99, 1362 delete: 98..99,
1354 insert: "m::E::V", 1363 insert: "m::E::V",
1355 kind: EnumVariant, 1364 kind: EnumVariant,
1365 lookup: "V",
1356 detail: "()", 1366 detail: "()",
1357 }, 1367 },
1358 ] 1368 ]
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs
index 118fceb2e..c529752d4 100644
--- a/crates/ra_ide/src/completion/completion_context.rs
+++ b/crates/ra_ide/src/completion/completion_context.rs
@@ -344,7 +344,7 @@ impl<'a> CompletionContext<'a> {
344 stmt.syntax().text_range() == name_ref.syntax().text_range(), 344 stmt.syntax().text_range() == name_ref.syntax().text_range(),
345 ); 345 );
346 } 346 }
347 if let Some(block) = ast::Block::cast(node) { 347 if let Some(block) = ast::BlockExpr::cast(node) {
348 return Some( 348 return Some(
349 block.expr().map(|e| e.syntax().text_range()) 349 block.expr().map(|e| e.syntax().text_range())
350 == Some(name_ref.syntax().text_range()), 350 == Some(name_ref.syntax().text_range()),
diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs
index 77d354376..2edb130cf 100644
--- a/crates/ra_ide/src/completion/presentation.rs
+++ b/crates/ra_ide/src/completion/presentation.rs
@@ -1,6 +1,6 @@
1//! This modules takes care of rendering various definitions as completion items. 1//! This modules takes care of rendering various definitions as completion items.
2 2
3use hir::{Docs, HasAttrs, HasSource, HirDisplay, ScopeDef, StructKind, Type}; 3use hir::{Docs, HasAttrs, HasSource, HirDisplay, ModPath, ScopeDef, StructKind, Type};
4use ra_syntax::ast::NameOwner; 4use ra_syntax::ast::NameOwner;
5use stdx::SepBy; 5use stdx::SepBy;
6use test_utils::tested_by; 6use test_utils::tested_by;
@@ -246,14 +246,37 @@ impl Completions {
246 .add_to(self); 246 .add_to(self);
247 } 247 }
248 248
249 pub(crate) fn add_qualified_enum_variant(
250 &mut self,
251 ctx: &CompletionContext,
252 variant: hir::EnumVariant,
253 path: ModPath,
254 ) {
255 self.add_enum_variant_impl(ctx, variant, None, Some(path))
256 }
257
249 pub(crate) fn add_enum_variant( 258 pub(crate) fn add_enum_variant(
250 &mut self, 259 &mut self,
251 ctx: &CompletionContext, 260 ctx: &CompletionContext,
252 variant: hir::EnumVariant, 261 variant: hir::EnumVariant,
253 local_name: Option<String>, 262 local_name: Option<String>,
254 ) { 263 ) {
264 self.add_enum_variant_impl(ctx, variant, local_name, None)
265 }
266
267 fn add_enum_variant_impl(
268 &mut self,
269 ctx: &CompletionContext,
270 variant: hir::EnumVariant,
271 local_name: Option<String>,
272 path: Option<ModPath>,
273 ) {
255 let is_deprecated = is_deprecated(variant, ctx.db); 274 let is_deprecated = is_deprecated(variant, ctx.db);
256 let name = local_name.unwrap_or_else(|| variant.name(ctx.db).to_string()); 275 let name = local_name.unwrap_or_else(|| variant.name(ctx.db).to_string());
276 let qualified_name = match &path {
277 Some(it) => it.to_string(),
278 None => name.to_string(),
279 };
257 let detail_types = variant 280 let detail_types = variant
258 .fields(ctx.db) 281 .fields(ctx.db)
259 .into_iter() 282 .into_iter()
@@ -271,16 +294,23 @@ impl Completions {
271 .surround_with("{ ", " }") 294 .surround_with("{ ", " }")
272 .to_string(), 295 .to_string(),
273 }; 296 };
274 let mut res = 297 let mut res = CompletionItem::new(
275 CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.clone()) 298 CompletionKind::Reference,
276 .kind(CompletionItemKind::EnumVariant) 299 ctx.source_range(),
277 .set_documentation(variant.docs(ctx.db)) 300 qualified_name.clone(),
278 .set_deprecated(is_deprecated) 301 )
279 .detail(detail); 302 .kind(CompletionItemKind::EnumVariant)
303 .set_documentation(variant.docs(ctx.db))
304 .set_deprecated(is_deprecated)
305 .detail(detail);
306
307 if path.is_some() {
308 res = res.lookup_by(name);
309 }
280 310
281 if variant_kind == StructKind::Tuple { 311 if variant_kind == StructKind::Tuple {
282 let params = Params::Anonymous(variant.fields(ctx.db).len()); 312 let params = Params::Anonymous(variant.fields(ctx.db).len());
283 res = res.add_call_parens(ctx, name, params) 313 res = res.add_call_parens(ctx, qualified_name, params)
284 } 314 }
285 315
286 res.add_to(self); 316 res.add_to(self);
diff --git a/crates/ra_ide/src/display/function_signature.rs b/crates/ra_ide/src/display/function_signature.rs
index b5e2785fe..db3907fe6 100644
--- a/crates/ra_ide/src/display/function_signature.rs
+++ b/crates/ra_ide/src/display/function_signature.rs
@@ -26,6 +26,8 @@ pub struct FunctionSignature {
26 pub kind: CallableKind, 26 pub kind: CallableKind,
27 /// Optional visibility 27 /// Optional visibility
28 pub visibility: Option<String>, 28 pub visibility: Option<String>,
29 /// Qualifiers like `async`, `unsafe`, ...
30 pub qualifier: FunctionQualifier,
29 /// Name of the function 31 /// Name of the function
30 pub name: Option<String>, 32 pub name: Option<String>,
31 /// Documentation for the function 33 /// Documentation for the function
@@ -46,6 +48,16 @@ pub struct FunctionSignature {
46 pub has_self_param: bool, 48 pub has_self_param: bool,
47} 49}
48 50
51#[derive(Debug, Default)]
52pub struct FunctionQualifier {
53 // `async` and `const` are mutually exclusive. Do we need to enforcing it here?
54 pub is_async: bool,
55 pub is_const: bool,
56 pub is_unsafe: bool,
57 /// The string `extern ".."`
58 pub extern_abi: Option<String>,
59}
60
49impl FunctionSignature { 61impl FunctionSignature {
50 pub(crate) fn with_doc_opt(mut self, doc: Option<Documentation>) -> Self { 62 pub(crate) fn with_doc_opt(mut self, doc: Option<Documentation>) -> Self {
51 self.doc = doc; 63 self.doc = doc;
@@ -83,6 +95,8 @@ impl FunctionSignature {
83 FunctionSignature { 95 FunctionSignature {
84 kind: CallableKind::StructConstructor, 96 kind: CallableKind::StructConstructor,
85 visibility: node.visibility().map(|n| n.syntax().text().to_string()), 97 visibility: node.visibility().map(|n| n.syntax().text().to_string()),
98 // Do we need `const`?
99 qualifier: Default::default(),
86 name: node.name().map(|n| n.text().to_string()), 100 name: node.name().map(|n| n.text().to_string()),
87 ret_type: node.name().map(|n| n.text().to_string()), 101 ret_type: node.name().map(|n| n.text().to_string()),
88 parameters: params, 102 parameters: params,
@@ -128,6 +142,8 @@ impl FunctionSignature {
128 FunctionSignature { 142 FunctionSignature {
129 kind: CallableKind::VariantConstructor, 143 kind: CallableKind::VariantConstructor,
130 visibility: None, 144 visibility: None,
145 // Do we need `const`?
146 qualifier: Default::default(),
131 name: Some(name), 147 name: Some(name),
132 ret_type: None, 148 ret_type: None,
133 parameters: params, 149 parameters: params,
@@ -151,6 +167,7 @@ impl FunctionSignature {
151 FunctionSignature { 167 FunctionSignature {
152 kind: CallableKind::Macro, 168 kind: CallableKind::Macro,
153 visibility: None, 169 visibility: None,
170 qualifier: Default::default(),
154 name: node.name().map(|n| n.text().to_string()), 171 name: node.name().map(|n| n.text().to_string()),
155 ret_type: None, 172 ret_type: None,
156 parameters: params, 173 parameters: params,
@@ -223,6 +240,12 @@ impl From<&'_ ast::FnDef> for FunctionSignature {
223 FunctionSignature { 240 FunctionSignature {
224 kind: CallableKind::Function, 241 kind: CallableKind::Function,
225 visibility: node.visibility().map(|n| n.syntax().text().to_string()), 242 visibility: node.visibility().map(|n| n.syntax().text().to_string()),
243 qualifier: FunctionQualifier {
244 is_async: node.async_token().is_some(),
245 is_const: node.const_token().is_some(),
246 is_unsafe: node.unsafe_token().is_some(),
247 extern_abi: node.abi().map(|n| n.to_string()),
248 },
226 name: node.name().map(|n| n.text().to_string()), 249 name: node.name().map(|n| n.text().to_string()),
227 ret_type: node 250 ret_type: node
228 .ret_type() 251 .ret_type()
@@ -246,6 +269,23 @@ impl Display for FunctionSignature {
246 write!(f, "{} ", t)?; 269 write!(f, "{} ", t)?;
247 } 270 }
248 271
272 if self.qualifier.is_async {
273 write!(f, "async ")?;
274 }
275
276 if self.qualifier.is_const {
277 write!(f, "const ")?;
278 }
279
280 if self.qualifier.is_unsafe {
281 write!(f, "unsafe ")?;
282 }
283
284 if let Some(extern_abi) = &self.qualifier.extern_abi {
285 // Keyword `extern` is included in the string.
286 write!(f, "{} ", extern_abi)?;
287 }
288
249 if let Some(name) = &self.name { 289 if let Some(name) = &self.name {
250 match self.kind { 290 match self.kind {
251 CallableKind::Function => write!(f, "fn {}", name)?, 291 CallableKind::Function => write!(f, "fn {}", name)?,
diff --git a/crates/ra_ide/src/display/short_label.rs b/crates/ra_ide/src/display/short_label.rs
index 4b081bf6c..d37260e96 100644
--- a/crates/ra_ide/src/display/short_label.rs
+++ b/crates/ra_ide/src/display/short_label.rs
@@ -33,7 +33,11 @@ impl ShortLabel for ast::EnumDef {
33 33
34impl ShortLabel for ast::TraitDef { 34impl ShortLabel for ast::TraitDef {
35 fn short_label(&self) -> Option<String> { 35 fn short_label(&self) -> Option<String> {
36 short_label_from_node(self, "trait ") 36 if self.unsafe_token().is_some() {
37 short_label_from_node(self, "unsafe trait ")
38 } else {
39 short_label_from_node(self, "trait ")
40 }
37 } 41 }
38} 42}
39 43
diff --git a/crates/ra_ide/src/folding_ranges.rs b/crates/ra_ide/src/folding_ranges.rs
index 4379005aa..8657377de 100644
--- a/crates/ra_ide/src/folding_ranges.rs
+++ b/crates/ra_ide/src/folding_ranges.rs
@@ -88,7 +88,7 @@ fn fold_kind(kind: SyntaxKind) -> Option<FoldKind> {
88 | ITEM_LIST 88 | ITEM_LIST
89 | EXTERN_ITEM_LIST 89 | EXTERN_ITEM_LIST
90 | USE_TREE_LIST 90 | USE_TREE_LIST
91 | BLOCK 91 | BLOCK_EXPR
92 | MATCH_ARM_LIST 92 | MATCH_ARM_LIST
93 | ENUM_VARIANT_LIST 93 | ENUM_VARIANT_LIST
94 | TOKEN_TREE => Some(FoldKind::Block), 94 | TOKEN_TREE => Some(FoldKind::Block),
diff --git a/crates/ra_ide/src/hover.rs b/crates/ra_ide/src/hover.rs
index 58c799eca..54d318858 100644
--- a/crates/ra_ide/src/hover.rs
+++ b/crates/ra_ide/src/hover.rs
@@ -844,4 +844,40 @@ fn func(foo: i32) { if true { <|>foo; }; }
844 &["fn foo()\n```\n\n<- `\u{3000}` here"], 844 &["fn foo()\n```\n\n<- `\u{3000}` here"],
845 ); 845 );
846 } 846 }
847
848 #[test]
849 fn test_hover_function_show_qualifiers() {
850 check_hover_result(
851 "
852 //- /lib.rs
853 async fn foo<|>() {}
854 ",
855 &["async fn foo()"],
856 );
857 check_hover_result(
858 "
859 //- /lib.rs
860 pub const unsafe fn foo<|>() {}
861 ",
862 &["pub const unsafe fn foo()"],
863 );
864 check_hover_result(
865 r#"
866 //- /lib.rs
867 pub(crate) async unsafe extern "C" fn foo<|>() {}
868 "#,
869 &[r#"pub(crate) async unsafe extern "C" fn foo()"#],
870 );
871 }
872
873 #[test]
874 fn test_hover_trait_show_qualifiers() {
875 check_hover_result(
876 "
877 //- /lib.rs
878 unsafe trait foo<|>() {}
879 ",
880 &["unsafe trait foo"],
881 );
882 }
847} 883}
diff --git a/crates/ra_ide/src/join_lines.rs b/crates/ra_ide/src/join_lines.rs
index fde0bfa98..63fd6b3e4 100644
--- a/crates/ra_ide/src/join_lines.rs
+++ b/crates/ra_ide/src/join_lines.rs
@@ -129,8 +129,10 @@ fn has_comma_after(node: &SyntaxNode) -> bool {
129} 129}
130 130
131fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> { 131fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> {
132 let block = ast::Block::cast(token.parent())?; 132 let block_expr = ast::BlockExpr::cast(token.parent())?;
133 let block_expr = ast::BlockExpr::cast(block.syntax().parent()?)?; 133 if !block_expr.is_standalone() {
134 return None;
135 }
134 let expr = extract_trivial_expression(&block_expr)?; 136 let expr = extract_trivial_expression(&block_expr)?;
135 137
136 let block_range = block_expr.syntax().text_range(); 138 let block_range = block_expr.syntax().text_range();
@@ -662,4 +664,67 @@ fn main() {
662 ", 664 ",
663 ) 665 )
664 } 666 }
667
668 #[test]
669 fn join_lines_mandatory_blocks_block() {
670 check_join_lines(
671 r"
672<|>fn foo() {
673 92
674}
675 ",
676 r"
677<|>fn foo() { 92
678}
679 ",
680 );
681
682 check_join_lines(
683 r"
684fn foo() {
685 <|>if true {
686 92
687 }
688}
689 ",
690 r"
691fn foo() {
692 <|>if true { 92
693 }
694}
695 ",
696 );
697
698 check_join_lines(
699 r"
700fn foo() {
701 <|>loop {
702 92
703 }
704}
705 ",
706 r"
707fn foo() {
708 <|>loop { 92
709 }
710}
711 ",
712 );
713
714 check_join_lines(
715 r"
716fn foo() {
717 <|>unsafe {
718 92
719 }
720}
721 ",
722 r"
723fn foo() {
724 <|>unsafe { 92
725 }
726}
727 ",
728 );
729 }
665} 730}
diff --git a/crates/ra_ide/src/syntax_tree.rs b/crates/ra_ide/src/syntax_tree.rs
index bf97f8c56..86c70ff83 100644
--- a/crates/ra_ide/src/syntax_tree.rs
+++ b/crates/ra_ide/src/syntax_tree.rs
@@ -120,9 +120,8 @@ [email protected]
120 [email protected] ")" 120 [email protected] ")"
121 [email protected] " " 121 [email protected] " "
122 [email protected] 122 [email protected]
123 [email protected] 123 [email protected] "{"
124 [email protected] "{" 124 [email protected] "}"
125 [email protected] "}"
126"# 125"#
127 .trim() 126 .trim()
128 ); 127 );
@@ -153,26 +152,25 @@ [email protected]
153 [email protected] ")" 152 [email protected] ")"
154 [email protected] " " 153 [email protected] " "
155 [email protected] 154 [email protected]
156 [email protected] 155 [email protected] "{"
157 [email protected] "{" 156 [email protected] "\n "
158 [email protected] "\n " 157 [email protected]
159 [email protected] 158 [email protected]
160 [email protected] 159 [email protected]
161 [email protected] 160 [email protected]
162 [email protected] 161 [email protected]
163 [email protected] 162 [email protected] "assert"
164 [email protected] "assert" 163 [email protected] "!"
165 [email protected] "!" 164 [email protected]
166 [email protected] 165 [email protected] "("
167 [email protected] "(" 166 [email protected] "\"\n fn foo() {\n ..."
168 [email protected] "\"\n fn foo() {\n ..." 167 [email protected] ","
169 [email protected] "," 168 [email protected] " "
170 [email protected] " " 169 [email protected] "\"\""
171 [email protected] "\"\"" 170 [email protected] ")"
172 [email protected] ")" 171 [email protected] ";"
173 [email protected] ";" 172 [email protected] "\n"
174 [email protected] "\n" 173 [email protected] "}"
175 [email protected] "}"
176"# 174"#
177 .trim() 175 .trim()
178 ); 176 );
@@ -196,9 +194,8 @@ [email protected]
196 [email protected] ")" 194 [email protected] ")"
197 [email protected] " " 195 [email protected] " "
198 [email protected] 196 [email protected]
199 [email protected] 197 [email protected] "{"
200 [email protected] "{" 198 [email protected] "}"
201 [email protected] "}"
202"# 199"#
203 .trim() 200 .trim()
204 ); 201 );
@@ -265,10 +262,9 @@ [email protected]
265 [email protected] ")" 262 [email protected] ")"
266 [email protected] " " 263 [email protected] " "
267 [email protected] 264 [email protected]
268 [email protected] 265 [email protected] "{"
269 [email protected] "{" 266 [email protected] "\n"
270 [email protected] "\n" 267 [email protected] "}"
271 [email protected] "}"
272"# 268"#
273 .trim() 269 .trim()
274 ); 270 );
@@ -300,10 +296,9 @@ [email protected]
300 [email protected] ")" 296 [email protected] ")"
301 [email protected] " " 297 [email protected] " "
302 [email protected] 298 [email protected]
303 [email protected] 299 [email protected] "{"
304 [email protected] "{" 300 [email protected] "\n"
305 [email protected] "\n" 301 [email protected] "}"
306 [email protected] "}"
307"# 302"#
308 .trim() 303 .trim()
309 ); 304 );
@@ -334,10 +329,9 @@ [email protected]
334 [email protected] ")" 329 [email protected] ")"
335 [email protected] " " 330 [email protected] " "
336 [email protected] 331 [email protected]
337 [email protected] 332 [email protected] "{"
338 [email protected] "{" 333 [email protected] "\n"
339 [email protected] "\n" 334 [email protected] "}"
340 [email protected] "}"
341 [email protected] "\n" 335 [email protected] "\n"
342 [email protected] 336 [email protected]
343 [email protected] "fn" 337 [email protected] "fn"
@@ -349,10 +343,9 @@ [email protected]
349 [email protected] ")" 343 [email protected] ")"
350 [email protected] " " 344 [email protected] " "
351 [email protected] 345 [email protected]
352 [email protected] 346 [email protected] "{"
353 [email protected] "{" 347 [email protected] "\n"
354 [email protected] "\n" 348 [email protected] "}"
355 [email protected] "}"
356"# 349"#
357 .trim() 350 .trim()
358 ); 351 );
diff --git a/crates/ra_mbe/src/tests.rs b/crates/ra_mbe/src/tests.rs
index 0d924ce58..c43003fd6 100644
--- a/crates/ra_mbe/src/tests.rs
+++ b/crates/ra_mbe/src/tests.rs
@@ -266,21 +266,20 @@ fn test_expr_order() {
266 [email protected] "(" 266 [email protected] "("
267 [email protected] ")" 267 [email protected] ")"
268 [email protected] 268 [email protected]
269 [email protected] 269 [email protected] "{"
270 [email protected] "{" 270 [email protected]
271 [email protected] 271 [email protected]
272 [email protected] 272 [email protected]
273 [email protected] 273 [email protected]
274 [email protected] 274 [email protected] "1"
275 [email protected] "1" 275 [email protected] "+"
276 [email protected] "+" 276 [email protected]
277 [email protected] 277 [email protected] "1"
278 [email protected] "1" 278 [email protected] "*"
279 [email protected] "*" 279 [email protected]
280 [email protected] 280 [email protected] "2"
281 [email protected] "2" 281 [email protected] ";"
282 [email protected] ";" 282 [email protected] "}""#,
283 [email protected] "}""#,
284 ); 283 );
285} 284}
286 285
@@ -1114,68 +1113,67 @@ fn test_vec() {
1114 assert_eq!( 1113 assert_eq!(
1115 format!("{:#?}", tree).trim(), 1114 format!("{:#?}", tree).trim(),
1116 r#"[email protected] 1115 r#"[email protected]
1117 [email protected] 1116 [email protected] "{"
1118 [email protected] "{" 1117 [email protected]
1119 [email protected] 1118 [email protected] "let"
1120 [email protected] "let" 1119 [email protected]
1121 [email protected] 1120 [email protected] "mut"
1122 [email protected] "mut" 1121 [email protected]
1123 [email protected] 1122 [email protected] "v"
1124 [email protected] "v" 1123 [email protected] "="
1125 [email protected] "=" 1124 [email protected]
1126 [email protected] 1125 [email protected]
1127 [email protected] 1126 [email protected]
1128 [email protected] 1127 [email protected]
1129 [email protected] 1128 [email protected]
1130 [email protected] 1129 [email protected]
1131 [email protected] 1130 [email protected] "Vec"
1132 [email protected] "Vec" 1131 [email protected] "::"
1133 [email protected] "::" 1132 [email protected]
1134 [email protected] 1133 [email protected]
1135 [email protected] 1134 [email protected] "new"
1136 [email protected] "new" 1135 [email protected]
1137 [email protected] 1136 [email protected] "("
1138 [email protected] "(" 1137 [email protected] ")"
1139 [email protected] ")" 1138 [email protected] ";"
1140 [email protected] ";" 1139 [email protected]
1141 [email protected] 1140 [email protected]
1142 [email protected] 1141 [email protected]
1143 [email protected] 1142 [email protected]
1144 [email protected] 1143 [email protected]
1145 [email protected] 1144 [email protected]
1146 [email protected] 1145 [email protected] "v"
1147 [email protected] "v" 1146 [email protected] "."
1148 [email protected] "." 1147 [email protected]
1149 [email protected] 1148 [email protected] "push"
1150 [email protected] "push" 1149 [email protected]
1151 [email protected] 1150 [email protected] "("
1152 [email protected] "(" 1151 [email protected]
1153 [email protected] 1152 [email protected] "1u32"
1154 [email protected] "1u32" 1153 [email protected] ")"
1155 [email protected] ")" 1154 [email protected] ";"
1156 [email protected] ";" 1155 [email protected]
1157 [email protected] 1156 [email protected]
1158 [email protected] 1157 [email protected]
1159 [email protected] 1158 [email protected]
1160 [email protected] 1159 [email protected]
1161 [email protected] 1160 [email protected]
1162 [email protected] 1161 [email protected] "v"
1163 [email protected] "v" 1162 [email protected] "."
1164 [email protected] "." 1163 [email protected]
1165 [email protected] 1164 [email protected] "push"
1166 [email protected] "push" 1165 [email protected]
1167 [email protected] 1166 [email protected] "("
1168 [email protected] "(" 1167 [email protected]
1169 [email protected] 1168 [email protected] "2"
1170 [email protected] "2" 1169 [email protected] ")"
1171 [email protected] ")" 1170 [email protected] ";"
1172 [email protected] ";" 1171 [email protected]
1173 [email protected] 1172 [email protected]
1174 [email protected] 1173 [email protected]
1175 [email protected] 1174 [email protected]
1176 [email protected] 1175 [email protected] "v"
1177 [email protected] "v" 1176 [email protected] "}""#
1178 [email protected] "}""#
1179 ); 1177 );
1180} 1178}
1181 1179
diff --git a/crates/ra_parser/src/grammar.rs b/crates/ra_parser/src/grammar.rs
index c2a6e82e9..be0cd5661 100644
--- a/crates/ra_parser/src/grammar.rs
+++ b/crates/ra_parser/src/grammar.rs
@@ -54,7 +54,7 @@ pub(crate) mod fragments {
54 use super::*; 54 use super::*;
55 55
56 pub(crate) use super::{ 56 pub(crate) use super::{
57 expressions::block, paths::type_path as path, patterns::pattern, types::type_, 57 expressions::block_expr, paths::type_path as path, patterns::pattern, types::type_,
58 }; 58 };
59 59
60 pub(crate) fn expr(p: &mut Parser) { 60 pub(crate) fn expr(p: &mut Parser) {
@@ -143,7 +143,7 @@ pub(crate) fn reparser(
143 parent: Option<SyntaxKind>, 143 parent: Option<SyntaxKind>,
144) -> Option<fn(&mut Parser)> { 144) -> Option<fn(&mut Parser)> {
145 let res = match node { 145 let res = match node {
146 BLOCK => expressions::naked_block, 146 BLOCK_EXPR => expressions::block_expr,
147 RECORD_FIELD_DEF_LIST => items::record_field_def_list, 147 RECORD_FIELD_DEF_LIST => items::record_field_def_list,
148 RECORD_FIELD_LIST => items::record_field_list, 148 RECORD_FIELD_LIST => items::record_field_list,
149 ENUM_VARIANT_LIST => items::enum_variant_list, 149 ENUM_VARIANT_LIST => items::enum_variant_list,
diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs
index cb30b25a8..34f039768 100644
--- a/crates/ra_parser/src/grammar/expressions.rs
+++ b/crates/ra_parser/src/grammar/expressions.rs
@@ -2,7 +2,7 @@
2 2
3mod atom; 3mod atom;
4 4
5pub(crate) use self::atom::match_arm_list; 5pub(crate) use self::atom::{block_expr, match_arm_list};
6pub(super) use self::atom::{literal, LITERAL_FIRST}; 6pub(super) use self::atom::{literal, LITERAL_FIRST};
7use super::*; 7use super::*;
8 8
@@ -49,28 +49,6 @@ fn expr_no_struct(p: &mut Parser) {
49 expr_bp(p, r, 1); 49 expr_bp(p, r, 1);
50} 50}
51 51
52// test block
53// fn a() {}
54// fn b() { let _ = 1; }
55// fn c() { 1; 2; }
56// fn d() { 1; 2 }
57pub(crate) fn block(p: &mut Parser) {
58 if !p.at(T!['{']) {
59 p.error("expected a block");
60 return;
61 }
62 atom::block_expr(p, None);
63}
64
65pub(crate) fn naked_block(p: &mut Parser) {
66 assert!(p.at(T!['{']));
67 let m = p.start();
68 p.bump(T!['{']);
69 expr_block_contents(p);
70 p.expect(T!['}']);
71 m.complete(p, BLOCK);
72}
73
74fn is_expr_stmt_attr_allowed(kind: SyntaxKind) -> bool { 52fn is_expr_stmt_attr_allowed(kind: SyntaxKind) -> bool {
75 match kind { 53 match kind {
76 BIN_EXPR | RANGE_EXPR | IF_EXPR => false, 54 BIN_EXPR | RANGE_EXPR | IF_EXPR => false,
@@ -197,7 +175,7 @@ pub(super) fn stmt(p: &mut Parser, with_semi: StmtWithSemi) {
197 } 175 }
198} 176}
199 177
200pub(crate) fn expr_block_contents(p: &mut Parser) { 178pub(super) fn expr_block_contents(p: &mut Parser) {
201 // This is checked by a validator 179 // This is checked by a validator
202 attributes::inner_attributes(p); 180 attributes::inner_attributes(p);
203 181
diff --git a/crates/ra_parser/src/grammar/expressions/atom.rs b/crates/ra_parser/src/grammar/expressions/atom.rs
index 0d277a586..706a2f796 100644
--- a/crates/ra_parser/src/grammar/expressions/atom.rs
+++ b/crates/ra_parser/src/grammar/expressions/atom.rs
@@ -92,7 +92,12 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar
92 T![loop] => loop_expr(p, Some(m)), 92 T![loop] => loop_expr(p, Some(m)),
93 T![for] => for_expr(p, Some(m)), 93 T![for] => for_expr(p, Some(m)),
94 T![while] => while_expr(p, Some(m)), 94 T![while] => while_expr(p, Some(m)),
95 T!['{'] => block_expr(p, Some(m)), 95 // test labeled_block
96 // fn f() { 'label: {}; }
97 T!['{'] => {
98 block_expr(p);
99 m.complete(p, EFFECT_EXPR)
100 }
96 _ => { 101 _ => {
97 // test_err misplaced_label_err 102 // test_err misplaced_label_err
98 // fn main() { 103 // fn main() {
@@ -108,13 +113,17 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar
108 let m = p.start(); 113 let m = p.start();
109 p.bump(T![async]); 114 p.bump(T![async]);
110 p.eat(T![move]); 115 p.eat(T![move]);
111 block_expr(p, Some(m)) 116 block_expr(p);
117 m.complete(p, EFFECT_EXPR)
112 } 118 }
113 T![match] => match_expr(p), 119 T![match] => match_expr(p),
120 // test unsafe_block
121 // fn f() { unsafe { } }
114 T![unsafe] if la == T!['{'] => { 122 T![unsafe] if la == T!['{'] => {
115 let m = p.start(); 123 let m = p.start();
116 p.bump(T![unsafe]); 124 p.bump(T![unsafe]);
117 block_expr(p, Some(m)) 125 block_expr(p);
126 m.complete(p, EFFECT_EXPR)
118 } 127 }
119 T!['{'] => { 128 T!['{'] => {
120 // test for_range_from 129 // test for_range_from
@@ -123,7 +132,7 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar
123 // break; 132 // break;
124 // } 133 // }
125 // } 134 // }
126 block_expr(p, None) 135 block_expr_unchecked(p)
127 } 136 }
128 T![return] => return_expr(p), 137 T![return] => return_expr(p),
129 T![continue] => continue_expr(p), 138 T![continue] => continue_expr(p),
@@ -134,7 +143,7 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar
134 } 143 }
135 }; 144 };
136 let blocklike = match done.kind() { 145 let blocklike = match done.kind() {
137 IF_EXPR | WHILE_EXPR | FOR_EXPR | LOOP_EXPR | MATCH_EXPR | BLOCK_EXPR | TRY_BLOCK_EXPR => { 146 IF_EXPR | WHILE_EXPR | FOR_EXPR | LOOP_EXPR | MATCH_EXPR | BLOCK_EXPR | EFFECT_EXPR => {
138 BlockLike::Block 147 BlockLike::Block
139 } 148 }
140 _ => BlockLike::NotBlock, 149 _ => BlockLike::NotBlock,
@@ -231,13 +240,9 @@ fn lambda_expr(p: &mut Parser) -> CompletedMarker {
231 p.eat(T![move]); 240 p.eat(T![move]);
232 params::param_list_closure(p); 241 params::param_list_closure(p);
233 if opt_fn_ret_type(p) { 242 if opt_fn_ret_type(p) {
234 if p.at(T!['{']) { 243 // test lambda_ret_block
235 // test lambda_ret_block 244 // fn main() { || -> i32 { 92 }(); }
236 // fn main() { || -> i32 { 92 }(); } 245 block_expr(p);
237 block_expr(p, None);
238 } else {
239 p.error("expected `{`");
240 }
241 } else { 246 } else {
242 if p.at_ts(EXPR_FIRST) { 247 if p.at_ts(EXPR_FIRST) {
243 expr(p); 248 expr(p);
@@ -261,13 +266,13 @@ fn if_expr(p: &mut Parser) -> CompletedMarker {
261 let m = p.start(); 266 let m = p.start();
262 p.bump(T![if]); 267 p.bump(T![if]);
263 cond(p); 268 cond(p);
264 block(p); 269 block_expr(p);
265 if p.at(T![else]) { 270 if p.at(T![else]) {
266 p.bump(T![else]); 271 p.bump(T![else]);
267 if p.at(T![if]) { 272 if p.at(T![if]) {
268 if_expr(p); 273 if_expr(p);
269 } else { 274 } else {
270 block(p); 275 block_expr(p);
271 } 276 }
272 } 277 }
273 m.complete(p, IF_EXPR) 278 m.complete(p, IF_EXPR)
@@ -295,7 +300,7 @@ fn loop_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
295 assert!(p.at(T![loop])); 300 assert!(p.at(T![loop]));
296 let m = m.unwrap_or_else(|| p.start()); 301 let m = m.unwrap_or_else(|| p.start());
297 p.bump(T![loop]); 302 p.bump(T![loop]);
298 block(p); 303 block_expr(p);
299 m.complete(p, LOOP_EXPR) 304 m.complete(p, LOOP_EXPR)
300} 305}
301 306
@@ -310,7 +315,7 @@ fn while_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
310 let m = m.unwrap_or_else(|| p.start()); 315 let m = m.unwrap_or_else(|| p.start());
311 p.bump(T![while]); 316 p.bump(T![while]);
312 cond(p); 317 cond(p);
313 block(p); 318 block_expr(p);
314 m.complete(p, WHILE_EXPR) 319 m.complete(p, WHILE_EXPR)
315} 320}
316 321
@@ -325,7 +330,7 @@ fn for_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
325 patterns::pattern(p); 330 patterns::pattern(p);
326 p.expect(T![in]); 331 p.expect(T![in]);
327 expr_no_struct(p); 332 expr_no_struct(p);
328 block(p); 333 block_expr(p);
329 m.complete(p, FOR_EXPR) 334 m.complete(p, FOR_EXPR)
330} 335}
331 336
@@ -458,16 +463,25 @@ fn match_guard(p: &mut Parser) -> CompletedMarker {
458 m.complete(p, MATCH_GUARD) 463 m.complete(p, MATCH_GUARD)
459} 464}
460 465
461// test block_expr 466// test block
462// fn foo() { 467// fn a() {}
463// {}; 468// fn b() { let _ = 1; }
464// unsafe {}; 469// fn c() { 1; 2; }
465// 'label: {}; 470// fn d() { 1; 2 }
466// } 471pub(crate) fn block_expr(p: &mut Parser) {
467pub(super) fn block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker { 472 if !p.at(T!['{']) {
473 p.error("expected a block");
474 return;
475 }
476 block_expr_unchecked(p);
477}
478
479fn block_expr_unchecked(p: &mut Parser) -> CompletedMarker {
468 assert!(p.at(T!['{'])); 480 assert!(p.at(T!['{']));
469 let m = m.unwrap_or_else(|| p.start()); 481 let m = p.start();
470 naked_block(p); 482 p.bump(T!['{']);
483 expr_block_contents(p);
484 p.expect(T!['}']);
471 m.complete(p, BLOCK_EXPR) 485 m.complete(p, BLOCK_EXPR)
472} 486}
473 487
@@ -535,9 +549,25 @@ fn break_expr(p: &mut Parser, r: Restrictions) -> CompletedMarker {
535fn try_block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker { 549fn try_block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
536 assert!(p.at(T![try])); 550 assert!(p.at(T![try]));
537 let m = m.unwrap_or_else(|| p.start()); 551 let m = m.unwrap_or_else(|| p.start());
552 // Special-case `try!` as macro.
553 // This is a hack until we do proper edition support
554 if p.nth_at(1, T![!]) {
555 // test try_macro_fallback
556 // fn foo() { try!(Ok(())); }
557 let path = p.start();
558 let path_segment = p.start();
559 let name_ref = p.start();
560 p.bump_remap(IDENT);
561 name_ref.complete(p, NAME_REF);
562 path_segment.complete(p, PATH_SEGMENT);
563 path.complete(p, PATH);
564 let _block_like = items::macro_call_after_excl(p);
565 return m.complete(p, MACRO_CALL);
566 }
567
538 p.bump(T![try]); 568 p.bump(T![try]);
539 block(p); 569 block_expr(p);
540 m.complete(p, TRY_EXPR) 570 m.complete(p, EFFECT_EXPR)
541} 571}
542 572
543// test box_expr 573// test box_expr
diff --git a/crates/ra_parser/src/grammar/items.rs b/crates/ra_parser/src/grammar/items.rs
index 433ed6812..67a924de5 100644
--- a/crates/ra_parser/src/grammar/items.rs
+++ b/crates/ra_parser/src/grammar/items.rs
@@ -329,7 +329,7 @@ fn fn_def(p: &mut Parser) {
329 if p.at(T![;]) { 329 if p.at(T![;]) {
330 p.bump(T![;]); 330 p.bump(T![;]);
331 } else { 331 } else {
332 expressions::block(p) 332 expressions::block_expr(p)
333 } 333 }
334} 334}
335 335
@@ -415,6 +415,17 @@ pub(super) fn macro_call_after_excl(p: &mut Parser) -> BlockLike {
415 if p.at(IDENT) { 415 if p.at(IDENT) {
416 name(p); 416 name(p);
417 } 417 }
418 // Special-case `macro_rules! try`.
419 // This is a hack until we do proper edition support
420
421 // test try_macro_rules
422 // macro_rules! try { () => {} }
423 if p.at(T![try]) {
424 let m = p.start();
425 p.bump_remap(IDENT);
426 m.complete(p, NAME);
427 }
428
418 match p.current() { 429 match p.current() {
419 T!['{'] => { 430 T!['{'] => {
420 token_tree(p); 431 token_tree(p);
diff --git a/crates/ra_parser/src/grammar/items/use_item.rs b/crates/ra_parser/src/grammar/items/use_item.rs
index e3b991c8c..3a0c7a31a 100644
--- a/crates/ra_parser/src/grammar/items/use_item.rs
+++ b/crates/ra_parser/src/grammar/items/use_item.rs
@@ -47,7 +47,7 @@ fn use_tree(p: &mut Parser, top_level: bool) {
47 // use {crate::path::from::root, or::path::from::crate_name}; // Rust 2018 (with a crate named `or`) 47 // use {crate::path::from::root, or::path::from::crate_name}; // Rust 2018 (with a crate named `or`)
48 // use {path::from::root}; // Rust 2015 48 // use {path::from::root}; // Rust 2015
49 // use ::{some::arbritrary::path}; // Rust 2015 49 // use ::{some::arbritrary::path}; // Rust 2015
50 // use ::{{{crate::export}}}; // Nonsensical but perfectly legal nestnig 50 // use ::{{{root::export}}}; // Nonsensical but perfectly legal nesting
51 T!['{'] => { 51 T!['{'] => {
52 use_tree_list(p); 52 use_tree_list(p);
53 } 53 }
diff --git a/crates/ra_parser/src/grammar/type_args.rs b/crates/ra_parser/src/grammar/type_args.rs
index 33d9973e9..2d61f9d80 100644
--- a/crates/ra_parser/src/grammar/type_args.rs
+++ b/crates/ra_parser/src/grammar/type_args.rs
@@ -48,7 +48,7 @@ fn type_arg(p: &mut Parser) {
48 m.complete(p, ASSOC_TYPE_ARG); 48 m.complete(p, ASSOC_TYPE_ARG);
49 } 49 }
50 T!['{'] => { 50 T!['{'] => {
51 expressions::block(p); 51 expressions::block_expr(p);
52 m.complete(p, CONST_ARG); 52 m.complete(p, CONST_ARG);
53 } 53 }
54 k if k.is_literal() => { 54 k if k.is_literal() => {
diff --git a/crates/ra_parser/src/lib.rs b/crates/ra_parser/src/lib.rs
index 652492c1e..e08ad4dae 100644
--- a/crates/ra_parser/src/lib.rs
+++ b/crates/ra_parser/src/lib.rs
@@ -112,7 +112,7 @@ pub fn parse_fragment(
112 FragmentKind::Type => grammar::fragments::type_, 112 FragmentKind::Type => grammar::fragments::type_,
113 FragmentKind::Pattern => grammar::fragments::pattern, 113 FragmentKind::Pattern => grammar::fragments::pattern,
114 FragmentKind::Item => grammar::fragments::item, 114 FragmentKind::Item => grammar::fragments::item,
115 FragmentKind::Block => grammar::fragments::block, 115 FragmentKind::Block => grammar::fragments::block_expr,
116 FragmentKind::Visibility => grammar::fragments::opt_visibility, 116 FragmentKind::Visibility => grammar::fragments::opt_visibility,
117 FragmentKind::MetaItem => grammar::fragments::meta_item, 117 FragmentKind::MetaItem => grammar::fragments::meta_item,
118 FragmentKind::Statement => grammar::fragments::stmt, 118 FragmentKind::Statement => grammar::fragments::stmt,
diff --git a/crates/ra_parser/src/syntax_kind/generated.rs b/crates/ra_parser/src/syntax_kind/generated.rs
index 524e7d784..e7404492a 100644
--- a/crates/ra_parser/src/syntax_kind/generated.rs
+++ b/crates/ra_parser/src/syntax_kind/generated.rs
@@ -191,7 +191,7 @@ pub enum SyntaxKind {
191 RECORD_LIT, 191 RECORD_LIT,
192 RECORD_FIELD_LIST, 192 RECORD_FIELD_LIST,
193 RECORD_FIELD, 193 RECORD_FIELD,
194 TRY_BLOCK_EXPR, 194 EFFECT_EXPR,
195 BOX_EXPR, 195 BOX_EXPR,
196 CALL_EXPR, 196 CALL_EXPR,
197 INDEX_EXPR, 197 INDEX_EXPR,
@@ -204,7 +204,6 @@ pub enum SyntaxKind {
204 PREFIX_EXPR, 204 PREFIX_EXPR,
205 RANGE_EXPR, 205 RANGE_EXPR,
206 BIN_EXPR, 206 BIN_EXPR,
207 BLOCK,
208 EXTERN_BLOCK, 207 EXTERN_BLOCK,
209 EXTERN_ITEM_LIST, 208 EXTERN_ITEM_LIST,
210 ENUM_VARIANT, 209 ENUM_VARIANT,
diff --git a/crates/ra_proc_macro_srv/Cargo.toml b/crates/ra_proc_macro_srv/Cargo.toml
index ac2d156dc..886e14870 100644
--- a/crates/ra_proc_macro_srv/Cargo.toml
+++ b/crates/ra_proc_macro_srv/Cargo.toml
@@ -21,4 +21,4 @@ test_utils = { path = "../test_utils" }
21cargo_metadata = "0.9.1" 21cargo_metadata = "0.9.1"
22difference = "2.0.0" 22difference = "2.0.0"
23# used as proc macro test target 23# used as proc macro test target
24serde_derive = "=1.0.104" 24serde_derive = "=1.0.106"
diff --git a/crates/ra_proc_macro_srv/src/cli.rs b/crates/ra_proc_macro_srv/src/cli.rs
index 7282e5b9b..1437794c9 100644
--- a/crates/ra_proc_macro_srv/src/cli.rs
+++ b/crates/ra_proc_macro_srv/src/cli.rs
@@ -1,15 +1,17 @@
1//! Driver for proc macro server 1//! Driver for proc macro server
2 2
3use crate::{expand_task, list_macros}; 3use crate::ProcMacroSrv;
4use ra_proc_macro::msg::{self, Message}; 4use ra_proc_macro::msg::{self, Message};
5use std::io; 5use std::io;
6 6
7pub fn run() -> io::Result<()> { 7pub fn run() -> io::Result<()> {
8 let mut srv = ProcMacroSrv::default();
9
8 while let Some(req) = read_request()? { 10 while let Some(req) = read_request()? {
9 let res = match req { 11 let res = match req {
10 msg::Request::ListMacro(task) => Ok(msg::Response::ListMacro(list_macros(&task))), 12 msg::Request::ListMacro(task) => srv.list_macros(&task).map(msg::Response::ListMacro),
11 msg::Request::ExpansionMacro(task) => { 13 msg::Request::ExpansionMacro(task) => {
12 expand_task(&task).map(msg::Response::ExpansionMacro) 14 srv.expand(&task).map(msg::Response::ExpansionMacro)
13 } 15 }
14 }; 16 };
15 17
diff --git a/crates/ra_proc_macro_srv/src/dylib.rs b/crates/ra_proc_macro_srv/src/dylib.rs
index d202eb0fd..aa84e951c 100644
--- a/crates/ra_proc_macro_srv/src/dylib.rs
+++ b/crates/ra_proc_macro_srv/src/dylib.rs
@@ -2,13 +2,12 @@
2 2
3use crate::{proc_macro::bridge, rustc_server::TokenStream}; 3use crate::{proc_macro::bridge, rustc_server::TokenStream};
4use std::fs::File; 4use std::fs::File;
5use std::path::Path; 5use std::path::{Path, PathBuf};
6 6
7use goblin::{mach::Mach, Object}; 7use goblin::{mach::Mach, Object};
8use libloading::Library; 8use libloading::Library;
9use memmap::Mmap; 9use memmap::Mmap;
10use ra_proc_macro::ProcMacroKind; 10use ra_proc_macro::ProcMacroKind;
11
12use std::io; 11use std::io;
13 12
14const NEW_REGISTRAR_SYMBOL: &str = "_rustc_proc_macro_decls_"; 13const NEW_REGISTRAR_SYMBOL: &str = "_rustc_proc_macro_decls_";
@@ -109,23 +108,21 @@ impl ProcMacroLibraryLibloading {
109 } 108 }
110} 109}
111 110
112type ProcMacroLibraryImpl = ProcMacroLibraryLibloading;
113
114pub struct Expander { 111pub struct Expander {
115 libs: Vec<ProcMacroLibraryImpl>, 112 inner: ProcMacroLibraryLibloading,
116} 113}
117 114
118impl Expander { 115impl Expander {
119 pub fn new(lib: &Path) -> Result<Expander, String> { 116 pub fn new(lib: &Path) -> io::Result<Expander> {
120 // Some libraries for dynamic loading require canonicalized path even when it is 117 // Some libraries for dynamic loading require canonicalized path even when it is
121 // already absolute 118 // already absolute
122 let lib = lib 119 let lib = lib.canonicalize()?;
123 .canonicalize() 120
124 .unwrap_or_else(|err| panic!("Cannot canonicalize {}: {:?}", lib.display(), err)); 121 let lib = ensure_file_with_lock_free_access(&lib)?;
125 122
126 let library = ProcMacroLibraryImpl::open(&lib).map_err(|e| e.to_string())?; 123 let library = ProcMacroLibraryLibloading::open(&lib)?;
127 124
128 Ok(Expander { libs: vec![library] }) 125 Ok(Expander { inner: library })
129 } 126 }
130 127
131 pub fn expand( 128 pub fn expand(
@@ -141,38 +138,36 @@ impl Expander {
141 TokenStream::with_subtree(attr.clone()) 138 TokenStream::with_subtree(attr.clone())
142 }); 139 });
143 140
144 for lib in &self.libs { 141 for proc_macro in &self.inner.exported_macros {
145 for proc_macro in &lib.exported_macros { 142 match proc_macro {
146 match proc_macro { 143 bridge::client::ProcMacro::CustomDerive { trait_name, client, .. }
147 bridge::client::ProcMacro::CustomDerive { trait_name, client, .. } 144 if *trait_name == macro_name =>
148 if *trait_name == macro_name => 145 {
149 { 146 let res = client.run(
150 let res = client.run( 147 &crate::proc_macro::bridge::server::SameThread,
151 &crate::proc_macro::bridge::server::SameThread, 148 crate::rustc_server::Rustc::default(),
152 crate::rustc_server::Rustc::default(), 149 parsed_body,
153 parsed_body, 150 );
154 ); 151 return res.map(|it| it.subtree);
155 return res.map(|it| it.subtree); 152 }
156 } 153 bridge::client::ProcMacro::Bang { name, client } if *name == macro_name => {
157 bridge::client::ProcMacro::Bang { name, client } if *name == macro_name => { 154 let res = client.run(
158 let res = client.run( 155 &crate::proc_macro::bridge::server::SameThread,
159 &crate::proc_macro::bridge::server::SameThread, 156 crate::rustc_server::Rustc::default(),
160 crate::rustc_server::Rustc::default(), 157 parsed_body,
161 parsed_body, 158 );
162 ); 159 return res.map(|it| it.subtree);
163 return res.map(|it| it.subtree); 160 }
164 } 161 bridge::client::ProcMacro::Attr { name, client } if *name == macro_name => {
165 bridge::client::ProcMacro::Attr { name, client } if *name == macro_name => { 162 let res = client.run(
166 let res = client.run( 163 &crate::proc_macro::bridge::server::SameThread,
167 &crate::proc_macro::bridge::server::SameThread, 164 crate::rustc_server::Rustc::default(),
168 crate::rustc_server::Rustc::default(), 165 parsed_attributes,
169 parsed_attributes, 166 parsed_body,
170 parsed_body, 167 );
171 ); 168 return res.map(|it| it.subtree);
172 return res.map(|it| it.subtree);
173 }
174 _ => continue,
175 } 169 }
170 _ => continue,
176 } 171 }
177 } 172 }
178 173
@@ -180,9 +175,9 @@ impl Expander {
180 } 175 }
181 176
182 pub fn list_macros(&self) -> Vec<(String, ProcMacroKind)> { 177 pub fn list_macros(&self) -> Vec<(String, ProcMacroKind)> {
183 self.libs 178 self.inner
179 .exported_macros
184 .iter() 180 .iter()
185 .flat_map(|it| &it.exported_macros)
186 .map(|proc_macro| match proc_macro { 181 .map(|proc_macro| match proc_macro {
187 bridge::client::ProcMacro::CustomDerive { trait_name, .. } => { 182 bridge::client::ProcMacro::CustomDerive { trait_name, .. } => {
188 (trait_name.to_string(), ProcMacroKind::CustomDerive) 183 (trait_name.to_string(), ProcMacroKind::CustomDerive)
@@ -197,3 +192,33 @@ impl Expander {
197 .collect() 192 .collect()
198 } 193 }
199} 194}
195
196/// Copy the dylib to temp directory to prevent locking in Windows
197#[cfg(windows)]
198fn ensure_file_with_lock_free_access(path: &Path) -> io::Result<PathBuf> {
199 use std::{ffi::OsString, time::SystemTime};
200
201 let mut to = std::env::temp_dir();
202
203 let file_name = path.file_name().ok_or_else(|| {
204 io::Error::new(
205 io::ErrorKind::InvalidInput,
206 format!("File path is invalid: {}", path.display()),
207 )
208 })?;
209
210 // generate a time deps unique number
211 let t = SystemTime::now().duration_since(std::time::UNIX_EPOCH).expect("Time went backwards");
212
213 let mut unique_name = OsString::from(t.as_millis().to_string());
214 unique_name.push(file_name);
215
216 to.push(unique_name);
217 std::fs::copy(path, &to).unwrap();
218 Ok(to)
219}
220
221#[cfg(unix)]
222fn ensure_file_with_lock_free_access(path: &Path) -> io::Result<PathBuf> {
223 Ok(path.to_path_buf())
224}
diff --git a/crates/ra_proc_macro_srv/src/lib.rs b/crates/ra_proc_macro_srv/src/lib.rs
index 3aca859db..922bb84bb 100644
--- a/crates/ra_proc_macro_srv/src/lib.rs
+++ b/crates/ra_proc_macro_srv/src/lib.rs
@@ -21,28 +21,46 @@ mod dylib;
21 21
22use proc_macro::bridge::client::TokenStream; 22use proc_macro::bridge::client::TokenStream;
23use ra_proc_macro::{ExpansionResult, ExpansionTask, ListMacrosResult, ListMacrosTask}; 23use ra_proc_macro::{ExpansionResult, ExpansionTask, ListMacrosResult, ListMacrosTask};
24use std::path::Path; 24use std::{
25 collections::{hash_map::Entry, HashMap},
26 fs,
27 path::{Path, PathBuf},
28 time::SystemTime,
29};
25 30
26pub(crate) fn expand_task(task: &ExpansionTask) -> Result<ExpansionResult, String> { 31#[derive(Default)]
27 let expander = create_expander(&task.lib); 32pub(crate) struct ProcMacroSrv {
33 expanders: HashMap<(PathBuf, SystemTime), dylib::Expander>,
34}
28 35
29 match expander.expand(&task.macro_name, &task.macro_body, task.attributes.as_ref()) { 36impl ProcMacroSrv {
30 Ok(expansion) => Ok(ExpansionResult { expansion }), 37 pub fn expand(&mut self, task: &ExpansionTask) -> Result<ExpansionResult, String> {
31 Err(msg) => { 38 let expander = self.expander(&task.lib)?;
32 Err(format!("Cannot perform expansion for {}: error {:?}", &task.macro_name, msg)) 39 match expander.expand(&task.macro_name, &task.macro_body, task.attributes.as_ref()) {
40 Ok(expansion) => Ok(ExpansionResult { expansion }),
41 Err(msg) => {
42 Err(format!("Cannot perform expansion for {}: error {:?}", &task.macro_name, msg))
43 }
33 } 44 }
34 } 45 }
35}
36 46
37pub(crate) fn list_macros(task: &ListMacrosTask) -> ListMacrosResult { 47 pub fn list_macros(&mut self, task: &ListMacrosTask) -> Result<ListMacrosResult, String> {
38 let expander = create_expander(&task.lib); 48 let expander = self.expander(&task.lib)?;
49 Ok(ListMacrosResult { macros: expander.list_macros() })
50 }
39 51
40 ListMacrosResult { macros: expander.list_macros() } 52 fn expander(&mut self, path: &Path) -> Result<&dylib::Expander, String> {
41} 53 let time = fs::metadata(path).and_then(|it| it.modified()).map_err(|err| {
54 format!("Failed to get file metadata for {}: {:?}", path.display(), err)
55 })?;
42 56
43fn create_expander(lib: &Path) -> dylib::Expander { 57 Ok(match self.expanders.entry((path.to_path_buf(), time)) {
44 dylib::Expander::new(lib) 58 Entry::Vacant(v) => v.insert(dylib::Expander::new(path).map_err(|err| {
45 .unwrap_or_else(|err| panic!("Cannot create expander for {}: {:?}", lib.display(), err)) 59 format!("Cannot create expander for {}: {:?}", path.display(), err)
60 })?),
61 Entry::Occupied(e) => e.into_mut(),
62 })
63 }
46} 64}
47 65
48pub mod cli; 66pub mod cli;
diff --git a/crates/ra_proc_macro_srv/src/tests/fixtures/test_serialize_proc_macro.txt b/crates/ra_proc_macro_srv/src/tests/fixtures/test_serialize_proc_macro.txt
index 1f5d940fa..6776f5231 100644
--- a/crates/ra_proc_macro_srv/src/tests/fixtures/test_serialize_proc_macro.txt
+++ b/crates/ra_proc_macro_srv/src/tests/fixtures/test_serialize_proc_macro.txt
@@ -1,6 +1,11 @@
1SUBTREE $ 1SUBTREE $
2 PUNCH # [alone] 4294967295 2 PUNCH # [alone] 4294967295
3 SUBTREE [] 4294967295 3 SUBTREE [] 4294967295
4 IDENT doc 4294967295
5 SUBTREE () 4294967295
6 IDENT hidden 4294967295
7 PUNCH # [alone] 4294967295
8 SUBTREE [] 4294967295
4 IDENT allow 4294967295 9 IDENT allow 4294967295
5 SUBTREE () 4294967295 10 SUBTREE () 4294967295
6 IDENT non_upper_case_globals 4294967295 11 IDENT non_upper_case_globals 4294967295
@@ -184,4 +189,4 @@ SUBTREE $
184 IDENT end 4294967295 189 IDENT end 4294967295
185 SUBTREE () 4294967295 190 SUBTREE () 4294967295
186 IDENT __serde_state 4294967295 191 IDENT __serde_state 4294967295
187 PUNCH ; [alone] 4294967295 \ No newline at end of file 192 PUNCH ; [alone] 4294967295
diff --git a/crates/ra_proc_macro_srv/src/tests/mod.rs b/crates/ra_proc_macro_srv/src/tests/mod.rs
index 03f79bc5d..9cf58511c 100644
--- a/crates/ra_proc_macro_srv/src/tests/mod.rs
+++ b/crates/ra_proc_macro_srv/src/tests/mod.rs
@@ -10,7 +10,7 @@ fn test_derive_serialize_proc_macro() {
10 assert_expand( 10 assert_expand(
11 "serde_derive", 11 "serde_derive",
12 "Serialize", 12 "Serialize",
13 "1.0.104", 13 "1.0.106",
14 r##"struct Foo {}"##, 14 r##"struct Foo {}"##,
15 include_str!("fixtures/test_serialize_proc_macro.txt"), 15 include_str!("fixtures/test_serialize_proc_macro.txt"),
16 ); 16 );
@@ -21,7 +21,7 @@ fn test_derive_serialize_proc_macro_failed() {
21 assert_expand( 21 assert_expand(
22 "serde_derive", 22 "serde_derive",
23 "Serialize", 23 "Serialize",
24 "1.0.104", 24 "1.0.106",
25 r##" 25 r##"
26 struct {} 26 struct {}
27"##, 27"##,
@@ -37,7 +37,7 @@ SUBTREE $
37 37
38#[test] 38#[test]
39fn test_derive_proc_macro_list() { 39fn test_derive_proc_macro_list() {
40 let res = list("serde_derive", "1.0.104").join("\n"); 40 let res = list("serde_derive", "1.0.106").join("\n");
41 41
42 assert_eq_text!( 42 assert_eq_text!(
43 &res, 43 &res,
diff --git a/crates/ra_proc_macro_srv/src/tests/utils.rs b/crates/ra_proc_macro_srv/src/tests/utils.rs
index 2139ec7a4..646a427c5 100644
--- a/crates/ra_proc_macro_srv/src/tests/utils.rs
+++ b/crates/ra_proc_macro_srv/src/tests/utils.rs
@@ -1,7 +1,7 @@
1//! utils used in proc-macro tests 1//! utils used in proc-macro tests
2 2
3use crate::dylib; 3use crate::dylib;
4use crate::list_macros; 4use crate::ProcMacroSrv;
5pub use difference::Changeset as __Changeset; 5pub use difference::Changeset as __Changeset;
6use ra_proc_macro::ListMacrosTask; 6use ra_proc_macro::ListMacrosTask;
7use std::str::FromStr; 7use std::str::FromStr;
@@ -59,7 +59,7 @@ pub fn assert_expand(
59pub fn list(crate_name: &str, version: &str) -> Vec<String> { 59pub fn list(crate_name: &str, version: &str) -> Vec<String> {
60 let path = fixtures::dylib_path(crate_name, version); 60 let path = fixtures::dylib_path(crate_name, version);
61 let task = ListMacrosTask { lib: path }; 61 let task = ListMacrosTask { lib: path };
62 62 let mut srv = ProcMacroSrv::default();
63 let res = list_macros(&task); 63 let res = srv.list_macros(&task).unwrap();
64 res.macros.into_iter().map(|(name, kind)| format!("{} [{:?}]", name, kind)).collect() 64 res.macros.into_iter().map(|(name, kind)| format!("{} [{:?}]", name, kind)).collect()
65} 65}
diff --git a/crates/ra_prof/src/hprof.rs b/crates/ra_prof/src/hprof.rs
index 2b8a90363..a3f5321fb 100644
--- a/crates/ra_prof/src/hprof.rs
+++ b/crates/ra_prof/src/hprof.rs
@@ -30,8 +30,9 @@ pub fn init_from(spec: &str) {
30pub type Label = &'static str; 30pub type Label = &'static str;
31 31
32/// This function starts a profiling scope in the current execution stack with a given description. 32/// This function starts a profiling scope in the current execution stack with a given description.
33/// It returns a Profile structure and measure elapsed time between this method invocation and Profile structure drop. 33/// It returns a `Profile` struct that measures elapsed time between this method invocation and `Profile` struct drop.
34/// It supports nested profiling scopes in case when this function invoked multiple times at the execution stack. In this case the profiling information will be nested at the output. 34/// It supports nested profiling scopes in case when this function is invoked multiple times at the execution stack.
35/// In this case the profiling information will be nested at the output.
35/// Profiling information is being printed in the stderr. 36/// Profiling information is being printed in the stderr.
36/// 37///
37/// # Example 38/// # Example
@@ -58,36 +59,35 @@ pub type Label = &'static str;
58/// ``` 59/// ```
59pub fn profile(label: Label) -> Profiler { 60pub fn profile(label: Label) -> Profiler {
60 assert!(!label.is_empty()); 61 assert!(!label.is_empty());
61 let enabled = PROFILING_ENABLED.load(Ordering::Relaxed) 62
62 && PROFILE_STACK.with(|stack| stack.borrow_mut().push(label)); 63 if PROFILING_ENABLED.load(Ordering::Relaxed)
63 let label = if enabled { Some(label) } else { None }; 64 && PROFILE_STACK.with(|stack| stack.borrow_mut().push(label))
64 Profiler { label, detail: None } 65 {
66 Profiler(Some(ProfilerImpl { label, detail: None }))
67 } else {
68 Profiler(None)
69 }
65} 70}
66 71
67pub struct Profiler { 72pub struct Profiler(Option<ProfilerImpl>);
68 label: Option<Label>, 73
74struct ProfilerImpl {
75 label: Label,
69 detail: Option<String>, 76 detail: Option<String>,
70} 77}
71 78
72impl Profiler { 79impl Profiler {
73 pub fn detail(mut self, detail: impl FnOnce() -> String) -> Profiler { 80 pub fn detail(mut self, detail: impl FnOnce() -> String) -> Profiler {
74 if self.label.is_some() { 81 if let Some(profiler) = &mut self.0 {
75 self.detail = Some(detail()) 82 profiler.detail = Some(detail())
76 } 83 }
77 self 84 self
78 } 85 }
79} 86}
80 87
81impl Drop for Profiler { 88impl Drop for ProfilerImpl {
82 fn drop(&mut self) { 89 fn drop(&mut self) {
83 match self { 90 PROFILE_STACK.with(|it| it.borrow_mut().pop(self.label, self.detail.take()));
84 Profiler { label: Some(label), detail } => {
85 PROFILE_STACK.with(|stack| {
86 stack.borrow_mut().pop(label, detail.take());
87 });
88 }
89 Profiler { label: None, .. } => (),
90 }
91 } 91 }
92} 92}
93 93
@@ -179,21 +179,18 @@ impl ProfileStack {
179 pub fn pop(&mut self, label: Label, detail: Option<String>) { 179 pub fn pop(&mut self, label: Label, detail: Option<String>) {
180 let start = self.starts.pop().unwrap(); 180 let start = self.starts.pop().unwrap();
181 let duration = start.elapsed(); 181 let duration = start.elapsed();
182 let level = self.starts.len();
183 self.messages.finish(Message { duration, label, detail }); 182 self.messages.finish(Message { duration, label, detail });
184 if level == 0 { 183 if self.starts.is_empty() {
185 let longer_than = self.filter.longer_than; 184 let longer_than = self.filter.longer_than;
186 // Convert to millis for comparison to avoid problems with rounding 185 // Convert to millis for comparison to avoid problems with rounding
187 // (otherwise we could print `0ms` despite user's `>0` filter when 186 // (otherwise we could print `0ms` despite user's `>0` filter when
188 // `duration` is just a few nanos). 187 // `duration` is just a few nanos).
189 if duration.as_millis() > longer_than.as_millis() { 188 if duration.as_millis() > longer_than.as_millis() {
190 let stderr = stderr();
191 if let Some(root) = self.messages.root() { 189 if let Some(root) = self.messages.root() {
192 print(&self.messages, root, 0, longer_than, &mut stderr.lock()); 190 print(&self.messages, root, 0, longer_than, &mut stderr().lock());
193 } 191 }
194 } 192 }
195 self.messages.clear(); 193 self.messages.clear();
196 assert!(self.starts.is_empty())
197 } 194 }
198 } 195 }
199} 196}
diff --git a/crates/ra_project_model/Cargo.toml b/crates/ra_project_model/Cargo.toml
index b10644b4b..5e651fe70 100644
--- a/crates/ra_project_model/Cargo.toml
+++ b/crates/ra_project_model/Cargo.toml
@@ -18,7 +18,7 @@ ra_db = { path = "../ra_db" }
18ra_cfg = { path = "../ra_cfg" } 18ra_cfg = { path = "../ra_cfg" }
19ra_proc_macro = { path = "../ra_proc_macro" } 19ra_proc_macro = { path = "../ra_proc_macro" }
20 20
21serde = { version = "1.0.104", features = ["derive"] } 21serde = { version = "1.0.106", features = ["derive"] }
22serde_json = "1.0.48" 22serde_json = "1.0.48"
23 23
24anyhow = "1.0.26" 24anyhow = "1.0.26"
diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml
index 7ffe46c69..c07ff488e 100644
--- a/crates/ra_syntax/Cargo.toml
+++ b/crates/ra_syntax/Cargo.toml
@@ -13,7 +13,7 @@ doctest = false
13[dependencies] 13[dependencies]
14itertools = "0.9.0" 14itertools = "0.9.0"
15rowan = "0.10.0" 15rowan = "0.10.0"
16rustc_lexer = { version = "652.0.0", package = "rustc-ap-rustc_lexer" } 16rustc_lexer = { version = "656.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"
19once_cell = "1.3.1" 19once_cell = "1.3.1"
@@ -27,7 +27,7 @@ ra_parser = { path = "../ra_parser" }
27# ideally, `serde` should be enabled by `rust-analyzer`, but we enable it here 27# ideally, `serde` should be enabled by `rust-analyzer`, but we enable it here
28# to reduce number of compilations 28# to reduce number of compilations
29smol_str = { version = "0.1.15", features = ["serde"] } 29smol_str = { version = "0.1.15", features = ["serde"] }
30serde = { version = "1.0.104", features = ["derive"] } 30serde = { version = "1.0.106", features = ["derive"] }
31 31
32[dev-dependencies] 32[dev-dependencies]
33test_utils = { path = "../test_utils" } 33test_utils = { path = "../test_utils" }
diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs
index 7fca5661e..1876afe95 100644
--- a/crates/ra_syntax/src/ast.rs
+++ b/crates/ra_syntax/src/ast.rs
@@ -16,7 +16,7 @@ use crate::{
16}; 16};
17 17
18pub use self::{ 18pub use self::{
19 expr_extensions::{ArrayExprKind, BinOp, ElseBranch, LiteralKind, PrefixOp, RangeOp}, 19 expr_extensions::{ArrayExprKind, BinOp, Effect, ElseBranch, LiteralKind, PrefixOp, RangeOp},
20 extensions::{ 20 extensions::{
21 AttrKind, FieldKind, NameOrNameRef, PathSegmentKind, SelfParamKind, SlicePatComponents, 21 AttrKind, FieldKind, NameOrNameRef, PathSegmentKind, SelfParamKind, SlicePatComponents,
22 StructKind, TypeBoundKind, VisibilityKind, 22 StructKind, TypeBoundKind, VisibilityKind,
@@ -243,6 +243,21 @@ fn test_comments_preserve_trailing_whitespace() {
243} 243}
244 244
245#[test] 245#[test]
246fn test_four_slash_line_comment() {
247 let file = SourceFile::parse(
248 r#"
249 //// too many slashes to be a doc comment
250 /// doc comment
251 mod foo {}
252 "#,
253 )
254 .ok()
255 .unwrap();
256 let module = file.syntax().descendants().find_map(Module::cast).unwrap();
257 assert_eq!("doc comment", module.doc_comment_text().unwrap());
258}
259
260#[test]
246fn test_where_predicates() { 261fn test_where_predicates() {
247 fn assert_bound(text: &str, bound: Option<TypeBound>) { 262 fn assert_bound(text: &str, bound: Option<TypeBound>) {
248 assert_eq!(text, bound.unwrap().syntax().text().to_string()); 263 assert_eq!(text, bound.unwrap().syntax().text().to_string());
diff --git a/crates/ra_syntax/src/ast/edit.rs b/crates/ra_syntax/src/ast/edit.rs
index 26e4576ff..c507dc683 100644
--- a/crates/ra_syntax/src/ast/edit.rs
+++ b/crates/ra_syntax/src/ast/edit.rs
@@ -28,7 +28,7 @@ impl ast::BinExpr {
28 28
29impl ast::FnDef { 29impl ast::FnDef {
30 #[must_use] 30 #[must_use]
31 pub fn with_body(&self, body: ast::Block) -> ast::FnDef { 31 pub fn with_body(&self, body: ast::BlockExpr) -> ast::FnDef {
32 let mut to_insert: ArrayVec<[SyntaxElement; 2]> = ArrayVec::new(); 32 let mut to_insert: ArrayVec<[SyntaxElement; 2]> = ArrayVec::new();
33 let old_body_or_semi: SyntaxElement = if let Some(old_body) = self.body() { 33 let old_body_or_semi: SyntaxElement = if let Some(old_body) = self.body() {
34 old_body.syntax().clone().into() 34 old_body.syntax().clone().into()
diff --git a/crates/ra_syntax/src/ast/expr_extensions.rs b/crates/ra_syntax/src/ast/expr_extensions.rs
index 93aa3d45f..7771d6759 100644
--- a/crates/ra_syntax/src/ast/expr_extensions.rs
+++ b/crates/ra_syntax/src/ast/expr_extensions.rs
@@ -16,7 +16,7 @@ impl ast::Expr {
16 | ast::Expr::WhileExpr(_) 16 | ast::Expr::WhileExpr(_)
17 | ast::Expr::BlockExpr(_) 17 | ast::Expr::BlockExpr(_)
18 | ast::Expr::MatchExpr(_) 18 | ast::Expr::MatchExpr(_)
19 | ast::Expr::TryBlockExpr(_) => true, 19 | ast::Expr::EffectExpr(_) => true,
20 _ => false, 20 _ => false,
21 } 21 }
22 } 22 }
@@ -43,7 +43,7 @@ impl ast::IfExpr {
43 Some(res) 43 Some(res)
44 } 44 }
45 45
46 fn blocks(&self) -> AstChildren<ast::BlockExpr> { 46 pub fn blocks(&self) -> AstChildren<ast::BlockExpr> {
47 support::children(self.syntax()) 47 support::children(self.syntax())
48 } 48 }
49} 49}
@@ -359,6 +359,33 @@ impl ast::Literal {
359 } 359 }
360} 360}
361 361
362#[derive(Debug, Clone, PartialEq, Eq)]
363pub enum Effect {
364 Async(SyntaxToken),
365 Unsafe(SyntaxToken),
366 Try(SyntaxToken),
367 // Very much not an effect, but we stuff it into this node anyway
368 Label(ast::Label),
369}
370
371impl ast::EffectExpr {
372 pub fn effect(&self) -> Effect {
373 if let Some(token) = self.async_token() {
374 return Effect::Async(token);
375 }
376 if let Some(token) = self.unsafe_token() {
377 return Effect::Unsafe(token);
378 }
379 if let Some(token) = self.try_token() {
380 return Effect::Try(token);
381 }
382 if let Some(label) = self.label() {
383 return Effect::Label(label);
384 }
385 unreachable!("ast::EffectExpr without Effect")
386 }
387}
388
362impl ast::BlockExpr { 389impl ast::BlockExpr {
363 /// false if the block is an intrinsic part of the syntax and can't be 390 /// false if the block is an intrinsic part of the syntax and can't be
364 /// replaced with arbitrary expression. 391 /// replaced with arbitrary expression.
@@ -368,12 +395,12 @@ impl ast::BlockExpr {
368 /// const FOO: () = { stand_alone }; 395 /// const FOO: () = { stand_alone };
369 /// ``` 396 /// ```
370 pub fn is_standalone(&self) -> bool { 397 pub fn is_standalone(&self) -> bool {
371 let kind = match self.syntax().parent() { 398 let parent = match self.syntax().parent() {
399 Some(it) => it,
372 None => return true, 400 None => return true,
373 Some(it) => it.kind(),
374 }; 401 };
375 match kind { 402 match parent.kind() {
376 FN_DEF | MATCH_ARM | IF_EXPR | WHILE_EXPR | LOOP_EXPR | TRY_BLOCK_EXPR => false, 403 FN_DEF | IF_EXPR | WHILE_EXPR | LOOP_EXPR | EFFECT_EXPR => false,
377 _ => true, 404 _ => true,
378 } 405 }
379 } 406 }
diff --git a/crates/ra_syntax/src/ast/extensions.rs b/crates/ra_syntax/src/ast/extensions.rs
index f2ea5088e..528c873e0 100644
--- a/crates/ra_syntax/src/ast/extensions.rs
+++ b/crates/ra_syntax/src/ast/extensions.rs
@@ -407,7 +407,7 @@ impl ast::Visibility {
407 } else if self.super_token().is_some() { 407 } else if self.super_token().is_some() {
408 VisibilityKind::PubSuper 408 VisibilityKind::PubSuper
409 } else if self.self_token().is_some() { 409 } else if self.self_token().is_some() {
410 VisibilityKind::PubSuper 410 VisibilityKind::PubSelf
411 } else { 411 } else {
412 VisibilityKind::Pub 412 VisibilityKind::Pub
413 } 413 }
@@ -423,6 +423,10 @@ impl ast::MacroCall {
423 None 423 None
424 } 424 }
425 } 425 }
426
427 pub fn is_bang(&self) -> bool {
428 self.is_macro_rules().is_none()
429 }
426} 430}
427 431
428impl ast::LifetimeParam { 432impl ast::LifetimeParam {
diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs
index 2cb3ad011..5e844d5ae 100644
--- a/crates/ra_syntax/src/ast/generated/nodes.rs
+++ b/crates/ra_syntax/src/ast/generated/nodes.rs
@@ -476,13 +476,16 @@ impl LoopExpr {
476} 476}
477 477
478#[derive(Debug, Clone, PartialEq, Eq, Hash)] 478#[derive(Debug, Clone, PartialEq, Eq, Hash)]
479pub struct TryBlockExpr { 479pub struct EffectExpr {
480 pub(crate) syntax: SyntaxNode, 480 pub(crate) syntax: SyntaxNode,
481} 481}
482impl ast::AttrsOwner for TryBlockExpr {} 482impl ast::AttrsOwner for EffectExpr {}
483impl TryBlockExpr { 483impl EffectExpr {
484 pub fn label(&self) -> Option<Label> { support::child(&self.syntax) }
484 pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) } 485 pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) }
485 pub fn body(&self) -> Option<BlockExpr> { support::child(&self.syntax) } 486 pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) }
487 pub fn async_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![async]) }
488 pub fn block_expr(&self) -> Option<BlockExpr> { support::child(&self.syntax) }
486} 489}
487 490
488#[derive(Debug, Clone, PartialEq, Eq, Hash)] 491#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -551,10 +554,12 @@ pub struct BlockExpr {
551 pub(crate) syntax: SyntaxNode, 554 pub(crate) syntax: SyntaxNode,
552} 555}
553impl ast::AttrsOwner for BlockExpr {} 556impl ast::AttrsOwner for BlockExpr {}
557impl ast::ModuleItemOwner for BlockExpr {}
554impl BlockExpr { 558impl BlockExpr {
555 pub fn label(&self) -> Option<Label> { support::child(&self.syntax) } 559 pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) }
556 pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) } 560 pub fn statements(&self) -> AstChildren<Stmt> { support::children(&self.syntax) }
557 pub fn block(&self) -> Option<Block> { support::child(&self.syntax) } 561 pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) }
562 pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) }
558} 563}
559 564
560#[derive(Debug, Clone, PartialEq, Eq, Hash)] 565#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -626,8 +631,8 @@ pub struct TryExpr {
626} 631}
627impl ast::AttrsOwner for TryExpr {} 632impl ast::AttrsOwner for TryExpr {}
628impl TryExpr { 633impl TryExpr {
629 pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) }
630 pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } 634 pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) }
635 pub fn question_mark_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![?]) }
631} 636}
632 637
633#[derive(Debug, Clone, PartialEq, Eq, Hash)] 638#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -1121,19 +1126,6 @@ impl Condition {
1121} 1126}
1122 1127
1123#[derive(Debug, Clone, PartialEq, Eq, Hash)] 1128#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1124pub struct Block {
1125 pub(crate) syntax: SyntaxNode,
1126}
1127impl ast::AttrsOwner for Block {}
1128impl ast::ModuleItemOwner for Block {}
1129impl Block {
1130 pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) }
1131 pub fn statements(&self) -> AstChildren<Stmt> { support::children(&self.syntax) }
1132 pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) }
1133 pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) }
1134}
1135
1136#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1137pub struct ParamList { 1129pub struct ParamList {
1138 pub(crate) syntax: SyntaxNode, 1130 pub(crate) syntax: SyntaxNode,
1139} 1131}
@@ -1249,6 +1241,9 @@ pub struct PathSegment {
1249} 1241}
1250impl PathSegment { 1242impl PathSegment {
1251 pub fn coloncolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![::]) } 1243 pub fn coloncolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![::]) }
1244 pub fn crate_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![crate]) }
1245 pub fn self_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![self]) }
1246 pub fn super_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![super]) }
1252 pub fn l_angle_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![<]) } 1247 pub fn l_angle_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![<]) }
1253 pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) } 1248 pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) }
1254 pub fn type_arg_list(&self) -> Option<TypeArgList> { support::child(&self.syntax) } 1249 pub fn type_arg_list(&self) -> Option<TypeArgList> { support::child(&self.syntax) }
@@ -1473,7 +1468,7 @@ pub enum Expr {
1473 FieldExpr(FieldExpr), 1468 FieldExpr(FieldExpr),
1474 AwaitExpr(AwaitExpr), 1469 AwaitExpr(AwaitExpr),
1475 TryExpr(TryExpr), 1470 TryExpr(TryExpr),
1476 TryBlockExpr(TryBlockExpr), 1471 EffectExpr(EffectExpr),
1477 CastExpr(CastExpr), 1472 CastExpr(CastExpr),
1478 RefExpr(RefExpr), 1473 RefExpr(RefExpr),
1479 PrefixExpr(PrefixExpr), 1474 PrefixExpr(PrefixExpr),
@@ -1956,8 +1951,8 @@ impl AstNode for LoopExpr {
1956 } 1951 }
1957 fn syntax(&self) -> &SyntaxNode { &self.syntax } 1952 fn syntax(&self) -> &SyntaxNode { &self.syntax }
1958} 1953}
1959impl AstNode for TryBlockExpr { 1954impl AstNode for EffectExpr {
1960 fn can_cast(kind: SyntaxKind) -> bool { kind == TRY_BLOCK_EXPR } 1955 fn can_cast(kind: SyntaxKind) -> bool { kind == EFFECT_EXPR }
1961 fn cast(syntax: SyntaxNode) -> Option<Self> { 1956 fn cast(syntax: SyntaxNode) -> Option<Self> {
1962 if Self::can_cast(syntax.kind()) { 1957 if Self::can_cast(syntax.kind()) {
1963 Some(Self { syntax }) 1958 Some(Self { syntax })
@@ -2649,17 +2644,6 @@ impl AstNode for Condition {
2649 } 2644 }
2650 fn syntax(&self) -> &SyntaxNode { &self.syntax } 2645 fn syntax(&self) -> &SyntaxNode { &self.syntax }
2651} 2646}
2652impl AstNode for Block {
2653 fn can_cast(kind: SyntaxKind) -> bool { kind == BLOCK }
2654 fn cast(syntax: SyntaxNode) -> Option<Self> {
2655 if Self::can_cast(syntax.kind()) {
2656 Some(Self { syntax })
2657 } else {
2658 None
2659 }
2660 }
2661 fn syntax(&self) -> &SyntaxNode { &self.syntax }
2662}
2663impl AstNode for ParamList { 2647impl AstNode for ParamList {
2664 fn can_cast(kind: SyntaxKind) -> bool { kind == PARAM_LIST } 2648 fn can_cast(kind: SyntaxKind) -> bool { kind == PARAM_LIST }
2665 fn cast(syntax: SyntaxNode) -> Option<Self> { 2649 fn cast(syntax: SyntaxNode) -> Option<Self> {
@@ -3308,8 +3292,8 @@ impl From<AwaitExpr> for Expr {
3308impl From<TryExpr> for Expr { 3292impl From<TryExpr> for Expr {
3309 fn from(node: TryExpr) -> Expr { Expr::TryExpr(node) } 3293 fn from(node: TryExpr) -> Expr { Expr::TryExpr(node) }
3310} 3294}
3311impl From<TryBlockExpr> for Expr { 3295impl From<EffectExpr> for Expr {
3312 fn from(node: TryBlockExpr) -> Expr { Expr::TryBlockExpr(node) } 3296 fn from(node: EffectExpr) -> Expr { Expr::EffectExpr(node) }
3313} 3297}
3314impl From<CastExpr> for Expr { 3298impl From<CastExpr> for Expr {
3315 fn from(node: CastExpr) -> Expr { Expr::CastExpr(node) } 3299 fn from(node: CastExpr) -> Expr { Expr::CastExpr(node) }
@@ -3341,9 +3325,10 @@ impl AstNode for Expr {
3341 TUPLE_EXPR | ARRAY_EXPR | PAREN_EXPR | PATH_EXPR | LAMBDA_EXPR | IF_EXPR 3325 TUPLE_EXPR | ARRAY_EXPR | PAREN_EXPR | PATH_EXPR | LAMBDA_EXPR | IF_EXPR
3342 | LOOP_EXPR | FOR_EXPR | WHILE_EXPR | CONTINUE_EXPR | BREAK_EXPR | LABEL 3326 | LOOP_EXPR | FOR_EXPR | WHILE_EXPR | CONTINUE_EXPR | BREAK_EXPR | LABEL
3343 | BLOCK_EXPR | RETURN_EXPR | MATCH_EXPR | RECORD_LIT | CALL_EXPR | INDEX_EXPR 3327 | BLOCK_EXPR | RETURN_EXPR | MATCH_EXPR | RECORD_LIT | CALL_EXPR | INDEX_EXPR
3344 | METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | TRY_BLOCK_EXPR 3328 | METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | EFFECT_EXPR | CAST_EXPR
3345 | CAST_EXPR | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL 3329 | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL | BOX_EXPR => {
3346 | BOX_EXPR => true, 3330 true
3331 }
3347 _ => false, 3332 _ => false,
3348 } 3333 }
3349 } 3334 }
@@ -3371,7 +3356,7 @@ impl AstNode for Expr {
3371 FIELD_EXPR => Expr::FieldExpr(FieldExpr { syntax }), 3356 FIELD_EXPR => Expr::FieldExpr(FieldExpr { syntax }),
3372 AWAIT_EXPR => Expr::AwaitExpr(AwaitExpr { syntax }), 3357 AWAIT_EXPR => Expr::AwaitExpr(AwaitExpr { syntax }),
3373 TRY_EXPR => Expr::TryExpr(TryExpr { syntax }), 3358 TRY_EXPR => Expr::TryExpr(TryExpr { syntax }),
3374 TRY_BLOCK_EXPR => Expr::TryBlockExpr(TryBlockExpr { syntax }), 3359 EFFECT_EXPR => Expr::EffectExpr(EffectExpr { syntax }),
3375 CAST_EXPR => Expr::CastExpr(CastExpr { syntax }), 3360 CAST_EXPR => Expr::CastExpr(CastExpr { syntax }),
3376 REF_EXPR => Expr::RefExpr(RefExpr { syntax }), 3361 REF_EXPR => Expr::RefExpr(RefExpr { syntax }),
3377 PREFIX_EXPR => Expr::PrefixExpr(PrefixExpr { syntax }), 3362 PREFIX_EXPR => Expr::PrefixExpr(PrefixExpr { syntax }),
@@ -3408,7 +3393,7 @@ impl AstNode for Expr {
3408 Expr::FieldExpr(it) => &it.syntax, 3393 Expr::FieldExpr(it) => &it.syntax,
3409 Expr::AwaitExpr(it) => &it.syntax, 3394 Expr::AwaitExpr(it) => &it.syntax,
3410 Expr::TryExpr(it) => &it.syntax, 3395 Expr::TryExpr(it) => &it.syntax,
3411 Expr::TryBlockExpr(it) => &it.syntax, 3396 Expr::EffectExpr(it) => &it.syntax,
3412 Expr::CastExpr(it) => &it.syntax, 3397 Expr::CastExpr(it) => &it.syntax,
3413 Expr::RefExpr(it) => &it.syntax, 3398 Expr::RefExpr(it) => &it.syntax,
3414 Expr::PrefixExpr(it) => &it.syntax, 3399 Expr::PrefixExpr(it) => &it.syntax,
@@ -3889,7 +3874,7 @@ impl std::fmt::Display for LoopExpr {
3889 std::fmt::Display::fmt(self.syntax(), f) 3874 std::fmt::Display::fmt(self.syntax(), f)
3890 } 3875 }
3891} 3876}
3892impl std::fmt::Display for TryBlockExpr { 3877impl std::fmt::Display for EffectExpr {
3893 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { 3878 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3894 std::fmt::Display::fmt(self.syntax(), f) 3879 std::fmt::Display::fmt(self.syntax(), f)
3895 } 3880 }
@@ -4204,11 +4189,6 @@ impl std::fmt::Display for Condition {
4204 std::fmt::Display::fmt(self.syntax(), f) 4189 std::fmt::Display::fmt(self.syntax(), f)
4205 } 4190 }
4206} 4191}
4207impl std::fmt::Display for Block {
4208 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
4209 std::fmt::Display::fmt(self.syntax(), f)
4210 }
4211}
4212impl std::fmt::Display for ParamList { 4192impl std::fmt::Display for ParamList {
4213 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { 4193 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
4214 std::fmt::Display::fmt(self.syntax(), f) 4194 std::fmt::Display::fmt(self.syntax(), f)
diff --git a/crates/ra_syntax/src/ast/make.rs b/crates/ra_syntax/src/ast/make.rs
index ee0f5cc40..7b17fef49 100644
--- a/crates/ra_syntax/src/ast/make.rs
+++ b/crates/ra_syntax/src/ast/make.rs
@@ -22,8 +22,7 @@ pub fn path_unqualified(segment: ast::PathSegment) -> ast::Path {
22pub fn path_qualified(qual: ast::Path, segment: ast::PathSegment) -> ast::Path { 22pub fn path_qualified(qual: ast::Path, segment: ast::PathSegment) -> ast::Path {
23 path_from_text(&format!("{}::{}", qual, segment)) 23 path_from_text(&format!("{}::{}", qual, segment))
24} 24}
25 25fn path_from_text(text: &str) -> ast::Path {
26pub fn path_from_text(text: &str) -> ast::Path {
27 ast_from_text(text) 26 ast_from_text(text)
28} 27}
29 28
@@ -83,14 +82,6 @@ pub fn block_expr(
83 ast_from_text(&format!("fn f() {}", buf)) 82 ast_from_text(&format!("fn f() {}", buf))
84} 83}
85 84
86pub fn block_from_expr(e: ast::Expr) -> ast::Block {
87 return from_text(&format!("{{ {} }}", e));
88
89 fn from_text(text: &str) -> ast::Block {
90 ast_from_text(&format!("fn f() {}", text))
91 }
92}
93
94pub fn expr_unit() -> ast::Expr { 85pub fn expr_unit() -> ast::Expr {
95 expr_from_text("()") 86 expr_from_text("()")
96} 87}
diff --git a/crates/ra_syntax/src/ast/tokens.rs b/crates/ra_syntax/src/ast/tokens.rs
index 3865729b8..74906d8a6 100644
--- a/crates/ra_syntax/src/ast/tokens.rs
+++ b/crates/ra_syntax/src/ast/tokens.rs
@@ -13,7 +13,12 @@ impl Comment {
13 } 13 }
14 14
15 pub fn prefix(&self) -> &'static str { 15 pub fn prefix(&self) -> &'static str {
16 prefix_by_kind(self.kind()) 16 for (prefix, k) in COMMENT_PREFIX_TO_KIND.iter() {
17 if *k == self.kind() && self.text().starts_with(prefix) {
18 return prefix;
19 }
20 }
21 unreachable!()
17 } 22 }
18} 23}
19 24
@@ -48,6 +53,7 @@ pub enum CommentPlacement {
48const COMMENT_PREFIX_TO_KIND: &[(&str, CommentKind)] = { 53const COMMENT_PREFIX_TO_KIND: &[(&str, CommentKind)] = {
49 use {CommentPlacement::*, CommentShape::*}; 54 use {CommentPlacement::*, CommentShape::*};
50 &[ 55 &[
56 ("////", CommentKind { shape: Line, doc: None }),
51 ("///", CommentKind { shape: Line, doc: Some(Outer) }), 57 ("///", CommentKind { shape: Line, doc: Some(Outer) }),
52 ("//!", CommentKind { shape: Line, doc: Some(Inner) }), 58 ("//!", CommentKind { shape: Line, doc: Some(Inner) }),
53 ("/**", CommentKind { shape: Block, doc: Some(Outer) }), 59 ("/**", CommentKind { shape: Block, doc: Some(Outer) }),
@@ -69,15 +75,6 @@ fn kind_by_prefix(text: &str) -> CommentKind {
69 panic!("bad comment text: {:?}", text) 75 panic!("bad comment text: {:?}", text)
70} 76}
71 77
72fn prefix_by_kind(kind: CommentKind) -> &'static str {
73 for (prefix, k) in COMMENT_PREFIX_TO_KIND.iter() {
74 if *k == kind {
75 return prefix;
76 }
77 }
78 unreachable!()
79}
80
81impl Whitespace { 78impl Whitespace {
82 pub fn spans_multiple_lines(&self) -> bool { 79 pub fn spans_multiple_lines(&self) -> bool {
83 let text = self.text(); 80 let text = self.text();
diff --git a/crates/ra_syntax/src/lib.rs b/crates/ra_syntax/src/lib.rs
index ceeb2bde9..d0234cada 100644
--- a/crates/ra_syntax/src/lib.rs
+++ b/crates/ra_syntax/src/lib.rs
@@ -237,8 +237,7 @@ fn api_walkthrough() {
237 237
238 // Let's get the `1 + 1` expression! 238 // Let's get the `1 + 1` expression!
239 let body: ast::BlockExpr = func.body().unwrap(); 239 let body: ast::BlockExpr = func.body().unwrap();
240 let block = body.block().unwrap(); 240 let expr: ast::Expr = body.expr().unwrap();
241 let expr: ast::Expr = block.expr().unwrap();
242 241
243 // Enums are used to group related ast nodes together, and can be used for 242 // Enums are used to group related ast nodes together, and can be used for
244 // matching. However, because there are no public fields, it's possible to 243 // matching. However, because there are no public fields, it's possible to
@@ -274,8 +273,8 @@ fn api_walkthrough() {
274 assert_eq!(text.to_string(), "1 + 1"); 273 assert_eq!(text.to_string(), "1 + 1");
275 274
276 // There's a bunch of traversal methods on `SyntaxNode`: 275 // There's a bunch of traversal methods on `SyntaxNode`:
277 assert_eq!(expr_syntax.parent().as_ref(), Some(block.syntax())); 276 assert_eq!(expr_syntax.parent().as_ref(), Some(body.syntax()));
278 assert_eq!(block.syntax().first_child_or_token().map(|it| it.kind()), Some(T!['{'])); 277 assert_eq!(body.syntax().first_child_or_token().map(|it| it.kind()), Some(T!['{']));
279 assert_eq!( 278 assert_eq!(
280 expr_syntax.next_sibling_or_token().map(|it| it.kind()), 279 expr_syntax.next_sibling_or_token().map(|it| it.kind()),
281 Some(SyntaxKind::WHITESPACE) 280 Some(SyntaxKind::WHITESPACE)
diff --git a/crates/ra_syntax/src/parsing/lexer.rs b/crates/ra_syntax/src/parsing/lexer.rs
index f450ef4a2..1a5a6dc06 100644
--- a/crates/ra_syntax/src/parsing/lexer.rs
+++ b/crates/ra_syntax/src/parsing/lexer.rs
@@ -180,7 +180,7 @@ fn rustc_token_kind_to_syntax_kind(
180 return (syntax_kind, None); 180 return (syntax_kind, None);
181 181
182 fn match_literal_kind(kind: &rustc_lexer::LiteralKind) -> (SyntaxKind, Option<&'static str>) { 182 fn match_literal_kind(kind: &rustc_lexer::LiteralKind) -> (SyntaxKind, Option<&'static str>) {
183 use rustc_lexer::LiteralKind as LK; 183 use rustc_lexer::{LexRawStrError, LiteralKind as LK};
184 184
185 #[rustfmt::skip] 185 #[rustfmt::skip]
186 let syntax_kind = match *kind { 186 let syntax_kind = match *kind {
@@ -215,21 +215,28 @@ fn rustc_token_kind_to_syntax_kind(
215 return (BYTE_STRING, Some("Missing trailing `\"` symbol to terminate the byte string literal")) 215 return (BYTE_STRING, Some("Missing trailing `\"` symbol to terminate the byte string literal"))
216 } 216 }
217 217
218 LK::RawStr { started: true, terminated: true, .. } => RAW_STRING, 218 LK::RawStr(str) => match str.validate() {
219 LK::RawStr { started: true, terminated: false, .. } => { 219 Ok(_) => RAW_STRING,
220 return (RAW_STRING, Some("Missing trailing `\"` with `#` symbols to terminate the raw string literal")) 220 Err(LexRawStrError::InvalidStarter) => return (RAW_STRING, Some("Missing `\"` symbol after `#` symbols to begin the raw string literal")),
221 } 221 Err(LexRawStrError::NoTerminator { expected, found, .. }) => if expected == found {
222 LK::RawStr { started: false, .. } => { 222 return (RAW_STRING, Some("Missing trailing `\"` to terminate the raw string literal"))
223 return (RAW_STRING, Some("Missing `\"` symbol after `#` symbols to begin the raw string literal")) 223 } else {
224 } 224 return (RAW_STRING, Some("Missing trailing `\"` with `#` symbols to terminate the raw string literal"))
225
226 },
227 Err(LexRawStrError::TooManyDelimiters { .. }) => return (RAW_STRING, Some("Too many `#` symbols: raw strings may be delimited by up to 65535 `#` symbols")),
228 },
229 LK::RawByteStr(str) => match str.validate() {
230 Ok(_) => RAW_BYTE_STRING,
231 Err(LexRawStrError::InvalidStarter) => return (RAW_BYTE_STRING, Some("Missing `\"` symbol after `#` symbols to begin the raw byte string literal")),
232 Err(LexRawStrError::NoTerminator { expected, found, .. }) => if expected == found {
233 return (RAW_BYTE_STRING, Some("Missing trailing `\"` to terminate the raw byte string literal"))
234 } else {
235 return (RAW_BYTE_STRING, Some("Missing trailing `\"` with `#` symbols to terminate the raw byte string literal"))
225 236
226 LK::RawByteStr { started: true, terminated: true, .. } => RAW_BYTE_STRING, 237 },
227 LK::RawByteStr { started: true, terminated: false, .. } => { 238 Err(LexRawStrError::TooManyDelimiters { .. }) => return (RAW_BYTE_STRING, Some("Too many `#` symbols: raw byte strings may be delimited by up to 65535 `#` symbols")),
228 return (RAW_BYTE_STRING, Some("Missing trailing `\"` with `#` symbols to terminate the raw byte string literal")) 239 },
229 }
230 LK::RawByteStr { started: false, .. } => {
231 return (RAW_BYTE_STRING, Some("Missing `\"` symbol after `#` symbols to begin the raw byte string literal"))
232 }
233 }; 240 };
234 241
235 (syntax_kind, None) 242 (syntax_kind, None)
diff --git a/crates/ra_syntax/src/validation.rs b/crates/ra_syntax/src/validation.rs
index 5e93895ec..e075cd801 100644
--- a/crates/ra_syntax/src/validation.rs
+++ b/crates/ra_syntax/src/validation.rs
@@ -96,6 +96,7 @@ pub(crate) fn validate(root: &SyntaxNode) -> Vec<SyntaxError> {
96 ast::RecordField(it) => validate_numeric_name(it.name_ref(), &mut errors), 96 ast::RecordField(it) => validate_numeric_name(it.name_ref(), &mut errors),
97 ast::Visibility(it) => validate_visibility(it, &mut errors), 97 ast::Visibility(it) => validate_visibility(it, &mut errors),
98 ast::RangeExpr(it) => validate_range_expr(it, &mut errors), 98 ast::RangeExpr(it) => validate_range_expr(it, &mut errors),
99 ast::PathSegment(it) => validate_path_keywords(it, &mut errors),
99 _ => (), 100 _ => (),
100 } 101 }
101 } 102 }
@@ -222,3 +223,83 @@ fn validate_range_expr(expr: ast::RangeExpr, errors: &mut Vec<SyntaxError>) {
222 )); 223 ));
223 } 224 }
224} 225}
226
227fn validate_path_keywords(segment: ast::PathSegment, errors: &mut Vec<SyntaxError>) {
228 use ast::PathSegmentKind;
229
230 let path = segment.parent_path();
231 let is_path_start = segment.coloncolon_token().is_none() && path.qualifier().is_none();
232
233 if let Some(token) = segment.self_token() {
234 if !is_path_start {
235 errors.push(SyntaxError::new(
236 "The `self` keyword is only allowed as the first segment of a path",
237 token.text_range(),
238 ));
239 }
240 } else if let Some(token) = segment.crate_token() {
241 if !is_path_start || use_prefix(path).is_some() {
242 errors.push(SyntaxError::new(
243 "The `crate` keyword is only allowed as the first segment of a path",
244 token.text_range(),
245 ));
246 }
247 } else if let Some(token) = segment.super_token() {
248 if !all_supers(&path) {
249 errors.push(SyntaxError::new(
250 "The `super` keyword may only be preceded by other `super`s",
251 token.text_range(),
252 ));
253 return;
254 }
255
256 let mut curr_path = path;
257 while let Some(prefix) = use_prefix(curr_path) {
258 if !all_supers(&prefix) {
259 errors.push(SyntaxError::new(
260 "The `super` keyword may only be preceded by other `super`s",
261 token.text_range(),
262 ));
263 return;
264 }
265 curr_path = prefix;
266 }
267 }
268
269 fn use_prefix(mut path: ast::Path) -> Option<ast::Path> {
270 for node in path.syntax().ancestors().skip(1) {
271 match_ast! {
272 match node {
273 ast::UseTree(it) => if let Some(tree_path) = it.path() {
274 // Even a top-level path exists within a `UseTree` so we must explicitly
275 // allow our path but disallow anything else
276 if tree_path != path {
277 return Some(tree_path);
278 }
279 },
280 ast::UseTreeList(_it) => continue,
281 ast::Path(parent) => path = parent,
282 _ => return None,
283 }
284 };
285 }
286 return None;
287 }
288
289 fn all_supers(path: &ast::Path) -> bool {
290 let segment = match path.segment() {
291 Some(it) => it,
292 None => return false,
293 };
294
295 if segment.kind() != Some(PathSegmentKind::SuperKw) {
296 return false;
297 }
298
299 if let Some(ref subpath) = path.qualifier() {
300 return all_supers(subpath);
301 }
302
303 return true;
304 }
305}
diff --git a/crates/ra_syntax/src/validation/block.rs b/crates/ra_syntax/src/validation/block.rs
index 8e962ab5b..2c08f7e6e 100644
--- a/crates/ra_syntax/src/validation/block.rs
+++ b/crates/ra_syntax/src/validation/block.rs
@@ -6,19 +6,17 @@ use crate::{
6 SyntaxKind::*, 6 SyntaxKind::*,
7}; 7};
8 8
9pub(crate) fn validate_block_expr(expr: ast::BlockExpr, errors: &mut Vec<SyntaxError>) { 9pub(crate) fn validate_block_expr(block: ast::BlockExpr, errors: &mut Vec<SyntaxError>) {
10 if let Some(parent) = expr.syntax().parent() { 10 if let Some(parent) = block.syntax().parent() {
11 match parent.kind() { 11 match parent.kind() {
12 FN_DEF | EXPR_STMT | BLOCK => return, 12 FN_DEF | EXPR_STMT | BLOCK_EXPR => return,
13 _ => {} 13 _ => {}
14 } 14 }
15 } 15 }
16 if let Some(block) = expr.block() { 16 errors.extend(block.attrs().map(|attr| {
17 errors.extend(block.attrs().map(|attr| { 17 SyntaxError::new(
18 SyntaxError::new( 18 "A block in this position cannot accept inner attributes",
19 "A block in this position cannot accept inner attributes", 19 attr.syntax().text_range(),
20 attr.syntax().text_range(), 20 )
21 ) 21 }))
22 }))
23 }
24} 22}
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 95cc83caa..375ed45e0 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
@@ -28,10 +28,9 @@ [email protected]
28 [email protected] ")" 28 [email protected] ")"
29 [email protected] " " 29 [email protected] " "
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected] "{"
32 [email protected] "{" 32 [email protected] "\n"
33 [email protected] "\n" 33 [email protected] "}"
34 [email protected] "}"
35 [email protected] "\n\n\n" 34 [email protected] "\n\n\n"
36 [email protected] 35 [email protected]
37 [email protected] "#" 36 [email protected] "#"
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 dc3e12091..b72c92c33 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
@@ -21,9 +21,8 @@ [email protected]
21 [email protected] "(" 21 [email protected] "("
22 [email protected] ")" 22 [email protected] ")"
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected] "{"
25 [email protected] "{" 25 [email protected] "}"
26 [email protected] "}"
27 [email protected] "\n\n" 26 [email protected] "\n\n"
28 [email protected] 27 [email protected]
29 [email protected] "}" 28 [email protected] "}"
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 97539fcf2..33953d8d7 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
@@ -9,10 +9,9 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n"
14 [email protected] "\n" 14 [email protected] "}"
15 [email protected] "}"
16 [email protected] "\n\n" 15 [email protected] "\n\n"
17 [email protected] 16 [email protected]
18 [email protected] 17 [email protected]
@@ -34,30 +33,28 @@ [email protected]
34 [email protected] "true" 33 [email protected] "true"
35 [email protected] " " 34 [email protected] " "
36 [email protected] 35 [email protected]
37 [email protected] 36 [email protected] "{"
38 [email protected] "{" 37 [email protected] "\n "
39 [email protected] "\n " 38 [email protected]
40 [email protected] 39 [email protected] "1"
41 [email protected] "1" 40 [email protected] "\n "
42 [email protected] "\n " 41 [email protected] "}"
43 [email protected] "}"
44 [email protected] " " 42 [email protected] " "
45 [email protected] "else" 43 [email protected] "else"
46 [email protected] " " 44 [email protected] " "
47 [email protected] 45 [email protected]
48 [email protected] 46 [email protected] "{"
49 [email protected] "{" 47 [email protected] "\n "
50 [email protected] "\n " 48 [email protected]
51 [email protected] 49 [email protected]
52 [email protected] 50 [email protected] "2"
53 [email protected] "2" 51 [email protected] " "
54 [email protected] " " 52 [email protected] "+"
55 [email protected] "+" 53 [email protected] " "
56 [email protected] " " 54 [email protected]
57 [email protected] 55 [email protected] "3"
58 [email protected] "3" 56 [email protected] "\n "
59 [email protected] "\n " 57 [email protected] "}"
60 [email protected] "}"
61 [email protected] "\n" 58 [email protected] "\n"
62 [email protected] "}" 59 [email protected] "}"
63 [email protected] "\n\n" 60 [email protected] "\n\n"
@@ -71,10 +68,9 @@ [email protected]
71 [email protected] ")" 68 [email protected] ")"
72 [email protected] " " 69 [email protected] " "
73 [email protected] 70 [email protected]
74 [email protected] 71 [email protected] "{"
75 [email protected] "{" 72 [email protected] "\n"
76 [email protected] "\n" 73 [email protected] "}"
77 [email protected] "}"
78 [email protected] "\n" 74 [email protected] "\n"
79error 17..17: expected BANG 75error 17..17: expected BANG
80error 19..19: expected SEMICOLON 76error 19..19: 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 e10bb8174..3bf57eacc 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
@@ -9,37 +9,36 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected] "|"
18 [email protected] "|" 18 [email protected] "|"
19 [email protected] "|" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "->"
22 [email protected] "->" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "("
25 [email protected] "(" 25 [email protected] ")"
26 [email protected] ")" 26 [email protected] " "
27 [email protected] " " 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "unsafe"
30 [email protected] "unsafe" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected] "{"
33 [email protected] "{" 33 [email protected] " "
34 [email protected] " " 34 [email protected]
35 [email protected] 35 [email protected] "("
36 [email protected] "(" 36 [email protected] ")"
37 [email protected] ")" 37 [email protected] " "
38 [email protected] " " 38 [email protected] "}"
39 [email protected] "}" 39 [email protected] ";"
40 [email protected] ";" 40 [email protected] "\n"
41 [email protected] "\n" 41 [email protected] "}"
42 [email protected] "}"
43 [email protected] "\n" 42 [email protected] "\n"
44error 24..24: expected `{` 43error 24..24: expected a block
45error 24..24: expected SEMICOLON 44error 24..24: expected SEMICOLON
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 61c361833..9323b7890 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
@@ -25,8 +25,7 @@ [email protected]
25 [email protected] "T" 25 [email protected] "T"
26 [email protected] " " 26 [email protected] " "
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected] "{"
29 [email protected] "{" 29 [email protected] "}"
30 [email protected] "}"
31 [email protected] "\n" 30 [email protected] "\n"
32error 19..19: expected colon 31error 19..19: expected colon
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 92bb47316..93434f34f 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
@@ -9,36 +9,35 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "foo"
21 [email protected] "foo" 21 [email protected]
22 [email protected] 22 [email protected] "("
23 [email protected] "(" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected]
25 [email protected] 25 [email protected] "1"
26 [email protected] "1" 26 [email protected] ","
27 [email protected] "," 27 [email protected] " "
28 [email protected] " " 28 [email protected]
29 [email protected] 29 [email protected] "2"
30 [email protected] "2" 30 [email protected] "\n "
31 [email protected] "\n " 31 [email protected] ")"
32 [email protected] ")" 32 [email protected] "\n "
33 [email protected] "\n " 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "return"
36 [email protected] "return" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected] "92"
39 [email protected] "92" 39 [email protected] ";"
40 [email protected] ";" 40 [email protected] "\n"
41 [email protected] "\n" 41 [email protected] "}"
42 [email protected] "}"
43 [email protected] "\n" 42 [email protected] "\n"
44error 38..38: expected SEMICOLON 43error 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 7bc718302..628315c78 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
@@ -20,28 +20,27 @@ [email protected]
20 [email protected] ")" 20 [email protected] ")"
21 [email protected] " " 21 [email protected] " "
22 [email protected] 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] "{" 24 [email protected] "\n "
25 [email protected] "\n " 25 [email protected]
26 [email protected] 26 [email protected] "let"
27 [email protected] "let" 27 [email protected] " "
28 [email protected] " " 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] "bar"
31 [email protected] "bar" 31 [email protected] " "
32 [email protected] " " 32 [email protected] "="
33 [email protected] "=" 33 [email protected] " "
34 [email protected] " " 34 [email protected]
35 [email protected] 35 [email protected] "92"
36 [email protected] "92" 36 [email protected] ";"
37 [email protected] ";" 37 [email protected] "\n "
38 [email protected] "\n " 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected] "1"
41 [email protected] "1" 41 [email protected] " "
42 [email protected] " " 42 [email protected] "+"
43 [email protected] "+" 43 [email protected] "\n"
44 [email protected] "\n" 44 [email protected] "}"
45 [email protected] "}"
46 [email protected] "\n" 45 [email protected] "\n"
47error 44..44: expected expression 46error 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 63194f974..31cc4e551 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
@@ -33,89 +33,88 @@ [email protected]
33 [email protected] "ScopeId" 33 [email protected] "ScopeId"
34 [email protected] " " 34 [email protected] " "
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected] "{"
37 [email protected] "{" 37 [email protected] "\n "
38 [email protected] "\n " 38 [email protected]
39 [email protected] 39 [email protected] "let"
40 [email protected] "let" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected]
43 [email protected] 43 [email protected] "res"
44 [email protected] "res" 44 [email protected] " "
45 [email protected] " " 45 [email protected] "="
46 [email protected] "=" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected] "self"
53 [email protected] "self" 53 [email protected] "."
54 [email protected] "." 54 [email protected]
55 [email protected] 55 [email protected] "scopes"
56 [email protected] "scopes" 56 [email protected] "."
57 [email protected] "." 57 [email protected]
58 [email protected] 58 [email protected] "len"
59 [email protected] "len" 59 [email protected]
60 [email protected] 60 [email protected] "("
61 [email protected] "(" 61 [email protected] ")"
62 [email protected] ")" 62 [email protected] ";"
63 [email protected] ";" 63 [email protected] "\n "
64 [email protected] "\n " 64 [email protected]
65 [email protected] 65 [email protected]
66 [email protected] 66 [email protected]
67 [email protected] 67 [email protected]
68 [email protected] 68 [email protected]
69 [email protected] 69 [email protected] "self"
70 [email protected] "self" 70 [email protected] "."
71 [email protected] "." 71 [email protected]
72 [email protected] 72 [email protected] "scopes"
73 [email protected] "scopes" 73 [email protected] "."
74 [email protected] "." 74 [email protected]
75 [email protected] 75 [email protected] "push"
76 [email protected] "push" 76 [email protected]
77 [email protected] 77 [email protected] "("
78 [email protected] "(" 78 [email protected]
79 [email protected] 79 [email protected]
80 [email protected] 80 [email protected]
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected] "ScopeData"
83 [email protected] "ScopeData" 83 [email protected] " "
84 [email protected] " " 84 [email protected]
85 [email protected] 85 [email protected] "{"
86 [email protected] "{" 86 [email protected] " "
87 [email protected] " " 87 [email protected]
88 [email protected] 88 [email protected]
89 [email protected] 89 [email protected] "parent"
90 [email protected] "parent" 90 [email protected] ":"
91 [email protected] ":" 91 [email protected] " "
92 [email protected] " " 92 [email protected]
93 [email protected] 93 [email protected]
94 [email protected] 94 [email protected]
95 [email protected] 95 [email protected]
96 [email protected] 96 [email protected] "None"
97 [email protected] "None" 97 [email protected] ","
98 [email protected] "," 98 [email protected] " "
99 [email protected] " " 99 [email protected]
100 [email protected] 100 [email protected]
101 [email protected] 101 [email protected] "entries"
102 [email protected] "entries" 102 [email protected] ":"
103 [email protected] ":" 103 [email protected] " "
104 [email protected] " " 104 [email protected]
105 [email protected] 105 [email protected]
106 [email protected] 106 [email protected]
107 [email protected] 107 [email protected]
108 [email protected] 108 [email protected] "vec"
109 [email protected] "vec" 109 [email protected] "!"
110 [email protected] "!" 110 [email protected]
111 [email protected] 111 [email protected] "["
112 [email protected] "[" 112 [email protected] "]"
113 [email protected] "]" 113 [email protected] " "
114 [email protected] " " 114 [email protected] "}"
115 [email protected] "}" 115 [email protected] ")"
116 [email protected] ")" 116 [email protected] "\n "
117 [email protected] "\n " 117 [email protected] "}"
118 [email protected] "}"
119 [email protected] "\n\n " 118 [email protected] "\n\n "
120 [email protected] 119 [email protected]
121 [email protected] "fn" 120 [email protected] "fn"
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 d20bb60f1..4ff27f5c8 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
@@ -9,91 +9,87 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "foo"
20 [email protected] "foo" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "="
22 [email protected] "=" 22 [email protected] "\n "
23 [email protected] "\n " 23 [email protected]
24 [email protected] 24 [email protected] "let"
25 [email protected] "let" 25 [email protected] " "
26 [email protected] " " 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected] "bar"
29 [email protected] "bar" 29 [email protected] " "
30 [email protected] " " 30 [email protected] "="
31 [email protected] "=" 31 [email protected] " "
32 [email protected] " " 32 [email protected]
33 [email protected] 33 [email protected] "1"
34 [email protected] "1" 34 [email protected] ";"
35 [email protected] ";" 35 [email protected] "\n "
36 [email protected] "\n " 36 [email protected]
37 [email protected] 37 [email protected] "let"
38 [email protected] "let" 38 [email protected] "\n "
39 [email protected] "\n " 39 [email protected]
40 [email protected] 40 [email protected] "let"
41 [email protected] "let" 41 [email protected] " "
42 [email protected] " " 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected] "baz"
45 [email protected] "baz" 45 [email protected] " "
46 [email protected] " " 46 [email protected] "="
47 [email protected] "=" 47 [email protected] " "
48 [email protected] " " 48 [email protected]
49 [email protected] 49 [email protected] "92"
50 [email protected] "92" 50 [email protected] ";"
51 [email protected] ";" 51 [email protected] "\n "
52 [email protected] "\n " 52 [email protected]
53 [email protected] 53 [email protected] "let"
54 [email protected] "let" 54 [email protected] "\n "
55 [email protected] "\n " 55 [email protected]
56 [email protected] 56 [email protected]
57 [email protected] 57 [email protected] "if"
58 [email protected] "if" 58 [email protected] " "
59 [email protected] " " 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected] "true"
62 [email protected] "true" 62 [email protected] " "
63 [email protected] " " 63 [email protected]
64 [email protected] 64 [email protected] "{"
65 [email protected] 65 [email protected] "}"
66 [email protected] "{" 66 [email protected] "\n "
67 [email protected] "}" 67 [email protected]
68 [email protected] "\n " 68 [email protected] "let"
69 [email protected] 69 [email protected] "\n "
70 [email protected] "let" 70 [email protected]
71 [email protected] "\n " 71 [email protected]
72 [email protected] 72 [email protected] "while"
73 [email protected] 73 [email protected] " "
74 [email protected] "while" 74 [email protected]
75 [email protected] " " 75 [email protected]
76 [email protected] 76 [email protected] "true"
77 [email protected] 77 [email protected] " "
78 [email protected] "true" 78 [email protected]
79 [email protected] " " 79 [email protected] "{"
80 [email protected] 80 [email protected] "}"
81 [email protected] 81 [email protected] "\n "
82 [email protected] "{" 82 [email protected]
83 [email protected] "}" 83 [email protected] "let"
84 [email protected] "\n " 84 [email protected] "\n "
85 [email protected] 85 [email protected]
86 [email protected] "let" 86 [email protected] "loop"
87 [email protected] "\n " 87 [email protected] " "
88 [email protected] 88 [email protected]
89 [email protected] "loop" 89 [email protected] "{"
90 [email protected] " " 90 [email protected] "}"
91 [email protected] 91 [email protected] "\n"
92 [email protected] 92 [email protected] "}"
93 [email protected] "{"
94 [email protected] "}"
95 [email protected] "\n"
96 [email protected] "}"
97 [email protected] "\n" 93 [email protected] "\n"
98error 24..24: expected expression 94error 24..24: expected expression
99error 24..24: expected SEMICOLON 95error 24..24: 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 1185f44f9..5f3a31473 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
@@ -12,9 +12,8 @@ [email protected]
12 [email protected] ")" 12 [email protected] ")"
13 [email protected] " " 13 [email protected] " "
14 [email protected] 14 [email protected]
15 [email protected] 15 [email protected] "{"
16 [email protected] "{" 16 [email protected] "}"
17 [email protected] "}"
18 [email protected] "\n" 17 [email protected] "\n"
19error 2..2: expected a name 18error 2..2: expected a name
20error 2..2: expected function arguments 19error 2..2: expected function arguments
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 c7bf4caa0..1746bd3c1 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
@@ -26,10 +26,9 @@ [email protected]
26 [email protected] ")" 26 [email protected] ")"
27 [email protected] " " 27 [email protected] " "
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "{"
30 [email protected] "{" 30 [email protected] "\n"
31 [email protected] "\n" 31 [email protected] "}"
32 [email protected] "}"
33 [email protected] "\n" 32 [email protected] "\n"
34error 16..16: expected COLON 33error 16..16: expected COLON
35error 16..16: expected type 34error 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 cc0d75cc8..28146f44e 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
@@ -9,37 +9,36 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "["
17 [email protected] "[" 17 [email protected]
18 [email protected] 18 [email protected] "1"
19 [email protected] "1" 19 [email protected] ","
20 [email protected] "," 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "2"
23 [email protected] "2" 23 [email protected] ","
24 [email protected] "," 24 [email protected] " "
25 [email protected] " " 25 [email protected]
26 [email protected] 26 [email protected] "@"
27 [email protected] "@" 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] ","
30 [email protected] "," 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected] "struct"
33 [email protected] "struct" 33 [email protected]
34 [email protected] 34 [email protected] ","
35 [email protected] "," 35 [email protected] " "
36 [email protected] " " 36 [email protected]
37 [email protected] 37 [email protected] "let"
38 [email protected] "let" 38 [email protected]
39 [email protected] 39 [email protected] "]"
40 [email protected] "]" 40 [email protected] " "
41 [email protected] " " 41 [email protected] "}"
42 [email protected] "}"
43 [email protected] "\n" 42 [email protected] "\n"
44 [email protected] 43 [email protected]
45 [email protected] "fn" 44 [email protected] "fn"
@@ -51,44 +50,43 @@ [email protected]
51 [email protected] ")" 50 [email protected] ")"
52 [email protected] " " 51 [email protected] " "
53 [email protected] 52 [email protected]
54 [email protected] 53 [email protected] "{"
55 [email protected] "{" 54 [email protected] " "
56 [email protected] " " 55 [email protected]
57 [email protected] 56 [email protected]
58 [email protected] 57 [email protected]
59 [email protected] 58 [email protected]
60 [email protected] 59 [email protected]
61 [email protected] 60 [email protected]
62 [email protected] 61 [email protected] "foo"
63 [email protected] "foo" 62 [email protected]
64 [email protected] 63 [email protected] "("
65 [email protected] "(" 64 [email protected]
66 [email protected] 65 [email protected] "1"
67 [email protected] "1" 66 [email protected] ","
68 [email protected] "," 67 [email protected] " "
69 [email protected] " " 68 [email protected]
70 [email protected] 69 [email protected] "2"
71 [email protected] "2" 70 [email protected] ","
72 [email protected] "," 71 [email protected] " "
73 [email protected] " " 72 [email protected]
74 [email protected] 73 [email protected] "@"
75 [email protected] "@" 74 [email protected]
76 [email protected] 75 [email protected]
77 [email protected] 76 [email protected] ","
78 [email protected] "," 77 [email protected] " "
79 [email protected] " " 78 [email protected]
80 [email protected] 79 [email protected] "impl"
81 [email protected] "impl" 80 [email protected]
82 [email protected] 81 [email protected]
83 [email protected] 82 [email protected] ","
84 [email protected] "," 83 [email protected] " "
85 [email protected] " " 84 [email protected]
86 [email protected] 85 [email protected] "let"
87 [email protected] "let" 86 [email protected]
88 [email protected] 87 [email protected] ")"
89 [email protected] ")" 88 [email protected] " "
90 [email protected] " " 89 [email protected] "}"
91 [email protected] "}"
92 [email protected] "\n" 90 [email protected] "\n"
93 [email protected] 91 [email protected]
94 [email protected] "fn" 92 [email protected] "fn"
@@ -100,53 +98,52 @@ [email protected]
100 [email protected] ")" 98 [email protected] ")"
101 [email protected] " " 99 [email protected] " "
102 [email protected] 100 [email protected]
103 [email protected] 101 [email protected] "{"
104 [email protected] "{" 102 [email protected] " "
105 [email protected] " " 103 [email protected]
106 [email protected] 104 [email protected]
107 [email protected] 105 [email protected]
108 [email protected] 106 [email protected]
109 [email protected] 107 [email protected]
110 [email protected] 108 [email protected]
111 [email protected] 109 [email protected] "foo"
112 [email protected] "foo" 110 [email protected] "."
113 [email protected] "." 111 [email protected]
114 [email protected] 112 [email protected] "bar"
115 [email protected] "bar" 113 [email protected]
116 [email protected] 114 [email protected] "("
117 [email protected] "(" 115 [email protected]
118 [email protected] 116 [email protected] "1"
119 [email protected] "1" 117 [email protected] ","
120 [email protected] "," 118 [email protected] " "
121 [email protected] " " 119 [email protected]
122 [email protected] 120 [email protected] "2"
123 [email protected] "2" 121 [email protected] ","
124 [email protected] "," 122 [email protected] " "
125 [email protected] " " 123 [email protected]
126 [email protected] 124 [email protected] "@"
127 [email protected] "@" 125 [email protected]
128 [email protected] 126 [email protected]
129 [email protected] 127 [email protected] ","
130 [email protected] "," 128 [email protected] " "
131 [email protected] " " 129 [email protected]
132 [email protected] 130 [email protected]
133 [email protected] 131 [email protected] "]"
134 [email protected] "]" 132 [email protected]
135 [email protected] 133 [email protected]
136 [email protected] 134 [email protected] ","
137 [email protected] "," 135 [email protected] " "
138 [email protected] " " 136 [email protected]
139 [email protected] 137 [email protected] "trait"
140 [email protected] "trait" 138 [email protected]
141 [email protected] 139 [email protected] ","
142 [email protected] "," 140 [email protected] " "
143 [email protected] " " 141 [email protected]
144 [email protected] 142 [email protected] "let"
145 [email protected] "let" 143 [email protected]
146 [email protected] 144 [email protected] ")"
147 [email protected] ")" 145 [email protected] " "
148 [email protected] " " 146 [email protected] "}"
149 [email protected] "}"
150 [email protected] "\n" 147 [email protected] "\n"
151error 16..16: expected expression 148error 16..16: expected expression
152error 17..17: expected R_BRACK 149error 17..17: expected R_BRACK
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 c37594146..9ea9d715e 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
@@ -9,31 +9,30 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected] "foo"
19 [email protected] "foo" 19 [email protected] "!"
20 [email protected] "!" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "("
23 [email protected] "(" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected] "bar"
25 [email protected] "bar" 25 [email protected] ","
26 [email protected] "," 26 [email protected] " "
27 [email protected] " " 27 [email protected] "\"baz\""
28 [email protected] "\"baz\"" 28 [email protected] ","
29 [email protected] "," 29 [email protected] " "
30 [email protected] " " 30 [email protected] "1"
31 [email protected] "1" 31 [email protected] ","
32 [email protected] "," 32 [email protected] " "
33 [email protected] " " 33 [email protected] "2.0"
34 [email protected] "2.0" 34 [email protected] "\n "
35 [email protected] "\n " 35 [email protected] "}"
36 [email protected] "}"
37 [email protected] " " 36 [email protected] " "
38 [email protected] "//~ ERROR incorrect c ..." 37 [email protected] "//~ ERROR incorrect c ..."
39 [email protected] "\n" 38 [email protected] "\n"
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 4296355f2..7c957fdde 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
@@ -62,9 +62,8 @@ [email protected]
62 [email protected] ")" 62 [email protected] ")"
63 [email protected] " " 63 [email protected] " "
64 [email protected] 64 [email protected]
65 [email protected] 65 [email protected] "{"
66 [email protected] "{" 66 [email protected] "}"
67 [email protected] "}"
68 [email protected] "\n\n" 67 [email protected] "\n\n"
69 [email protected] 68 [email protected]
70 [email protected] "fn" 69 [email protected] "fn"
@@ -76,219 +75,218 @@ [email protected]
76 [email protected] ")" 75 [email protected] ")"
77 [email protected] " " 76 [email protected] " "
78 [email protected] 77 [email protected]
79 [email protected] 78 [email protected] "{"
80 [email protected] "{" 79 [email protected] "\n "
81 [email protected] "\n " 80 [email protected]
82 [email protected] 81 [email protected] "let"
83 [email protected] "let" 82 [email protected] " "
84 [email protected] " " 83 [email protected]
85 [email protected] 84 [email protected] "_"
86 [email protected] "_" 85 [email protected] ":"
87 [email protected] ":" 86 [email protected] " "
88 [email protected] " " 87 [email protected]
89 [email protected] 88 [email protected]
90 [email protected] 89 [email protected]
91 [email protected] 90 [email protected]
92 [email protected] 91 [email protected]
93 [email protected] 92 [email protected]
94 [email protected] 93 [email protected]
95 [email protected] 94 [email protected] "Box"
96 [email protected] "Box" 95 [email protected]
97 [email protected] 96 [email protected] "<"
98 [email protected] "<" 97 [email protected]
99 [email protected] 98 [email protected]
100 [email protected] 99 [email protected] "("
101 [email protected] "(" 100 [email protected]
102 [email protected] 101 [email protected]
103 [email protected] 102 [email protected]
104 [email protected] 103 [email protected]
105 [email protected] 104 [email protected] "Copy"
106 [email protected] "Copy" 105 [email protected] ")"
107 [email protected] ")" 106 [email protected] " "
108 [email protected] " " 107 [email protected] "+"
109 [email protected] "+" 108 [email protected] " "
110 [email protected] " " 109 [email protected]
111 [email protected] 110 [email protected] "("
112 [email protected] "(" 111 [email protected] "?"
113 [email protected] "?" 112 [email protected]
114 [email protected] 113 [email protected]
115 [email protected] 114 [email protected]
116 [email protected] 115 [email protected]
117 [email protected] 116 [email protected] "Sized"
118 [email protected] "Sized" 117 [email protected] ")"
119 [email protected] ")" 118 [email protected] " "
120 [email protected] " " 119 [email protected] "+"
121 [email protected] "+" 120 [email protected] " "
122 [email protected] " " 121 [email protected]
123 [email protected] 122 [email protected] "("
124 [email protected] "(" 123 [email protected]
125 [email protected] 124 [email protected] "for"
126 [email protected] "for" 125 [email protected]
127 [email protected] 126 [email protected] "<"
128 [email protected] "<" 127 [email protected]
129 [email protected] 128 [email protected] "\'a"
130 [email protected] "\'a" 129 [email protected] ">"
131 [email protected] ">" 130 [email protected] " "
132 [email protected] " " 131 [email protected]
133 [email protected] 132 [email protected]
134 [email protected] 133 [email protected]
135 [email protected] 134 [email protected]
136 [email protected] 135 [email protected] "Trait"
137 [email protected] "Trait" 136 [email protected]
138 [email protected] 137 [email protected] "<"
139 [email protected] "<" 138 [email protected]
140 [email protected] 139 [email protected] "\'a"
141 [email protected] "\'a" 140 [email protected] ">"
142 [email protected] ">" 141 [email protected] ")"
143 [email protected] ")" 142 [email protected]
144 [email protected] 143 [email protected]
145 [email protected] 144 [email protected] ">"
146 [email protected] ">" 145 [email protected] ";"
147 [email protected] ";" 146 [email protected] "\n "
148 [email protected] "\n " 147 [email protected]
149 [email protected] 148 [email protected] "let"
150 [email protected] "let" 149 [email protected] " "
151 [email protected] " " 150 [email protected]
152 [email protected] 151 [email protected] "_"
153 [email protected] "_" 152 [email protected] ":"
154 [email protected] ":" 153 [email protected] " "
155 [email protected] " " 154 [email protected]
156 [email protected] 155 [email protected]
157 [email protected] 156 [email protected]
158 [email protected] 157 [email protected]
159 [email protected] 158 [email protected] "Box"
160 [email protected] "Box" 159 [email protected]
161 [email protected] 160 [email protected] "<"
162 [email protected] "<" 161 [email protected]
163 [email protected] 162 [email protected]
164 [email protected] 163 [email protected] "("
165 [email protected] "(" 164 [email protected]
166 [email protected] 165 [email protected] "?"
167 [email protected] "?" 166 [email protected]
168 [email protected] 167 [email protected]
169 [email protected] 168 [email protected]
170 [email protected] 169 [email protected]
171 [email protected] 170 [email protected]
172 [email protected] 171 [email protected] "Sized"
173 [email protected] "Sized" 172 [email protected]
174 [email protected] 173 [email protected]
175 [email protected] 174 [email protected] ")"
176 [email protected] ")" 175 [email protected] " "
177 [email protected] " " 176 [email protected]
178 [email protected] 177 [email protected]
179 [email protected] 178 [email protected] "+"
180 [email protected] "+" 179 [email protected] " "
181 [email protected] " " 180 [email protected]
182 [email protected] 181 [email protected]
183 [email protected] 182 [email protected] "("
184 [email protected] "(" 183 [email protected]
185 [email protected] 184 [email protected]
186 [email protected] 185 [email protected]
187 [email protected] 186 [email protected]
188 [email protected] 187 [email protected]
189 [email protected] 188 [email protected]
190 [email protected] 189 [email protected] "for"
191 [email protected] "for" 190 [email protected]
192 [email protected] 191 [email protected] "<"
193 [email protected] "<" 192 [email protected]
194 [email protected] 193 [email protected] "\'a"
195 [email protected] "\'a" 194 [email protected] ">"
196 [email protected] ">" 195 [email protected] " "
197 [email protected] " " 196 [email protected]
198 [email protected] 197 [email protected]
199 [email protected] 198 [email protected]
200 [email protected] 199 [email protected]
201 [email protected] 200 [email protected] "Trait"
202 [email protected] "Trait" 201 [email protected] "<"
203 [email protected] "<" 202 [email protected]
204 [email protected] 203 [email protected] "\'a"
205 [email protected] "\'a" 204 [email protected] ">"
206 [email protected] ">" 205 [email protected]
207 [email protected] 206 [email protected] ")"
208 [email protected] ")" 207 [email protected] " "
209 [email protected] " " 208 [email protected] "+"
210 [email protected] "+" 209 [email protected] " "
211 [email protected] " " 210 [email protected]
212 [email protected] 211 [email protected] "("
213 [email protected] "(" 212 [email protected]
214 [email protected] 213 [email protected]
215 [email protected] 214 [email protected]
216 [email protected] 215 [email protected]
217 [email protected] 216 [email protected] "Copy"
218 [email protected] "Copy" 217 [email protected] ")"
219 [email protected] ")" 218 [email protected] ">"
220 [email protected] ">" 219 [email protected]
221 [email protected] 220 [email protected] ";"
222 [email protected] ";" 221 [email protected] "\n "
223 [email protected] "\n " 222 [email protected]
224 [email protected] 223 [email protected] "let"
225 [email protected] "let" 224 [email protected] " "
226 [email protected] " " 225 [email protected]
227 [email protected] 226 [email protected] "_"
228 [email protected] "_" 227 [email protected] ":"
229 [email protected] ":" 228 [email protected] " "
230 [email protected] " " 229 [email protected]
231 [email protected] 230 [email protected]
232 [email protected] 231 [email protected]
233 [email protected] 232 [email protected]
234 [email protected] 233 [email protected]
235 [email protected] 234 [email protected]
236 [email protected] 235 [email protected]
237 [email protected] 236 [email protected] "Box"
238 [email protected] "Box" 237 [email protected]
239 [email protected] 238 [email protected] "<"
240 [email protected] "<" 239 [email protected]
241 [email protected] 240 [email protected]
242 [email protected] 241 [email protected] "("
243 [email protected] "(" 242 [email protected]
244 [email protected] 243 [email protected] "for"
245 [email protected] "for" 244 [email protected]
246 [email protected] 245 [email protected] "<"
247 [email protected] "<" 246 [email protected]
248 [email protected] 247 [email protected] "\'a"
249 [email protected] "\'a" 248 [email protected] ">"
250 [email protected] ">" 249 [email protected] " "
251 [email protected] " " 250 [email protected]
252 [email protected] 251 [email protected]
253 [email protected] 252 [email protected]
254 [email protected] 253 [email protected]
255 [email protected] 254 [email protected] "Trait"
256 [email protected] "Trait" 255 [email protected]
257 [email protected] 256 [email protected] "<"
258 [email protected] "<" 257 [email protected]
259 [email protected] 258 [email protected] "\'a"
260 [email protected] "\'a" 259 [email protected] ">"
261 [email protected] ">" 260 [email protected] ")"
262 [email protected] ")" 261 [email protected] " "
263 [email protected] " " 262 [email protected] "+"
264 [email protected] "+" 263 [email protected] " "
265 [email protected] " " 264 [email protected]
266 [email protected] 265 [email protected] "("
267 [email protected] "(" 266 [email protected]
268 [email protected] 267 [email protected]
269 [email protected] 268 [email protected]
270 [email protected] 269 [email protected]
271 [email protected] 270 [email protected] "Copy"
272 [email protected] "Copy" 271 [email protected] ")"
273 [email protected] ")" 272 [email protected] " "
274 [email protected] " " 273 [email protected] "+"
275 [email protected] "+" 274 [email protected] " "
276 [email protected] " " 275 [email protected]
277 [email protected] 276 [email protected] "("
278 [email protected] "(" 277 [email protected] "?"
279 [email protected] "?" 278 [email protected]
280 [email protected] 279 [email protected]
281 [email protected] 280 [email protected]
282 [email protected] 281 [email protected]
283 [email protected] 282 [email protected] "Sized"
284 [email protected] "Sized" 283 [email protected] ")"
285 [email protected] ")" 284 [email protected]
286 [email protected] 285 [email protected]
287 [email protected] 286 [email protected] ">"
288 [email protected] ">" 287 [email protected] ";"
289 [email protected] ";" 288 [email protected] "\n"
290 [email protected] "\n" 289 [email protected] "}"
291 [email protected] "}"
292 [email protected] "\n" 290 [email protected] "\n"
293error 88..88: expected COMMA 291error 88..88: expected COMMA
294error 88..88: expected R_ANGLE 292error 88..88: expected R_ANGLE
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 195c08bd9..88b086daf 100644
--- a/crates/ra_syntax/test_data/parser/err/0025_nope.rast
+++ b/crates/ra_syntax/test_data/parser/err/0025_nope.rast
@@ -9,187 +9,185 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "enum"
16 [email protected] "enum" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "Test"
19 [email protected] "Test" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "{"
22 [email protected] "{" 22 [email protected] "\n "
23 [email protected] "\n " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "Var1"
26 [email protected] "Var1" 26 [email protected] ","
27 [email protected] "," 27 [email protected] "\n "
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] "Var2"
31 [email protected] "Var2" 31 [email protected]
32 [email protected] 32 [email protected] "("
33 [email protected] "(" 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected] "String"
39 [email protected] "String" 39 [email protected] ")"
40 [email protected] ")" 40 [email protected] ","
41 [email protected] "," 41 [email protected] "\n "
42 [email protected] "\n " 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected] "Var3"
45 [email protected] "Var3" 45 [email protected] " "
46 [email protected] " " 46 [email protected]
47 [email protected] 47 [email protected] "{"
48 [email protected] "{" 48 [email protected] "\n "
49 [email protected] "\n " 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected] "abc"
52 [email protected] "abc" 52 [email protected] ":"
53 [email protected] ":" 53 [email protected] " "
54 [email protected] " " 54 [email protected]
55 [email protected] 55 [email protected] "{"
56 [email protected] "{" 56 [email protected] "}"
57 [email protected] "}" 57 [email protected]
58 [email protected] 58 [email protected] ","
59 [email protected] "," 59 [email protected] " "
60 [email protected] " " 60 [email protected] "//~ ERROR: expected t ..."
61 [email protected] "//~ ERROR: expected t ..." 61 [email protected] "\n "
62 [email protected] "\n " 62 [email protected] "}"
63 [email protected] "}" 63 [email protected] ","
64 [email protected] "," 64 [email protected] "\n "
65 [email protected] "\n " 65 [email protected] "}"
66 [email protected] "}" 66 [email protected] "\n\n "
67 [email protected] "\n\n " 67 [email protected] "// recover..."
68 [email protected] "// recover..." 68 [email protected] "\n "
69 [email protected] "\n " 69 [email protected]
70 [email protected] 70 [email protected] "let"
71 [email protected] "let" 71 [email protected] " "
72 [email protected] " " 72 [email protected]
73 [email protected] 73 [email protected]
74 [email protected] 74 [email protected] "a"
75 [email protected] "a" 75 [email protected] " "
76 [email protected] " " 76 [email protected] "="
77 [email protected] "=" 77 [email protected] " "
78 [email protected] " " 78 [email protected]
79 [email protected] 79 [email protected] "1"
80 [email protected] "1" 80 [email protected] ";"
81 [email protected] ";" 81 [email protected] "\n "
82 [email protected] "\n " 82 [email protected]
83 [email protected] 83 [email protected] "enum"
84 [email protected] "enum" 84 [email protected] " "
85 [email protected] " " 85 [email protected]
86 [email protected] 86 [email protected] "Test2"
87 [email protected] "Test2" 87 [email protected] " "
88 [email protected] " " 88 [email protected]
89 [email protected] 89 [email protected] "{"
90 [email protected] "{" 90 [email protected] "\n "
91 [email protected] "\n " 91 [email protected]
92 [email protected] 92 [email protected]
93 [email protected] 93 [email protected] "Fine"
94 [email protected] "Fine" 94 [email protected] ","
95 [email protected] "," 95 [email protected] "\n "
96 [email protected] "\n " 96 [email protected] "}"
97 [email protected] "}" 97 [email protected] "\n\n "
98 [email protected] "\n\n " 98 [email protected]
99 [email protected] 99 [email protected] "enum"
100 [email protected] "enum" 100 [email protected] " "
101 [email protected] " " 101 [email protected]
102 [email protected] 102 [email protected] "Test3"
103 [email protected] "Test3" 103 [email protected] " "
104 [email protected] " " 104 [email protected]
105 [email protected] 105 [email protected] "{"
106 [email protected] "{" 106 [email protected] "\n "
107 [email protected] "\n " 107 [email protected]
108 [email protected] 108 [email protected]
109 [email protected] 109 [email protected] "StillFine"
110 [email protected] "StillFine" 110 [email protected] " "
111 [email protected] " " 111 [email protected]
112 [email protected] 112 [email protected] "{"
113 [email protected] "{" 113 [email protected] "\n "
114 [email protected] "\n " 114 [email protected]
115 [email protected] 115 [email protected]
116 [email protected] 116 [email protected] "def"
117 [email protected] "def" 117 [email protected] ":"
118 [email protected] ":" 118 [email protected] " "
119 [email protected] " " 119 [email protected]
120 [email protected] 120 [email protected]
121 [email protected] 121 [email protected]
122 [email protected] 122 [email protected]
123 [email protected] 123 [email protected] "i32"
124 [email protected] "i32" 124 [email protected] ","
125 [email protected] "," 125 [email protected] "\n "
126 [email protected] "\n " 126 [email protected] "}"
127 [email protected] "}" 127 [email protected] ","
128 [email protected] "," 128 [email protected] "\n "
129 [email protected] "\n " 129 [email protected] "}"
130 [email protected] "}" 130 [email protected] "\n\n "
131 [email protected] "\n\n " 131 [email protected]
132 [email protected] 132 [email protected]
133 [email protected] 133 [email protected] "{"
134 [email protected] 134 [email protected] "\n "
135 [email protected] "{" 135 [email protected]
136 [email protected] "\n " 136 [email protected] "// fail again"
137 [email protected] 137 [email protected] "\n "
138 [email protected] "// fail again" 138 [email protected] "enum"
139 [email protected] "\n " 139 [email protected] " "
140 [email protected] "enum" 140 [email protected]
141 [email protected] " " 141 [email protected] "Test4"
142 [email protected] 142 [email protected] " "
143 [email protected] "Test4" 143 [email protected]
144 [email protected] " " 144 [email protected] "{"
145 [email protected] 145 [email protected] "\n "
146 [email protected] "{" 146 [email protected]
147 [email protected] "\n " 147 [email protected]
148 [email protected] 148 [email protected] "Nope"
149 [email protected] 149 [email protected]
150 [email protected] "Nope" 150 [email protected] "("
151 [email protected] 151 [email protected]
152 [email protected] "(" 152 [email protected]
153 [email protected] 153 [email protected]
154 [email protected] 154 [email protected]
155 [email protected] 155 [email protected]
156 [email protected] 156 [email protected] "i32"
157 [email protected] 157 [email protected] " "
158 [email protected] "i32" 158 [email protected]
159 [email protected] " " 159 [email protected]
160 [email protected] 160 [email protected] "{"
161 [email protected] 161 [email protected] "}"
162 [email protected] "{" 162 [email protected]
163 [email protected] "}" 163 [email protected] ")"
164 [email protected] 164 [email protected] " "
165 [email protected] ")" 165 [email protected] "//~ ERROR: found `{`"
166 [email protected] " " 166 [email protected] "\n ..."
167 [email protected] "//~ ERROR: found `{`" 167 [email protected] "//~^ ERROR: found `{`"
168 [email protected] "\n ..." 168 [email protected] "\n "
169 [email protected] "//~^ ERROR: found `{`" 169 [email protected] "}"
170 [email protected] "\n " 170 [email protected] "\n "
171 [email protected] "}" 171 [email protected] "}"
172 [email protected] "\n " 172 [email protected] "\n "
173 [email protected] "}" 173 [email protected] "// still recover later"
174 [email protected] "\n " 174 [email protected] "\n "
175 [email protected] "// still recover later" 175 [email protected]
176 [email protected] "\n " 176 [email protected] "let"
177 [email protected] 177 [email protected] " "
178 [email protected] "let" 178 [email protected]
179 [email protected] " " 179 [email protected]
180 [email protected] 180 [email protected] "bad_syntax"
181 [email protected] 181 [email protected] " "
182 [email protected] "bad_syntax" 182 [email protected] "="
183 [email protected] " " 183 [email protected] " "
184 [email protected] "=" 184 [email protected]
185 [email protected] " " 185 [email protected] "_"
186 [email protected] 186 [email protected] ";"
187 [email protected] "_" 187 [email protected] " "
188 [email protected] ";" 188 [email protected] "//~ ERROR: expected e ..."
189 [email protected] " " 189 [email protected] "\n"
190 [email protected] "//~ ERROR: expected e ..." 190 [email protected] "}"
191 [email protected] "\n"
192 [email protected] "}"
193 [email protected] "\n" 191 [email protected] "\n"
194error 95..95: expected type 192error 95..95: expected type
195error 95..95: expected COMMA 193error 95..95: expected COMMA
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 f2fada510..568a4cc02 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
@@ -21,9 +21,8 @@ [email protected]
21 [email protected] ">" 21 [email protected] ">"
22 [email protected] "\n" 22 [email protected] "\n"
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected] "{"
25 [email protected] "{" 25 [email protected] "}"
26 [email protected] "}"
27 [email protected] "\n" 26 [email protected] "\n"
28error 26..26: expected a path 27error 26..26: expected a path
29error 26..26: expected colon 28error 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 56682f966..0da8f59f0 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
@@ -20,17 +20,16 @@ [email protected]
20 [email protected] ")" 20 [email protected] ")"
21 [email protected] " " 21 [email protected] " "
22 [email protected] 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] "{" 24 [email protected] "\n "
25 [email protected] "\n " 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] "a"
31 [email protected] "a" 31 [email protected] "."
32 [email protected] "." 32 [email protected] "\n"
33 [email protected] "\n" 33 [email protected] "}"
34 [email protected] "}"
35 [email protected] "\n" 34 [email protected] "\n"
36error 21..21: expected field name or number 35error 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 aac476430..515819e42 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
@@ -9,115 +9,111 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "inner"
20 [email protected] "inner" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "="
22 [email protected] "=" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "{"
25 [email protected] 25 [email protected] "\n "
26 [email protected] "{" 26 [email protected]
27 [email protected] "\n " 27 [email protected] "#"
28 [email protected] 28 [email protected] "!"
29 [email protected] "#" 29 [email protected] "["
30 [email protected] "!" 30 [email protected]
31 [email protected] "[" 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected] "doc"
34 [email protected] 34 [email protected]
35 [email protected] "doc" 35 [email protected] "("
36 [email protected] 36 [email protected] "\"Inner attributes not ..."
37 [email protected] "(" 37 [email protected] ")"
38 [email protected] "\"Inner attributes not ..." 38 [email protected] "]"
39 [email protected] ")" 39 [email protected] "\n "
40 [email protected] "]" 40 [email protected] "//! Nor are ModuleDoc ..."
41 [email protected] "\n " 41 [email protected] "\n "
42 [email protected] "//! Nor are ModuleDoc ..." 42 [email protected] "}"
43 [email protected] "\n " 43 [email protected] ";"
44 [email protected] "}" 44 [email protected] "\n "
45 [email protected] ";" 45 [email protected]
46 [email protected] "\n " 46 [email protected]
47 [email protected] 47 [email protected] "if"
48 [email protected] 48 [email protected] " "
49 [email protected] "if" 49 [email protected]
50 [email protected] " " 50 [email protected]
51 [email protected] 51 [email protected] "true"
52 [email protected] 52 [email protected] " "
53 [email protected] "true" 53 [email protected]
54 [email protected] " " 54 [email protected] "{"
55 [email protected] 55 [email protected] "\n "
56 [email protected] 56 [email protected]
57 [email protected] "{" 57 [email protected] "#"
58 [email protected] "\n " 58 [email protected] "!"
59 [email protected] 59 [email protected] "["
60 [email protected] "#" 60 [email protected]
61 [email protected] "!" 61 [email protected]
62 [email protected] "[" 62 [email protected]
63 [email protected] 63 [email protected] "doc"
64 [email protected] 64 [email protected]
65 [email protected] 65 [email protected] "("
66 [email protected] "doc" 66 [email protected] "\"Nor here\""
67 [email protected] 67 [email protected] ")"
68 [email protected] "(" 68 [email protected] "]"
69 [email protected] "\"Nor here\"" 69 [email protected] "\n "
70 [email protected] ")" 70 [email protected]
71 [email protected] "]" 71 [email protected] "#"
72 [email protected] "\n " 72 [email protected] "!"
73 [email protected] 73 [email protected] "["
74 [email protected] "#" 74 [email protected]
75 [email protected] "!" 75 [email protected]
76 [email protected] "[" 76 [email protected]
77 [email protected] 77 [email protected] "doc"
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected] "("
80 [email protected] "doc" 80 [email protected] "\"We error on each attr\""
81 [email protected] 81 [email protected] ")"
82 [email protected] "(" 82 [email protected] "]"
83 [email protected] "\"We error on each attr\"" 83 [email protected] "\n "
84 [email protected] ")" 84 [email protected] "//! Nor are ModuleDoc ..."
85 [email protected] "]" 85 [email protected] "\n "
86 [email protected] "\n " 86 [email protected] "}"
87 [email protected] "//! Nor are ModuleDoc ..." 87 [email protected] "\n "
88 [email protected] "\n " 88 [email protected]
89 [email protected] "}" 89 [email protected] "while"
90 [email protected] "\n " 90 [email protected] " "
91 [email protected] 91 [email protected]
92 [email protected] "while" 92 [email protected]
93 [email protected] " " 93 [email protected] "true"
94 [email protected] 94 [email protected] " "
95 [email protected] 95 [email protected]
96 [email protected] "true" 96 [email protected] "{"
97 [email protected] " " 97 [email protected] "\n "
98 [email protected] 98 [email protected]
99 [email protected] 99 [email protected] "#"
100 [email protected] "{" 100 [email protected] "!"
101 [email protected] "\n " 101 [email protected] "["
102 [email protected] 102 [email protected]
103 [email protected] "#" 103 [email protected]
104 [email protected] "!" 104 [email protected]
105 [email protected] "[" 105 [email protected] "doc"
106 [email protected] 106 [email protected]
107 [email protected] 107 [email protected] "("
108 [email protected] 108 [email protected] "\"Nor here\""
109 [email protected] "doc" 109 [email protected] ")"
110 [email protected] 110 [email protected] "]"
111 [email protected] "(" 111 [email protected] "\n "
112 [email protected] "\"Nor here\"" 112 [email protected] "//! Nor are ModuleDoc ..."
113 [email protected] ")" 113 [email protected] "\n "
114 [email protected] "]" 114 [email protected] "}"
115 [email protected] "\n " 115 [email protected] "\n"
116 [email protected] "//! Nor are ModuleDoc ..." 116 [email protected] "}"
117 [email protected] "\n "
118 [email protected] "}"
119 [email protected] "\n"
120 [email protected] "}"
121 [email protected] "\n" 117 [email protected] "\n"
122error 39..83: A block in this position cannot accept inner attributes 118error 39..83: A block in this position cannot accept inner attributes
123error 152..171: A block in this position cannot accept inner attributes 119error 152..171: 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 f98de7f15..c6859eca8 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
@@ -9,187 +9,186 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "match"
17 [email protected] "match" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected] "("
20 [email protected] "(" 20 [email protected] ")"
21 [email protected] ")" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] "{" 24 [email protected] "\n "
25 [email protected] "\n " 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected] "_"
28 [email protected] "_" 28 [email protected] " "
29 [email protected] " " 29 [email protected] "=>"
30 [email protected] "=>" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected] "("
33 [email protected] "(" 33 [email protected] ")"
34 [email protected] ")" 34 [email protected] ","
35 [email protected] "," 35 [email protected] "\n "
36 [email protected] "\n " 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected] "#"
39 [email protected] "#" 39 [email protected]
40 [email protected] 40 [email protected] "!"
41 [email protected] "!" 41 [email protected]
42 [email protected] 42 [email protected] "["
43 [email protected] "[" 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "doc"
49 [email protected] "doc" 49 [email protected]
50 [email protected] 50 [email protected] "("
51 [email protected] "(" 51 [email protected]
52 [email protected] 52 [email protected] "\"Not allowed here\""
53 [email protected] "\"Not allowed here\"" 53 [email protected] ")"
54 [email protected] ")" 54 [email protected] "]"
55 [email protected] "]" 55 [email protected] "\n "
56 [email protected] "\n " 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected] "_"
59 [email protected] "_" 59 [email protected] " "
60 [email protected] " " 60 [email protected] "=>"
61 [email protected] "=>" 61 [email protected] " "
62 [email protected] " " 62 [email protected]
63 [email protected] 63 [email protected] "("
64 [email protected] "(" 64 [email protected] ")"
65 [email protected] ")" 65 [email protected] ","
66 [email protected] "," 66 [email protected] "\n "
67 [email protected] "\n " 67 [email protected] "}"
68 [email protected] "}" 68 [email protected] "\n\n "
69 [email protected] "\n\n " 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected] "match"
72 [email protected] "match" 72 [email protected] " "
73 [email protected] " " 73 [email protected]
74 [email protected] 74 [email protected] "("
75 [email protected] "(" 75 [email protected] ")"
76 [email protected] ")" 76 [email protected] " "
77 [email protected] " " 77 [email protected]
78 [email protected] 78 [email protected] "{"
79 [email protected] "{" 79 [email protected] "\n "
80 [email protected] "\n " 80 [email protected]
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected] "_"
83 [email protected] "_" 83 [email protected] " "
84 [email protected] " " 84 [email protected] "=>"
85 [email protected] "=>" 85 [email protected] " "
86 [email protected] " " 86 [email protected]
87 [email protected] 87 [email protected] "("
88 [email protected] "(" 88 [email protected] ")"
89 [email protected] ")" 89 [email protected] ","
90 [email protected] "," 90 [email protected] "\n "
91 [email protected] "\n " 91 [email protected]
92 [email protected] 92 [email protected]
93 [email protected] 93 [email protected] "_"
94 [email protected] "_" 94 [email protected] " "
95 [email protected] " " 95 [email protected] "=>"
96 [email protected] "=>" 96 [email protected] " "
97 [email protected] " " 97 [email protected]
98 [email protected] 98 [email protected] "("
99 [email protected] "(" 99 [email protected] ")"
100 [email protected] ")" 100 [email protected] ","
101 [email protected] "," 101 [email protected] "\n "
102 [email protected] "\n " 102 [email protected]
103 [email protected] 103 [email protected]
104 [email protected] 104 [email protected] "#"
105 [email protected] "#" 105 [email protected]
106 [email protected] 106 [email protected] "!"
107 [email protected] "!" 107 [email protected]
108 [email protected] 108 [email protected] "["
109 [email protected] "[" 109 [email protected]
110 [email protected] 110 [email protected]
111 [email protected] 111 [email protected]
112 [email protected] 112 [email protected]
113 [email protected] 113 [email protected]
114 [email protected] 114 [email protected] "doc"
115 [email protected] "doc" 115 [email protected]
116 [email protected] 116 [email protected] "("
117 [email protected] "(" 117 [email protected]
118 [email protected] 118 [email protected] "\"Nor here\""
119 [email protected] "\"Nor here\"" 119 [email protected] ")"
120 [email protected] ")" 120 [email protected] "]"
121 [email protected] "]" 121 [email protected] "\n "
122 [email protected] "\n " 122 [email protected] "}"
123 [email protected] "}" 123 [email protected] "\n\n "
124 [email protected] "\n\n " 124 [email protected]
125 [email protected] 125 [email protected] "match"
126 [email protected] "match" 126 [email protected] " "
127 [email protected] " " 127 [email protected]
128 [email protected] 128 [email protected] "("
129 [email protected] "(" 129 [email protected] ")"
130 [email protected] ")" 130 [email protected] " "
131 [email protected] " " 131 [email protected]
132 [email protected] 132 [email protected] "{"
133 [email protected] "{" 133 [email protected] "\n "
134 [email protected] "\n " 134 [email protected]
135 [email protected] 135 [email protected]
136 [email protected] 136 [email protected] "#"
137 [email protected] "#" 137 [email protected] "["
138 [email protected] "[" 138 [email protected]
139 [email protected] 139 [email protected]
140 [email protected] 140 [email protected]
141 [email protected] 141 [email protected] "cfg"
142 [email protected] "cfg" 142 [email protected]
143 [email protected] 143 [email protected] "("
144 [email protected] "(" 144 [email protected] "test"
145 [email protected] "test" 145 [email protected] ")"
146 [email protected] ")" 146 [email protected] "]"
147 [email protected] "]" 147 [email protected] "\n "
148 [email protected] "\n " 148 [email protected]
149 [email protected] 149 [email protected] "#"
150 [email protected] "#" 150 [email protected]
151 [email protected] 151 [email protected] "!"
152 [email protected] "!" 152 [email protected]
153 [email protected] 153 [email protected] "["
154 [email protected] "[" 154 [email protected]
155 [email protected] 155 [email protected]
156 [email protected] 156 [email protected]
157 [email protected] 157 [email protected]
158 [email protected] 158 [email protected]
159 [email protected] 159 [email protected] "doc"
160 [email protected] "doc" 160 [email protected]
161 [email protected] 161 [email protected] "("
162 [email protected] "(" 162 [email protected]
163 [email protected] 163 [email protected] "\"Nor here\""
164 [email protected] "\"Nor here\"" 164 [email protected] ")"
165 [email protected] ")" 165 [email protected] "]"
166 [email protected] "]" 166 [email protected] "\n "
167 [email protected] "\n " 167 [email protected]
168 [email protected] 168 [email protected]
169 [email protected] 169 [email protected] "_"
170 [email protected] "_" 170 [email protected] " "
171 [email protected] " " 171 [email protected] "=>"
172 [email protected] "=>" 172 [email protected] " "
173 [email protected] " " 173 [email protected]
174 [email protected] 174 [email protected] "("
175 [email protected] "(" 175 [email protected] ")"
176 [email protected] ")" 176 [email protected] ","
177 [email protected] "," 177 [email protected] "\n "
178 [email protected] "\n " 178 [email protected]
179 [email protected] 179 [email protected]
180 [email protected] 180 [email protected] "_"
181 [email protected] "_" 181 [email protected] " "
182 [email protected] " " 182 [email protected] "=>"
183 [email protected] "=>" 183 [email protected] " "
184 [email protected] " " 184 [email protected]
185 [email protected] 185 [email protected] "("
186 [email protected] "(" 186 [email protected] ")"
187 [email protected] ")" 187 [email protected] ","
188 [email protected] "," 188 [email protected] "\n "
189 [email protected] "\n " 189 [email protected] "}"
190 [email protected] "}" 190 [email protected] "\n"
191 [email protected] "\n" 191 [email protected] "}"
192 [email protected] "}"
193 [email protected] "\n" 192 [email protected] "\n"
194error 52..52: expected `[` 193error 52..52: expected `[`
195error 52..52: expected pattern 194error 52..52: expected pattern
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 d0017c883..53e445459 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
@@ -9,58 +9,57 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "("
19 [email protected] "(" 19 [email protected] ")"
20 [email protected] ")" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] "{" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "_"
27 [email protected] "_" 27 [email protected] " "
28 [email protected] " " 28 [email protected] "=>"
29 [email protected] "=>" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected] "("
32 [email protected] "(" 32 [email protected] ")"
33 [email protected] ")" 33 [email protected] ","
34 [email protected] "," 34 [email protected] "\n "
35 [email protected] "\n " 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected] "_"
38 [email protected] "_" 38 [email protected] " "
39 [email protected] " " 39 [email protected] "=>"
40 [email protected] "=>" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected] "("
43 [email protected] "(" 43 [email protected] ")"
44 [email protected] ")" 44 [email protected] ","
45 [email protected] "," 45 [email protected] "\n "
46 [email protected] "\n " 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "#"
49 [email protected] "#" 49 [email protected] "["
50 [email protected] "[" 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected]
53 [email protected] 53 [email protected] "cfg"
54 [email protected] "cfg" 54 [email protected]
55 [email protected] 55 [email protected] "("
56 [email protected] "(" 56 [email protected] "test"
57 [email protected] "test" 57 [email protected] ")"
58 [email protected] ")" 58 [email protected] "]"
59 [email protected] "]" 59 [email protected] "\n "
60 [email protected] "\n " 60 [email protected] "}"
61 [email protected] "}" 61 [email protected] "\n"
62 [email protected] "\n" 62 [email protected] "}"
63 [email protected] "}"
64 [email protected] "\n" 63 [email protected] "\n"
65error 80..80: expected pattern 64error 80..80: expected pattern
66error 80..80: expected FAT_ARROW 65error 80..80: expected FAT_ARROW
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 2c0bddec8..1b2ac5011 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
@@ -9,84 +9,83 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "ref"
19 [email protected] "ref" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "box"
22 [email protected] "box" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "i"
30 [email protected] "i" 30 [email protected] " "
31 [email protected] " " 31 [email protected] "="
32 [email protected] "=" 32 [email protected] " "
33 [email protected] " " 33 [email protected]
34 [email protected] 34 [email protected] "("
35 [email protected] "(" 35 [email protected] ")"
36 [email protected] ")" 36 [email protected] ";"
37 [email protected] ";" 37 [email protected] "\n "
38 [email protected] "\n " 38 [email protected]
39 [email protected] 39 [email protected] "let"
40 [email protected] "let" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected] "mut"
43 [email protected] "mut" 43 [email protected] " "
44 [email protected] " " 44 [email protected]
45 [email protected] 45 [email protected] "box"
46 [email protected] "box" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected]
53 [email protected] 53 [email protected] "i"
54 [email protected] "i" 54 [email protected] " "
55 [email protected] " " 55 [email protected] "="
56 [email protected] "=" 56 [email protected] " "
57 [email protected] " " 57 [email protected]
58 [email protected] 58 [email protected] "("
59 [email protected] "(" 59 [email protected] ")"
60 [email protected] ")" 60 [email protected] ";"
61 [email protected] ";" 61 [email protected] "\n "
62 [email protected] "\n " 62 [email protected]
63 [email protected] 63 [email protected] "let"
64 [email protected] "let" 64 [email protected] " "
65 [email protected] " " 65 [email protected]
66 [email protected] 66 [email protected] "ref"
67 [email protected] "ref" 67 [email protected] " "
68 [email protected] " " 68 [email protected] "mut"
69 [email protected] "mut" 69 [email protected] " "
70 [email protected] " " 70 [email protected]
71 [email protected] 71 [email protected] "box"
72 [email protected] "box" 72 [email protected] " "
73 [email protected] " " 73 [email protected]
74 [email protected] 74 [email protected]
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected]
77 [email protected] 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected] "i"
80 [email protected] "i" 80 [email protected] " "
81 [email protected] " " 81 [email protected] "="
82 [email protected] "=" 82 [email protected] " "
83 [email protected] " " 83 [email protected]
84 [email protected] 84 [email protected] "("
85 [email protected] "(" 85 [email protected] ")"
86 [email protected] ")" 86 [email protected] ";"
87 [email protected] ";" 87 [email protected] "\n"
88 [email protected] "\n" 88 [email protected] "}"
89 [email protected] "}"
90 [email protected] "\n\n" 89 [email protected] "\n\n"
91error 24..24: expected a name 90error 24..24: expected a name
92error 27..27: expected SEMICOLON 91error 27..27: 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 83851f5d2..9588cf3b3 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
@@ -44,9 +44,8 @@ [email protected]
44 [email protected] ")" 44 [email protected] ")"
45 [email protected] " " 45 [email protected] " "
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected] "{"
48 [email protected] "{" 48 [email protected] "}"
49 [email protected] "}"
50 [email protected] "\n" 49 [email protected] "\n"
51error 17..17: expected one of `*`, `::`, `{`, `self`, `super` or an identifier 50error 17..17: expected one of `*`, `::`, `{`, `self`, `super` or an identifier
52error 17..17: expected SEMICOLON 51error 17..17: 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 a328222aa..e3cda7c43 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
@@ -27,9 +27,8 @@ [email protected]
27 [email protected] ")" 27 [email protected] ")"
28 [email protected] " " 28 [email protected] " "
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] "{"
31 [email protected] "{" 31 [email protected] "}"
32 [email protected] "}"
33 [email protected] "\n " 32 [email protected] "\n "
34 [email protected] 33 [email protected]
35 [email protected] 34 [email protected]
@@ -44,9 +43,8 @@ [email protected]
44 [email protected] ")" 43 [email protected] ")"
45 [email protected] " " 44 [email protected] " "
46 [email protected] 45 [email protected]
47 [email protected] 46 [email protected] "{"
48 [email protected] "{" 47 [email protected] "}"
49 [email protected] "}"
50 [email protected] "\n " 48 [email protected] "\n "
51 [email protected] 49 [email protected]
52 [email protected] 50 [email protected]
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 bcd1fad69..21db9ee85 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
@@ -9,22 +9,21 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected] "0"
18 [email protected] "0" 18 [email protected] "..="
19 [email protected] "..=" 19 [email protected] ";"
20 [email protected] ";" 20 [email protected] "\n "
21 [email protected] "\n " 21 [email protected]
22 [email protected] 22 [email protected]
23 [email protected] 23 [email protected] "..="
24 [email protected] "..=" 24 [email protected] ";"
25 [email protected] ";" 25 [email protected] "\n"
26 [email protected] "\n" 26 [email protected] "}"
27 [email protected] "}"
28 [email protected] "\n" 27 [email protected] "\n"
29error 16..20: An inclusive range must have an end expression 28error 16..20: An inclusive range must have an end expression
30error 26..29: An inclusive range must have an end expression 29error 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 433ea7bad..ec950381b 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
@@ -18,66 +18,65 @@ [email protected]
18 [email protected] "i32" 18 [email protected] "i32"
19 [email protected] " " 19 [email protected] " "
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "{"
22 [email protected] "{" 22 [email protected] "\n "
23 [email protected] "\n " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected] "["
29 [email protected] "[" 29 [email protected]
30 [email protected] 30 [email protected] "1"
31 [email protected] "1" 31 [email protected] ","
32 [email protected] "," 32 [email protected] " "
33 [email protected] " " 33 [email protected]
34 [email protected] 34 [email protected] "2"
35 [email protected] "2" 35 [email protected] ","
36 [email protected] "," 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected] "3"
39 [email protected] "3" 39 [email protected] "]"
40 [email protected] "]" 40 [email protected] "."
41 [email protected] "." 41 [email protected]
42 [email protected] 42 [email protected] "iter"
43 [email protected] "iter" 43 [email protected]
44 [email protected] 44 [email protected] "("
45 [email protected] "(" 45 [email protected] ")"
46 [email protected] ")" 46 [email protected] "\n "
47 [email protected] "\n " 47 [email protected] "."
48 [email protected] "." 48 [email protected]
49 [email protected] 49 [email protected] "map"
50 [email protected] "map" 50 [email protected]
51 [email protected] 51 [email protected] "("
52 [email protected] "(" 52 [email protected]
53 [email protected] 53 [email protected]
54 [email protected] 54 [email protected] "|"
55 [email protected] "|" 55 [email protected]
56 [email protected] 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected] "it"
59 [email protected] "it" 59 [email protected] "|"
60 [email protected] "|" 60 [email protected] ")"
61 [email protected] ")" 61 [email protected] "\n "
62 [email protected] "\n " 62 [email protected] "."
63 [email protected] "." 63 [email protected]
64 [email protected] 64 [email protected] "max"
65 [email protected] "max" 65 [email protected]
66 [email protected] 66 [email protected] "::"
67 [email protected] "::" 67 [email protected] "<"
68 [email protected] "<" 68 [email protected]
69 [email protected] 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected]
72 [email protected] 72 [email protected]
73 [email protected] 73 [email protected] "i32"
74 [email protected] "i32" 74 [email protected] ">"
75 [email protected] ">" 75 [email protected]
76 [email protected] 76 [email protected] "("
77 [email protected] "(" 77 [email protected] ")"
78 [email protected] ")" 78 [email protected] ";"
79 [email protected] ";" 79 [email protected] "\n"
80 [email protected] "\n" 80 [email protected] "}"
81 [email protected] "}"
82 [email protected] "\n" 81 [email protected] "\n"
83error 56..56: expected expression 82error 56..56: expected expression
diff --git a/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast b/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast
new file mode 100644
index 000000000..d2a549273
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast
@@ -0,0 +1,91 @@
1[email protected]
2 [email protected]
3 [email protected] "use"
4 [email protected] " "
5 [email protected]
6 [email protected]
7 [email protected]
8 [email protected] "::"
9 [email protected] "crate"
10 [email protected] ";"
11 [email protected] "\n"
12 [email protected]
13 [email protected] "use"
14 [email protected] " "
15 [email protected]
16 [email protected]
17 [email protected] "{"
18 [email protected]
19 [email protected]
20 [email protected]
21 [email protected] "crate"
22 [email protected] ","
23 [email protected] " "
24 [email protected]
25 [email protected]
26 [email protected]
27 [email protected]
28 [email protected] "foo"
29 [email protected] "::"
30 [email protected]
31 [email protected] "{"
32 [email protected]
33 [email protected]
34 [email protected]
35 [email protected]
36 [email protected]
37 [email protected]
38 [email protected] "crate"
39 [email protected] "::"
40 [email protected]
41 [email protected]
42 [email protected] "foo"
43 [email protected] "::"
44 [email protected]
45 [email protected]
46 [email protected] "bar"
47 [email protected] "::"
48 [email protected]
49 [email protected]
50 [email protected] "baz"
51 [email protected] "}"
52 [email protected] "}"
53 [email protected] ";"
54 [email protected] "\n"
55 [email protected]
56 [email protected] "use"
57 [email protected] " "
58 [email protected]
59 [email protected]
60 [email protected]
61 [email protected]
62 [email protected]
63 [email protected] "hello"
64 [email protected] "::"
65 [email protected]
66 [email protected] "crate"
67 [email protected] ";"
68 [email protected] "\n"
69 [email protected]
70 [email protected] "use"
71 [email protected] " "
72 [email protected]
73 [email protected]
74 [email protected]
75 [email protected]
76 [email protected]
77 [email protected]
78 [email protected] "hello"
79 [email protected] "::"
80 [email protected]
81 [email protected] "crate"
82 [email protected] "::"
83 [email protected]
84 [email protected]
85 [email protected] "there"
86 [email protected] ";"
87 [email protected] "\n"
88error 6..11: The `crate` keyword is only allowed as the first segment of a path
89error 31..36: The `crate` keyword is only allowed as the first segment of a path
90error 66..71: The `crate` keyword is only allowed as the first segment of a path
91error 84..89: The `crate` keyword is only allowed as the first segment of a path
diff --git a/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rs b/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rs
new file mode 100644
index 000000000..508def2c7
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0040_illegal_crate_kw_location.rs
@@ -0,0 +1,4 @@
1use ::crate;
2use {crate, foo::{crate::foo::bar::baz}};
3use hello::crate;
4use hello::crate::there;
diff --git a/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast b/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast
new file mode 100644
index 000000000..d0360c467
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast
@@ -0,0 +1,70 @@
1[email protected]
2 [email protected]
3 [email protected] "use"
4 [email protected] " "
5 [email protected]
6 [email protected]
7 [email protected]
8 [email protected] "::"
9 [email protected] "super"
10 [email protected] ";"
11 [email protected] "\n"
12 [email protected]
13 [email protected] "use"
14 [email protected] " "
15 [email protected]
16 [email protected]
17 [email protected]
18 [email protected]
19 [email protected]
20 [email protected] "a"
21 [email protected] "::"
22 [email protected]
23 [email protected] "super"
24 [email protected] ";"
25 [email protected] "\n"
26 [email protected]
27 [email protected] "use"
28 [email protected] " "
29 [email protected]
30 [email protected]
31 [email protected]
32 [email protected]
33 [email protected]
34 [email protected] "super"
35 [email protected] "::"
36 [email protected]
37 [email protected]
38 [email protected] "a"
39 [email protected] "::"
40 [email protected]
41 [email protected] "super"
42 [email protected] ";"
43 [email protected] "\n"
44 [email protected]
45 [email protected] "use"
46 [email protected] " "
47 [email protected]
48 [email protected]
49 [email protected]
50 [email protected]
51 [email protected] "a"
52 [email protected] "::"
53 [email protected]
54 [email protected] "{"
55 [email protected]
56 [email protected]
57 [email protected]
58 [email protected]
59 [email protected] "super"
60 [email protected] "::"
61 [email protected]
62 [email protected]
63 [email protected] "b"
64 [email protected] "}"
65 [email protected] ";"
66 [email protected] "\n"
67error 6..11: The `super` keyword may only be preceded by other `super`s
68error 20..25: The `super` keyword may only be preceded by other `super`s
69error 41..46: The `super` keyword may only be preceded by other `super`s
70error 56..61: The `super` keyword may only be preceded by other `super`s
diff --git a/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rs b/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rs
new file mode 100644
index 000000000..bd4d58042
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0041_illegal_super_keyword_location.rs
@@ -0,0 +1,4 @@
1use ::super;
2use a::super;
3use super::a::super;
4use a::{super::b};
diff --git a/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast b/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast
new file mode 100644
index 000000000..4f382b06c
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast
@@ -0,0 +1,27 @@
1[email protected]
2 [email protected]
3 [email protected] "use"
4 [email protected] " "
5 [email protected]
6 [email protected]
7 [email protected]
8 [email protected] "::"
9 [email protected] "self"
10 [email protected] ";"
11 [email protected] "\n"
12 [email protected]
13 [email protected] "use"
14 [email protected] " "
15 [email protected]
16 [email protected]
17 [email protected]
18 [email protected]
19 [email protected]
20 [email protected] "a"
21 [email protected] "::"
22 [email protected]
23 [email protected] "self"
24 [email protected] ";"
25 [email protected] "\n"
26error 6..10: The `self` keyword is only allowed as the first segment of a path
27error 19..23: The `self` keyword is only allowed as the first segment of a path
diff --git a/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rs b/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rs
new file mode 100644
index 000000000..b9e1d7d8b
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0042_illegal_self_keyword_location.rs
@@ -0,0 +1,2 @@
1use ::self;
2use a::self;
diff --git a/crates/ra_syntax/test_data/parser/err/0163_weird_blocks.rast b/crates/ra_syntax/test_data/parser/err/0163_weird_blocks.rast
new file mode 100644
index 000000000..e46456384
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0163_weird_blocks.rast
@@ -0,0 +1,71 @@
1[email protected]
2 [email protected]
3 [email protected] "fn"
4 [email protected] " "
5 [email protected]
6 [email protected] "main"
7 [email protected]
8 [email protected] "("
9 [email protected] ")"
10 [email protected] " "
11 [email protected]
12 [email protected] "{"
13 [email protected] "\n "
14 [email protected]
15 [email protected]
16 [email protected] "{"
17 [email protected] " "
18 [email protected]
19 [email protected] "unsafe"
20 [email protected] " "
21 [email protected]
22 [email protected] "92"
23 [email protected] " "
24 [email protected] "}"
25 [email protected] "\n "
26 [email protected]
27 [email protected]
28 [email protected] "{"
29 [email protected] " "
30 [email protected]
31 [email protected] "async"
32 [email protected] " "
33 [email protected]
34 [email protected] "92"
35 [email protected] " "
36 [email protected] "}"
37 [email protected] "\n "
38 [email protected]
39 [email protected]
40 [email protected] "{"
41 [email protected] " "
42 [email protected]
43 [email protected]
44 [email protected] "try"
45 [email protected] " "
46 [email protected]
47 [email protected] "92"
48 [email protected] " "
49 [email protected] "}"
50 [email protected] "\n "
51 [email protected]
52 [email protected] "{"
53 [email protected] " "
54 [email protected]
55 [email protected]
56 [email protected]
57 [email protected] "\'label"
58 [email protected] ":"
59 [email protected] " "
60 [email protected]
61 [email protected] "92"
62 [email protected] " "
63 [email protected] "}"
64 [email protected] "\n"
65 [email protected] "}"
66 [email protected] "\n"
67error 24..24: expected existential, fn, trait or impl
68error 41..41: expected existential, fn, trait or impl
69error 56..56: expected a block
70error 75..75: expected a loop
71error 75..75: expected SEMICOLON
diff --git a/crates/ra_syntax/test_data/parser/err/0163_weird_blocks.rs b/crates/ra_syntax/test_data/parser/err/0163_weird_blocks.rs
new file mode 100644
index 000000000..8fa324c1a
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/err/0163_weird_blocks.rs
@@ -0,0 +1,6 @@
1fn main() {
2 { unsafe 92 }
3 { async 92 }
4 { try 92 }
5 { 'label: 92 }
6}
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 85bf276a0..75668c818 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
@@ -9,19 +9,18 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected] "\'loop"
18 [email protected] "\'loop" 18 [email protected] ":"
19 [email protected] ":" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "impl"
22 [email protected] "impl" 22 [email protected] "\n"
23 [email protected] "\n" 23 [email protected] "}"
24 [email protected] "}"
25 [email protected] "\n" 24 [email protected] "\n"
26error 22..22: expected a loop 25error 22..22: expected a loop
27error 22..22: expected SEMICOLON 26error 22..22: expected SEMICOLON
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 b901c17f7..c789e8d82 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
@@ -8,9 +8,8 @@ [email protected]
8 [email protected] "(" 8 [email protected] "("
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] 10 [email protected]
11 [email protected] 11 [email protected] "{"
12 [email protected] "{" 12 [email protected] "}"
13 [email protected] "}"
14 [email protected] " " 13 [email protected] " "
15 [email protected] 14 [email protected]
16 [email protected] "unsafe" 15 [email protected] "unsafe"
@@ -29,9 +28,8 @@ [email protected]
29 [email protected] "(" 28 [email protected] "("
30 [email protected] ")" 29 [email protected] ")"
31 [email protected] 30 [email protected]
32 [email protected] 31 [email protected] "{"
33 [email protected] "{" 32 [email protected] "}"
34 [email protected] "}"
35 [email protected] "\n" 33 [email protected] "\n"
36error 11..11: expected an item 34error 11..11: expected an item
37error 18..18: expected an item 35error 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 3f48b86ed..cd24313d4 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
@@ -9,24 +9,23 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "async"
24 [email protected] "async" 24 [email protected] " "
25 [email protected] " " 25 [email protected]
26 [email protected] 26 [email protected] "{"
27 [email protected] "{" 27 [email protected] "}"
28 [email protected] "}" 28 [email protected] " "
29 [email protected] " " 29 [email protected] "}"
30 [email protected] "}"
31 [email protected] "\n" 30 [email protected] "\n"
32error 27..27: expected SEMICOLON 31error 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 be02eaeeb..c5fa7a404 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
@@ -9,18 +9,17 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "pub"
17 [email protected] "pub" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "92"
21 [email protected] "92" 21 [email protected] ";"
22 [email protected] ";" 22 [email protected] " "
23 [email protected] " " 23 [email protected] "}"
24 [email protected] "}"
25 [email protected] "\n" 24 [email protected] "\n"
26error 14..14: expected an item 25error 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 b344e4f7f..0656fdf73 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
@@ -9,53 +9,51 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "#"
17 [email protected] "#" 17 [email protected] "["
18 [email protected] "[" 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "A"
22 [email protected] "A" 22 [email protected] "]"
23 [email protected] "]" 23 [email protected] " "
24 [email protected] " " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "1"
27 [email protected] "1" 27 [email protected] " "
28 [email protected] " " 28 [email protected] "+"
29 [email protected] "+" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected] "2"
32 [email protected] "2" 32 [email protected] ";"
33 [email protected] ";" 33 [email protected] "\n "
34 [email protected] "\n " 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected] "#"
37 [email protected] "#" 37 [email protected] "["
38 [email protected] "[" 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "B"
42 [email protected] "B" 42 [email protected] "]"
43 [email protected] "]" 43 [email protected] " "
44 [email protected] " " 44 [email protected]
45 [email protected] 45 [email protected] "if"
46 [email protected] "if" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected] "true"
50 [email protected] "true" 50 [email protected] " "
51 [email protected] " " 51 [email protected]
52 [email protected] 52 [email protected] "{"
53 [email protected] 53 [email protected] "}"
54 [email protected] "{" 54 [email protected] ";"
55 [email protected] "}" 55 [email protected] "\n"
56 [email protected] ";" 56 [email protected] "}"
57 [email protected] "\n"
58 [email protected] "}"
59 [email protected] "\n" 57 [email protected] "\n"
60error 24..24: attributes are not allowed on BIN_EXPR 58error 24..24: attributes are not allowed on BIN_EXPR
61error 44..44: attributes are not allowed on IF_EXPR 59error 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 5339a84d7..e1abc5633 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
@@ -9,45 +9,44 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "x"
21 [email protected] "x" 21 [email protected] "."
22 [email protected] "." 22 [email protected] "0."
23 [email protected] "0." 23 [email protected] ";"
24 [email protected] ";" 24 [email protected] "\n "
25 [email protected] "\n " 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected] "x"
32 [email protected] "x" 32 [email protected] "."
33 [email protected] "." 33 [email protected]
34 [email protected] 34 [email protected] "1i32"
35 [email protected] "1i32" 35 [email protected] ";"
36 [email protected] ";" 36 [email protected] "\n "
37 [email protected] "\n " 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected]
42 [email protected] 42 [email protected]
43 [email protected] 43 [email protected] "x"
44 [email protected] "x" 44 [email protected] "."
45 [email protected] "." 45 [email protected]
46 [email protected] 46 [email protected] "0x01"
47 [email protected] "0x01" 47 [email protected] ";"
48 [email protected] ";" 48 [email protected] "\n"
49 [email protected] "\n" 49 [email protected] "}"
50 [email protected] "}"
51 [email protected] "\n" 50 [email protected] "\n"
52error 27..31: Tuple (struct) field access is only allowed through decimal integers with no underscores or suffix 51error 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 52error 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 20ed39046..9be441110 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
@@ -14,9 +14,8 @@ [email protected]
14 [email protected] ")" 14 [email protected] ")"
15 [email protected] " " 15 [email protected] " "
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected] "{"
18 [email protected] "{" 18 [email protected] "}"
19 [email protected] "}"
20 [email protected] "\n" 19 [email protected] "\n"
21 [email protected] 20 [email protected]
22 [email protected] "unsafe" 21 [email protected] "unsafe"
@@ -33,9 +32,8 @@ [email protected]
33 [email protected] ")" 32 [email protected] ")"
34 [email protected] " " 33 [email protected] " "
35 [email protected] 34 [email protected]
36 [email protected] 35 [email protected] "{"
37 [email protected] "{" 36 [email protected] "}"
38 [email protected] "}"
39 [email protected] "\n" 37 [email protected] "\n"
40error 6..6: expected existential, fn, trait or impl 38error 6..6: expected existential, fn, trait or impl
41error 31..31: expected existential, fn, trait or impl 39error 31..31: expected existential, fn, trait or impl
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 88567263e..b8cd0587d 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
@@ -45,9 +45,8 @@ [email protected]
45 [email protected] ")" 45 [email protected] ")"
46 [email protected] " " 46 [email protected] " "
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "{"
49 [email protected] "{" 49 [email protected] "}"
50 [email protected] "}"
51 [email protected] "\n" 50 [email protected] "\n"
52 [email protected] "}" 51 [email protected] "}"
53 [email protected] "\n" 52 [email protected] "\n"
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 578befa56..a9de44b57 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
@@ -9,41 +9,40 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected] "S"
19 [email protected] "S" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "{"
22 [email protected] "{" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "field"
26 [email protected] "field" 26 [email protected] " "
27 [email protected] " " 27 [email protected]
28 [email protected] 28 [email protected] ".."
29 [email protected] ".." 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "S"
36 [email protected] "S" 36 [email protected] "::"
37 [email protected] "::" 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected] "default"
40 [email protected] "default" 40 [email protected]
41 [email protected] 41 [email protected] "("
42 [email protected] "(" 42 [email protected] ")"
43 [email protected] ")" 43 [email protected] " "
44 [email protected] " " 44 [email protected] "}"
45 [email protected] "}" 45 [email protected] "\n"
46 [email protected] "\n" 46 [email protected] "}"
47 [email protected] "}"
48 [email protected] "\n" 47 [email protected] "\n"
49error 25..25: expected COLON 48error 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 a1fabb557..a38b4f573 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
@@ -51,9 +51,8 @@ [email protected]
51 [email protected] ")" 51 [email protected] ")"
52 [email protected] " " 52 [email protected] " "
53 [email protected] 53 [email protected]
54 [email protected] 54 [email protected] "{"
55 [email protected] "{" 55 [email protected] "}"
56 [email protected] "}"
57 [email protected] "\n " 56 [email protected] "\n "
58 [email protected] 57 [email protected]
59 [email protected] "fn" 58 [email protected] "fn"
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 bd74b44a6..cf3a90400 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,4 +1,4 @@
1[email protected]50 1[email protected]49
2 [email protected] 2 [email protected]
3 [email protected] "use" 3 [email protected] "use"
4 [email protected] " " 4 [email protected] " "
@@ -104,32 +104,33 @@ [email protected]
104 [email protected] " " 104 [email protected] " "
105 [email protected] "// Rust 2015" 105 [email protected] "// Rust 2015"
106 [email protected] "\n" 106 [email protected] "\n"
107 [email protected]6 107 [email protected]5
108 [email protected] "use" 108 [email protected] "use"
109 [email protected] " " 109 [email protected] " "
110 [email protected]5 110 [email protected]4
111 [email protected] "::" 111 [email protected] "::"
112 [email protected]5 112 [email protected]4
113 [email protected] "{" 113 [email protected] "{"
114 [email protected]4 114 [email protected]3
115 [email protected]4 115 [email protected]3
116 [email protected] "{" 116 [email protected] "{"
117 [email protected]3 117 [email protected]2
118 [email protected]3 118 [email protected]2
119 [email protected] "{" 119 [email protected] "{"
120 [email protected] 120 [email protected]
121 [email protected] 121 [email protected]
122 [email protected] 122 [email protected]
123 [email protected] 123 [email protected]
124 [email protected] "crate" 124 [email protected]
125 [email protected] "::" 125 [email protected] "root"
126 [email protected] 126 [email protected] "::"
127 [email protected] 127 [email protected]
128 [email protected] "export" 128 [email protected]
129 [email protected] "}" 129 [email protected] "export"
130 [email protected] "}" 130 [email protected] "}"
131 [email protected] "}" 131 [email protected] "}"
132 [email protected] ";" 132 [email protected] "}"
133 [email protected] " " 133 [email protected] ";"
134 [email protected] "// Nonsensical but pe ..." 134 [email protected] " "
135 [email protected] "\n" 135 [email protected] "// Nonsensical but pe ..."
136 [email protected] "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rs b/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rs
index 06c387cee..381cba1e2 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rs
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0002_use_tree_list.rs
@@ -1,4 +1,4 @@
1use {crate::path::from::root, or::path::from::crate_name}; // Rust 2018 (with a crate named `or`) 1use {crate::path::from::root, or::path::from::crate_name}; // Rust 2018 (with a crate named `or`)
2use {path::from::root}; // Rust 2015 2use {path::from::root}; // Rust 2015
3use ::{some::arbritrary::path}; // Rust 2015 3use ::{some::arbritrary::path}; // Rust 2015
4use ::{{{crate::export}}}; // Nonsensical but perfectly legal nestnig 4use ::{{{root::export}}}; // Nonsensical but perfectly legal nesting
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 a46d76fde..9dc473e43 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
@@ -55,8 +55,7 @@ [email protected]
55 [email protected] ")" 55 [email protected] ")"
56 [email protected] "\n" 56 [email protected] "\n"
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected] "{"
59 [email protected] "{" 59 [email protected] " "
60 [email protected] " " 60 [email protected] "}"
61 [email protected] "}"
62 [email protected] "\n" 61 [email protected] "\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 5181fcd2b..6c8c1e24b 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
@@ -32,7 +32,6 @@ [email protected]
32 [email protected] "(" 32 [email protected] "("
33 [email protected] ")" 33 [email protected] ")"
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "{"
36 [email protected] "{" 36 [email protected] "}"
37 [email protected] "}"
38 [email protected] "\n" 37 [email protected] "\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 dd41b44e1..9f4a9e69b 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
@@ -23,9 +23,8 @@ [email protected]
23 [email protected] ")" 23 [email protected] ")"
24 [email protected] " " 24 [email protected] " "
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "{"
27 [email protected] "{" 27 [email protected] "}"
28 [email protected] "}"
29 [email protected] "\n " 28 [email protected] "\n "
30 [email protected] 29 [email protected]
31 [email protected] "fn" 30 [email protected] "fn"
@@ -41,9 +40,8 @@ [email protected]
41 [email protected] ")" 40 [email protected] ")"
42 [email protected] " " 41 [email protected] " "
43 [email protected] 42 [email protected]
44 [email protected] 43 [email protected] "{"
45 [email protected] "{" 44 [email protected] "}"
46 [email protected] "}"
47 [email protected] "\n " 45 [email protected] "\n "
48 [email protected] 46 [email protected]
49 [email protected] "fn" 47 [email protected] "fn"
@@ -61,9 +59,8 @@ [email protected]
61 [email protected] ")" 59 [email protected] ")"
62 [email protected] " " 60 [email protected] " "
63 [email protected] 61 [email protected]
64 [email protected] 62 [email protected] "{"
65 [email protected] "{" 63 [email protected] "}"
66 [email protected] "}"
67 [email protected] "\n " 64 [email protected] "\n "
68 [email protected] 65 [email protected]
69 [email protected] "fn" 66 [email protected] "fn"
@@ -95,9 +92,8 @@ [email protected]
95 [email protected] ")" 92 [email protected] ")"
96 [email protected] " " 93 [email protected] " "
97 [email protected] 94 [email protected]
98 [email protected] 95 [email protected] "{"
99 [email protected] "{" 96 [email protected] "}"
100 [email protected] "}"
101 [email protected] "\n " 97 [email protected] "\n "
102 [email protected] 98 [email protected]
103 [email protected] "fn" 99 [email protected] "fn"
@@ -113,9 +109,8 @@ [email protected]
113 [email protected] ")" 109 [email protected] ")"
114 [email protected] " " 110 [email protected] " "
115 [email protected] 111 [email protected]
116 [email protected] 112 [email protected] "{"
117 [email protected] "{" 113 [email protected] "}"
118 [email protected] "}"
119 [email protected] "\n" 114 [email protected] "\n"
120 [email protected] "}" 115 [email protected] "}"
121 [email protected] "\n" 116 [email protected] "\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 a8ddd20c9..10eb31d68 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
@@ -9,89 +9,88 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected] "foo"
23 [email protected] "foo" 23 [email protected] "::"
24 [email protected] "::" 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "Bar"
27 [email protected] "Bar" 27 [email protected] " "
28 [email protected] " " 28 [email protected] "="
29 [email protected] "=" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected] "("
32 [email protected] "(" 32 [email protected] ")"
33 [email protected] ")" 33 [email protected] ";"
34 [email protected] ";" 34 [email protected] "\n "
35 [email protected] "\n " 35 [email protected]
36 [email protected] 36 [email protected] "let"
37 [email protected] "let" 37 [email protected] " "
38 [email protected] " " 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "::"
42 [email protected] "::" 42 [email protected]
43 [email protected] 43 [email protected] "Bar"
44 [email protected] "Bar" 44 [email protected] " "
45 [email protected] " " 45 [email protected] "="
46 [email protected] "=" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected] "("
49 [email protected] "(" 49 [email protected] ")"
50 [email protected] ")" 50 [email protected] ";"
51 [email protected] ";" 51 [email protected] "\n "
52 [email protected] "\n " 52 [email protected]
53 [email protected] 53 [email protected] "let"
54 [email protected] "let" 54 [email protected] " "
55 [email protected] " " 55 [email protected]
56 [email protected] 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected] "Bar"
60 [email protected] "Bar" 60 [email protected] " "
61 [email protected] " " 61 [email protected]
62 [email protected] 62 [email protected] "{"
63 [email protected] "{" 63 [email protected] " "
64 [email protected] " " 64 [email protected] ".."
65 [email protected] ".." 65 [email protected] " "
66 [email protected] " " 66 [email protected] "}"
67 [email protected] "}" 67 [email protected] " "
68 [email protected] " " 68 [email protected] "="
69 [email protected] "=" 69 [email protected] " "
70 [email protected] " " 70 [email protected]
71 [email protected] 71 [email protected] "("
72 [email protected] "(" 72 [email protected] ")"
73 [email protected] ")" 73 [email protected] ";"
74 [email protected] ";" 74 [email protected] "\n "
75 [email protected] "\n " 75 [email protected]
76 [email protected] 76 [email protected] "let"
77 [email protected] "let" 77 [email protected] " "
78 [email protected] " " 78 [email protected]
79 [email protected] 79 [email protected]
80 [email protected] 80 [email protected]
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected] "Bar"
83 [email protected] "Bar" 83 [email protected] "("
84 [email protected] "(" 84 [email protected]
85 [email protected] 85 [email protected] ".."
86 [email protected] ".." 86 [email protected] ")"
87 [email protected] ")" 87 [email protected] " "
88 [email protected] " " 88 [email protected] "="
89 [email protected] "=" 89 [email protected] " "
90 [email protected] " " 90 [email protected]
91 [email protected] 91 [email protected] "("
92 [email protected] "(" 92 [email protected] ")"
93 [email protected] ")" 93 [email protected] ";"
94 [email protected] ";" 94 [email protected] "\n"
95 [email protected] "\n" 95 [email protected] "}"
96 [email protected] "}"
97 [email protected] "\n" 96 [email protected] "\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 df8ada62a..425e5196c 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
@@ -9,18 +9,16 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "loop"
17 [email protected] "loop" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected] "{"
20 [email protected] 20 [email protected] "}"
21 [email protected] "{" 21 [email protected] ";"
22 [email protected] "}" 22 [email protected] "\n"
23 [email protected] ";" 23 [email protected] "}"
24 [email protected] "\n"
25 [email protected] "}"
26 [email protected] "\n" 24 [email protected] "\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 de01cc79e..d823c08fc 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
@@ -9,52 +9,51 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "x"
21 [email protected] "x" 21 [email protected] "."
22 [email protected] "." 22 [email protected]
23 [email protected] 23 [email protected] "foo"
24 [email protected] "foo" 24 [email protected] ";"
25 [email protected] ";" 25 [email protected] "\n "
26 [email protected] "\n " 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected] "x"
34 [email protected] "x" 34 [email protected] "."
35 [email protected] "." 35 [email protected]
36 [email protected] 36 [email protected] "0"
37 [email protected] "0" 37 [email protected] "."
38 [email protected] "." 38 [email protected]
39 [email protected] 39 [email protected] "bar"
40 [email protected] "bar" 40 [email protected] ";"
41 [email protected] ";" 41 [email protected] "\n "
42 [email protected] "\n " 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected] "x"
50 [email protected] "x" 50 [email protected] "."
51 [email protected] "." 51 [email protected]
52 [email protected] 52 [email protected] "0"
53 [email protected] "0" 53 [email protected]
54 [email protected] 54 [email protected] "("
55 [email protected] "(" 55 [email protected] ")"
56 [email protected] ")" 56 [email protected] ";"
57 [email protected] ";" 57 [email protected] "\n"
58 [email protected] "\n" 58 [email protected] "}"
59 [email protected] "}"
60 [email protected] "\n" 59 [email protected] "\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 8ac307cb3..422912e3c 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
@@ -9,29 +9,27 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "loop"
16 [email protected] "loop" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "{"
19 [email protected] 19 [email protected] "\n "
20 [email protected] "{" 20 [email protected]
21 [email protected] "\n " 21 [email protected]
22 [email protected] 22 [email protected] "continue"
23 [email protected] 23 [email protected] ";"
24 [email protected] "continue" 24 [email protected] "\n "
25 [email protected] ";" 25 [email protected]
26 [email protected] "\n " 26 [email protected]
27 [email protected] 27 [email protected] "continue"
28 [email protected] 28 [email protected] " "
29 [email protected] "continue" 29 [email protected] "\'l"
30 [email protected] " " 30 [email protected] ";"
31 [email protected] "\'l" 31 [email protected] "\n "
32 [email protected] ";" 32 [email protected] "}"
33 [email protected] "\n " 33 [email protected] "\n"
34 [email protected] "}" 34 [email protected] "}"
35 [email protected] "\n"
36 [email protected] "}"
37 [email protected] "\n" 35 [email protected] "\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 6f6400d00..15da6fdd6 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
@@ -32,9 +32,8 @@ [email protected]
32 [email protected] ")" 32 [email protected] ")"
33 [email protected] " " 33 [email protected] " "
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "{"
36 [email protected] "{" 36 [email protected] "}"
37 [email protected] "}"
38 [email protected] "\n " 37 [email protected] "\n "
39 [email protected] 38 [email protected]
40 [email protected] "fn" 39 [email protected] "fn"
@@ -66,9 +65,8 @@ [email protected]
66 [email protected] ")" 65 [email protected] ")"
67 [email protected] " " 66 [email protected] " "
68 [email protected] 67 [email protected]
69 [email protected] 68 [email protected] "{"
70 [email protected] "{" 69 [email protected] "}"
71 [email protected] "}"
72 [email protected] "\n" 70 [email protected] "\n"
73 [email protected] "}" 71 [email protected] "}"
74 [email protected] "\n" 72 [email protected] "\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 ba422f1ae..10d6b2fde 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
@@ -9,37 +9,36 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "*"
17 [email protected] "*" 17 [email protected]
18 [email protected] 18 [email protected] "*"
19 [email protected] "*" 19 [email protected]
20 [email protected] 20 [email protected] "&"
21 [email protected] "&" 21 [email protected]
22 [email protected] 22 [email protected] "1"
23 [email protected] "1" 23 [email protected] ";"
24 [email protected] ";" 24 [email protected] "\n "
25 [email protected] "\n " 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected] "!"
28 [email protected] "!" 28 [email protected]
29 [email protected] 29 [email protected] "!"
30 [email protected] "!" 30 [email protected]
31 [email protected] 31 [email protected] "true"
32 [email protected] "true" 32 [email protected] ";"
33 [email protected] ";" 33 [email protected] "\n "
34 [email protected] "\n " 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected] "-"
37 [email protected] "-" 37 [email protected]
38 [email protected] 38 [email protected] "-"
39 [email protected] "-" 39 [email protected]
40 [email protected] 40 [email protected] "1"
41 [email protected] "1" 41 [email protected] ";"
42 [email protected] ";" 42 [email protected] "\n"
43 [email protected] "\n" 43 [email protected] "}"
44 [email protected] "}"
45 [email protected] "\n" 44 [email protected] "\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 de22b22dd..c204aeb63 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
@@ -55,9 +55,8 @@ [email protected]
55 [email protected] ")" 55 [email protected] ")"
56 [email protected] " " 56 [email protected] " "
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected] "{"
59 [email protected] "{" 59 [email protected] "}"
60 [email protected] "}"
61 [email protected] "\n " 60 [email protected] "\n "
62 [email protected] 61 [email protected]
63 [email protected] "fn" 62 [email protected] "fn"
@@ -72,9 +71,8 @@ [email protected]
72 [email protected] ")" 71 [email protected] ")"
73 [email protected] " " 72 [email protected] " "
74 [email protected] 73 [email protected]
75 [email protected] 74 [email protected] "{"
76 [email protected] "{" 75 [email protected] "}"
77 [email protected] "}"
78 [email protected] "\n" 76 [email protected] "\n"
79 [email protected] "}" 77 [email protected] "}"
80 [email protected] "\n" 78 [email protected] "\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 7da292a2d..7eb27d5e1 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
@@ -9,34 +9,33 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "["
19 [email protected] "[" 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "a"
22 [email protected] "a" 22 [email protected] ","
23 [email protected] "," 23 [email protected] " "
24 [email protected] " " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "b"
27 [email protected] "b" 27 [email protected] ","
28 [email protected] "," 28 [email protected] " "
29 [email protected] " " 29 [email protected]
30 [email protected] 30 [email protected] ".."
31 [email protected] ".." 31 [email protected] "]"
32 [email protected] "]" 32 [email protected] " "
33 [email protected] " " 33 [email protected] "="
34 [email protected] "=" 34 [email protected] " "
35 [email protected] " " 35 [email protected]
36 [email protected] 36 [email protected] "["
37 [email protected] "[" 37 [email protected] "]"
38 [email protected] "]" 38 [email protected] ";"
39 [email protected] ";" 39 [email protected] "\n"
40 [email protected] "\n" 40 [email protected] "}"
41 [email protected] "}"
42 [email protected] "\n" 41 [email protected] "\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 574942f06..b4598768e 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
@@ -9,97 +9,96 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "S"
22 [email protected] "S" 22 [email protected] "("
23 [email protected] "(" 23 [email protected] ")"
24 [email protected] ")" 24 [email protected] " "
25 [email protected] " " 25 [email protected] "="
26 [email protected] "=" 26 [email protected] " "
27 [email protected] " " 27 [email protected]
28 [email protected] 28 [email protected] "("
29 [email protected] "(" 29 [email protected] ")"
30 [email protected] ")" 30 [email protected] ";"
31 [email protected] ";" 31 [email protected] "\n "
32 [email protected] "\n " 32 [email protected]
33 [email protected] 33 [email protected] "let"
34 [email protected] "let" 34 [email protected] " "
35 [email protected] " " 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected] "S"
40 [email protected] "S" 40 [email protected] "("
41 [email protected] "(" 41 [email protected]
42 [email protected] 42 [email protected] "_"
43 [email protected] "_" 43 [email protected] ")"
44 [email protected] ")" 44 [email protected] " "
45 [email protected] " " 45 [email protected] "="
46 [email protected] "=" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected] "("
49 [email protected] "(" 49 [email protected] ")"
50 [email protected] ")" 50 [email protected] ";"
51 [email protected] ";" 51 [email protected] "\n "
52 [email protected] "\n " 52 [email protected]
53 [email protected] 53 [email protected] "let"
54 [email protected] "let" 54 [email protected] " "
55 [email protected] " " 55 [email protected]
56 [email protected] 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected] "S"
60 [email protected] "S" 60 [email protected] "("
61 [email protected] "(" 61 [email protected]
62 [email protected] 62 [email protected] "_"
63 [email protected] "_" 63 [email protected] ","
64 [email protected] "," 64 [email protected] ")"
65 [email protected] ")" 65 [email protected] " "
66 [email protected] " " 66 [email protected] "="
67 [email protected] "=" 67 [email protected] " "
68 [email protected] " " 68 [email protected]
69 [email protected] 69 [email protected] "("
70 [email protected] "(" 70 [email protected] ")"
71 [email protected] ")" 71 [email protected] ";"
72 [email protected] ";" 72 [email protected] "\n "
73 [email protected] "\n " 73 [email protected]
74 [email protected] 74 [email protected] "let"
75 [email protected] "let" 75 [email protected] " "
76 [email protected] " " 76 [email protected]
77 [email protected] 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected]
80 [email protected] 80 [email protected] "S"
81 [email protected] "S" 81 [email protected] "("
82 [email protected] "(" 82 [email protected]
83 [email protected] 83 [email protected] "_"
84 [email protected] "_" 84 [email protected] ","
85 [email protected] "," 85 [email protected] " "
86 [email protected] " " 86 [email protected]
87 [email protected] 87 [email protected] ".."
88 [email protected] ".." 88 [email protected] " "
89 [email protected] " " 89 [email protected] ","
90 [email protected] "," 90 [email protected] " "
91 [email protected] " " 91 [email protected]
92 [email protected] 92 [email protected]
93 [email protected] 93 [email protected] "x"
94 [email protected] "x" 94 [email protected] ")"
95 [email protected] ")" 95 [email protected] " "
96 [email protected] " " 96 [email protected] "="
97 [email protected] "=" 97 [email protected] " "
98 [email protected] " " 98 [email protected]
99 [email protected] 99 [email protected] "("
100 [email protected] "(" 100 [email protected] ")"
101 [email protected] ")" 101 [email protected] ";"
102 [email protected] ";" 102 [email protected] "\n"
103 [email protected] "\n" 103 [email protected] "}"
104 [email protected] "}"
105 [email protected] "\n" 104 [email protected] "\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 1927438bb..b824c10a8 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
@@ -9,42 +9,41 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "&"
19 [email protected] "&" 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "a"
22 [email protected] "a" 22 [email protected] " "
23 [email protected] " " 23 [email protected] "="
24 [email protected] "=" 24 [email protected] " "
25 [email protected] " " 25 [email protected]
26 [email protected] 26 [email protected] "("
27 [email protected] "(" 27 [email protected] ")"
28 [email protected] ")" 28 [email protected] ";"
29 [email protected] ";" 29 [email protected] "\n "
30 [email protected] "\n " 30 [email protected]
31 [email protected] 31 [email protected] "let"
32 [email protected] "let" 32 [email protected] " "
33 [email protected] " " 33 [email protected]
34 [email protected] 34 [email protected] "&"
35 [email protected] "&" 35 [email protected] "mut"
36 [email protected] "mut" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected] "b"
40 [email protected] "b" 40 [email protected] " "
41 [email protected] " " 41 [email protected] "="
42 [email protected] "=" 42 [email protected] " "
43 [email protected] " " 43 [email protected]
44 [email protected] 44 [email protected] "("
45 [email protected] "(" 45 [email protected] ")"
46 [email protected] ")" 46 [email protected] ";"
47 [email protected] ";" 47 [email protected] "\n"
48 [email protected] "\n" 48 [email protected] "}"
49 [email protected] "}"
50 [email protected] "\n" 49 [email protected] "\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 9effb345f..fabb09937 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
@@ -9,82 +9,81 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected] "82"
18 [email protected] "82" 18 [email protected] " "
19 [email protected] " " 19 [email protected] "as"
20 [email protected] "as" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "i32"
26 [email protected] "i32" 26 [email protected] ";"
27 [email protected] ";" 27 [email protected] "\n "
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected] "81"
33 [email protected] "81" 33 [email protected] " "
34 [email protected] " " 34 [email protected] "as"
35 [email protected] "as" 35 [email protected] " "
36 [email protected] " " 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected] "i8"
41 [email protected] "i8" 41 [email protected] " "
42 [email protected] " " 42 [email protected] "+"
43 [email protected] "+" 43 [email protected] " "
44 [email protected] " " 44 [email protected]
45 [email protected] 45 [email protected] "1"
46 [email protected] "1" 46 [email protected] ";"
47 [email protected] ";" 47 [email protected] "\n "
48 [email protected] "\n " 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected] "79"
53 [email protected] "79" 53 [email protected] " "
54 [email protected] " " 54 [email protected] "as"
55 [email protected] "as" 55 [email protected] " "
56 [email protected] " " 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected] "i16"
61 [email protected] "i16" 61 [email protected] " "
62 [email protected] " " 62 [email protected] "-"
63 [email protected] "-" 63 [email protected] " "
64 [email protected] " " 64 [email protected]
65 [email protected] 65 [email protected] "1"
66 [email protected] "1" 66 [email protected] ";"
67 [email protected] ";" 67 [email protected] "\n "
68 [email protected] "\n " 68 [email protected]
69 [email protected] 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected]
72 [email protected] 72 [email protected] "0x36"
73 [email protected] "0x36" 73 [email protected] " "
74 [email protected] " " 74 [email protected] "as"
75 [email protected] "as" 75 [email protected] " "
76 [email protected] " " 76 [email protected]
77 [email protected] 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected]
80 [email protected] 80 [email protected] "u8"
81 [email protected] "u8" 81 [email protected] " "
82 [email protected] " " 82 [email protected] "<="
83 [email protected] "<=" 83 [email protected] " "
84 [email protected] " " 84 [email protected]
85 [email protected] 85 [email protected] "0x37"
86 [email protected] "0x37" 86 [email protected] ";"
87 [email protected] ";" 87 [email protected] "\n"
88 [email protected] "\n" 88 [email protected] "}"
89 [email protected] "}"
90 [email protected] "\n" 89 [email protected] "\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 b6759541e..3aed26732 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
@@ -9,39 +9,37 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected] "if"
16 [email protected] "if" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "let"
19 [email protected] "let" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected] "Some"
25 [email protected] "Some" 25 [email protected] "("
26 [email protected] "(" 26 [email protected]
27 [email protected] 27 [email protected] "_"
28 [email protected] "_" 28 [email protected] ")"
29 [email protected] ")" 29 [email protected] " "
30 [email protected] " " 30 [email protected] "="
31 [email protected] "=" 31 [email protected] " "
32 [email protected] " " 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected] "None"
37 [email protected] "None" 37 [email protected] " "
38 [email protected] " " 38 [email protected]
39 [email protected] 39 [email protected] "{"
40 [email protected] 40 [email protected] "}"
41 [email protected] "{" 41 [email protected] " "
42 [email protected] "}" 42 [email protected] "}"
43 [email protected] " "
44 [email protected] "}"
45 [email protected] "\n" 43 [email protected] "\n"
46 [email protected] 44 [email protected]
47 [email protected] "fn" 45 [email protected] "fn"
@@ -53,157 +51,152 @@ [email protected]
53 [email protected] ")" 51 [email protected] ")"
54 [email protected] " " 52 [email protected] " "
55 [email protected] 53 [email protected]
56 [email protected] 54 [email protected] "{"
57 [email protected] "{" 55 [email protected] "\n "
58 [email protected] "\n " 56 [email protected]
59 [email protected] 57 [email protected]
60 [email protected] 58 [email protected] "if"
61 [email protected] "if" 59 [email protected] " "
62 [email protected] " " 60 [email protected]
63 [email protected] 61 [email protected] "let"
64 [email protected] "let" 62 [email protected] " "
65 [email protected] " " 63 [email protected]
66 [email protected] 64 [email protected]
67 [email protected] 65 [email protected]
68 [email protected] 66 [email protected]
69 [email protected] 67 [email protected]
70 [email protected] 68 [email protected] "Some"
71 [email protected] "Some" 69 [email protected] "("
72 [email protected] "(" 70 [email protected]
73 [email protected] 71 [email protected] "_"
74 [email protected] "_" 72 [email protected] ")"
75 [email protected] ")" 73 [email protected] " "
76 [email protected] " " 74 [email protected] "|"
77 [email protected] "|" 75 [email protected] " "
78 [email protected] " " 76 [email protected]
79 [email protected] 77 [email protected]
80 [email protected] 78 [email protected]
81 [email protected] 79 [email protected]
82 [email protected] 80 [email protected] "Some"
83 [email protected] "Some" 81 [email protected] "("
84 [email protected] "(" 82 [email protected]
85 [email protected] 83 [email protected] "_"
86 [email protected] "_" 84 [email protected] ")"
87 [email protected] ")" 85 [email protected] " "
88 [email protected] " " 86 [email protected] "="
89 [email protected] "=" 87 [email protected] " "
90 [email protected] " " 88 [email protected]
91 [email protected] 89 [email protected]
92 [email protected] 90 [email protected]
93 [email protected] 91 [email protected]
94 [email protected] 92 [email protected] "None"
95 [email protected] "None" 93 [email protected] " "
96 [email protected] " " 94 [email protected]
97 [email protected] 95 [email protected] "{"
98 [email protected] 96 [email protected] "}"
99 [email protected] "{" 97 [email protected] "\n "
100 [email protected] "}" 98 [email protected]
101 [email protected] "\n " 99 [email protected]
102 [email protected] 100 [email protected] "if"
103 [email protected] 101 [email protected] " "
104 [email protected] "if" 102 [email protected]
105 [email protected] " " 103 [email protected] "let"
106 [email protected] 104 [email protected] " "
107 [email protected] "let" 105 [email protected] "|"
108 [email protected] " " 106 [email protected] " "
109 [email protected] "|" 107 [email protected]
110 [email protected] " " 108 [email protected]
111 [email protected] 109 [email protected]
112 [email protected] 110 [email protected]
113 [email protected] 111 [email protected] "Some"
114 [email protected] 112 [email protected] "("
115 [email protected] "Some" 113 [email protected]
116 [email protected] "(" 114 [email protected] "_"
117 [email protected] 115 [email protected] ")"
118 [email protected] "_" 116 [email protected] " "
119 [email protected] ")" 117 [email protected] "="
120 [email protected] " " 118 [email protected] " "
121 [email protected] "=" 119 [email protected]
122 [email protected] " " 120 [email protected]
123 [email protected] 121 [email protected]
124 [email protected] 122 [email protected]
125 [email protected] 123 [email protected] "None"
126 [email protected] 124 [email protected] " "
127 [email protected] "None" 125 [email protected]
128 [email protected] " " 126 [email protected] "{"
129 [email protected] 127 [email protected] "}"
130 [email protected] 128 [email protected] "\n "
131 [email protected] "{" 129 [email protected]
132 [email protected] "}" 130 [email protected]
133 [email protected] "\n " 131 [email protected] "while"
134 [email protected] 132 [email protected] " "
135 [email protected] 133 [email protected]
136 [email protected] "while" 134 [email protected] "let"
137 [email protected] " " 135 [email protected] " "
138 [email protected] 136 [email protected]
139 [email protected] "let" 137 [email protected]
140 [email protected] " " 138 [email protected]
141 [email protected] 139 [email protected]
142 [email protected] 140 [email protected]
143 [email protected] 141 [email protected] "Some"
144 [email protected] 142 [email protected] "("
145 [email protected] 143 [email protected]
146 [email protected] "Some" 144 [email protected] "_"
147 [email protected] "(" 145 [email protected] ")"
148 [email protected] 146 [email protected] " "
149 [email protected] "_" 147 [email protected] "|"
150 [email protected] ")" 148 [email protected] " "
151 [email protected] " " 149 [email protected]
152 [email protected] "|" 150 [email protected]
153 [email protected] " " 151 [email protected]
154 [email protected] 152 [email protected]
155 [email protected] 153 [email protected] "Some"
156 [email protected] 154 [email protected] "("
157 [email protected] 155 [email protected]
158 [email protected] "Some" 156 [email protected] "_"
159 [email protected] "(" 157 [email protected] ")"
160 [email protected] 158 [email protected] " "
161 [email protected] "_" 159 [email protected] "="
162 [email protected] ")" 160 [email protected] " "
163 [email protected] " " 161 [email protected]
164 [email protected] "=" 162 [email protected]
165 [email protected] " " 163 [email protected]
166 [email protected] 164 [email protected]
167 [email protected] 165 [email protected] "None"
168 [email protected] 166 [email protected] " "
169 [email protected] 167 [email protected]
170 [email protected] "None" 168 [email protected] "{"
171 [email protected] " " 169 [email protected] "}"
172 [email protected] 170 [email protected] "\n "
173 [email protected] 171 [email protected]
174 [email protected] "{" 172 [email protected] "while"
175 [email protected] "}" 173 [email protected] " "
176 [email protected] "\n " 174 [email protected]
177 [email protected] 175 [email protected] "let"
178 [email protected] "while" 176 [email protected] " "
179 [email protected] " " 177 [email protected] "|"
180 [email protected] 178 [email protected] " "
181 [email protected] "let" 179 [email protected]
182 [email protected] " " 180 [email protected]
183 [email protected] "|" 181 [email protected]
184 [email protected] " " 182 [email protected]
185 [email protected] 183 [email protected] "Some"
186 [email protected] 184 [email protected] "("
187 [email protected] 185 [email protected]
188 [email protected] 186 [email protected] "_"
189 [email protected] "Some" 187 [email protected] ")"
190 [email protected] "(" 188 [email protected] " "
191 [email protected] 189 [email protected] "="
192 [email protected] "_" 190 [email protected] " "
193 [email protected] ")" 191 [email protected]
194 [email protected] " " 192 [email protected]
195 [email protected] "=" 193 [email protected]
196 [email protected] " " 194 [email protected]
197 [email protected] 195 [email protected] "None"
198 [email protected] 196 [email protected] " "
199 [email protected] 197 [email protected]
200 [email protected] 198 [email protected] "{"
201 [email protected] "None" 199 [email protected] "}"
202 [email protected] " " 200 [email protected] "\n"
203 [email protected] 201 [email protected] "}"
204 [email protected]
205 [email protected] "{"
206 [email protected] "}"
207 [email protected] "\n"
208 [email protected] "}"
209 [email protected] "\n" 202 [email protected] "\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 e5138a599..899b63aac 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
@@ -9,81 +9,76 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "while"
17 [email protected] "while" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "true"
21 [email protected] "true" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] 24 [email protected] "}"
25 [email protected] "{" 25 [email protected] ";"
26 [email protected] "}" 26 [email protected] "\n "
27 [email protected] ";" 27 [email protected]
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected] "while"
30 [email protected] 30 [email protected] " "
31 [email protected] "while" 31 [email protected]
32 [email protected] " " 32 [email protected] "let"
33 [email protected] 33 [email protected] " "
34 [email protected] "let" 34 [email protected]
35 [email protected] " " 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected] "Some"
39 [email protected] 39 [email protected] "("
40 [email protected] "Some" 40 [email protected]
41 [email protected] "(" 41 [email protected]
42 [email protected] 42 [email protected] "x"
43 [email protected] 43 [email protected] ")"
44 [email protected] "x" 44 [email protected] " "
45 [email protected] ")" 45 [email protected] "="
46 [email protected] " " 46 [email protected] " "
47 [email protected] "=" 47 [email protected]
48 [email protected] " " 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected] "it"
53 [email protected] 53 [email protected] "."
54 [email protected] "it" 54 [email protected]
55 [email protected] "." 55 [email protected] "next"
56 [email protected] 56 [email protected]
57 [email protected] "next" 57 [email protected] "("
58 [email protected] 58 [email protected] ")"
59 [email protected] "(" 59 [email protected] " "
60 [email protected] ")" 60 [email protected]
61 [email protected] " " 61 [email protected] "{"
62 [email protected] 62 [email protected] "}"
63 [email protected] 63 [email protected] ";"
64 [email protected] "{" 64 [email protected] "\n "
65 [email protected] "}" 65 [email protected]
66 [email protected] ";" 66 [email protected]
67 [email protected] "\n " 67 [email protected] "while"
68 [email protected] 68 [email protected] " "
69 [email protected] 69 [email protected]
70 [email protected] "while" 70 [email protected]
71 [email protected] " " 71 [email protected] "{"
72 [email protected] 72 [email protected] " "
73 [email protected] 73 [email protected]
74 [email protected] 74 [email protected] "true"
75 [email protected] "{" 75 [email protected] " "
76 [email protected] " " 76 [email protected] "}"
77 [email protected] 77 [email protected] " "
78 [email protected] "true" 78 [email protected]
79 [email protected] " " 79 [email protected] "{"
80 [email protected] "}" 80 [email protected] "}"
81 [email protected] " " 81 [email protected] ";"
82 [email protected] 82 [email protected] "\n"
83 [email protected] 83 [email protected] "}"
84 [email protected] "{"
85 [email protected] "}"
86 [email protected] ";"
87 [email protected] "\n"
88 [email protected] "}"
89 [email protected] "\n" 84 [email protected] "\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 52644da8f..e064aafaf 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
@@ -9,47 +9,45 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "loop"
16 [email protected] "loop" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "{"
19 [email protected] 19 [email protected] "\n "
20 [email protected] "{" 20 [email protected]
21 [email protected] "\n " 21 [email protected]
22 [email protected] 22 [email protected] "break"
23 [email protected] 23 [email protected] ";"
24 [email protected] "break" 24 [email protected] "\n "
25 [email protected] ";" 25 [email protected]
26 [email protected] "\n " 26 [email protected]
27 [email protected] 27 [email protected] "break"
28 [email protected] 28 [email protected] " "
29 [email protected] "break" 29 [email protected] "\'l"
30 [email protected] " " 30 [email protected] ";"
31 [email protected] "\'l" 31 [email protected] "\n "
32 [email protected] ";" 32 [email protected]
33 [email protected] "\n " 33 [email protected]
34 [email protected] 34 [email protected] "break"
35 [email protected] 35 [email protected] " "
36 [email protected] "break" 36 [email protected]
37 [email protected] " " 37 [email protected] "92"
38 [email protected] 38 [email protected] ";"
39 [email protected] "92" 39 [email protected] "\n "
40 [email protected] ";" 40 [email protected]
41 [email protected] "\n " 41 [email protected]
42 [email protected] 42 [email protected] "break"
43 [email protected] 43 [email protected] " "
44 [email protected] "break" 44 [email protected] "\'l"
45 [email protected] " " 45 [email protected] " "
46 [email protected] "\'l" 46 [email protected]
47 [email protected] " " 47 [email protected] "92"
48 [email protected] 48 [email protected] ";"
49 [email protected] "92" 49 [email protected] "\n "
50 [email protected] ";" 50 [email protected] "}"
51 [email protected] "\n " 51 [email protected] "\n"
52 [email protected] "}" 52 [email protected] "}"
53 [email protected] "\n"
54 [email protected] "}"
55 [email protected] "\n" 53 [email protected] "\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 f061c0cac..cf5825593 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
@@ -16,7 +16,6 @@ [email protected]
16 [email protected] ")" 16 [email protected] ")"
17 [email protected] " " 17 [email protected] " "
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "{"
20 [email protected] "{" 20 [email protected] "}"
21 [email protected] "}"
22 [email protected] "\n" 21 [email protected] "\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 e25fc8c3e..fbd90bc0f 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
@@ -42,38 +42,37 @@ [email protected]
42 [email protected] ")" 42 [email protected] ")"
43 [email protected] " " 43 [email protected] " "
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected] "{"
46 [email protected] "{" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected]
53 [email protected] 53 [email protected] "<"
54 [email protected] "<" 54 [email protected]
55 [email protected] 55 [email protected]
56 [email protected] 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected] "usize"
59 [email protected] "usize" 59 [email protected] " "
60 [email protected] " " 60 [email protected] "as"
61 [email protected] "as" 61 [email protected] " "
62 [email protected] " " 62 [email protected]
63 [email protected] 63 [email protected]
64 [email protected] 64 [email protected]
65 [email protected] 65 [email protected]
66 [email protected] 66 [email protected] "Default"
67 [email protected] "Default" 67 [email protected] ">"
68 [email protected] ">" 68 [email protected] "::"
69 [email protected] "::" 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected] "default"
72 [email protected] "default" 72 [email protected]
73 [email protected] 73 [email protected] "("
74 [email protected] "(" 74 [email protected] ")"
75 [email protected] ")" 75 [email protected] ";"
76 [email protected] ";" 76 [email protected] " "
77 [email protected] " " 77 [email protected] "}"
78 [email protected] "}"
79 [email protected] "\n" 78 [email protected] "\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 a1238d610..a767f145d 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
@@ -9,21 +9,20 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "xs"
21 [email protected] "xs" 21 [email protected] "["
22 [email protected] "[" 22 [email protected]
23 [email protected] 23 [email protected] ".."
24 [email protected] ".." 24 [email protected] "]"
25 [email protected] "]" 25 [email protected] ";"
26 [email protected] ";" 26 [email protected] " "
27 [email protected] " " 27 [email protected] "}"
28 [email protected] "}"
29 [email protected] "\n" 28 [email protected] "\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 69e5fe4bc..e92ea2bf2 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
@@ -32,13 +32,12 @@ [email protected]
32 [email protected] " " 32 [email protected] " "
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "{"
36 [email protected] "{" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected] "2"
39 [email protected] "2" 39 [email protected] " "
40 [email protected] " " 40 [email protected] "}"
41 [email protected] "}"
42 [email protected] "," 41 [email protected] ","
43 [email protected] " " 42 [email protected] " "
44 [email protected] 43 [email protected]
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 1a98e2610..aa582516a 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
@@ -12,10 +12,9 @@ [email protected]
12 [email protected] ")" 12 [email protected] ")"
13 [email protected] " " 13 [email protected] " "
14 [email protected] 14 [email protected]
15 [email protected] 15 [email protected] "{"
16 [email protected] "{" 16 [email protected] " "
17 [email protected] " " 17 [email protected] "}"
18 [email protected] "}"
19 [email protected] "\n" 18 [email protected] "\n"
20 [email protected] 19 [email protected]
21 [email protected] "struct" 20 [email protected] "struct"
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 bbf6dc494..0c1c6e877 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
@@ -9,140 +9,139 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected] "f"
28 [email protected] "f" 28 [email protected]
29 [email protected] 29 [email protected] "("
30 [email protected] "(" 30 [email protected] ")"
31 [email protected] ")" 31 [email protected] ";"
32 [email protected] ";" 32 [email protected] "\n "
33 [email protected] "\n " 33 [email protected]
34 [email protected] 34 [email protected] "let"
35 [email protected] "let" 35 [email protected] " "
36 [email protected] " " 36 [email protected]
37 [email protected] 37 [email protected] "_"
38 [email protected] "_" 38 [email protected] " "
39 [email protected] " " 39 [email protected] "="
40 [email protected] "=" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "f"
49 [email protected] "f" 49 [email protected]
50 [email protected] 50 [email protected] "("
51 [email protected] "(" 51 [email protected] ")"
52 [email protected] ")" 52 [email protected]
53 [email protected] 53 [email protected] "("
54 [email protected] "(" 54 [email protected]
55 [email protected] 55 [email protected] "1"
56 [email protected] "1" 56 [email protected] ")"
57 [email protected] ")" 57 [email protected]
58 [email protected] 58 [email protected] "("
59 [email protected] "(" 59 [email protected]
60 [email protected] 60 [email protected] "1"
61 [email protected] "1" 61 [email protected] ","
62 [email protected] "," 62 [email protected] " "
63 [email protected] " " 63 [email protected]
64 [email protected] 64 [email protected] "2"
65 [email protected] "2" 65 [email protected] ","
66 [email protected] "," 66 [email protected] ")"
67 [email protected] ")" 67 [email protected] ";"
68 [email protected] ";" 68 [email protected] "\n "
69 [email protected] "\n " 69 [email protected]
70 [email protected] 70 [email protected] "let"
71 [email protected] "let" 71 [email protected] " "
72 [email protected] " " 72 [email protected]
73 [email protected] 73 [email protected] "_"
74 [email protected] "_" 74 [email protected] " "
75 [email protected] " " 75 [email protected] "="
76 [email protected] "=" 76 [email protected] " "
77 [email protected] " " 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected]
80 [email protected] 80 [email protected]
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected] "f"
83 [email protected] "f" 83 [email protected]
84 [email protected] 84 [email protected] "("
85 [email protected] "(" 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] 87 [email protected]
88 [email protected] 88 [email protected]
89 [email protected] 89 [email protected]
90 [email protected] 90 [email protected] "<"
91 [email protected] "<" 91 [email protected]
92 [email protected] 92 [email protected]
93 [email protected] 93 [email protected]
94 [email protected] 94 [email protected]
95 [email protected] 95 [email protected] "Foo"
96 [email protected] "Foo" 96 [email protected] ">"
97 [email protected] ">" 97 [email protected] "::"
98 [email protected] "::" 98 [email protected]
99 [email protected] 99 [email protected]
100 [email protected] 100 [email protected] "func"
101 [email protected] "func" 101 [email protected]
102 [email protected] 102 [email protected] "("
103 [email protected] "(" 103 [email protected] ")"
104 [email protected] ")" 104 [email protected] ")"
105 [email protected] ")" 105 [email protected] ";"
106 [email protected] ";" 106 [email protected] "\n "
107 [email protected] "\n " 107 [email protected]
108 [email protected] 108 [email protected]
109 [email protected] 109 [email protected]
110 [email protected] 110 [email protected]
111 [email protected] 111 [email protected]
112 [email protected] 112 [email protected]
113 [email protected] 113 [email protected] "f"
114 [email protected] "f" 114 [email protected]
115 [email protected] 115 [email protected] "("
116 [email protected] "(" 116 [email protected]
117 [email protected] 117 [email protected]
118 [email protected] 118 [email protected]
119 [email protected] 119 [email protected]
120 [email protected] 120 [email protected]
121 [email protected] 121 [email protected] "<"
122 [email protected] "<" 122 [email protected]
123 [email protected] 123 [email protected]
124 [email protected] 124 [email protected]
125 [email protected] 125 [email protected]
126 [email protected] 126 [email protected] "Foo"
127 [email protected] "Foo" 127 [email protected] " "
128 [email protected] " " 128 [email protected] "as"
129 [email protected] "as" 129 [email protected] " "
130 [email protected] " " 130 [email protected]
131 [email protected] 131 [email protected]
132 [email protected] 132 [email protected]
133 [email protected] 133 [email protected]
134 [email protected] 134 [email protected] "Trait"
135 [email protected] "Trait" 135 [email protected] ">"
136 [email protected] ">" 136 [email protected] "::"
137 [email protected] "::" 137 [email protected]
138 [email protected] 138 [email protected]
139 [email protected] 139 [email protected] "func"
140 [email protected] "func" 140 [email protected]
141 [email protected] 141 [email protected] "("
142 [email protected] "(" 142 [email protected] ")"
143 [email protected] ")" 143 [email protected] ")"
144 [email protected] ")" 144 [email protected] ";"
145 [email protected] ";" 145 [email protected] "\n"
146 [email protected] "\n" 146 [email protected] "}"
147 [email protected] "}"
148 [email protected] "\n" 147 [email protected] "\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 a454dfc3a..c23b3b67c 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
@@ -9,22 +9,20 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected] "fn"
16 [email protected] "fn" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "b"
19 [email protected] "b" 19 [email protected]
20 [email protected] 20 [email protected] "("
21 [email protected] "(" 21 [email protected] ")"
22 [email protected] ")" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "{"
25 [email protected] 25 [email protected] "}"
26 [email protected] "{" 26 [email protected] " "
27 [email protected] "}" 27 [email protected] "}"
28 [email protected] " "
29 [email protected] "}"
30 [email protected] "\n" 28 [email protected] "\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 2a50f796c..9ca2165ba 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
@@ -41,7 +41,6 @@ [email protected]
41 [email protected] "(" 41 [email protected] "("
42 [email protected] ")" 42 [email protected] ")"
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected] "{"
45 [email protected] "{" 45 [email protected] "}"
46 [email protected] "}"
47 [email protected] "\n" 46 [email protected] "\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 7f87e05ec..b209f67f8 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
@@ -35,9 +35,8 @@ [email protected]
35 [email protected] ">" 35 [email protected] ">"
36 [email protected] " " 36 [email protected] " "
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected] "{"
39 [email protected] "{" 39 [email protected] "}"
40 [email protected] "}"
41 [email protected] "\n" 40 [email protected] "\n"
42 [email protected] 41 [email protected]
43 [email protected] "fn" 42 [email protected] "fn"
@@ -77,7 +76,6 @@ [email protected]
77 [email protected] ">" 76 [email protected] ">"
78 [email protected] " " 77 [email protected] " "
79 [email protected] 78 [email protected]
80 [email protected] 79 [email protected] "{"
81 [email protected] "{" 80 [email protected] "}"
82 [email protected] "}"
83 [email protected] "\n" 81 [email protected] "\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 5f846177e..70232a3b2 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
@@ -9,88 +9,87 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "a"
27 [email protected] "a" 27 [email protected] ";"
28 [email protected] ";" 28 [email protected] "\n "
29 [email protected] "\n " 29 [email protected]
30 [email protected] 30 [email protected] "let"
31 [email protected] "let" 31 [email protected] " "
32 [email protected] " " 32 [email protected]
33 [email protected] 33 [email protected] "_"
34 [email protected] "_" 34 [email protected] " "
35 [email protected] " " 35 [email protected] "="
36 [email protected] "=" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected]
42 [email protected] 42 [email protected] "a"
43 [email protected] "a" 43 [email protected] "::"
44 [email protected] "::" 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected] "b"
47 [email protected] "b" 47 [email protected] ";"
48 [email protected] ";" 48 [email protected] "\n "
49 [email protected] "\n " 49 [email protected]
50 [email protected] 50 [email protected] "let"
51 [email protected] "let" 51 [email protected] " "
52 [email protected] " " 52 [email protected]
53 [email protected] 53 [email protected] "_"
54 [email protected] "_" 54 [email protected] " "
55 [email protected] " " 55 [email protected] "="
56 [email protected] "=" 56 [email protected] " "
57 [email protected] " " 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected] "::"
61 [email protected] "::" 61 [email protected]
62 [email protected] 62 [email protected] "a"
63 [email protected] "a" 63 [email protected]
64 [email protected] 64 [email protected] "::"
65 [email protected] "::" 65 [email protected] "<"
66 [email protected] "<" 66 [email protected]
67 [email protected] 67 [email protected]
68 [email protected] 68 [email protected]
69 [email protected] 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected] "b"
72 [email protected] "b" 72 [email protected] ">"
73 [email protected] ">" 73 [email protected] ";"
74 [email protected] ";" 74 [email protected] "\n "
75 [email protected] "\n " 75 [email protected]
76 [email protected] 76 [email protected] "let"
77 [email protected] "let" 77 [email protected] " "
78 [email protected] " " 78 [email protected]
79 [email protected] 79 [email protected] "_"
80 [email protected] "_" 80 [email protected] " "
81 [email protected] " " 81 [email protected] "="
82 [email protected] "=" 82 [email protected] " "
83 [email protected] " " 83 [email protected]
84 [email protected] 84 [email protected]
85 [email protected] 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] 87 [email protected] "format"
88 [email protected] "format" 88 [email protected] "!"
89 [email protected] "!" 89 [email protected]
90 [email protected] 90 [email protected] "("
91 [email protected] "(" 91 [email protected] ")"
92 [email protected] ")" 92 [email protected] ";"
93 [email protected] ";" 93 [email protected] "\n"
94 [email protected] "\n" 94 [email protected] "}"
95 [email protected] "}"
96 [email protected] "\n" 95 [email protected] "\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 d9310e82e..03c52525e 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
@@ -9,69 +9,68 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "("
19 [email protected] "(" 19 [email protected] ")"
20 [email protected] ")" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] "{" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "-"
27 [email protected] "-" 27 [email protected]
28 [email protected] 28 [email protected] "1"
29 [email protected] "1" 29 [email protected] " "
30 [email protected] " " 30 [email protected] "=>"
31 [email protected] "=>" 31 [email protected] " "
32 [email protected] " " 32 [email protected]
33 [email protected] 33 [email protected] "("
34 [email protected] "(" 34 [email protected] ")"
35 [email protected] ")" 35 [email protected] ","
36 [email protected] "," 36 [email protected] "\n "
37 [email protected] "\n " 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected] "92"
41 [email protected] "92" 41 [email protected] " "
42 [email protected] " " 42 [email protected] "=>"
43 [email protected] "=>" 43 [email protected] " "
44 [email protected] " " 44 [email protected]
45 [email protected] 45 [email protected] "("
46 [email protected] "(" 46 [email protected] ")"
47 [email protected] ")" 47 [email protected] ","
48 [email protected] "," 48 [email protected] "\n "
49 [email protected] "\n " 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected] "\'c\'"
53 [email protected] "\'c\'" 53 [email protected] " "
54 [email protected] " " 54 [email protected] "=>"
55 [email protected] "=>" 55 [email protected] " "
56 [email protected] " " 56 [email protected]
57 [email protected] 57 [email protected] "("
58 [email protected] "(" 58 [email protected] ")"
59 [email protected] ")" 59 [email protected] ","
60 [email protected] "," 60 [email protected] "\n "
61 [email protected] "\n " 61 [email protected]
62 [email protected] 62 [email protected]
63 [email protected] 63 [email protected]
64 [email protected] 64 [email protected] "\"hello\""
65 [email protected] "\"hello\"" 65 [email protected] " "
66 [email protected] " " 66 [email protected] "=>"
67 [email protected] "=>" 67 [email protected] " "
68 [email protected] " " 68 [email protected]
69 [email protected] 69 [email protected] "("
70 [email protected] "(" 70 [email protected] ")"
71 [email protected] ")" 71 [email protected] ","
72 [email protected] "," 72 [email protected] "\n "
73 [email protected] "\n " 73 [email protected] "}"
74 [email protected] "}" 74 [email protected] "\n"
75 [email protected] "\n" 75 [email protected] "}"
76 [email protected] "}"
77 [email protected] "\n" 76 [email protected] "\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 2e727c1ef..24f89b83f 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
@@ -105,7 +105,6 @@ [email protected]
105 [email protected] "\'a" 105 [email protected] "\'a"
106 [email protected] "\n" 106 [email protected] "\n"
107 [email protected] 107 [email protected]
108 [email protected] 108 [email protected] "{"
109 [email protected] "{" 109 [email protected] "}"
110 [email protected] "}"
111 [email protected] "\n" 110 [email protected] "\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 c1e58f9bf..bb43d1eaf 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
@@ -11,7 +11,6 @@ [email protected]
11 [email protected] ")" 11 [email protected] ")"
12 [email protected] " " 12 [email protected] " "
13 [email protected] 13 [email protected]
14 [email protected] 14 [email protected] "{"
15 [email protected] "{" 15 [email protected] "}"
16 [email protected] "}"
17 [email protected] "\n" 16 [email protected] "\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 9bdf2379f..8bd94a868 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
@@ -9,75 +9,74 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "92"
19 [email protected] "92" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "{"
22 [email protected] "{" 22 [email protected] "\n "
23 [email protected] "\n " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected] "0"
28 [email protected] "0" 28 [email protected] " "
29 [email protected] " " 29 [email protected] "..."
30 [email protected] "..." 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected] "100"
34 [email protected] "100" 34 [email protected] " "
35 [email protected] " " 35 [email protected] "=>"
36 [email protected] "=>" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected] "("
39 [email protected] "(" 39 [email protected] ")"
40 [email protected] ")" 40 [email protected] ","
41 [email protected] "," 41 [email protected] "\n "
42 [email protected] "\n " 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected] "101"
47 [email protected] "101" 47 [email protected] " "
48 [email protected] " " 48 [email protected] "..="
49 [email protected] "..=" 49 [email protected] " "
50 [email protected] " " 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected] "200"
53 [email protected] "200" 53 [email protected] " "
54 [email protected] " " 54 [email protected] "=>"
55 [email protected] "=>" 55 [email protected] " "
56 [email protected] " " 56 [email protected]
57 [email protected] 57 [email protected] "("
58 [email protected] "(" 58 [email protected] ")"
59 [email protected] ")" 59 [email protected] ","
60 [email protected] "," 60 [email protected] "\n "
61 [email protected] "\n " 61 [email protected]
62 [email protected] 62 [email protected]
63 [email protected] 63 [email protected]
64 [email protected] 64 [email protected]
65 [email protected] 65 [email protected] "200"
66 [email protected] "200" 66 [email protected] " "
67 [email protected] " " 67 [email protected] ".."
68 [email protected] ".." 68 [email protected] " "
69 [email protected] " " 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected] "301"
72 [email protected] "301" 72 [email protected] "=>"
73 [email protected] "=>" 73 [email protected] " "
74 [email protected] " " 74 [email protected]
75 [email protected] 75 [email protected] "("
76 [email protected] "(" 76 [email protected] ")"
77 [email protected] ")" 77 [email protected] ","
78 [email protected] "," 78 [email protected] "\n "
79 [email protected] "\n " 79 [email protected] "}"
80 [email protected] "}" 80 [email protected] "\n"
81 [email protected] "\n" 81 [email protected] "}"
82 [email protected] "}"
83 [email protected] "\n" 82 [email protected] "\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 e9ca92364..9210f155c 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
@@ -9,52 +9,50 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "("
19 [email protected] "(" 19 [email protected] ")"
20 [email protected] ")" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] "{" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "_"
27 [email protected] "_" 27 [email protected] " "
28 [email protected] " " 28 [email protected] "=>"
29 [email protected] "=>" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected] "("
32 [email protected] "(" 32 [email protected] ")"
33 [email protected] ")" 33 [email protected] ","
34 [email protected] "," 34 [email protected] "\n "
35 [email protected] "\n " 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected] "_"
38 [email protected] "_" 38 [email protected] " "
39 [email protected] " " 39 [email protected] "=>"
40 [email protected] "=>" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected] "{"
43 [email protected] 43 [email protected] "}"
44 [email protected] "{" 44 [email protected] "\n "
45 [email protected] "}" 45 [email protected]
46 [email protected] "\n " 46 [email protected]
47 [email protected] 47 [email protected] "_"
48 [email protected] 48 [email protected] " "
49 [email protected] "_" 49 [email protected] "=>"
50 [email protected] " " 50 [email protected] " "
51 [email protected] "=>" 51 [email protected]
52 [email protected] " " 52 [email protected] "("
53 [email protected] 53 [email protected] ")"
54 [email protected] "(" 54 [email protected] "\n "
55 [email protected] ")" 55 [email protected] "}"
56 [email protected] "\n " 56 [email protected] "\n"
57 [email protected] "}" 57 [email protected] "}"
58 [email protected] "\n"
59 [email protected] "}"
60 [email protected] "\n" 58 [email protected] "\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 15d332938..850465d82 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
@@ -9,117 +9,116 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "S"
20 [email protected] "S" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] "{" 23 [email protected] "}"
24 [email protected] "}" 24 [email protected] ";"
25 [email protected] ";" 25 [email protected] "\n "
26 [email protected] "\n " 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected] "S"
32 [email protected] "S" 32 [email protected] " "
33 [email protected] " " 33 [email protected]
34 [email protected] 34 [email protected] "{"
35 [email protected] "{" 35 [email protected] " "
36 [email protected] " " 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "x"
42 [email protected] "x" 42 [email protected] ","
43 [email protected] "," 43 [email protected] " "
44 [email protected] " " 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected] "y"
47 [email protected] "y" 47 [email protected] ":"
48 [email protected] ":" 48 [email protected] " "
49 [email protected] " " 49 [email protected]
50 [email protected] 50 [email protected] "32"
51 [email protected] "32" 51 [email protected] ","
52 [email protected] "," 52 [email protected] " "
53 [email protected] " " 53 [email protected] "}"
54 [email protected] "}" 54 [email protected] ";"
55 [email protected] ";" 55 [email protected] "\n "
56 [email protected] "\n " 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected] "S"
62 [email protected] "S" 62 [email protected] " "
63 [email protected] " " 63 [email protected]
64 [email protected] 64 [email protected] "{"
65 [email protected] "{" 65 [email protected] " "
66 [email protected] " " 66 [email protected]
67 [email protected] 67 [email protected]
68 [email protected] 68 [email protected]
69 [email protected] 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected] "x"
72 [email protected] "x" 72 [email protected] ","
73 [email protected] "," 73 [email protected] " "
74 [email protected] " " 74 [email protected]
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected] "y"
77 [email protected] "y" 77 [email protected] ":"
78 [email protected] ":" 78 [email protected] " "
79 [email protected] " " 79 [email protected]
80 [email protected] 80 [email protected] "32"
81 [email protected] "32" 81 [email protected] ","
82 [email protected] "," 82 [email protected] " "
83 [email protected] " " 83 [email protected] ".."
84 [email protected] ".." 84 [email protected]
85 [email protected] 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] 87 [email protected]
88 [email protected] 88 [email protected]
89 [email protected] 89 [email protected]
90 [email protected] 90 [email protected] "Default"
91 [email protected] "Default" 91 [email protected] "::"
92 [email protected] "::" 92 [email protected]
93 [email protected] 93 [email protected]
94 [email protected] 94 [email protected] "default"
95 [email protected] "default" 95 [email protected]
96 [email protected] 96 [email protected] "("
97 [email protected] "(" 97 [email protected] ")"
98 [email protected] ")" 98 [email protected] " "
99 [email protected] " " 99 [email protected] "}"
100 [email protected] "}" 100 [email protected] ";"
101 [email protected] ";" 101 [email protected] "\n "
102 [email protected] "\n " 102 [email protected]
103 [email protected] 103 [email protected]
104 [email protected] 104 [email protected]
105 [email protected] 105 [email protected]
106 [email protected] 106 [email protected]
107 [email protected] 107 [email protected] "TupleStruct"
108 [email protected] "TupleStruct" 108 [email protected] " "
109 [email protected] " " 109 [email protected]
110 [email protected] 110 [email protected] "{"
111 [email protected] "{" 111 [email protected] " "
112 [email protected] " " 112 [email protected]
113 [email protected] 113 [email protected]
114 [email protected] 114 [email protected] "0"
115 [email protected] "0" 115 [email protected] ":"
116 [email protected] ":" 116 [email protected] " "
117 [email protected] " " 117 [email protected]
118 [email protected] 118 [email protected] "1"
119 [email protected] "1" 119 [email protected] " "
120 [email protected] " " 120 [email protected] "}"
121 [email protected] "}" 121 [email protected] ";"
122 [email protected] ";" 122 [email protected] "\n"
123 [email protected] "\n" 123 [email protected] "}"
124 [email protected] "}"
125 [email protected] "\n" 124 [email protected] "\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 3cce106e4..02656df31 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
@@ -9,9 +9,8 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "}"
14 [email protected] "}"
15 [email protected] "\n" 14 [email protected] "\n"
16 [email protected] 15 [email protected]
17 [email protected] 16 [email protected]
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 5e1b4cc68..445d8d309 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
@@ -9,124 +9,113 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "if"
17 [email protected] "if" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "true"
21 [email protected] "true" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] 24 [email protected] "}"
25 [email protected] "{" 25 [email protected] ";"
26 [email protected] "}" 26 [email protected] "\n "
27 [email protected] ";" 27 [email protected]
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected] "if"
30 [email protected] 30 [email protected] " "
31 [email protected] "if" 31 [email protected]
32 [email protected] " " 32 [email protected]
33 [email protected] 33 [email protected] "true"
34 [email protected] 34 [email protected] " "
35 [email protected] "true" 35 [email protected]
36 [email protected] " " 36 [email protected] "{"
37 [email protected] 37 [email protected] "}"
38 [email protected] 38 [email protected] " "
39 [email protected] "{" 39 [email protected] "else"
40 [email protected] "}" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] "else" 42 [email protected] "{"
43 [email protected] " " 43 [email protected] "}"
44 [email protected] 44 [email protected] ";"
45 [email protected] 45 [email protected] "\n "
46 [email protected] "{" 46 [email protected]
47 [email protected] "}" 47 [email protected]
48 [email protected] ";" 48 [email protected] "if"
49 [email protected] "\n " 49 [email protected] " "
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] "if" 52 [email protected] "true"
53 [email protected] " " 53 [email protected] " "
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected] "{"
56 [email protected] "true" 56 [email protected] "}"
57 [email protected] " " 57 [email protected] " "
58 [email protected] 58 [email protected] "else"
59 [email protected] 59 [email protected] " "
60 [email protected] "{" 60 [email protected]
61 [email protected] "}" 61 [email protected] "if"
62 [email protected] " " 62 [email protected] " "
63 [email protected] "else" 63 [email protected]
64 [email protected] " " 64 [email protected]
65 [email protected] 65 [email protected] "false"
66 [email protected] "if" 66 [email protected] " "
67 [email protected] " " 67 [email protected]
68 [email protected] 68 [email protected] "{"
69 [email protected] 69 [email protected] "}"
70 [email protected] "false" 70 [email protected] " "
71 [email protected] " " 71 [email protected] "else"
72 [email protected] 72 [email protected] " "
73 [email protected] 73 [email protected]
74 [email protected] "{" 74 [email protected] "{"
75 [email protected] "}" 75 [email protected] "}"
76 [email protected] " " 76 [email protected] ";"
77 [email protected] "else" 77 [email protected] "\n "
78 [email protected] " " 78 [email protected]
79 [email protected] 79 [email protected]
80 [email protected] 80 [email protected] "if"
81 [email protected] "{" 81 [email protected] " "
82 [email protected] "}" 82 [email protected]
83 [email protected] ";" 83 [email protected]
84 [email protected] "\n " 84 [email protected]
85 [email protected] 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] "if" 87 [email protected] "S"
88 [email protected] " " 88 [email protected] " "
89 [email protected] 89 [email protected]
90 [email protected] 90 [email protected] "{"
91 [email protected] 91 [email protected] "}"
92 [email protected] 92 [email protected] ";"
93 [email protected] 93 [email protected] "\n "
94 [email protected] "S" 94 [email protected]
95 [email protected] " " 95 [email protected]
96 [email protected] 96 [email protected] "if"
97 [email protected] 97 [email protected] " "
98 [email protected] "{" 98 [email protected]
99 [email protected] "}" 99 [email protected]
100 [email protected] ";" 100 [email protected] "{"
101 [email protected] "\n " 101 [email protected] " "
102 [email protected] 102 [email protected]
103 [email protected] 103 [email protected] "true"
104 [email protected] "if" 104 [email protected] " "
105 [email protected] " " 105 [email protected] "}"
106 [email protected] 106 [email protected] " "
107 [email protected] 107 [email protected]
108 [email protected] 108 [email protected] "{"
109 [email protected] "{" 109 [email protected] " "
110 [email protected] " " 110 [email protected] "}"
111 [email protected] 111 [email protected] " "
112 [email protected] "true" 112 [email protected] "else"
113 [email protected] " " 113 [email protected] " "
114 [email protected] "}" 114 [email protected]
115 [email protected] " " 115 [email protected] "{"
116 [email protected] 116 [email protected] " "
117 [email protected] 117 [email protected] "}"
118 [email protected] "{" 118 [email protected] ";"
119 [email protected] " " 119 [email protected] "\n"
120 [email protected] "}" 120 [email protected] "}"
121 [email protected] " "
122 [email protected] "else"
123 [email protected] " "
124 [email protected]
125 [email protected]
126 [email protected] "{"
127 [email protected] " "
128 [email protected] "}"
129 [email protected] ";"
130 [email protected] "\n"
131 [email protected] "}"
132 [email protected] "\n" 121 [email protected] "\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 108e5c5cc..177bb5514 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
@@ -9,144 +9,143 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "match"
17 [email protected] "match" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected] "("
20 [email protected] "(" 20 [email protected] ")"
21 [email protected] ")" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] "{" 24 [email protected] "\n "
25 [email protected] "\n " 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected] "_"
28 [email protected] "_" 28 [email protected] " "
29 [email protected] " " 29 [email protected] "=>"
30 [email protected] "=>" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected] "("
33 [email protected] "(" 33 [email protected] ")"
34 [email protected] ")" 34 [email protected] ","
35 [email protected] "," 35 [email protected] "\n "
36 [email protected] "\n " 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected] "_"
39 [email protected] "_" 39 [email protected] " "
40 [email protected] " " 40 [email protected]
41 [email protected] 41 [email protected] "if"
42 [email protected] "if" 42 [email protected] " "
43 [email protected] " " 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "Test"
49 [email protected] "Test" 49 [email protected] " "
50 [email protected] " " 50 [email protected] ">"
51 [email protected] ">" 51 [email protected] " "
52 [email protected] " " 52 [email protected]
53 [email protected] 53 [email protected]
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected]
56 [email protected] 56 [email protected] "Test"
57 [email protected] "Test" 57 [email protected]
58 [email protected] 58 [email protected] "{"
59 [email protected] "{" 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected] "field"
62 [email protected] "field" 62 [email protected] ":"
63 [email protected] ":" 63 [email protected] " "
64 [email protected] " " 64 [email protected]
65 [email protected] 65 [email protected] "0"
66 [email protected] "0" 66 [email protected] "}"
67 [email protected] "}" 67 [email protected] " "
68 [email protected] " " 68 [email protected] "=>"
69 [email protected] "=>" 69 [email protected] " "
70 [email protected] " " 70 [email protected]
71 [email protected] 71 [email protected] "("
72 [email protected] "(" 72 [email protected] ")"
73 [email protected] ")" 73 [email protected] ","
74 [email protected] "," 74 [email protected] "\n "
75 [email protected] "\n " 75 [email protected]
76 [email protected] 76 [email protected]
77 [email protected] 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected] "X"
80 [email protected] "X" 80 [email protected] " "
81 [email protected] " " 81 [email protected] "|"
82 [email protected] "|" 82 [email protected] " "
83 [email protected] " " 83 [email protected]
84 [email protected] 84 [email protected]
85 [email protected] 85 [email protected] "Y"
86 [email protected] "Y" 86 [email protected] " "
87 [email protected] " " 87 [email protected]
88 [email protected] 88 [email protected] "if"
89 [email protected] "if" 89 [email protected] " "
90 [email protected] " " 90 [email protected]
91 [email protected] 91 [email protected]
92 [email protected] 92 [email protected]
93 [email protected] 93 [email protected]
94 [email protected] 94 [email protected] "Z"
95 [email protected] "Z" 95 [email protected] " "
96 [email protected] " " 96 [email protected] "=>"
97 [email protected] "=>" 97 [email protected] " "
98 [email protected] " " 98 [email protected]
99 [email protected] 99 [email protected] "("
100 [email protected] "(" 100 [email protected] ")"
101 [email protected] ")" 101 [email protected] ","
102 [email protected] "," 102 [email protected] "\n "
103 [email protected] "\n " 103 [email protected]
104 [email protected] 104 [email protected] "|"
105 [email protected] "|" 105 [email protected] " "
106 [email protected] " " 106 [email protected]
107 [email protected] 107 [email protected]
108 [email protected] 108 [email protected]
109 [email protected] 109 [email protected] "X"
110 [email protected] "X" 110 [email protected] " "
111 [email protected] " " 111 [email protected] "|"
112 [email protected] "|" 112 [email protected] " "
113 [email protected] " " 113 [email protected]
114 [email protected] 114 [email protected]
115 [email protected] 115 [email protected] "Y"
116 [email protected] "Y" 116 [email protected] " "
117 [email protected] " " 117 [email protected]
118 [email protected] 118 [email protected] "if"
119 [email protected] "if" 119 [email protected] " "
120 [email protected] " " 120 [email protected]
121 [email protected] 121 [email protected]
122 [email protected] 122 [email protected]
123 [email protected] 123 [email protected]
124 [email protected] 124 [email protected] "Z"
125 [email protected] "Z" 125 [email protected] " "
126 [email protected] " " 126 [email protected] "=>"
127 [email protected] "=>" 127 [email protected] " "
128 [email protected] " " 128 [email protected]
129 [email protected] 129 [email protected] "("
130 [email protected] "(" 130 [email protected] ")"
131 [email protected] ")" 131 [email protected] ","
132 [email protected] "," 132 [email protected] "\n "
133 [email protected] "\n " 133 [email protected]
134 [email protected] 134 [email protected] "|"
135 [email protected] "|" 135 [email protected] " "
136 [email protected] " " 136 [email protected]
137 [email protected] 137 [email protected]
138 [email protected] 138 [email protected] "X"
139 [email protected] "X" 139 [email protected] " "
140 [email protected] " " 140 [email protected] "=>"
141 [email protected] "=>" 141 [email protected] " "
142 [email protected] " " 142 [email protected]
143 [email protected] 143 [email protected] "("
144 [email protected] "(" 144 [email protected] ")"
145 [email protected] ")" 145 [email protected] ","
146 [email protected] "," 146 [email protected] "\n "
147 [email protected] "\n " 147 [email protected] "}"
148 [email protected] "}" 148 [email protected] ";"
149 [email protected] ";" 149 [email protected] "\n"
150 [email protected] "\n" 150 [email protected] "}"
151 [email protected] "}"
152 [email protected] "\n" 151 [email protected] "\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 1e888063e..f8ff7079b 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
@@ -9,45 +9,42 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected] "{"
25 [email protected] 25 [email protected]
26 [email protected] "{" 26 [email protected] "1"
27 [email protected] 27 [email protected] "}"
28 [email protected] "1" 28 [email protected] " "
29 [email protected] "}" 29 [email protected] "&"
30 [email protected] " " 30 [email protected] " "
31 [email protected] "&" 31 [email protected]
32 [email protected] " " 32 [email protected] "2"
33 [email protected] 33 [email protected] ";"
34 [email protected] "2" 34 [email protected] "\n "
35 [email protected] ";" 35 [email protected]
36 [email protected] "\n " 36 [email protected]
37 [email protected] 37 [email protected] "{"
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected] "1"
40 [email protected] "{" 40 [email protected] "}"
41 [email protected] 41 [email protected] " "
42 [email protected] "1" 42 [email protected]
43 [email protected] "}" 43 [email protected]
44 [email protected] " " 44 [email protected] "&"
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected] "2"
47 [email protected] "&" 47 [email protected] ";"
48 [email protected] 48 [email protected] "\n"
49 [email protected] "2" 49 [email protected] "}"
50 [email protected] ";"
51 [email protected] "\n"
52 [email protected] "}"
53 [email protected] "\n" 50 [email protected] "\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 218b3ec9e..07b3d1435 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
@@ -9,88 +9,85 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "match"
17 [email protected] "match" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected] "("
20 [email protected] "(" 20 [email protected] ")"
21 [email protected] ")" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] "{" 24 [email protected] " "
25 [email protected] " " 25 [email protected] "}"
26 [email protected] "}" 26 [email protected] ";"
27 [email protected] ";" 27 [email protected] "\n "
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] "match"
31 [email protected] "match" 31 [email protected] " "
32 [email protected] " " 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected] "S"
37 [email protected] "S" 37 [email protected] " "
38 [email protected] " " 38 [email protected]
39 [email protected] 39 [email protected] "{"
40 [email protected] "{" 40 [email protected] "}"
41 [email protected] "}" 41 [email protected] ";"
42 [email protected] ";" 42 [email protected] "\n "
43 [email protected] "\n " 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected] "match"
46 [email protected] "match" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected] "{"
49 [email protected] 49 [email protected] " "
50 [email protected] "{" 50 [email protected] "}"
51 [email protected] " " 51 [email protected] " "
52 [email protected] "}" 52 [email protected]
53 [email protected] " " 53 [email protected] "{"
54 [email protected] 54 [email protected] " "
55 [email protected] "{" 55 [email protected]
56 [email protected] " " 56 [email protected]
57 [email protected] 57 [email protected] "_"
58 [email protected] 58 [email protected] " "
59 [email protected] "_" 59 [email protected] "=>"
60 [email protected] " " 60 [email protected] " "
61 [email protected] "=>" 61 [email protected]
62 [email protected] " " 62 [email protected] "("
63 [email protected] 63 [email protected] ")"
64 [email protected] "(" 64 [email protected] " "
65 [email protected] ")" 65 [email protected] "}"
66 [email protected] " " 66 [email protected] ";"
67 [email protected] "}" 67 [email protected] "\n "
68 [email protected] ";" 68 [email protected]
69 [email protected] "\n " 69 [email protected]
70 [email protected] 70 [email protected] "match"
71 [email protected] 71 [email protected] " "
72 [email protected] "match" 72 [email protected]
73 [email protected] " " 73 [email protected] "{"
74 [email protected] 74 [email protected] " "
75 [email protected] 75 [email protected]
76 [email protected] "{" 76 [email protected]
77 [email protected] " " 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected] "S"
80 [email protected] 80 [email protected] " "
81 [email protected] 81 [email protected]
82 [email protected] "S" 82 [email protected] "{"
83 [email protected] " " 83 [email protected] "}"
84 [email protected] 84 [email protected] " "
85 [email protected] "{" 85 [email protected] "}"
86 [email protected] "}" 86 [email protected] " "
87 [email protected] " " 87 [email protected]
88 [email protected] "}" 88 [email protected] "{"
89 [email protected] " " 89 [email protected] "}"
90 [email protected] 90 [email protected] ";"
91 [email protected] "{" 91 [email protected] "\n"
92 [email protected] "}" 92 [email protected] "}"
93 [email protected] ";"
94 [email protected] "\n"
95 [email protected] "}"
96 [email protected] "\n" 93 [email protected] "\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 b8171dc9c..665f716a8 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
@@ -9,21 +9,20 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "return"
17 [email protected] "return" 17 [email protected] ";"
18 [email protected] ";" 18 [email protected] "\n "
19 [email protected] "\n " 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "return"
22 [email protected] "return" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "92"
25 [email protected] "92" 25 [email protected] ";"
26 [email protected] ";" 26 [email protected] "\n"
27 [email protected] "\n" 27 [email protected] "}"
28 [email protected] "}"
29 [email protected] "\n" 28 [email protected] "\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 c2a73ef25..3fd3a4391 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
@@ -9,55 +9,51 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "("
19 [email protected] "(" 19 [email protected] ")"
20 [email protected] ")" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] "{" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "_"
27 [email protected] "_" 27 [email protected] " "
28 [email protected] " " 28 [email protected] "=>"
29 [email protected] "=>" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected] "{"
32 [email protected] 32 [email protected] "}"
33 [email protected] "{" 33 [email protected] "\n "
34 [email protected] "}" 34 [email protected]
35 [email protected] "\n " 35 [email protected]
36 [email protected] 36 [email protected] "("
37 [email protected] 37 [email protected] ")"
38 [email protected] "(" 38 [email protected] " "
39 [email protected] ")" 39 [email protected] "=>"
40 [email protected] " " 40 [email protected] " "
41 [email protected] "=>" 41 [email protected]
42 [email protected] " " 42 [email protected] "{"
43 [email protected] 43 [email protected] "}"
44 [email protected] 44 [email protected] "\n "
45 [email protected] "{" 45 [email protected]
46 [email protected] "}" 46 [email protected]
47 [email protected] "\n " 47 [email protected] "["
48 [email protected] 48 [email protected] "]"
49 [email protected] 49 [email protected] " "
50 [email protected] "[" 50 [email protected] "=>"
51 [email protected] "]" 51 [email protected] " "
52 [email protected] " " 52 [email protected]
53 [email protected] "=>" 53 [email protected] "{"
54 [email protected] " " 54 [email protected] "}"
55 [email protected] 55 [email protected] "\n "
56 [email protected] 56 [email protected] "}"
57 [email protected] "{" 57 [email protected] "\n"
58 [email protected] "}" 58 [email protected] "}"
59 [email protected] "\n "
60 [email protected] "}"
61 [email protected] "\n"
62 [email protected] "}"
63 [email protected] "\n" 59 [email protected] "\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 39a86d002..97c6e6a9d 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
@@ -9,9 +9,8 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "}"
14 [email protected] "}"
15 [email protected] "\n" 14 [email protected] "\n"
16 [email protected] 15 [email protected]
17 [email protected] "fn" 16 [email protected] "fn"
@@ -23,22 +22,21 @@ [email protected]
23 [email protected] ")" 22 [email protected] ")"
24 [email protected] " " 23 [email protected] " "
25 [email protected] 24 [email protected]
26 [email protected] 25 [email protected] "{"
27 [email protected] "{" 26 [email protected] " "
28 [email protected] " " 27 [email protected]
29 [email protected] 28 [email protected] "let"
30 [email protected] "let" 29 [email protected] " "
31 [email protected] " " 30 [email protected]
32 [email protected] 31 [email protected] "_"
33 [email protected] "_" 32 [email protected] " "
34 [email protected] " " 33 [email protected] "="
35 [email protected] "=" 34 [email protected] " "
36 [email protected] " " 35 [email protected]
37 [email protected] 36 [email protected] "1"
38 [email protected] "1" 37 [email protected] ";"
39 [email protected] ";" 38 [email protected] " "
40 [email protected] " " 39 [email protected] "}"
41 [email protected] "}"
42 [email protected] "\n" 40 [email protected] "\n"
43 [email protected] 41 [email protected]
44 [email protected] "fn" 42 [email protected] "fn"
@@ -50,20 +48,19 @@ [email protected]
50 [email protected] ")" 48 [email protected] ")"
51 [email protected] " " 49 [email protected] " "
52 [email protected] 50 [email protected]
53 [email protected] 51 [email protected] "{"
54 [email protected] "{" 52 [email protected] " "
55 [email protected] " " 53 [email protected]
56 [email protected] 54 [email protected]
57 [email protected] 55 [email protected] "1"
58 [email protected] "1" 56 [email protected] ";"
59 [email protected] ";" 57 [email protected] " "
60 [email protected] " " 58 [email protected]
61 [email protected] 59 [email protected]
62 [email protected] 60 [email protected] "2"
63 [email protected] "2" 61 [email protected] ";"
64 [email protected] ";" 62 [email protected] " "
65 [email protected] " " 63 [email protected] "}"
66 [email protected] "}"
67 [email protected] "\n" 64 [email protected] "\n"
68 [email protected] 65 [email protected]
69 [email protected] "fn" 66 [email protected] "fn"
@@ -75,16 +72,15 @@ [email protected]
75 [email protected] ")" 72 [email protected] ")"
76 [email protected] " " 73 [email protected] " "
77 [email protected] 74 [email protected]
78 [email protected] 75 [email protected] "{"
79 [email protected] "{" 76 [email protected] " "
80 [email protected] " " 77 [email protected]
81 [email protected] 78 [email protected]
82 [email protected] 79 [email protected] "1"
83 [email protected] "1" 80 [email protected] ";"
84 [email protected] ";" 81 [email protected] " "
85 [email protected] " " 82 [email protected]
86 [email protected] 83 [email protected] "2"
87 [email protected] "2" 84 [email protected] " "
88 [email protected] " " 85 [email protected] "}"
89 [email protected] "}"
90 [email protected] "\n" 86 [email protected] "\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 9621ba59e..e2c1a507d 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
@@ -34,7 +34,6 @@ [email protected]
34 [email protected] "Copy" 34 [email protected] "Copy"
35 [email protected] " " 35 [email protected] " "
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected] "{"
38 [email protected] "{" 38 [email protected] "}"
39 [email protected] "}"
40 [email protected] "\n" 39 [email protected] "\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 ed9d62c5f..4f3a8ed24 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
@@ -9,18 +9,17 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "x"
21 [email protected] "x" 21 [email protected] "?"
22 [email protected] "?" 22 [email protected] ";"
23 [email protected] ";" 23 [email protected] "\n"
24 [email protected] "\n" 24 [email protected] "}"
25 [email protected] "}"
26 [email protected] "\n" 25 [email protected] "\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 5141ce70d..462d1a8bb 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
@@ -9,88 +9,87 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "x"
20 [email protected] "x" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "="
22 [email protected] "=" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "1"
26 [email protected] "1" 26 [email protected] ".."
27 [email protected] ".." 27 [email protected] ";"
28 [email protected] ";" 28 [email protected] "\n "
29 [email protected] "\n " 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected] "match"
32 [email protected] "match" 32 [email protected] " "
33 [email protected] " " 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "1"
36 [email protected] "1" 36 [email protected] ".."
37 [email protected] ".." 37 [email protected] " "
38 [email protected] " " 38 [email protected]
39 [email protected] 39 [email protected] "{"
40 [email protected] "{" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected]
43 [email protected] 43 [email protected] "_"
44 [email protected] "_" 44 [email protected] " "
45 [email protected] " " 45 [email protected] "=>"
46 [email protected] "=>" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected] "("
49 [email protected] "(" 49 [email protected] ")"
50 [email protected] ")" 50 [email protected] " "
51 [email protected] " " 51 [email protected] "}"
52 [email protected] "}" 52 [email protected] ";"
53 [email protected] ";" 53 [email protected] "\n "
54 [email protected] "\n " 54 [email protected]
55 [email protected] 55 [email protected]
56 [email protected] 56 [email protected] "match"
57 [email protected] "match" 57 [email protected] " "
58 [email protected] " " 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected]
62 [email protected] 62 [email protected]
63 [email protected] 63 [email protected]
64 [email protected] 64 [email protected] "a"
65 [email protected] "a" 65 [email protected] "."
66 [email protected] "." 66 [email protected]
67 [email protected] 67 [email protected] "b"
68 [email protected] "b" 68 [email protected]
69 [email protected] 69 [email protected] "("
70 [email protected] "(" 70 [email protected] ")"
71 [email protected] ")" 71 [email protected] ".."
72 [email protected] ".." 72 [email protected]
73 [email protected] 73 [email protected]
74 [email protected] 74 [email protected]
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected] "S"
77 [email protected] "S" 77 [email protected] " "
78 [email protected] " " 78 [email protected]
79 [email protected] 79 [email protected] "{"
80 [email protected] "{" 80 [email protected] " "
81 [email protected] " " 81 [email protected]
82 [email protected] 82 [email protected]
83 [email protected] 83 [email protected] "_"
84 [email protected] "_" 84 [email protected] " "
85 [email protected] " " 85 [email protected] "=>"
86 [email protected] "=>" 86 [email protected] " "
87 [email protected] " " 87 [email protected]
88 [email protected] 88 [email protected] "("
89 [email protected] "(" 89 [email protected] ")"
90 [email protected] ")" 90 [email protected] " "
91 [email protected] " " 91 [email protected] "}"
92 [email protected] "}" 92 [email protected] ";"
93 [email protected] ";" 93 [email protected] "\n"
94 [email protected] "\n" 94 [email protected] "}"
95 [email protected] "}"
96 [email protected] "\n" 95 [email protected] "\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 cdbe64180..dfb8d57ad 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
@@ -89,9 +89,8 @@ [email protected]
89 [email protected] "Iterator" 89 [email protected] "Iterator"
90 [email protected] " " 90 [email protected] " "
91 [email protected] 91 [email protected]
92 [email protected] 92 [email protected] "{"
93 [email protected] "{" 93 [email protected] "}"
94 [email protected] "}"
95 [email protected] "\n" 94 [email protected] "\n"
96 [email protected] 95 [email protected]
97 [email protected] "fn" 96 [email protected] "fn"
@@ -155,9 +154,8 @@ [email protected]
155 [email protected] "Iterator" 154 [email protected] "Iterator"
156 [email protected] " " 155 [email protected] " "
157 [email protected] 156 [email protected]
158 [email protected] 157 [email protected] "{"
159 [email protected] "{" 158 [email protected] "}"
160 [email protected] "}"
161 [email protected] "\n" 159 [email protected] "\n"
162 [email protected] 160 [email protected]
163 [email protected] "fn" 161 [email protected] "fn"
@@ -237,7 +235,6 @@ [email protected]
237 [email protected] "Iterator" 235 [email protected] "Iterator"
238 [email protected] " " 236 [email protected] " "
239 [email protected] 237 [email protected]
240 [email protected] 238 [email protected] "{"
241 [email protected] "{" 239 [email protected] "}"
242 [email protected] "}"
243 [email protected] "\n" 240 [email protected] "\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 fbad33389..7fe96e17d 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
@@ -9,47 +9,46 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "&"
24 [email protected] "&" 24 [email protected]
25 [email protected] 25 [email protected] "1"
26 [email protected] "1" 26 [email protected] ";"
27 [email protected] ";" 27 [email protected] "\n "
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected] "let"
30 [email protected] "let" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected] "_"
33 [email protected] "_" 33 [email protected] " "
34 [email protected] " " 34 [email protected] "="
35 [email protected] "=" 35 [email protected] " "
36 [email protected] " " 36 [email protected]
37 [email protected] 37 [email protected] "&"
38 [email protected] "&" 38 [email protected] "mut"
39 [email protected] "mut" 39 [email protected] " "
40 [email protected] " " 40 [email protected]
41 [email protected] 41 [email protected] "&"
42 [email protected] "&" 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected] "f"
48 [email protected] "f" 48 [email protected]
49 [email protected] 49 [email protected] "("
50 [email protected] "(" 50 [email protected] ")"
51 [email protected] ")" 51 [email protected] ";"
52 [email protected] ";" 52 [email protected] "\n"
53 [email protected] "\n" 53 [email protected] "}"
54 [email protected] "}"
55 [email protected] "\n" 54 [email protected] "\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 b165789fd..9fcb7899e 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
@@ -9,128 +9,127 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "true"
24 [email protected] "true" 24 [email protected] ";"
25 [email protected] ";" 25 [email protected] "\n "
26 [email protected] "\n " 26 [email protected]
27 [email protected] 27 [email protected] "let"
28 [email protected] "let" 28 [email protected] " "
29 [email protected] " " 29 [email protected]
30 [email protected] 30 [email protected] "_"
31 [email protected] "_" 31 [email protected] " "
32 [email protected] " " 32 [email protected] "="
33 [email protected] "=" 33 [email protected] " "
34 [email protected] " " 34 [email protected]
35 [email protected] 35 [email protected] "false"
36 [email protected] "false" 36 [email protected] ";"
37 [email protected] ";" 37 [email protected] "\n "
38 [email protected] "\n " 38 [email protected]
39 [email protected] 39 [email protected] "let"
40 [email protected] "let" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected] "_"
43 [email protected] "_" 43 [email protected] " "
44 [email protected] " " 44 [email protected] "="
45 [email protected] "=" 45 [email protected] " "
46 [email protected] " " 46 [email protected]
47 [email protected] 47 [email protected] "1"
48 [email protected] "1" 48 [email protected] ";"
49 [email protected] ";" 49 [email protected] "\n "
50 [email protected] "\n " 50 [email protected]
51 [email protected] 51 [email protected] "let"
52 [email protected] "let" 52 [email protected] " "
53 [email protected] " " 53 [email protected]
54 [email protected] 54 [email protected] "_"
55 [email protected] "_" 55 [email protected] " "
56 [email protected] " " 56 [email protected] "="
57 [email protected] "=" 57 [email protected] " "
58 [email protected] " " 58 [email protected]
59 [email protected] 59 [email protected] "2.0"
60 [email protected] "2.0" 60 [email protected] ";"
61 [email protected] ";" 61 [email protected] "\n "
62 [email protected] "\n " 62 [email protected]
63 [email protected] 63 [email protected] "let"
64 [email protected] "let" 64 [email protected] " "
65 [email protected] " " 65 [email protected]
66 [email protected] 66 [email protected] "_"
67 [email protected] "_" 67 [email protected] " "
68 [email protected] " " 68 [email protected] "="
69 [email protected] "=" 69 [email protected] " "
70 [email protected] " " 70 [email protected]
71 [email protected] 71 [email protected] "b\'a\'"
72 [email protected] "b\'a\'" 72 [email protected] ";"
73 [email protected] ";" 73 [email protected] "\n "
74 [email protected] "\n " 74 [email protected]
75 [email protected] 75 [email protected] "let"
76 [email protected] "let" 76 [email protected] " "
77 [email protected] " " 77 [email protected]
78 [email protected] 78 [email protected] "_"
79 [email protected] "_" 79 [email protected] " "
80 [email protected] " " 80 [email protected] "="
81 [email protected] "=" 81 [email protected] " "
82 [email protected] " " 82 [email protected]
83 [email protected] 83 [email protected] "\'b\'"
84 [email protected] "\'b\'" 84 [email protected] ";"
85 [email protected] ";" 85 [email protected] "\n "
86 [email protected] "\n " 86 [email protected]
87 [email protected] 87 [email protected] "let"
88 [email protected] "let" 88 [email protected] " "
89 [email protected] " " 89 [email protected]
90 [email protected] 90 [email protected] "_"
91 [email protected] "_" 91 [email protected] " "
92 [email protected] " " 92 [email protected] "="
93 [email protected] "=" 93 [email protected] " "
94 [email protected] " " 94 [email protected]
95 [email protected] 95 [email protected] "\"c\""
96 [email protected] "\"c\"" 96 [email protected] ";"
97 [email protected] ";" 97 [email protected] "\n "
98 [email protected] "\n " 98 [email protected]
99 [email protected] 99 [email protected] "let"
100 [email protected] "let" 100 [email protected] " "
101 [email protected] " " 101 [email protected]
102 [email protected] 102 [email protected] "_"
103 [email protected] "_" 103 [email protected] " "
104 [email protected] " " 104 [email protected] "="
105 [email protected] "=" 105 [email protected] " "
106 [email protected] " " 106 [email protected]
107 [email protected] 107 [email protected] "r\"d\""
108 [email protected] "r\"d\"" 108 [email protected] ";"
109 [email protected] ";" 109 [email protected] "\n "
110 [email protected] "\n " 110 [email protected]
111 [email protected] 111 [email protected] "let"
112 [email protected] "let" 112 [email protected] " "
113 [email protected] " " 113 [email protected]
114 [email protected] 114 [email protected] "_"
115 [email protected] "_" 115 [email protected] " "
116 [email protected] " " 116 [email protected] "="
117 [email protected] "=" 117 [email protected] " "
118 [email protected] " " 118 [email protected]
119 [email protected] 119 [email protected] "b\"e\""
120 [email protected] "b\"e\"" 120 [email protected] ";"
121 [email protected] ";" 121 [email protected] "\n "
122 [email protected] "\n " 122 [email protected]
123 [email protected] 123 [email protected] "let"
124 [email protected] "let" 124 [email protected] " "
125 [email protected] " " 125 [email protected]
126 [email protected] 126 [email protected] "_"
127 [email protected] "_" 127 [email protected] " "
128 [email protected] " " 128 [email protected] "="
129 [email protected] "=" 129 [email protected] " "
130 [email protected] " " 130 [email protected]
131 [email protected] 131 [email protected] "br\"f\""
132 [email protected] "br\"f\"" 132 [email protected] ";"
133 [email protected] ";" 133 [email protected] "\n"
134 [email protected] "\n" 134 [email protected] "}"
135 [email protected] "}"
136 [email protected] "\n" 135 [email protected] "\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 36f17133d..a42abc189 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
@@ -9,9 +9,8 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "}"
14 [email protected] "}"
15 [email protected] "\n" 14 [email protected] "\n"
16 [email protected] 15 [email protected]
17 [email protected] "fn" 16 [email protected] "fn"
@@ -30,7 +29,6 @@ [email protected]
30 [email protected] ")" 29 [email protected] ")"
31 [email protected] " " 30 [email protected] " "
32 [email protected] 31 [email protected]
33 [email protected] 32 [email protected] "{"
34 [email protected] "{" 33 [email protected] "}"
35 [email protected] "}"
36 [email protected] "\n" 34 [email protected] "\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 ca5aa007e..7e71d7373 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
@@ -8,62 +8,58 @@ [email protected]
8 [email protected] "(" 8 [email protected] "("
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] 10 [email protected]
11 [email protected] 11 [email protected] "{"
12 [email protected] "{" 12 [email protected] "\n "
13 [email protected] "\n " 13 [email protected]
14 [email protected] 14 [email protected]
15 [email protected] 15 [email protected] "if"
16 [email protected] "if" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "break"
20 [email protected] "break" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] 23 [email protected] "}"
24 [email protected] "{" 24 [email protected] "\n "
25 [email protected] "}" 25 [email protected]
26 [email protected] "\n " 26 [email protected]
27 [email protected] 27 [email protected] "while"
28 [email protected] 28 [email protected] " "
29 [email protected] "while" 29 [email protected]
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected] "break"
32 [email protected] 32 [email protected] " "
33 [email protected] "break" 33 [email protected]
34 [email protected] " " 34 [email protected] "{"
35 [email protected] 35 [email protected] "}"
36 [email protected] 36 [email protected] "\n "
37 [email protected] "{" 37 [email protected]
38 [email protected] "}" 38 [email protected]
39 [email protected] "\n " 39 [email protected] "for"
40 [email protected] 40 [email protected] " "
41 [email protected] 41 [email protected]
42 [email protected] "for" 42 [email protected]
43 [email protected] " " 43 [email protected] "i"
44 [email protected] 44 [email protected] " "
45 [email protected] 45 [email protected] "in"
46 [email protected] "i" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] "in" 48 [email protected] "break"
49 [email protected] " " 49 [email protected] " "
50 [email protected] 50 [email protected]
51 [email protected] "break" 51 [email protected] "{"
52 [email protected] " " 52 [email protected] "}"
53 [email protected] 53 [email protected] "\n "
54 [email protected] 54 [email protected]
55 [email protected] "{" 55 [email protected] "match"
56 [email protected] "}" 56 [email protected] " "
57 [email protected] "\n " 57 [email protected]
58 [email protected] 58 [email protected] "break"
59 [email protected] "match" 59 [email protected] " "
60 [email protected] " " 60 [email protected]
61 [email protected] 61 [email protected] "{"
62 [email protected] "break" 62 [email protected] "}"
63 [email protected] " " 63 [email protected] "\n"
64 [email protected] 64 [email protected] "}"
65 [email protected] "{"
66 [email protected] "}"
67 [email protected] "\n"
68 [email protected] "}"
69 [email protected] "\n" 65 [email protected] "\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 1c1e349e1..48aaf1004 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
@@ -12,7 +12,6 @@ [email protected]
12 [email protected] ")" 12 [email protected] ")"
13 [email protected] " " 13 [email protected] " "
14 [email protected] 14 [email protected]
15 [email protected] 15 [email protected] "{"
16 [email protected] "{" 16 [email protected] "}"
17 [email protected] "}"
18 [email protected] "\n" 17 [email protected] "\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 c264dae5e..aed81f9b0 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
@@ -9,26 +9,25 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "x"
22 [email protected] "x" 22 [email protected] "["
23 [email protected] "[" 23 [email protected]
24 [email protected] 24 [email protected] "1"
25 [email protected] "1" 25 [email protected] "]"
26 [email protected] "]" 26 [email protected] "["
27 [email protected] "[" 27 [email protected]
28 [email protected] 28 [email protected] "2"
29 [email protected] "2" 29 [email protected] "]"
30 [email protected] "]" 30 [email protected] ";"
31 [email protected] ";" 31 [email protected] "\n"
32 [email protected] "\n" 32 [email protected] "}"
33 [email protected] "}"
34 [email protected] "\n" 33 [email protected] "\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 24e1ba8a0..67d9595d3 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
@@ -9,21 +9,20 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "("
24 [email protected] "(" 24 [email protected] ")"
25 [email protected] ")" 25 [email protected] ";"
26 [email protected] ";" 26 [email protected] " "
27 [email protected] " " 27 [email protected] "}"
28 [email protected] "}"
29 [email protected] "\n" 28 [email protected] "\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 47462d44e..031e74652 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
@@ -9,122 +9,115 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "if"
17 [email protected] "if" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "true"
21 [email protected] "true" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] 24 [email protected] "}"
25 [email protected] "{" 25 [email protected] "\n "
26 [email protected] "}" 26 [email protected]
27 [email protected] "\n " 27 [email protected]
28 [email protected] 28 [email protected] "loop"
29 [email protected] 29 [email protected] " "
30 [email protected] "loop" 30 [email protected]
31 [email protected] " " 31 [email protected] "{"
32 [email protected] 32 [email protected] "}"
33 [email protected] 33 [email protected] "\n "
34 [email protected] "{" 34 [email protected]
35 [email protected] "}" 35 [email protected]
36 [email protected] "\n " 36 [email protected] "match"
37 [email protected] 37 [email protected] " "
38 [email protected] 38 [email protected]
39 [email protected] "match" 39 [email protected] "("
40 [email protected] " " 40 [email protected] ")"
41 [email protected] 41 [email protected] " "
42 [email protected] "(" 42 [email protected]
43 [email protected] ")" 43 [email protected] "{"
44 [email protected] " " 44 [email protected] "}"
45 [email protected] 45 [email protected] "\n "
46 [email protected] "{" 46 [email protected]
47 [email protected] "}" 47 [email protected]
48 [email protected] "\n " 48 [email protected] "while"
49 [email protected] 49 [email protected] " "
50 [email protected] 50 [email protected]
51 [email protected] "while" 51 [email protected]
52 [email protected] " " 52 [email protected] "true"
53 [email protected] 53 [email protected] " "
54 [email protected] 54 [email protected]
55 [email protected] "true" 55 [email protected] "{"
56 [email protected] " " 56 [email protected] "}"
57 [email protected] 57 [email protected] "\n "
58 [email protected] 58 [email protected]
59 [email protected] "{" 59 [email protected]
60 [email protected] "}" 60 [email protected] "for"
61 [email protected] "\n " 61 [email protected] " "
62 [email protected] 62 [email protected]
63 [email protected] 63 [email protected] "_"
64 [email protected] "for" 64 [email protected] " "
65 [email protected] " " 65 [email protected] "in"
66 [email protected] 66 [email protected] " "
67 [email protected] "_" 67 [email protected]
68 [email protected] " " 68 [email protected] "("
69 [email protected] "in" 69 [email protected] ")"
70 [email protected] " " 70 [email protected] " "
71 [email protected] 71 [email protected]
72 [email protected] "(" 72 [email protected] "{"
73 [email protected] ")" 73 [email protected] "}"
74 [email protected] " " 74 [email protected] "\n "
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected]
77 [email protected] "{" 77 [email protected] "{"
78 [email protected] "}" 78 [email protected] "}"
79 [email protected] "\n " 79 [email protected] "\n "
80 [email protected] 80 [email protected]
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected] "{"
83 [email protected] "{" 83 [email protected] "}"
84 [email protected] "}" 84 [email protected] "\n "
85 [email protected] "\n " 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] 87 [email protected]
88 [email protected] 88 [email protected]
89 [email protected] "{" 89 [email protected]
90 [email protected] "}" 90 [email protected] "macro_rules"
91 [email protected] "\n " 91 [email protected] "!"
92 [email protected] 92 [email protected] " "
93 [email protected] 93 [email protected]
94 [email protected] 94 [email protected] "test"
95 [email protected] 95 [email protected] " "
96 [email protected] 96 [email protected]
97 [email protected] "macro_rules" 97 [email protected] "{"
98 [email protected] "!" 98 [email protected] "\n "
99 [email protected] " " 99 [email protected]
100 [email protected] 100 [email protected] "("
101 [email protected] "test" 101 [email protected] ")"
102 [email protected] " " 102 [email protected] " "
103 [email protected] 103 [email protected] "="
104 [email protected] "{" 104 [email protected] ">"
105 [email protected] "\n " 105 [email protected] " "
106 [email protected] 106 [email protected]
107 [email protected] "(" 107 [email protected] "{"
108 [email protected] ")" 108 [email protected] "}"
109 [email protected] " " 109 [email protected] "\n "
110 [email protected] "=" 110 [email protected] "}"
111 [email protected] ">" 111 [email protected] "\n "
112 [email protected] " " 112 [email protected]
113 [email protected] 113 [email protected]
114 [email protected] "{" 114 [email protected]
115 [email protected] "}" 115 [email protected]
116 [email protected] "\n " 116 [email protected] "test"
117 [email protected] "}" 117 [email protected] "!"
118 [email protected] "\n " 118 [email protected]
119 [email protected] 119 [email protected] "{"
120 [email protected] 120 [email protected] "}"
121 [email protected] 121 [email protected] "\n"
122 [email protected] 122 [email protected] "}"
123 [email protected] "test"
124 [email protected] "!"
125 [email protected]
126 [email protected] "{"
127 [email protected] "}"
128 [email protected] "\n"
129 [email protected] "}"
130 [email protected] "\n" 123 [email protected] "\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 a51fb5511..816e49310 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
@@ -13,7 +13,6 @@ [email protected]
13 [email protected] ")" 13 [email protected] ")"
14 [email protected] " " 14 [email protected] " "
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "{"
17 [email protected] "{" 17 [email protected] "}"
18 [email protected] "}"
19 [email protected] "\n" 18 [email protected] "\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 61b47bf35..d48ef865c 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
@@ -9,9 +9,8 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "}"
14 [email protected] "}"
15 [email protected] "\n" 14 [email protected] "\n"
16 [email protected] 15 [email protected]
17 [email protected] "fn" 16 [email protected] "fn"
@@ -34,9 +33,8 @@ [email protected]
34 [email protected] ")" 33 [email protected] ")"
35 [email protected] " " 34 [email protected] " "
36 [email protected] 35 [email protected]
37 [email protected] 36 [email protected] "{"
38 [email protected] "{" 37 [email protected] "}"
39 [email protected] "}"
40 [email protected] "\n" 38 [email protected] "\n"
41 [email protected] 39 [email protected]
42 [email protected] "fn" 40 [email protected] "fn"
@@ -61,9 +59,8 @@ [email protected]
61 [email protected] ")" 59 [email protected] ")"
62 [email protected] " " 60 [email protected] " "
63 [email protected] 61 [email protected]
64 [email protected] 62 [email protected] "{"
65 [email protected] "{" 63 [email protected] "}"
66 [email protected] "}"
67 [email protected] "\n" 64 [email protected] "\n"
68 [email protected] 65 [email protected]
69 [email protected] "fn" 66 [email protected] "fn"
@@ -97,7 +94,6 @@ [email protected]
97 [email protected] ")" 94 [email protected] ")"
98 [email protected] " " 95 [email protected] " "
99 [email protected] 96 [email protected]
100 [email protected] 97 [email protected] "{"
101 [email protected] "{" 98 [email protected] "}"
102 [email protected] "}"
103 [email protected] "\n" 99 [email protected] "\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 89d435d1f..e4455cd3e 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
@@ -9,28 +9,26 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "for"
17 [email protected] "for" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "x"
21 [email protected] "x" 21 [email protected] " "
22 [email protected] " " 22 [email protected] "in"
23 [email protected] "in" 23 [email protected] " "
24 [email protected] " " 24 [email protected]
25 [email protected] 25 [email protected] "["
26 [email protected] "[" 26 [email protected] "]"
27 [email protected] "]" 27 [email protected] " "
28 [email protected] " " 28 [email protected]
29 [email protected] 29 [email protected] "{"
30 [email protected] 30 [email protected] "}"
31 [email protected] "{" 31 [email protected] ";"
32 [email protected] "}" 32 [email protected] "\n"
33 [email protected] ";" 33 [email protected] "}"
34 [email protected] "\n"
35 [email protected] "}"
36 [email protected] "\n" 34 [email protected] "\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 57b4d0c4f..8a8743060 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
@@ -11,7 +11,6 @@ [email protected]
11 [email protected] ")" 11 [email protected] ")"
12 [email protected] " " 12 [email protected] " "
13 [email protected] 13 [email protected]
14 [email protected] 14 [email protected] "{"
15 [email protected] "{" 15 [email protected] "}"
16 [email protected] "}"
17 [email protected] "\n" 16 [email protected] "\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 ed6f6f326..9f966ff8a 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
@@ -9,125 +9,124 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "S"
22 [email protected] "S" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "{"
25 [email protected] "{" 25 [email protected] "}"
26 [email protected] "}" 26 [email protected] " "
27 [email protected] " " 27 [email protected] "="
28 [email protected] "=" 28 [email protected] " "
29 [email protected] " " 29 [email protected]
30 [email protected] 30 [email protected] "("
31 [email protected] "(" 31 [email protected] ")"
32 [email protected] ")" 32 [email protected] ";"
33 [email protected] ";" 33 [email protected] "\n "
34 [email protected] "\n " 34 [email protected]
35 [email protected] 35 [email protected] "let"
36 [email protected] "let" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "S"
42 [email protected] "S" 42 [email protected] " "
43 [email protected] " " 43 [email protected]
44 [email protected] 44 [email protected] "{"
45 [email protected] "{" 45 [email protected] " "
46 [email protected] " " 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected] "f"
50 [email protected] "f" 50 [email protected] ","
51 [email protected] "," 51 [email protected] " "
52 [email protected] " " 52 [email protected]
53 [email protected] 53 [email protected]
54 [email protected] 54 [email protected] "ref"
55 [email protected] "ref" 55 [email protected] " "
56 [email protected] " " 56 [email protected] "mut"
57 [email protected] "mut" 57 [email protected] " "
58 [email protected] " " 58 [email protected]
59 [email protected] 59 [email protected] "g"
60 [email protected] "g" 60 [email protected] " "
61 [email protected] " " 61 [email protected] "}"
62 [email protected] "}" 62 [email protected] " "
63 [email protected] " " 63 [email protected] "="
64 [email protected] "=" 64 [email protected] " "
65 [email protected] " " 65 [email protected]
66 [email protected] 66 [email protected] "("
67 [email protected] "(" 67 [email protected] ")"
68 [email protected] ")" 68 [email protected] ";"
69 [email protected] ";" 69 [email protected] "\n "
70 [email protected] "\n " 70 [email protected]
71 [email protected] 71 [email protected] "let"
72 [email protected] "let" 72 [email protected] " "
73 [email protected] " " 73 [email protected]
74 [email protected] 74 [email protected]
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected]
77 [email protected] 77 [email protected] "S"
78 [email protected] "S" 78 [email protected] " "
79 [email protected] " " 79 [email protected]
80 [email protected] 80 [email protected] "{"
81 [email protected] "{" 81 [email protected] " "
82 [email protected] " " 82 [email protected]
83 [email protected] 83 [email protected]
84 [email protected] 84 [email protected] "h"
85 [email protected] "h" 85 [email protected] ":"
86 [email protected] ":" 86 [email protected] " "
87 [email protected] " " 87 [email protected]
88 [email protected] 88 [email protected] "_"
89 [email protected] "_" 89 [email protected] ","
90 [email protected] "," 90 [email protected] " "
91 [email protected] " " 91 [email protected] ".."
92 [email protected] ".." 92 [email protected] "}"
93 [email protected] "}" 93 [email protected] " "
94 [email protected] " " 94 [email protected] "="
95 [email protected] "=" 95 [email protected] " "
96 [email protected] " " 96 [email protected]
97 [email protected] 97 [email protected] "("
98 [email protected] "(" 98 [email protected] ")"
99 [email protected] ")" 99 [email protected] ";"
100 [email protected] ";" 100 [email protected] "\n "
101 [email protected] "\n " 101 [email protected]
102 [email protected] 102 [email protected] "let"
103 [email protected] "let" 103 [email protected] " "
104 [email protected] " " 104 [email protected]
105 [email protected] 105 [email protected]
106 [email protected] 106 [email protected]
107 [email protected] 107 [email protected]
108 [email protected] 108 [email protected] "S"
109 [email protected] "S" 109 [email protected] " "
110 [email protected] " " 110 [email protected]
111 [email protected] 111 [email protected] "{"
112 [email protected] "{" 112 [email protected] " "
113 [email protected] " " 113 [email protected]
114 [email protected] 114 [email protected]
115 [email protected] 115 [email protected] "h"
116 [email protected] "h" 116 [email protected] ":"
117 [email protected] ":" 117 [email protected] " "
118 [email protected] " " 118 [email protected]
119 [email protected] 119 [email protected] "_"
120 [email protected] "_" 120 [email protected] ","
121 [email protected] "," 121 [email protected] " "
122 [email protected] " " 122 [email protected] "}"
123 [email protected] "}" 123 [email protected] " "
124 [email protected] " " 124 [email protected] "="
125 [email protected] "=" 125 [email protected] " "
126 [email protected] " " 126 [email protected]
127 [email protected] 127 [email protected] "("
128 [email protected] "(" 128 [email protected] ")"
129 [email protected] ")" 129 [email protected] ";"
130 [email protected] ";" 130 [email protected] "\n"
131 [email protected] "\n" 131 [email protected] "}"
132 [email protected] "}"
133 [email protected] "\n" 132 [email protected] "\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 461c61914..9b3bef04e 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
@@ -9,47 +9,46 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "["
17 [email protected] "[" 17 [email protected] "]"
18 [email protected] "]" 18 [email protected] ";"
19 [email protected] ";" 19 [email protected] "\n "
20 [email protected] "\n " 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected] "["
23 [email protected] "[" 23 [email protected]
24 [email protected] 24 [email protected] "1"
25 [email protected] "1" 25 [email protected] "]"
26 [email protected] "]" 26 [email protected] ";"
27 [email protected] ";" 27 [email protected] "\n "
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] "["
31 [email protected] "[" 31 [email protected]
32 [email protected] 32 [email protected] "1"
33 [email protected] "1" 33 [email protected] ","
34 [email protected] "," 34 [email protected] " "
35 [email protected] " " 35 [email protected]
36 [email protected] 36 [email protected] "2"
37 [email protected] "2" 37 [email protected] ","
38 [email protected] "," 38 [email protected] "]"
39 [email protected] "]" 39 [email protected] ";"
40 [email protected] ";" 40 [email protected] "\n "
41 [email protected] "\n " 41 [email protected]
42 [email protected] 42 [email protected]
43 [email protected] 43 [email protected] "["
44 [email protected] "[" 44 [email protected]
45 [email protected] 45 [email protected] "1"
46 [email protected] "1" 46 [email protected] ";"
47 [email protected] ";" 47 [email protected] " "
48 [email protected] " " 48 [email protected]
49 [email protected] 49 [email protected] "2"
50 [email protected] "2" 50 [email protected] "]"
51 [email protected] "]" 51 [email protected] ";"
52 [email protected] ";" 52 [email protected] "\n"
53 [email protected] "\n" 53 [email protected] "}"
54 [email protected] "}"
55 [email protected] "\n" 54 [email protected] "\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
deleted file mode 100644
index 8b2323cf2..000000000
--- a/crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rast
+++ /dev/null
@@ -1,43 +0,0 @@
1[email protected]
2 [email protected]
3 [email protected] "fn"
4 [email protected] " "
5 [email protected]
6 [email protected] "foo"
7 [email protected]
8 [email protected] "("
9 [email protected] ")"
10 [email protected] " "
11 [email protected]
12 [email protected]
13 [email protected] "{"
14 [email protected] "\n "
15 [email protected]
16 [email protected]
17 [email protected]
18 [email protected] "{"
19 [email protected] "}"
20 [email protected] ";"
21 [email protected] "\n "
22 [email protected]
23 [email protected]
24 [email protected] "unsafe"
25 [email protected] " "
26 [email protected]
27 [email protected] "{"
28 [email protected] "}"
29 [email protected] ";"
30 [email protected] "\n "
31 [email protected]
32 [email protected]
33 [email protected]
34 [email protected] "\'label"
35 [email protected] ":"
36 [email protected] " "
37 [email protected]
38 [email protected] "{"
39 [email protected] "}"
40 [email protected] ";"
41 [email protected] "\n"
42 [email protected] "}"
43 [email protected] "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rs b/crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rs
deleted file mode 100644
index 2fed74c5e..000000000
--- a/crates/ra_syntax/test_data/parser/inline/ok/0105_block_expr.rs
+++ /dev/null
@@ -1,5 +0,0 @@
1fn foo() {
2 {};
3 unsafe {};
4 'label: {};
5}
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 73c314e07..e64717152 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
@@ -9,132 +9,127 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected] "|"
18 [email protected] "|" 18 [email protected] "|"
19 [email protected] "|" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "("
22 [email protected] "(" 22 [email protected] ")"
23 [email protected] ")" 23 [email protected] ";"
24 [email protected] ";" 24 [email protected] "\n "
25 [email protected] "\n " 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected] "|"
29 [email protected] "|" 29 [email protected] "|"
30 [email protected] "|" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected] "->"
33 [email protected] "->" 33 [email protected] " "
34 [email protected] " " 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected] "i32"
39 [email protected] "i32" 39 [email protected] " "
40 [email protected] " " 40 [email protected]
41 [email protected] 41 [email protected] "{"
42 [email protected] 42 [email protected] " "
43 [email protected] "{" 43 [email protected]
44 [email protected] " " 44 [email protected] "92"
45 [email protected] 45 [email protected] " "
46 [email protected] "92" 46 [email protected] "}"
47 [email protected] " " 47 [email protected] ";"
48 [email protected] "}" 48 [email protected] "\n "
49 [email protected] ";" 49 [email protected]
50 [email protected] "\n " 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected] "|"
53 [email protected] 53 [email protected]
54 [email protected] "|" 54 [email protected]
55 [email protected] 55 [email protected]
56 [email protected] 56 [email protected] "x"
57 [email protected] 57 [email protected] "|"
58 [email protected] "x" 58 [email protected] " "
59 [email protected] "|" 59 [email protected]
60 [email protected] " " 60 [email protected]
61 [email protected] 61 [email protected]
62 [email protected] 62 [email protected]
63 [email protected] 63 [email protected] "x"
64 [email protected] 64 [email protected] ";"
65 [email protected] "x" 65 [email protected] "\n "
66 [email protected] ";" 66 [email protected]
67 [email protected] "\n " 67 [email protected]
68 [email protected] 68 [email protected] "move"
69 [email protected] 69 [email protected] " "
70 [email protected] "move" 70 [email protected]
71 [email protected] " " 71 [email protected] "|"
72 [email protected] 72 [email protected]
73 [email protected] "|" 73 [email protected]
74 [email protected] 74 [email protected]
75 [email protected] 75 [email protected] "x"
76 [email protected] 76 [email protected] ":"
77 [email protected] "x" 77 [email protected] " "
78 [email protected] ":" 78 [email protected]
79 [email protected] " " 79 [email protected]
80 [email protected] 80 [email protected]
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected] "i32"
83 [email protected] 83 [email protected] ","
84 [email protected] "i32" 84 [email protected] "|"
85 [email protected] "," 85 [email protected] " "
86 [email protected] "|" 86 [email protected]
87 [email protected] " " 87 [email protected]
88 [email protected] 88 [email protected]
89 [email protected] 89 [email protected]
90 [email protected] 90 [email protected] "x"
91 [email protected] 91 [email protected] ";"
92 [email protected] "x" 92 [email protected] "\n "
93 [email protected] ";" 93 [email protected]
94 [email protected] "\n " 94 [email protected]
95 [email protected] 95 [email protected] "async"
96 [email protected] 96 [email protected] " "
97 [email protected] "async" 97 [email protected]
98 [email protected] " " 98 [email protected] "|"
99 [email protected] 99 [email protected] "|"
100 [email protected] "|" 100 [email protected] " "
101 [email protected] "|" 101 [email protected]
102 [email protected] " " 102 [email protected] "{"
103 [email protected] 103 [email protected] "}"
104 [email protected] 104 [email protected] ";"
105 [email protected] "{" 105 [email protected] "\n "
106 [email protected] "}" 106 [email protected]
107 [email protected] ";" 107 [email protected]
108 [email protected] "\n " 108 [email protected] "move"
109 [email protected] 109 [email protected] " "
110 [email protected] 110 [email protected]
111 [email protected] "move" 111 [email protected] "|"
112 [email protected] " " 112 [email protected] "|"
113 [email protected] 113 [email protected] " "
114 [email protected] "|" 114 [email protected]
115 [email protected] "|" 115 [email protected] "{"
116 [email protected] " " 116 [email protected] "}"
117 [email protected] 117 [email protected] ";"
118 [email protected] 118 [email protected] "\n "
119 [email protected] "{" 119 [email protected]
120 [email protected] "}" 120 [email protected]
121 [email protected] ";" 121 [email protected] "async"
122 [email protected] "\n " 122 [email protected] " "
123 [email protected] 123 [email protected] "move"
124 [email protected] 124 [email protected] " "
125 [email protected] "async" 125 [email protected]
126 [email protected] " " 126 [email protected] "|"
127 [email protected] "move" 127 [email protected] "|"
128 [email protected] " " 128 [email protected] " "
129 [email protected] 129 [email protected]
130 [email protected] "|" 130 [email protected] "{"
131 [email protected] "|" 131 [email protected] "}"
132 [email protected] " " 132 [email protected] ";"
133 [email protected] 133 [email protected] "\n"
134 [email protected] 134 [email protected] "}"
135 [email protected] "{"
136 [email protected] "}"
137 [email protected] ";"
138 [email protected] "\n"
139 [email protected] "}"
140 [email protected] "\n" 135 [email protected] "\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 5392b1a74..98963dc62 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
@@ -9,55 +9,54 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "x"
21 [email protected] "x" 21 [email protected] "."
22 [email protected] "." 22 [email protected]
23 [email protected] 23 [email protected] "foo"
24 [email protected] "foo" 24 [email protected]
25 [email protected] 25 [email protected] "("
26 [email protected] "(" 26 [email protected] ")"
27 [email protected] ")" 27 [email protected] ";"
28 [email protected] ";" 28 [email protected] "\n "
29 [email protected] "\n " 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "y"
36 [email protected] "y" 36 [email protected] "."
37 [email protected] "." 37 [email protected]
38 [email protected] 38 [email protected] "bar"
39 [email protected] "bar" 39 [email protected]
40 [email protected] 40 [email protected] "::"
41 [email protected] "::" 41 [email protected] "<"
42 [email protected] "<" 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected] "T"
48 [email protected] "T" 48 [email protected] ">"
49 [email protected] ">" 49 [email protected]
50 [email protected] 50 [email protected] "("
51 [email protected] "(" 51 [email protected]
52 [email protected] 52 [email protected] "1"
53 [email protected] "1" 53 [email protected] ","
54 [email protected] "," 54 [email protected] " "
55 [email protected] " " 55 [email protected]
56 [email protected] 56 [email protected] "2"
57 [email protected] "2" 57 [email protected] ","
58 [email protected] "," 58 [email protected] ")"
59 [email protected] ")" 59 [email protected] ";"
60 [email protected] ";" 60 [email protected] "\n"
61 [email protected] "\n" 61 [email protected] "}"
62 [email protected] "}"
63 [email protected] "\n" 62 [email protected] "\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 54f18adac..ea603e2c9 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
@@ -9,31 +9,30 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "("
17 [email protected] "(" 17 [email protected] ")"
18 [email protected] ")" 18 [email protected] ";"
19 [email protected] ";" 19 [email protected] "\n "
20 [email protected] "\n " 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected] "("
23 [email protected] "(" 23 [email protected]
24 [email protected] 24 [email protected] "1"
25 [email protected] "1" 25 [email protected] ")"
26 [email protected] ")" 26 [email protected] ";"
27 [email protected] ";" 27 [email protected] "\n "
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] "("
31 [email protected] "(" 31 [email protected]
32 [email protected] 32 [email protected] "1"
33 [email protected] "1" 33 [email protected] ","
34 [email protected] "," 34 [email protected] ")"
35 [email protected] ")" 35 [email protected] ";"
36 [email protected] ";" 36 [email protected] "\n"
37 [email protected] "\n" 37 [email protected] "}"
38 [email protected] "}"
39 [email protected] "\n" 38 [email protected] "\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 6c9e45684..30ff96a7c 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
@@ -9,60 +9,56 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected] "\'a"
18 [email protected] "\'a" 18 [email protected] ":"
19 [email protected] ":" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "loop"
21 [email protected] "loop" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] 24 [email protected] "}"
25 [email protected] "{" 25 [email protected] "\n "
26 [email protected] "}" 26 [email protected]
27 [email protected] "\n " 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "\'b"
30 [email protected] 30 [email protected] ":"
31 [email protected] "\'b" 31 [email protected] " "
32 [email protected] ":" 32 [email protected] "while"
33 [email protected] " " 33 [email protected] " "
34 [email protected] "while" 34 [email protected]
35 [email protected] " " 35 [email protected]
36 [email protected] 36 [email protected] "true"
37 [email protected] 37 [email protected] " "
38 [email protected] "true" 38 [email protected]
39 [email protected] " " 39 [email protected] "{"
40 [email protected] 40 [email protected] "}"
41 [email protected] 41 [email protected] "\n "
42 [email protected] "{" 42 [email protected]
43 [email protected] "}" 43 [email protected]
44 [email protected] "\n " 44 [email protected] "\'c"
45 [email protected] 45 [email protected] ":"
46 [email protected] 46 [email protected] " "
47 [email protected] "\'c" 47 [email protected] "for"
48 [email protected] ":" 48 [email protected] " "
49 [email protected] " " 49 [email protected]
50 [email protected] "for" 50 [email protected]
51 [email protected] " " 51 [email protected] "x"
52 [email protected] 52 [email protected] " "
53 [email protected] 53 [email protected] "in"
54 [email protected] "x" 54 [email protected] " "
55 [email protected] " " 55 [email protected]
56 [email protected] "in" 56 [email protected] "("
57 [email protected] " " 57 [email protected] ")"
58 [email protected] 58 [email protected] " "
59 [email protected] "(" 59 [email protected]
60 [email protected] ")" 60 [email protected] "{"
61 [email protected] " " 61 [email protected] "}"
62 [email protected] 62 [email protected] "\n"
63 [email protected] 63 [email protected] "}"
64 [email protected] "{"
65 [email protected] "}"
66 [email protected] "\n"
67 [email protected] "}"
68 [email protected] "\n" 64 [email protected] "\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 a1c5475e7..b58f40ac1 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
@@ -9,82 +9,81 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "("
19 [email protected] "(" 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "a"
22 [email protected] "a" 22 [email protected] ","
23 [email protected] "," 23 [email protected] " "
24 [email protected] " " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "b"
27 [email protected] "b" 27 [email protected] ","
28 [email protected] "," 28 [email protected] " "
29 [email protected] " " 29 [email protected]
30 [email protected] 30 [email protected] ".."
31 [email protected] ".." 31 [email protected] ")"
32 [email protected] ")" 32 [email protected] " "
33 [email protected] " " 33 [email protected] "="
34 [email protected] "=" 34 [email protected] " "
35 [email protected] " " 35 [email protected]
36 [email protected] 36 [email protected] "("
37 [email protected] "(" 37 [email protected] ")"
38 [email protected] ")" 38 [email protected] ";"
39 [email protected] ";" 39 [email protected] "\n "
40 [email protected] "\n " 40 [email protected]
41 [email protected] 41 [email protected] "let"
42 [email protected] "let" 42 [email protected] " "
43 [email protected] " " 43 [email protected]
44 [email protected] 44 [email protected] "("
45 [email protected] "(" 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected] "a"
48 [email protected] "a" 48 [email protected] ","
49 [email protected] "," 49 [email protected] ")"
50 [email protected] ")" 50 [email protected] " "
51 [email protected] " " 51 [email protected] "="
52 [email protected] "=" 52 [email protected] " "
53 [email protected] " " 53 [email protected]
54 [email protected] 54 [email protected] "("
55 [email protected] "(" 55 [email protected] ")"
56 [email protected] ")" 56 [email protected] ";"
57 [email protected] ";" 57 [email protected] "\n "
58 [email protected] "\n " 58 [email protected]
59 [email protected] 59 [email protected] "let"
60 [email protected] "let" 60 [email protected] " "
61 [email protected] " " 61 [email protected]
62 [email protected] 62 [email protected] "("
63 [email protected] "(" 63 [email protected]
64 [email protected] 64 [email protected] ".."
65 [email protected] ".." 65 [email protected] ")"
66 [email protected] ")" 66 [email protected] " "
67 [email protected] " " 67 [email protected] "="
68 [email protected] "=" 68 [email protected] " "
69 [email protected] " " 69 [email protected]
70 [email protected] 70 [email protected] "("
71 [email protected] "(" 71 [email protected] ")"
72 [email protected] ")" 72 [email protected] ";"
73 [email protected] ";" 73 [email protected] "\n "
74 [email protected] "\n " 74 [email protected]
75 [email protected] 75 [email protected] "let"
76 [email protected] "let" 76 [email protected] " "
77 [email protected] " " 77 [email protected]
78 [email protected] 78 [email protected] "("
79 [email protected] "(" 79 [email protected] ")"
80 [email protected] ")" 80 [email protected] " "
81 [email protected] " " 81 [email protected] "="
82 [email protected] "=" 82 [email protected] " "
83 [email protected] " " 83 [email protected]
84 [email protected] 84 [email protected] "("
85 [email protected] "(" 85 [email protected] ")"
86 [email protected] ")" 86 [email protected] ";"
87 [email protected] ";" 87 [email protected] "\n"
88 [email protected] "\n" 88 [email protected] "}"
89 [email protected] "}"
90 [email protected] "\n" 89 [email protected] "\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 42a770a83..b67714c17 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
@@ -9,120 +9,119 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "a"
20 [email protected] "a" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "="
22 [email protected] "=" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "("
25 [email protected] "(" 25 [email protected] ")"
26 [email protected] ")" 26 [email protected] ";"
27 [email protected] ";" 27 [email protected] "\n "
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected] "let"
30 [email protected] "let" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected] "mut"
33 [email protected] "mut" 33 [email protected] " "
34 [email protected] " " 34 [email protected]
35 [email protected] 35 [email protected] "b"
36 [email protected] "b" 36 [email protected] " "
37 [email protected] " " 37 [email protected] "="
38 [email protected] "=" 38 [email protected] " "
39 [email protected] " " 39 [email protected]
40 [email protected] 40 [email protected] "("
41 [email protected] "(" 41 [email protected] ")"
42 [email protected] ")" 42 [email protected] ";"
43 [email protected] ";" 43 [email protected] "\n "
44 [email protected] "\n " 44 [email protected]
45 [email protected] 45 [email protected] "let"
46 [email protected] "let" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected] "ref"
49 [email protected] "ref" 49 [email protected] " "
50 [email protected] " " 50 [email protected]
51 [email protected] 51 [email protected] "c"
52 [email protected] "c" 52 [email protected] " "
53 [email protected] " " 53 [email protected] "="
54 [email protected] "=" 54 [email protected] " "
55 [email protected] " " 55 [email protected]
56 [email protected] 56 [email protected] "("
57 [email protected] "(" 57 [email protected] ")"
58 [email protected] ")" 58 [email protected] ";"
59 [email protected] ";" 59 [email protected] "\n "
60 [email protected] "\n " 60 [email protected]
61 [email protected] 61 [email protected] "let"
62 [email protected] "let" 62 [email protected] " "
63 [email protected] " " 63 [email protected]
64 [email protected] 64 [email protected] "ref"
65 [email protected] "ref" 65 [email protected] " "
66 [email protected] " " 66 [email protected] "mut"
67 [email protected] "mut" 67 [email protected] " "
68 [email protected] " " 68 [email protected]
69 [email protected] 69 [email protected] "d"
70 [email protected] "d" 70 [email protected] " "
71 [email protected] " " 71 [email protected] "="
72 [email protected] "=" 72 [email protected] " "
73 [email protected] " " 73 [email protected]
74 [email protected] 74 [email protected] "("
75 [email protected] "(" 75 [email protected] ")"
76 [email protected] ")" 76 [email protected] ";"
77 [email protected] ";" 77 [email protected] "\n "
78 [email protected] "\n " 78 [email protected]
79 [email protected] 79 [email protected] "let"
80 [email protected] "let" 80 [email protected] " "
81 [email protected] " " 81 [email protected]
82 [email protected] 82 [email protected]
83 [email protected] 83 [email protected] "e"
84 [email protected] "e" 84 [email protected] " "
85 [email protected] " " 85 [email protected] "@"
86 [email protected] "@" 86 [email protected] " "
87 [email protected] " " 87 [email protected]
88 [email protected] 88 [email protected] "_"
89 [email protected] "_" 89 [email protected] " "
90 [email protected] " " 90 [email protected] "="
91 [email protected] "=" 91 [email protected] " "
92 [email protected] " " 92 [email protected]
93 [email protected] 93 [email protected] "("
94 [email protected] "(" 94 [email protected] ")"
95 [email protected] ")" 95 [email protected] ";"
96 [email protected] ";" 96 [email protected] "\n "
97 [email protected] "\n " 97 [email protected]
98 [email protected] 98 [email protected] "let"
99 [email protected] "let" 99 [email protected] " "
100 [email protected] " " 100 [email protected]
101 [email protected] 101 [email protected] "ref"
102 [email protected] "ref" 102 [email protected] " "
103 [email protected] " " 103 [email protected] "mut"
104 [email protected] "mut" 104 [email protected] " "
105 [email protected] " " 105 [email protected]
106 [email protected] 106 [email protected] "f"
107 [email protected] "f" 107 [email protected] " "
108 [email protected] " " 108 [email protected] "@"
109 [email protected] "@" 109 [email protected] " "
110 [email protected] " " 110 [email protected]
111 [email protected] 111 [email protected]
112 [email protected] 112 [email protected] "g"
113 [email protected] "g" 113 [email protected] " "
114 [email protected] " " 114 [email protected] "@"
115 [email protected] "@" 115 [email protected] " "
116 [email protected] " " 116 [email protected]
117 [email protected] 117 [email protected] "_"
118 [email protected] "_" 118 [email protected] " "
119 [email protected] " " 119 [email protected] "="
120 [email protected] "=" 120 [email protected] " "
121 [email protected] " " 121 [email protected]
122 [email protected] 122 [email protected] "("
123 [email protected] "(" 123 [email protected] ")"
124 [email protected] ")" 124 [email protected] ";"
125 [email protected] ";" 125 [email protected] "\n"
126 [email protected] "\n" 126 [email protected] "}"
127 [email protected] "}"
128 [email protected] "\n" 127 [email protected] "\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 5414c90b8..5de480da9 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
@@ -8,50 +8,48 @@ [email protected]
8 [email protected] "(" 8 [email protected] "("
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] 10 [email protected]
11 [email protected] 11 [email protected] "{"
12 [email protected] "{" 12 [email protected] "\n "
13 [email protected] "\n " 13 [email protected] ";"
14 [email protected] ";" 14 [email protected] ";"
15 [email protected] ";" 15 [email protected] ";"
16 [email protected] ";" 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected] "some_expr"
23 [email protected] "some_expr" 23 [email protected]
24 [email protected] 24 [email protected] "("
25 [email protected] "(" 25 [email protected] ")"
26 [email protected] ")" 26 [email protected] ";"
27 [email protected] ";" 27 [email protected] ";"
28 [email protected] ";" 28 [email protected] ";"
29 [email protected] ";" 29 [email protected] ";"
30 [email protected] ";" 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected] "{"
33 [email protected] 33 [email protected] ";"
34 [email protected] "{" 34 [email protected] ";"
35 [email protected] ";" 35 [email protected] ";"
36 [email protected] ";" 36 [email protected] "}"
37 [email protected] ";" 37 [email protected] ";"
38 [email protected] "}" 38 [email protected] ";"
39 [email protected] ";" 39 [email protected] ";"
40 [email protected] ";" 40 [email protected] ";"
41 [email protected] ";" 41 [email protected]
42 [email protected] ";" 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected] "Ok"
47 [email protected] 47 [email protected]
48 [email protected] "Ok" 48 [email protected] "("
49 [email protected] 49 [email protected]
50 [email protected] "(" 50 [email protected] "("
51 [email protected] 51 [email protected] ")"
52 [email protected] "(" 52 [email protected] ")"
53 [email protected] ")" 53 [email protected] "\n"
54 [email protected] ")" 54 [email protected] "}"
55 [email protected] "\n"
56 [email protected] "}"
57 [email protected] "\n" 55 [email protected] "\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 8e080fb60..e152c6b6c 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
@@ -9,40 +9,39 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "("
19 [email protected] "(" 19 [email protected] ")"
20 [email protected] ")" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] "{" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "_"
27 [email protected] "_" 27 [email protected] " "
28 [email protected] " " 28 [email protected]
29 [email protected] 29 [email protected] "if"
30 [email protected] "if" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "foo"
36 [email protected] "foo" 36 [email protected] " "
37 [email protected] " " 37 [email protected] "=>"
38 [email protected] "=>" 38 [email protected] " "
39 [email protected] " " 39 [email protected]
40 [email protected] 40 [email protected] "("
41 [email protected] "(" 41 [email protected] ")"
42 [email protected] ")" 42 [email protected] ","
43 [email protected] "," 43 [email protected] "\n "
44 [email protected] "\n " 44 [email protected] "}"
45 [email protected] "}" 45 [email protected] "\n"
46 [email protected] "\n" 46 [email protected] "}"
47 [email protected] "}"
48 [email protected] "\n" 47 [email protected] "\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 728164f8e..b283ab804 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
@@ -9,73 +9,72 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "("
19 [email protected] "(" 19 [email protected] ")"
20 [email protected] ")" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] "{" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected]
25 [email protected] 25 [email protected] "#"
26 [email protected] "#" 26 [email protected] "!"
27 [email protected] "!" 27 [email protected] "["
28 [email protected] "[" 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected] "doc"
32 [email protected] "doc" 32 [email protected]
33 [email protected] 33 [email protected] "("
34 [email protected] "(" 34 [email protected] "\"Inner attribute\""
35 [email protected] "\"Inner attribute\"" 35 [email protected] ")"
36 [email protected] ")" 36 [email protected] "]"
37 [email protected] "]" 37 [email protected] "\n "
38 [email protected] "\n " 38 [email protected]
39 [email protected] 39 [email protected] "#"
40 [email protected] "#" 40 [email protected] "!"
41 [email protected] "!" 41 [email protected] "["
42 [email protected] "[" 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected] "doc"
46 [email protected] "doc" 46 [email protected]
47 [email protected] 47 [email protected] "("
48 [email protected] "(" 48 [email protected] "\"Can be\""
49 [email protected] "\"Can be\"" 49 [email protected] ")"
50 [email protected] ")" 50 [email protected] "]"
51 [email protected] "]" 51 [email protected] "\n "
52 [email protected] "\n " 52 [email protected]
53 [email protected] 53 [email protected] "#"
54 [email protected] "#" 54 [email protected] "!"
55 [email protected] "!" 55 [email protected] "["
56 [email protected] "[" 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected] "doc"
60 [email protected] "doc" 60 [email protected]
61 [email protected] 61 [email protected] "("
62 [email protected] "(" 62 [email protected] "\"Stacked\""
63 [email protected] "\"Stacked\"" 63 [email protected] ")"
64 [email protected] ")" 64 [email protected] "]"
65 [email protected] "]" 65 [email protected] "\n "
66 [email protected] "\n " 66 [email protected]
67 [email protected] 67 [email protected]
68 [email protected] 68 [email protected] "_"
69 [email protected] "_" 69 [email protected] " "
70 [email protected] " " 70 [email protected] "=>"
71 [email protected] "=>" 71 [email protected] " "
72 [email protected] " " 72 [email protected]
73 [email protected] 73 [email protected] "("
74 [email protected] "(" 74 [email protected] ")"
75 [email protected] ")" 75 [email protected] ","
76 [email protected] "," 76 [email protected] "\n "
77 [email protected] "\n " 77 [email protected] "}"
78 [email protected] "}" 78 [email protected] "\n"
79 [email protected] "\n" 79 [email protected] "}"
80 [email protected] "}"
81 [email protected] "\n" 80 [email protected] "\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 6123885e3..9d5470914 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
@@ -9,138 +9,137 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "("
19 [email protected] "(" 19 [email protected] ")"
20 [email protected] ")" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] "{" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "#"
27 [email protected] "#" 27 [email protected] "["
28 [email protected] "[" 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected] "cfg"
32 [email protected] "cfg" 32 [email protected]
33 [email protected] 33 [email protected] "("
34 [email protected] "(" 34 [email protected] "feature"
35 [email protected] "feature" 35 [email protected] " "
36 [email protected] " " 36 [email protected] "="
37 [email protected] "=" 37 [email protected] " "
38 [email protected] " " 38 [email protected] "\"some\""
39 [email protected] "\"some\"" 39 [email protected] ")"
40 [email protected] ")" 40 [email protected] "]"
41 [email protected] "]" 41 [email protected] "\n "
42 [email protected] "\n " 42 [email protected]
43 [email protected] 43 [email protected] "_"
44 [email protected] "_" 44 [email protected] " "
45 [email protected] " " 45 [email protected] "=>"
46 [email protected] "=>" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected] "("
49 [email protected] "(" 49 [email protected] ")"
50 [email protected] ")" 50 [email protected] ","
51 [email protected] "," 51 [email protected] "\n "
52 [email protected] "\n " 52 [email protected]
53 [email protected] 53 [email protected]
54 [email protected] 54 [email protected] "#"
55 [email protected] "#" 55 [email protected] "["
56 [email protected] "[" 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected] "cfg"
60 [email protected] "cfg" 60 [email protected]
61 [email protected] 61 [email protected] "("
62 [email protected] "(" 62 [email protected] "feature"
63 [email protected] "feature" 63 [email protected] " "
64 [email protected] " " 64 [email protected] "="
65 [email protected] "=" 65 [email protected] " "
66 [email protected] " " 66 [email protected] "\"other\""
67 [email protected] "\"other\"" 67 [email protected] ")"
68 [email protected] ")" 68 [email protected] "]"
69 [email protected] "]" 69 [email protected] "\n "
70 [email protected] "\n " 70 [email protected]
71 [email protected] 71 [email protected] "_"
72 [email protected] "_" 72 [email protected] " "
73 [email protected] " " 73 [email protected] "=>"
74 [email protected] "=>" 74 [email protected] " "
75 [email protected] " " 75 [email protected]
76 [email protected] 76 [email protected] "("
77 [email protected] "(" 77 [email protected] ")"
78 [email protected] ")" 78 [email protected] ","
79 [email protected] "," 79 [email protected] "\n "
80 [email protected] "\n " 80 [email protected]
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected] "#"
83 [email protected] "#" 83 [email protected] "["
84 [email protected] "[" 84 [email protected]
85 [email protected] 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] 87 [email protected] "cfg"
88 [email protected] "cfg" 88 [email protected]
89 [email protected] 89 [email protected] "("
90 [email protected] "(" 90 [email protected] "feature"
91 [email protected] "feature" 91 [email protected] " "
92 [email protected] " " 92 [email protected] "="
93 [email protected] "=" 93 [email protected] " "
94 [email protected] " " 94 [email protected] "\"many\""
95 [email protected] "\"many\"" 95 [email protected] ")"
96 [email protected] ")" 96 [email protected] "]"
97 [email protected] "]" 97 [email protected] "\n "
98 [email protected] "\n " 98 [email protected]
99 [email protected] 99 [email protected] "#"
100 [email protected] "#" 100 [email protected] "["
101 [email protected] "[" 101 [email protected]
102 [email protected] 102 [email protected]
103 [email protected] 103 [email protected]
104 [email protected] 104 [email protected] "cfg"
105 [email protected] "cfg" 105 [email protected]
106 [email protected] 106 [email protected] "("
107 [email protected] "(" 107 [email protected] "feature"
108 [email protected] "feature" 108 [email protected] " "
109 [email protected] " " 109 [email protected] "="
110 [email protected] "=" 110 [email protected] " "
111 [email protected] " " 111 [email protected] "\"attributes\""
112 [email protected] "\"attributes\"" 112 [email protected] ")"
113 [email protected] ")" 113 [email protected] "]"
114 [email protected] "]" 114 [email protected] "\n "
115 [email protected] "\n " 115 [email protected]
116 [email protected] 116 [email protected] "#"
117 [email protected] "#" 117 [email protected] "["
118 [email protected] "[" 118 [email protected]
119 [email protected] 119 [email protected]
120 [email protected] 120 [email protected]
121 [email protected] 121 [email protected] "cfg"
122 [email protected] "cfg" 122 [email protected]
123 [email protected] 123 [email protected] "("
124 [email protected] "(" 124 [email protected] "feature"
125 [email protected] "feature" 125 [email protected] " "
126 [email protected] " " 126 [email protected] "="
127 [email protected] "=" 127 [email protected] " "
128 [email protected] " " 128 [email protected] "\"before\""
129 [email protected] "\"before\"" 129 [email protected] ")"
130 [email protected] ")" 130 [email protected] "]"
131 [email protected] "]" 131 [email protected] "\n "
132 [email protected] "\n " 132 [email protected]
133 [email protected] 133 [email protected] "_"
134 [email protected] "_" 134 [email protected] " "
135 [email protected] " " 135 [email protected] "=>"
136 [email protected] "=>" 136 [email protected] " "
137 [email protected] " " 137 [email protected]
138 [email protected] 138 [email protected] "("
139 [email protected] "(" 139 [email protected] ")"
140 [email protected] ")" 140 [email protected] ","
141 [email protected] "," 141 [email protected] "\n "
142 [email protected] "\n " 142 [email protected] "}"
143 [email protected] "}" 143 [email protected] "\n"
144 [email protected] "\n" 144 [email protected] "}"
145 [email protected] "}"
146 [email protected] "\n" 145 [email protected] "\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 67b9c10d5..ada2fc54e 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
@@ -59,8 +59,7 @@ [email protected]
59 [email protected] ")" 59 [email protected] ")"
60 [email protected] " " 60 [email protected] " "
61 [email protected] 61 [email protected]
62 [email protected] 62 [email protected] "{"
63 [email protected] "{" 63 [email protected] "\n"
64 [email protected] "\n" 64 [email protected] "}"
65 [email protected] "}"
66 [email protected] "\n" 65 [email protected] "\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 baf22a8d7..6178dfe59 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
@@ -11,7 +11,6 @@ [email protected]
11 [email protected] ")" 11 [email protected] ")"
12 [email protected] " " 12 [email protected] " "
13 [email protected] 13 [email protected]
14 [email protected] 14 [email protected] "{"
15 [email protected] "{" 15 [email protected] "}"
16 [email protected] "}"
17 [email protected] "\n" 16 [email protected] "\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 16f5b90b6..ced59b7c1 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
@@ -9,24 +9,23 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "crate"
21 [email protected] "crate" 21 [email protected] "::"
22 [email protected] "::" 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected] "foo"
25 [email protected] "foo" 25 [email protected]
26 [email protected] 26 [email protected] "("
27 [email protected] "(" 27 [email protected] ")"
28 [email protected] ")" 28 [email protected] ";"
29 [email protected] ";" 29 [email protected] " "
30 [email protected] " " 30 [email protected] "}"
31 [email protected] "}"
32 [email protected] "\n" 31 [email protected] "\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 07ed14773..97611f7f3 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
@@ -9,40 +9,39 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected] "S"
19 [email protected] "S" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "{"
22 [email protected] "{" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "#"
26 [email protected] "#" 26 [email protected] "["
27 [email protected] "[" 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] "cfg"
31 [email protected] "cfg" 31 [email protected]
32 [email protected] 32 [email protected] "("
33 [email protected] "(" 33 [email protected] "test"
34 [email protected] "test" 34 [email protected] ")"
35 [email protected] ")" 35 [email protected] "]"
36 [email protected] "]" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected] "field"
39 [email protected] "field" 39 [email protected] ":"
40 [email protected] ":" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected] "1"
43 [email protected] "1" 43 [email protected] " "
44 [email protected] " " 44 [email protected] "}"
45 [email protected] "}" 45 [email protected] "\n"
46 [email protected] "\n" 46 [email protected] "}"
47 [email protected] "}"
48 [email protected] "\n" 47 [email protected] "\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 8307d4c15..09221fc54 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
@@ -9,91 +9,89 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "#"
17 [email protected] "#" 17 [email protected] "["
18 [email protected] "[" 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "A"
22 [email protected] "A" 22 [email protected] "]"
23 [email protected] "]" 23 [email protected] " "
24 [email protected] " " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "foo"
30 [email protected] "foo" 30 [email protected]
31 [email protected] 31 [email protected] "("
32 [email protected] "(" 32 [email protected] ")"
33 [email protected] ")" 33 [email protected] ";"
34 [email protected] ";" 34 [email protected] "\n "
35 [email protected] "\n " 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected] "#"
38 [email protected] "#" 38 [email protected] "["
39 [email protected] "[" 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected]
42 [email protected] 42 [email protected] "B"
43 [email protected] "B" 43 [email protected] "]"
44 [email protected] "]" 44 [email protected] " "
45 [email protected] " " 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected] "bar"
50 [email protected] "bar" 50 [email protected] "!"
51 [email protected] "!" 51 [email protected]
52 [email protected] 52 [email protected] "{"
53 [email protected] "{" 53 [email protected] "}"
54 [email protected] "}" 54 [email protected] "\n "
55 [email protected] "\n " 55 [email protected]
56 [email protected] 56 [email protected]
57 [email protected] 57 [email protected] "#"
58 [email protected] "#" 58 [email protected] "["
59 [email protected] "[" 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected]
62 [email protected] 62 [email protected] "C"
63 [email protected] "C" 63 [email protected] "]"
64 [email protected] "]" 64 [email protected] " "
65 [email protected] " " 65 [email protected]
66 [email protected] 66 [email protected] "#"
67 [email protected] "#" 67 [email protected] "["
68 [email protected] "[" 68 [email protected]
69 [email protected] 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected] "D"
72 [email protected] "D" 72 [email protected] "]"
73 [email protected] "]" 73 [email protected] " "
74 [email protected] " " 74 [email protected]
75 [email protected] 75 [email protected] "{"
76 [email protected] 76 [email protected] "}"
77 [email protected] "{" 77 [email protected] "\n "
78 [email protected] "}" 78 [email protected]
79 [email protected] "\n " 79 [email protected]
80 [email protected] 80 [email protected] "#"
81 [email protected] 81 [email protected] "["
82 [email protected] "#" 82 [email protected]
83 [email protected] "[" 83 [email protected]
84 [email protected] 84 [email protected]
85 [email protected] 85 [email protected] "D"
86 [email protected] 86 [email protected] "]"
87 [email protected] "D" 87 [email protected] " "
88 [email protected] "]" 88 [email protected]
89 [email protected] " " 89 [email protected] "return"
90 [email protected] 90 [email protected] " "
91 [email protected] "return" 91 [email protected]
92 [email protected] " " 92 [email protected] "("
93 [email protected] 93 [email protected] ")"
94 [email protected] "(" 94 [email protected] ";"
95 [email protected] ")" 95 [email protected] "\n"
96 [email protected] ";" 96 [email protected] "}"
97 [email protected] "\n"
98 [email protected] "}"
99 [email protected] "\n" 97 [email protected] "\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 19c47ea25..93cc41533 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
@@ -9,51 +9,49 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "{"
17 [email protected] 17 [email protected] " "
18 [email protected] "{" 18 [email protected]
19 [email protected] " " 19 [email protected]
20 [email protected] 20 [email protected] "#"
21 [email protected] 21 [email protected] "["
22 [email protected] "#" 22 [email protected]
23 [email protected] "[" 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "A"
26 [email protected] 26 [email protected] "]"
27 [email protected] "A" 27 [email protected] " "
28 [email protected] "]" 28 [email protected]
29 [email protected] " " 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected] "bar"
33 [email protected] 33 [email protected] "!"
34 [email protected] "bar" 34 [email protected]
35 [email protected] "!" 35 [email protected] "("
36 [email protected] 36 [email protected] ")"
37 [email protected] "(" 37 [email protected] "?"
38 [email protected] ")" 38 [email protected] " "
39 [email protected] "?" 39 [email protected] "}"
40 [email protected] " " 40 [email protected] "\n "
41 [email protected] "}" 41 [email protected]
42 [email protected] "\n " 42 [email protected]
43 [email protected] 43 [email protected] "#"
44 [email protected] 44 [email protected] "["
45 [email protected] "#" 45 [email protected]
46 [email protected] "[" 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "B"
49 [email protected] 49 [email protected] "]"
50 [email protected] "B" 50 [email protected] " "
51 [email protected] "]" 51 [email protected] "&"
52 [email protected] " " 52 [email protected]
53 [email protected] "&" 53 [email protected] "("
54 [email protected] 54 [email protected] ")"
55 [email protected] "(" 55 [email protected] "\n"
56 [email protected] ")" 56 [email protected] "}"
57 [email protected] "\n"
58 [email protected] "}"
59 [email protected] "\n" 57 [email protected] "\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 5630b20af..0901f2348 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
@@ -13,9 +13,8 @@ [email protected]
13 [email protected] ")" 13 [email protected] ")"
14 [email protected] " " 14 [email protected] " "
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "{"
17 [email protected] "{" 17 [email protected] "}"
18 [email protected] "}"
19 [email protected] "\n" 18 [email protected] "\n"
20 [email protected] 19 [email protected]
21 [email protected] "const" 20 [email protected] "const"
@@ -31,7 +30,6 @@ [email protected]
31 [email protected] ")" 30 [email protected] ")"
32 [email protected] " " 31 [email protected] " "
33 [email protected] 32 [email protected]
34 [email protected] 33 [email protected] "{"
35 [email protected] "{" 34 [email protected] "}"
36 [email protected] "}"
37 [email protected] "\n" 35 [email protected] "\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 4946ee050..28291afc2 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
@@ -9,29 +9,28 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected] "m"
23 [email protected] "m" 23 [email protected] "!"
24 [email protected] "!" 24 [email protected]
25 [email protected] 25 [email protected] "("
26 [email protected] "(" 26 [email protected] "x"
27 [email protected] "x" 27 [email protected] ")"
28 [email protected] ")" 28 [email protected] " "
29 [email protected] " " 29 [email protected] "="
30 [email protected] "=" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected] "0"
33 [email protected] "0" 33 [email protected] ";"
34 [email protected] ";" 34 [email protected] "\n"
35 [email protected] "\n" 35 [email protected] "}"
36 [email protected] "}"
37 [email protected] "\n" 36 [email protected] "\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 18fdd9dc9..bb94a05c6 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
@@ -9,121 +9,118 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "a"
20 [email protected] "a" 20 [email protected] ";"
21 [email protected] ";" 21 [email protected] "\n "
22 [email protected] "\n " 22 [email protected]
23 [email protected] 23 [email protected] "let"
24 [email protected] "let" 24 [email protected] " "
25 [email protected] " " 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected] "b"
28 [email protected] "b" 28 [email protected] ":"
29 [email protected] ":" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected] "i32"
35 [email protected] "i32" 35 [email protected] ";"
36 [email protected] ";" 36 [email protected] "\n "
37 [email protected] "\n " 37 [email protected]
38 [email protected] 38 [email protected] "let"
39 [email protected] "let" 39 [email protected] " "
40 [email protected] " " 40 [email protected]
41 [email protected] 41 [email protected]
42 [email protected] 42 [email protected] "c"
43 [email protected] "c" 43 [email protected] " "
44 [email protected] " " 44 [email protected] "="
45 [email protected] "=" 45 [email protected] " "
46 [email protected] " " 46 [email protected]
47 [email protected] 47 [email protected] "92"
48 [email protected] "92" 48 [email protected] ";"
49 [email protected] ";" 49 [email protected] "\n "
50 [email protected] "\n " 50 [email protected]
51 [email protected] 51 [email protected] "let"
52 [email protected] "let" 52 [email protected] " "
53 [email protected] " " 53 [email protected]
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected] "d"
56 [email protected] "d" 56 [email protected] ":"
57 [email protected] ":" 57 [email protected] " "
58 [email protected] " " 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected]
62 [email protected] 62 [email protected] "i32"
63 [email protected] "i32" 63 [email protected] " "
64 [email protected] " " 64 [email protected] "="
65 [email protected] "=" 65 [email protected] " "
66 [email protected] " " 66 [email protected]
67 [email protected] 67 [email protected] "92"
68 [email protected] "92" 68 [email protected] ";"
69 [email protected] ";" 69 [email protected] "\n "
70 [email protected] "\n " 70 [email protected]
71 [email protected] 71 [email protected] "let"
72 [email protected] "let" 72 [email protected] " "
73 [email protected] " " 73 [email protected]
74 [email protected] 74 [email protected]
75 [email protected] 75 [email protected] "e"
76 [email protected] "e" 76 [email protected] ":"
77 [email protected] ":" 77 [email protected] " "
78 [email protected] " " 78 [email protected]
79 [email protected] 79 [email protected] "!"
80 [email protected] "!" 80 [email protected] ";"
81 [email protected] ";" 81 [email protected] "\n "
82 [email protected] "\n " 82 [email protected]
83 [email protected] 83 [email protected] "let"
84 [email protected] "let" 84 [email protected] " "
85 [email protected] " " 85 [email protected]
86 [email protected] 86 [email protected] "_"
87 [email protected] "_" 87 [email protected] ":"
88 [email protected] ":" 88 [email protected] " "
89 [email protected] " " 89 [email protected]
90 [email protected] 90 [email protected] "!"
91 [email protected] "!" 91 [email protected] " "
92 [email protected] " " 92 [email protected] "="
93 [email protected] "=" 93 [email protected] " "
94 [email protected] " " 94 [email protected]
95 [email protected] 95 [email protected] "{"
96 [email protected] 96 [email protected] "}"
97 [email protected] "{" 97 [email protected] ";"
98 [email protected] "}" 98 [email protected] "\n "
99 [email protected] ";" 99 [email protected]
100 [email protected] "\n " 100 [email protected] "let"
101 [email protected] 101 [email protected] " "
102 [email protected] "let" 102 [email protected]
103 [email protected] " " 103 [email protected]
104 [email protected] 104 [email protected] "f"
105 [email protected] 105 [email protected] " "
106 [email protected] "f" 106 [email protected] "="
107 [email protected] " " 107 [email protected] " "
108 [email protected] "=" 108 [email protected]
109 [email protected] " " 109 [email protected]
110 [email protected] 110 [email protected] "#"
111 [email protected] 111 [email protected] "["
112 [email protected] "#" 112 [email protected]
113 [email protected] "[" 113 [email protected]
114 [email protected] 114 [email protected]
115 [email protected] 115 [email protected] "attr"
116 [email protected] 116 [email protected] "]"
117 [email protected] "attr" 117 [email protected]
118 [email protected] "]" 118 [email protected] "|"
119 [email protected] 119 [email protected] "|"
120 [email protected] "|" 120 [email protected]
121 [email protected] "|" 121 [email protected] "{"
122 [email protected] 122 [email protected] "}"
123 [email protected] 123 [email protected] ";"
124 [email protected] "{" 124 [email protected] "\n"
125 [email protected] "}" 125 [email protected] "}"
126 [email protected] ";"
127 [email protected] "\n"
128 [email protected] "}"
129 [email protected] "\n" 126 [email protected] "\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 01fffd7b0..8f2f144c7 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
@@ -9,25 +9,23 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "try"
24 [email protected] "try" 24 [email protected] " "
25 [email protected] " " 25 [email protected]
26 [email protected] 26 [email protected] "{"
27 [email protected] 27 [email protected] "}"
28 [email protected] "{" 28 [email protected] ";"
29 [email protected] "}" 29 [email protected] "\n"
30 [email protected] ";" 30 [email protected] "}"
31 [email protected] "\n"
32 [email protected] "}"
33 [email protected] "\n" 31 [email protected] "\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 498b3121e..87ac42748 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
@@ -9,82 +9,81 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "x"
20 [email protected] "x" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "="
22 [email protected] "=" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "box"
25 [email protected] "box" 25 [email protected] " "
26 [email protected] " " 26 [email protected]
27 [email protected] 27 [email protected] "1i32"
28 [email protected] "1i32" 28 [email protected] ";"
29 [email protected] ";" 29 [email protected] "\n "
30 [email protected] "\n " 30 [email protected]
31 [email protected] 31 [email protected] "let"
32 [email protected] "let" 32 [email protected] " "
33 [email protected] " " 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "y"
36 [email protected] "y" 36 [email protected] " "
37 [email protected] " " 37 [email protected] "="
38 [email protected] "=" 38 [email protected] " "
39 [email protected] " " 39 [email protected]
40 [email protected] 40 [email protected] "("
41 [email protected] "(" 41 [email protected]
42 [email protected] 42 [email protected] "box"
43 [email protected] "box" 43 [email protected] " "
44 [email protected] " " 44 [email protected]
45 [email protected] 45 [email protected] "1i32"
46 [email protected] "1i32" 46 [email protected] ","
47 [email protected] "," 47 [email protected] " "
48 [email protected] " " 48 [email protected]
49 [email protected] 49 [email protected] "box"
50 [email protected] "box" 50 [email protected] " "
51 [email protected] " " 51 [email protected]
52 [email protected] 52 [email protected] "2i32"
53 [email protected] "2i32" 53 [email protected] ")"
54 [email protected] ")" 54 [email protected] ";"
55 [email protected] ";" 55 [email protected] "\n "
56 [email protected] "\n " 56 [email protected]
57 [email protected] 57 [email protected] "let"
58 [email protected] "let" 58 [email protected] " "
59 [email protected] " " 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected] "z"
62 [email protected] "z" 62 [email protected] " "
63 [email protected] " " 63 [email protected] "="
64 [email protected] "=" 64 [email protected] " "
65 [email protected] " " 65 [email protected]
66 [email protected] 66 [email protected]
67 [email protected] 67 [email protected]
68 [email protected] 68 [email protected]
69 [email protected] 69 [email protected]
70 [email protected] 70 [email protected] "Foo"
71 [email protected] "Foo" 71 [email protected]
72 [email protected] 72 [email protected] "("
73 [email protected] "(" 73 [email protected]
74 [email protected] 74 [email protected] "box"
75 [email protected] "box" 75 [email protected] " "
76 [email protected] " " 76 [email protected]
77 [email protected] 77 [email protected] "1i32"
78 [email protected] "1i32" 78 [email protected] ","
79 [email protected] "," 79 [email protected] " "
80 [email protected] " " 80 [email protected]
81 [email protected] 81 [email protected] "box"
82 [email protected] "box" 82 [email protected] " "
83 [email protected] " " 83 [email protected]
84 [email protected] 84 [email protected] "2i32"
85 [email protected] "2i32" 85 [email protected] ")"
86 [email protected] ")" 86 [email protected] ";"
87 [email protected] ";" 87 [email protected] "\n"
88 [email protected] "\n" 88 [email protected] "}"
89 [email protected] "}"
90 [email protected] "\n" 89 [email protected] "\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 db58a928e..00ce5ecf0 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
@@ -48,9 +48,8 @@ [email protected]
48 [email protected] ")" 48 [email protected] ")"
49 [email protected] " " 49 [email protected] " "
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected] "{"
52 [email protected] "{" 52 [email protected] "}"
53 [email protected] "}"
54 [email protected] "\n" 53 [email protected] "\n"
55 [email protected] "}" 54 [email protected] "}"
56 [email protected] "\n" 55 [email protected] "\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 4ca554ef8..b330a0932 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
@@ -9,56 +9,54 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "enum"
16 [email protected] "enum" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "LocalEnum"
19 [email protected] "LocalEnum" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "{"
22 [email protected] "{" 22 [email protected] "\n "
23 [email protected] "\n " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "One"
26 [email protected] "One" 26 [email protected] ","
27 [email protected] "," 27 [email protected] "\n "
28 [email protected] "\n " 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] "Two"
31 [email protected] "Two" 31 [email protected] ","
32 [email protected] "," 32 [email protected] "\n "
33 [email protected] "\n " 33 [email protected] "}"
34 [email protected] "}" 34 [email protected] ";"
35 [email protected] ";" 35 [email protected] "\n "
36 [email protected] "\n " 36 [email protected]
37 [email protected] 37 [email protected] "fn"
38 [email protected] "fn" 38 [email protected] " "
39 [email protected] " " 39 [email protected]
40 [email protected] 40 [email protected] "f"
41 [email protected] "f" 41 [email protected]
42 [email protected] 42 [email protected] "("
43 [email protected] "(" 43 [email protected] ")"
44 [email protected] ")" 44 [email protected] " "
45 [email protected] " " 45 [email protected]
46 [email protected] 46 [email protected] "{"
47 [email protected] 47 [email protected] "}"
48 [email protected] "{" 48 [email protected] ";"
49 [email protected] "}" 49 [email protected] "\n "
50 [email protected] ";" 50 [email protected]
51 [email protected] "\n " 51 [email protected] "struct"
52 [email protected] 52 [email protected] " "
53 [email protected] "struct" 53 [email protected]
54 [email protected] " " 54 [email protected] "S"
55 [email protected] 55 [email protected] " "
56 [email protected] "S" 56 [email protected]
57 [email protected] " " 57 [email protected] "{"
58 [email protected] 58 [email protected] "}"
59 [email protected] "{" 59 [email protected] ";"
60 [email protected] "}" 60 [email protected] "\n"
61 [email protected] ";" 61 [email protected] "}"
62 [email protected] "\n"
63 [email protected] "}"
64 [email protected] "\n" 62 [email protected] "\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 7fa3b9f32..8e8d9e992 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
@@ -9,62 +9,61 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "x"
21 [email protected] "x" 21 [email protected] "."
22 [email protected] "." 22 [email protected] "await"
23 [email protected] "await" 23 [email protected] ";"
24 [email protected] ";" 24 [email protected] "\n "
25 [email protected] "\n " 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected] "x"
33 [email protected] "x" 33 [email protected] "."
34 [email protected] "." 34 [email protected]
35 [email protected] 35 [email protected] "0"
36 [email protected] "0" 36 [email protected] "."
37 [email protected] "." 37 [email protected] "await"
38 [email protected] "await" 38 [email protected] ";"
39 [email protected] ";" 39 [email protected] "\n "
40 [email protected] "\n " 40 [email protected]
41 [email protected] 41 [email protected]
42 [email protected] 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected] "x"
51 [email protected] "x" 51 [email protected] "."
52 [email protected] "." 52 [email protected]
53 [email protected] 53 [email protected] "0"
54 [email protected] "0" 54 [email protected]
55 [email protected] 55 [email protected] "("
56 [email protected] "(" 56 [email protected] ")"
57 [email protected] ")" 57 [email protected] "."
58 [email protected] "." 58 [email protected] "await"
59 [email protected] "await" 59 [email protected] "?"
60 [email protected] "?" 60 [email protected] "."
61 [email protected] "." 61 [email protected]
62 [email protected] 62 [email protected] "hello"
63 [email protected] "hello" 63 [email protected]
64 [email protected] 64 [email protected] "("
65 [email protected] "(" 65 [email protected] ")"
66 [email protected] ")" 66 [email protected] ";"
67 [email protected] ";" 67 [email protected] "\n"
68 [email protected] "\n" 68 [email protected] "}"
69 [email protected] "}"
70 [email protected] "\n" 69 [email protected] "\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 a32484f2c..c457851c9 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
@@ -50,7 +50,6 @@ [email protected]
50 [email protected] ")" 50 [email protected] ")"
51 [email protected] " " 51 [email protected] " "
52 [email protected] 52 [email protected]
53 [email protected] 53 [email protected] "{"
54 [email protected] "{" 54 [email protected] "}"
55 [email protected] "}"
56 [email protected] "\n" 55 [email protected] "\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 9017236cc..ea325831e 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
@@ -9,58 +9,56 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "mut"
19 [email protected] "mut" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "p"
22 [email protected] "p" 22 [email protected] " "
23 [email protected] " " 23 [email protected] "="
24 [email protected] "=" 24 [email protected] " "
25 [email protected] " " 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "F"
30 [email protected] "F" 30 [email protected]
31 [email protected] 31 [email protected] "{"
32 [email protected] "{" 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected] "x"
35 [email protected] "x" 35 [email protected] ":"
36 [email protected] ":" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected] "5"
39 [email protected] "5" 39 [email protected] "}"
40 [email protected] "}" 40 [email protected] ";"
41 [email protected] ";" 41 [email protected] "\n "
42 [email protected] "\n " 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected] "{"
47 [email protected] 47 [email protected]
48 [email protected] "{" 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected] "p"
52 [email protected] 52 [email protected] "}"
53 [email protected] "p" 53 [email protected] "."
54 [email protected] "}" 54 [email protected]
55 [email protected] "." 55 [email protected] "x"
56 [email protected] 56 [email protected] " "
57 [email protected] "x" 57 [email protected] "="
58 [email protected] " " 58 [email protected] " "
59 [email protected] "=" 59 [email protected]
60 [email protected] " " 60 [email protected] "10"
61 [email protected] 61 [email protected] ";"
62 [email protected] "10" 62 [email protected] "\n"
63 [email protected] ";" 63 [email protected] "}"
64 [email protected] "\n"
65 [email protected] "}"
66 [email protected] "\n" 64 [email protected] "\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 2cb5b52f4..9135de9df 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
@@ -20,7 +20,6 @@ [email protected]
20 [email protected] ")" 20 [email protected] ")"
21 [email protected] " " 21 [email protected] " "
22 [email protected] 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] "{" 24 [email protected] "}"
25 [email protected] "}"
26 [email protected] "\n" 25 [email protected] "\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 ac3f4de26..14610a0a2 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
@@ -29,7 +29,6 @@ [email protected]
29 [email protected] ")" 29 [email protected] ")"
30 [email protected] " " 30 [email protected] " "
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected] "{"
33 [email protected] "{" 33 [email protected] "}"
34 [email protected] "}"
35 [email protected] "\n" 34 [email protected] "\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 8d4919cbd..e6be8b7e4 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
@@ -9,34 +9,32 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "for"
16 [email protected] "for" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "x"
20 [email protected] "x" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "in"
22 [email protected] "in" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "0"
26 [email protected] "0" 26 [email protected] " "
27 [email protected] " " 27 [email protected] ".."
28 [email protected] ".." 28 [email protected] " "
29 [email protected] " " 29 [email protected]
30 [email protected] 30 [email protected] "{"
31 [email protected] 31 [email protected] "\n "
32 [email protected] "{" 32 [email protected]
33 [email protected] "\n " 33 [email protected]
34 [email protected] 34 [email protected] "break"
35 [email protected] 35 [email protected] ";"
36 [email protected] "break" 36 [email protected] "\n "
37 [email protected] ";" 37 [email protected] "}"
38 [email protected] "\n " 38 [email protected] "\n"
39 [email protected] "}" 39 [email protected] "}"
40 [email protected] "\n"
41 [email protected] "}"
42 [email protected] "\n" 40 [email protected] "\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 2c933fa76..57fba5fd5 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
@@ -9,103 +9,102 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "box"
19 [email protected] "box" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected] "i"
23 [email protected] "i" 23 [email protected] " "
24 [email protected] " " 24 [email protected] "="
25 [email protected] "=" 25 [email protected] " "
26 [email protected] " " 26 [email protected]
27 [email protected] 27 [email protected] "("
28 [email protected] "(" 28 [email protected] ")"
29 [email protected] ")" 29 [email protected] ";"
30 [email protected] ";" 30 [email protected] "\n "
31 [email protected] "\n " 31 [email protected]
32 [email protected] 32 [email protected] "let"
33 [email protected] "let" 33 [email protected] " "
34 [email protected] " " 34 [email protected]
35 [email protected] 35 [email protected] "box"
36 [email protected] "box" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "Outer"
42 [email protected] "Outer" 42 [email protected] " "
43 [email protected] " " 43 [email protected]
44 [email protected] 44 [email protected] "{"
45 [email protected] "{" 45 [email protected] " "
46 [email protected] " " 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "box"
49 [email protected] "box" 49 [email protected] " "
50 [email protected] " " 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected] "i"
53 [email protected] "i" 53 [email protected] ","
54 [email protected] "," 54 [email protected] " "
55 [email protected] " " 55 [email protected]
56 [email protected] 56 [email protected]
57 [email protected] 57 [email protected] "j"
58 [email protected] "j" 58 [email protected] ":"
59 [email protected] ":" 59 [email protected] " "
60 [email protected] " " 60 [email protected]
61 [email protected] 61 [email protected] "box"
62 [email protected] "box" 62 [email protected] " "
63 [email protected] " " 63 [email protected]
64 [email protected] 64 [email protected]
65 [email protected] 65 [email protected]
66 [email protected] 66 [email protected]
67 [email protected] 67 [email protected] "Inner"
68 [email protected] "Inner" 68 [email protected] "("
69 [email protected] "(" 69 [email protected]
70 [email protected] 70 [email protected] "box"
71 [email protected] "box" 71 [email protected] " "
72 [email protected] " " 72 [email protected]
73 [email protected] 73 [email protected] "&"
74 [email protected] "&" 74 [email protected]
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected] "x"
77 [email protected] "x" 77 [email protected] ")"
78 [email protected] ")" 78 [email protected] " "
79 [email protected] " " 79 [email protected] "}"
80 [email protected] "}" 80 [email protected] " "
81 [email protected] " " 81 [email protected] "="
82 [email protected] "=" 82 [email protected] " "
83 [email protected] " " 83 [email protected]
84 [email protected] 84 [email protected] "("
85 [email protected] "(" 85 [email protected] ")"
86 [email protected] ")" 86 [email protected] ";"
87 [email protected] ";" 87 [email protected] "\n "
88 [email protected] "\n " 88 [email protected]
89 [email protected] 89 [email protected] "let"
90 [email protected] "let" 90 [email protected] " "
91 [email protected] " " 91 [email protected]
92 [email protected] 92 [email protected] "box"
93 [email protected] "box" 93 [email protected] " "
94 [email protected] " " 94 [email protected]
95 [email protected] 95 [email protected] "ref"
96 [email protected] "ref" 96 [email protected] " "
97 [email protected] " " 97 [email protected] "mut"
98 [email protected] "mut" 98 [email protected] " "
99 [email protected] " " 99 [email protected]
100 [email protected] 100 [email protected] "i"
101 [email protected] "i" 101 [email protected] " "
102 [email protected] " " 102 [email protected] "="
103 [email protected] "=" 103 [email protected] " "
104 [email protected] " " 104 [email protected]
105 [email protected] 105 [email protected] "("
106 [email protected] "(" 106 [email protected] ")"
107 [email protected] ")" 107 [email protected] ";"
108 [email protected] ";" 108 [email protected] "\n"
109 [email protected] "\n" 109 [email protected] "}"
110 [email protected] "}"
111 [email protected] "\n" 110 [email protected] "\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 e0b50d8be..8d8b9597b 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
@@ -9,448 +9,447 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] ".."
19 [email protected] ".." 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "("
24 [email protected] "(" 24 [email protected] ")"
25 [email protected] ")" 25 [email protected] ";"
26 [email protected] ";" 26 [email protected] "\n "
27 [email protected] "\n " 27 [email protected] "//"
28 [email protected] "//" 28 [email protected] "\n "
29 [email protected] "\n " 29 [email protected] "// Tuples"
30 [email protected] "// Tuples" 30 [email protected] "\n "
31 [email protected] "\n " 31 [email protected] "//"
32 [email protected] "//" 32 [email protected] "\n "
33 [email protected] "\n " 33 [email protected]
34 [email protected] 34 [email protected] "let"
35 [email protected] "let" 35 [email protected] " "
36 [email protected] " " 36 [email protected]
37 [email protected] 37 [email protected] "("
38 [email protected] "(" 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected] "a"
41 [email protected] "a" 41 [email protected] ","
42 [email protected] "," 42 [email protected] " "
43 [email protected] " " 43 [email protected]
44 [email protected] 44 [email protected] ".."
45 [email protected] ".." 45 [email protected] ")"
46 [email protected] ")" 46 [email protected] " "
47 [email protected] " " 47 [email protected] "="
48 [email protected] "=" 48 [email protected] " "
49 [email protected] " " 49 [email protected]
50 [email protected] 50 [email protected] "("
51 [email protected] "(" 51 [email protected] ")"
52 [email protected] ")" 52 [email protected] ";"
53 [email protected] ";" 53 [email protected] "\n "
54 [email protected] "\n " 54 [email protected]
55 [email protected] 55 [email protected] "let"
56 [email protected] "let" 56 [email protected] " "
57 [email protected] " " 57 [email protected]
58 [email protected] 58 [email protected] "("
59 [email protected] "(" 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected] "a"
62 [email protected] "a" 62 [email protected] ","
63 [email protected] "," 63 [email protected] " "
64 [email protected] " " 64 [email protected]
65 [email protected] 65 [email protected] ".."
66 [email protected] ".." 66 [email protected] ","
67 [email protected] "," 67 [email protected] ")"
68 [email protected] ")" 68 [email protected] " "
69 [email protected] " " 69 [email protected] "="
70 [email protected] "=" 70 [email protected] " "
71 [email protected] " " 71 [email protected]
72 [email protected] 72 [email protected] "("
73 [email protected] "(" 73 [email protected] ")"
74 [email protected] ")" 74 [email protected] ";"
75 [email protected] ";" 75 [email protected] "\n "
76 [email protected] "\n " 76 [email protected]
77 [email protected] 77 [email protected] "let"
78 [email protected] "let" 78 [email protected] " "
79 [email protected] " " 79 [email protected]
80 [email protected] 80 [email protected]
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected]
83 [email protected] 83 [email protected] "Tuple"
84 [email protected] "Tuple" 84 [email protected] "("
85 [email protected] "(" 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] 87 [email protected] "a"
88 [email protected] "a" 88 [email protected] ","
89 [email protected] "," 89 [email protected] " "
90 [email protected] " " 90 [email protected]
91 [email protected] 91 [email protected] ".."
92 [email protected] ".." 92 [email protected] ")"
93 [email protected] ")" 93 [email protected] " "
94 [email protected] " " 94 [email protected] "="
95 [email protected] "=" 95 [email protected] " "
96 [email protected] " " 96 [email protected]
97 [email protected] 97 [email protected] "("
98 [email protected] "(" 98 [email protected] ")"
99 [email protected] ")" 99 [email protected] ";"
100 [email protected] ";" 100 [email protected] "\n "
101 [email protected] "\n " 101 [email protected]
102 [email protected] 102 [email protected] "let"
103 [email protected] "let" 103 [email protected] " "
104 [email protected] " " 104 [email protected]
105 [email protected] 105 [email protected]
106 [email protected] 106 [email protected]
107 [email protected] 107 [email protected]
108 [email protected] 108 [email protected] "Tuple"
109 [email protected] "Tuple" 109 [email protected] "("
110 [email protected] "(" 110 [email protected]
111 [email protected] 111 [email protected]
112 [email protected] 112 [email protected] "a"
113 [email protected] "a" 113 [email protected] ","
114 [email protected] "," 114 [email protected] " "
115 [email protected] " " 115 [email protected]
116 [email protected] 116 [email protected] ".."
117 [email protected] ".." 117 [email protected] ","
118 [email protected] "," 118 [email protected] ")"
119 [email protected] ")" 119 [email protected] " "
120 [email protected] " " 120 [email protected] "="
121 [email protected] "=" 121 [email protected] " "
122 [email protected] " " 122 [email protected]
123 [email protected] 123 [email protected] "("
124 [email protected] "(" 124 [email protected] ")"
125 [email protected] ")" 125 [email protected] ";"
126 [email protected] ";" 126 [email protected] "\n "
127 [email protected] "\n " 127 [email protected]
128 [email protected] 128 [email protected] "let"
129 [email protected] "let" 129 [email protected] " "
130 [email protected] " " 130 [email protected]
131 [email protected] 131 [email protected] "("
132 [email protected] "(" 132 [email protected]
133 [email protected] 133 [email protected] ".."
134 [email protected] ".." 134 [email protected] ","
135 [email protected] "," 135 [email protected] " "
136 [email protected] " " 136 [email protected]
137 [email protected] 137 [email protected] ".."
138 [email protected] ".." 138 [email protected] ")"
139 [email protected] ")" 139 [email protected] " "
140 [email protected] " " 140 [email protected] "="
141 [email protected] "=" 141 [email protected] " "
142 [email protected] " " 142 [email protected]
143 [email protected] 143 [email protected] "("
144 [email protected] "(" 144 [email protected] ")"
145 [email protected] ")" 145 [email protected] ";"
146 [email protected] ";" 146 [email protected] "\n "
147 [email protected] "\n " 147 [email protected]
148 [email protected] 148 [email protected] "let"
149 [email protected] "let" 149 [email protected] " "
150 [email protected] " " 150 [email protected]
151 [email protected] 151 [email protected]
152 [email protected] 152 [email protected]
153 [email protected] 153 [email protected]
154 [email protected] 154 [email protected] "Tuple"
155 [email protected] "Tuple" 155 [email protected] "("
156 [email protected] "(" 156 [email protected]
157 [email protected] 157 [email protected] ".."
158 [email protected] ".." 158 [email protected] ","
159 [email protected] "," 159 [email protected] " "
160 [email protected] " " 160 [email protected]
161 [email protected] 161 [email protected] ".."
162 [email protected] ".." 162 [email protected] ")"
163 [email protected] ")" 163 [email protected] " "
164 [email protected] " " 164 [email protected] "="
165 [email protected] "=" 165 [email protected] " "
166 [email protected] " " 166 [email protected]
167 [email protected] 167 [email protected] "("
168 [email protected] "(" 168 [email protected] ")"
169 [email protected] ")" 169 [email protected] ";"
170 [email protected] ";" 170 [email protected] "\n "
171 [email protected] "\n " 171 [email protected]
172 [email protected] 172 [email protected] "let"
173 [email protected] "let" 173 [email protected] " "
174 [email protected] " " 174 [email protected]
175 [email protected] 175 [email protected] "("
176 [email protected] "(" 176 [email protected]
177 [email protected] 177 [email protected] ".."
178 [email protected] ".." 178 [email protected] ","
179 [email protected] "," 179 [email protected] " "
180 [email protected] " " 180 [email protected]
181 [email protected] 181 [email protected]
182 [email protected] 182 [email protected] "a"
183 [email protected] "a" 183 [email protected] ","
184 [email protected] "," 184 [email protected] " "
185 [email protected] " " 185 [email protected]
186 [email protected] 186 [email protected] ".."
187 [email protected] ".." 187 [email protected] ")"
188 [email protected] ")" 188 [email protected] " "
189 [email protected] " " 189 [email protected] "="
190 [email protected] "=" 190 [email protected] " "
191 [email protected] " " 191 [email protected]
192 [email protected] 192 [email protected] "("
193 [email protected] "(" 193 [email protected] ")"
194 [email protected] ")" 194 [email protected] ";"
195 [email protected] ";" 195 [email protected] "\n "
196 [email protected] "\n " 196 [email protected]
197 [email protected] 197 [email protected] "let"
198 [email protected] "let" 198 [email protected] " "
199 [email protected] " " 199 [email protected]
200 [email protected] 200 [email protected]
201 [email protected] 201 [email protected]
202 [email protected] 202 [email protected]
203 [email protected] 203 [email protected] "Tuple"
204 [email protected] "Tuple" 204 [email protected] "("
205 [email protected] "(" 205 [email protected]
206 [email protected] 206 [email protected] ".."
207 [email protected] ".." 207 [email protected] ","
208 [email protected] "," 208 [email protected] " "
209 [email protected] " " 209 [email protected]
210 [email protected] 210 [email protected]
211 [email protected] 211 [email protected] "a"
212 [email protected] "a" 212 [email protected] ","
213 [email protected] "," 213 [email protected] " "
214 [email protected] " " 214 [email protected]
215 [email protected] 215 [email protected] ".."
216 [email protected] ".." 216 [email protected] ")"
217 [email protected] ")" 217 [email protected] " "
218 [email protected] " " 218 [email protected] "="
219 [email protected] "=" 219 [email protected] " "
220 [email protected] " " 220 [email protected]
221 [email protected] 221 [email protected] "("
222 [email protected] "(" 222 [email protected] ")"
223 [email protected] ")" 223 [email protected] ";"
224 [email protected] ";" 224 [email protected] "\n "
225 [email protected] "\n " 225 [email protected] "//"
226 [email protected] "//" 226 [email protected] "\n "
227 [email protected] "\n " 227 [email protected] "// Slices"
228 [email protected] "// Slices" 228 [email protected] "\n "
229 [email protected] "\n " 229 [email protected] "//"
230 [email protected] "//" 230 [email protected] "\n "
231 [email protected] "\n " 231 [email protected]
232 [email protected] 232 [email protected] "let"
233 [email protected] "let" 233 [email protected] " "
234 [email protected] " " 234 [email protected]
235 [email protected] 235 [email protected] "["
236 [email protected] "[" 236 [email protected]
237 [email protected] 237 [email protected] ".."
238 [email protected] ".." 238 [email protected] "]"
239 [email protected] "]" 239 [email protected] " "
240 [email protected] " " 240 [email protected] "="
241 [email protected] "=" 241 [email protected] " "
242 [email protected] " " 242 [email protected]
243 [email protected] 243 [email protected] "("
244 [email protected] "(" 244 [email protected] ")"
245 [email protected] ")" 245 [email protected] ";"
246 [email protected] ";" 246 [email protected] "\n "
247 [email protected] "\n " 247 [email protected]
248 [email protected] 248 [email protected] "let"
249 [email protected] "let" 249 [email protected] " "
250 [email protected] " " 250 [email protected]
251 [email protected] 251 [email protected] "["
252 [email protected] "[" 252 [email protected]
253 [email protected] 253 [email protected]
254 [email protected] 254 [email protected] "head"
255 [email protected] "head" 255 [email protected] ","
256 [email protected] "," 256 [email protected] " "
257 [email protected] " " 257 [email protected]
258 [email protected] 258 [email protected] ".."
259 [email protected] ".." 259 [email protected] "]"
260 [email protected] "]" 260 [email protected] " "
261 [email protected] " " 261 [email protected] "="
262 [email protected] "=" 262 [email protected] " "
263 [email protected] " " 263 [email protected]
264 [email protected] 264 [email protected] "("
265 [email protected] "(" 265 [email protected] ")"
266 [email protected] ")" 266 [email protected] ";"
267 [email protected] ";" 267 [email protected] "\n "
268 [email protected] "\n " 268 [email protected]
269 [email protected] 269 [email protected] "let"
270 [email protected] "let" 270 [email protected] " "
271 [email protected] " " 271 [email protected]
272 [email protected] 272 [email protected] "["
273 [email protected] "[" 273 [email protected]
274 [email protected] 274 [email protected]
275 [email protected] 275 [email protected] "head"
276 [email protected] "head" 276 [email protected] ","
277 [email protected] "," 277 [email protected] " "
278 [email protected] " " 278 [email protected]
279 [email protected] 279 [email protected]
280 [email protected] 280 [email protected] "tail"
281 [email protected] "tail" 281 [email protected] " "
282 [email protected] " " 282 [email protected] "@"
283 [email protected] "@" 283 [email protected] " "
284 [email protected] " " 284 [email protected]
285 [email protected] 285 [email protected] ".."
286 [email protected] ".." 286 [email protected] "]"
287 [email protected] "]" 287 [email protected] " "
288 [email protected] " " 288 [email protected] "="
289 [email protected] "=" 289 [email protected] " "
290 [email protected] " " 290 [email protected]
291 [email protected] 291 [email protected] "("
292 [email protected] "(" 292 [email protected] ")"
293 [email protected] ")" 293 [email protected] ";"
294 [email protected] ";" 294 [email protected] "\n "
295 [email protected] "\n " 295 [email protected]
296 [email protected] 296 [email protected] "let"
297 [email protected] "let" 297 [email protected] " "
298 [email protected] " " 298 [email protected]
299 [email protected] 299 [email protected] "["
300 [email protected] "[" 300 [email protected]
301 [email protected] 301 [email protected]
302 [email protected] 302 [email protected] "head"
303 [email protected] "head" 303 [email protected] ","
304 [email protected] "," 304 [email protected] " "
305 [email protected] " " 305 [email protected]
306 [email protected] 306 [email protected] ".."
307 [email protected] ".." 307 [email protected] ","
308 [email protected] "," 308 [email protected] " "
309 [email protected] " " 309 [email protected]
310 [email protected] 310 [email protected]
311 [email protected] 311 [email protected] "cons"
312 [email protected] "cons" 312 [email protected] "]"
313 [email protected] "]" 313 [email protected] " "
314 [email protected] " " 314 [email protected] "="
315 [email protected] "=" 315 [email protected] " "
316 [email protected] " " 316 [email protected]
317 [email protected] 317 [email protected] "("
318 [email protected] "(" 318 [email protected] ")"
319 [email protected] ")" 319 [email protected] ";"
320 [email protected] ";" 320 [email protected] "\n "
321 [email protected] "\n " 321 [email protected]
322 [email protected] 322 [email protected] "let"
323 [email protected] "let" 323 [email protected] " "
324 [email protected] " " 324 [email protected]
325 [email protected] 325 [email protected] "["
326 [email protected] "[" 326 [email protected]
327 [email protected] 327 [email protected]
328 [email protected] 328 [email protected] "head"
329 [email protected] "head" 329 [email protected] ","
330 [email protected] "," 330 [email protected] " "
331 [email protected] " " 331 [email protected]
332 [email protected] 332 [email protected]
333 [email protected] 333 [email protected] "mid"
334 [email protected] "mid" 334 [email protected] " "
335 [email protected] " " 335 [email protected] "@"
336 [email protected] "@" 336 [email protected] " "
337 [email protected] " " 337 [email protected]
338 [email protected] 338 [email protected] ".."
339 [email protected] ".." 339 [email protected] ","
340 [email protected] "," 340 [email protected] " "
341 [email protected] " " 341 [email protected]
342 [email protected] 342 [email protected]
343 [email protected] 343 [email protected] "cons"
344 [email protected] "cons" 344 [email protected] "]"
345 [email protected] "]" 345 [email protected] " "
346 [email protected] " " 346 [email protected] "="
347 [email protected] "=" 347 [email protected] " "
348 [email protected] " " 348 [email protected]
349 [email protected] 349 [email protected] "("
350 [email protected] "(" 350 [email protected] ")"
351 [email protected] ")" 351 [email protected] ";"
352 [email protected] ";" 352 [email protected] "\n "
353 [email protected] "\n " 353 [email protected]
354 [email protected] 354 [email protected] "let"
355 [email protected] "let" 355 [email protected] " "
356 [email protected] " " 356 [email protected]
357 [email protected] 357 [email protected] "["
358 [email protected] "[" 358 [email protected]
359 [email protected] 359 [email protected]
360 [email protected] 360 [email protected] "head"
361 [email protected] "head" 361 [email protected] ","
362 [email protected] "," 362 [email protected] " "
363 [email protected] " " 363 [email protected]
364 [email protected] 364 [email protected] ".."
365 [email protected] ".." 365 [email protected] ","
366 [email protected] "," 366 [email protected] " "
367 [email protected] " " 367 [email protected]
368 [email protected] 368 [email protected] ".."
369 [email protected] ".." 369 [email protected] ","
370 [email protected] "," 370 [email protected] " "
371 [email protected] " " 371 [email protected]
372 [email protected] 372 [email protected]
373 [email protected] 373 [email protected] "cons"
374 [email protected] "cons" 374 [email protected] "]"
375 [email protected] "]" 375 [email protected] " "
376 [email protected] " " 376 [email protected] "="
377 [email protected] "=" 377 [email protected] " "
378 [email protected] " " 378 [email protected]
379 [email protected] 379 [email protected] "("
380 [email protected] "(" 380 [email protected] ")"
381 [email protected] ")" 381 [email protected] ";"
382 [email protected] ";" 382 [email protected] "\n "
383 [email protected] "\n " 383 [email protected]
384 [email protected] 384 [email protected] "let"
385 [email protected] "let" 385 [email protected] " "
386 [email protected] " " 386 [email protected]
387 [email protected] 387 [email protected] "["
388 [email protected] "[" 388 [email protected]
389 [email protected] 389 [email protected]
390 [email protected] 390 [email protected] "head"
391 [email protected] "head" 391 [email protected] ","
392 [email protected] "," 392 [email protected] " "
393 [email protected] " " 393 [email protected]
394 [email protected] 394 [email protected] ".."
395 [email protected] ".." 395 [email protected] ","
396 [email protected] "," 396 [email protected] " "
397 [email protected] " " 397 [email protected]
398 [email protected] 398 [email protected]
399 [email protected] 399 [email protected] "mid"
400 [email protected] "mid" 400 [email protected] ","
401 [email protected] "," 401 [email protected] " "
402 [email protected] " " 402 [email protected]
403 [email protected] 403 [email protected]
404 [email protected] 404 [email protected] "tail"
405 [email protected] "tail" 405 [email protected] " "
406 [email protected] " " 406 [email protected] "@"
407 [email protected] "@" 407 [email protected] " "
408 [email protected] " " 408 [email protected]
409 [email protected] 409 [email protected] ".."
410 [email protected] ".." 410 [email protected] "]"
411 [email protected] "]" 411 [email protected] " "
412 [email protected] " " 412 [email protected] "="
413 [email protected] "=" 413 [email protected] " "
414 [email protected] " " 414 [email protected]
415 [email protected] 415 [email protected] "("
416 [email protected] "(" 416 [email protected] ")"
417 [email protected] ")" 417 [email protected] ";"
418 [email protected] ";" 418 [email protected] "\n "
419 [email protected] "\n " 419 [email protected]
420 [email protected] 420 [email protected] "let"
421 [email protected] "let" 421 [email protected] " "
422 [email protected] " " 422 [email protected]
423 [email protected] 423 [email protected] "["
424 [email protected] "[" 424 [email protected]
425 [email protected] 425 [email protected]
426 [email protected] 426 [email protected] "head"
427 [email protected] "head" 427 [email protected] ","
428 [email protected] "," 428 [email protected] " "
429 [email protected] " " 429 [email protected]
430 [email protected] 430 [email protected] ".."
431 [email protected] ".." 431 [email protected] ","
432 [email protected] "," 432 [email protected] " "
433 [email protected] " " 433 [email protected]
434 [email protected] 434 [email protected]
435 [email protected] 435 [email protected] "mid"
436 [email protected] "mid" 436 [email protected] ","
437 [email protected] "," 437 [email protected] " "
438 [email protected] " " 438 [email protected]
439 [email protected] 439 [email protected] ".."
440 [email protected] ".." 440 [email protected] ","
441 [email protected] "," 441 [email protected] " "
442 [email protected] " " 442 [email protected]
443 [email protected] 443 [email protected]
444 [email protected] 444 [email protected] "cons"
445 [email protected] "cons" 445 [email protected] "]"
446 [email protected] "]" 446 [email protected] " "
447 [email protected] " " 447 [email protected] "="
448 [email protected] "=" 448 [email protected] " "
449 [email protected] " " 449 [email protected]
450 [email protected] 450 [email protected] "("
451 [email protected] "(" 451 [email protected] ")"
452 [email protected] ")" 452 [email protected] ";"
453 [email protected] ";" 453 [email protected] "\n"
454 [email protected] "\n" 454 [email protected] "}"
455 [email protected] "}"
456 [email protected] "\n" 455 [email protected] "\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 10434b637..7c092d518 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
@@ -9,68 +9,67 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "S"
22 [email protected] "S" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "{"
25 [email protected] "{" 25 [email protected] " "
26 [email protected] " " 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected] "0"
29 [email protected] "0" 29 [email protected] ":"
30 [email protected] ":" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected] "1"
34 [email protected] "1" 34 [email protected] " "
35 [email protected] " " 35 [email protected] "}"
36 [email protected] "}" 36 [email protected] " "
37 [email protected] " " 37 [email protected] "="
38 [email protected] "=" 38 [email protected] " "
39 [email protected] " " 39 [email protected]
40 [email protected] 40 [email protected] "("
41 [email protected] "(" 41 [email protected] ")"
42 [email protected] ")" 42 [email protected] ";"
43 [email protected] ";" 43 [email protected] "\n "
44 [email protected] "\n " 44 [email protected]
45 [email protected] 45 [email protected] "let"
46 [email protected] "let" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected] "S"
52 [email protected] "S" 52 [email protected] " "
53 [email protected] " " 53 [email protected]
54 [email protected] 54 [email protected] "{"
55 [email protected] "{" 55 [email protected] " "
56 [email protected] " " 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected] "x"
59 [email protected] "x" 59 [email protected] ":"
60 [email protected] ":" 60 [email protected] " "
61 [email protected] " " 61 [email protected]
62 [email protected] 62 [email protected]
63 [email protected] 63 [email protected] "1"
64 [email protected] "1" 64 [email protected] " "
65 [email protected] " " 65 [email protected] "}"
66 [email protected] "}" 66 [email protected] " "
67 [email protected] " " 67 [email protected] "="
68 [email protected] "=" 68 [email protected] " "
69 [email protected] " " 69 [email protected]
70 [email protected] 70 [email protected] "("
71 [email protected] "(" 71 [email protected] ")"
72 [email protected] ")" 72 [email protected] ";"
73 [email protected] ";" 73 [email protected] "\n"
74 [email protected] "\n" 74 [email protected] "}"
75 [email protected] "}"
76 [email protected] "\n" 75 [email protected] "\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 66ad546b9..8382a4f96 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
@@ -9,35 +9,34 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected] "&"
25 [email protected] "&" 25 [email protected]
26 [email protected] 26 [email protected] "1"
27 [email protected] "1" 27 [email protected] " "
28 [email protected] " " 28 [email protected] "as"
29 [email protected] "as" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected] "*"
32 [email protected] "*" 32 [email protected] "const"
33 [email protected] "const" 33 [email protected] " "
34 [email protected] " " 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected] "i32"
39 [email protected] "i32" 39 [email protected] ";"
40 [email protected] ";" 40 [email protected] "\n"
41 [email protected] "\n" 41 [email protected] "}"
42 [email protected] "}"
43 [email protected] "\n" 42 [email protected] "\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 c2e290a62..f43dfbe63 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
@@ -9,29 +9,28 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "foo"
20 [email protected] "foo" 20 [email protected]
21 [email protected] 21 [email protected] "("
22 [email protected] "(" 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected] "#"
25 [email protected] "#" 25 [email protected] "["
26 [email protected] "[" 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "attr"
30 [email protected] "attr" 30 [email protected] "]"
31 [email protected] "]" 31 [email protected] " "
32 [email protected] " " 32 [email protected] "92"
33 [email protected] "92" 33 [email protected] ")"
34 [email protected] ")" 34 [email protected] "\n"
35 [email protected] "\n" 35 [email protected] "}"
36 [email protected] "}"
37 [email protected] "\n" 36 [email protected] "\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 dad3dfe4d..ecac05950 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
@@ -9,62 +9,61 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "foo"
20 [email protected] "foo" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "="
22 [email protected] "=" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "|"
26 [email protected] "|" 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "bar"
30 [email protected] "bar" 30 [email protected] ","
31 [email protected] "," 31 [email protected] " "
32 [email protected] " " 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "baz"
36 [email protected] "baz" 36 [email protected] ":"
37 [email protected] ":" 37 [email protected] " "
38 [email protected] " " 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected]
42 [email protected] 42 [email protected] "Baz"
43 [email protected] "Baz" 43 [email protected] ","
44 [email protected] "," 44 [email protected] " "
45 [email protected] " " 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "qux"
49 [email protected] "qux" 49 [email protected] ":"
50 [email protected] ":" 50 [email protected] " "
51 [email protected] " " 51 [email protected]
52 [email protected] 52 [email protected]
53 [email protected] 53 [email protected]
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected]
56 [email protected] 56 [email protected] "Qux"
57 [email protected] "Qux" 57 [email protected] "::"
58 [email protected] "::" 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected] "Quux"
61 [email protected] "Quux" 61 [email protected] "|"
62 [email protected] "|" 62 [email protected] " "
63 [email protected] " " 63 [email protected]
64 [email protected] 64 [email protected] "("
65 [email protected] "(" 65 [email protected] ")"
66 [email protected] ")" 66 [email protected] ";"
67 [email protected] ";" 67 [email protected] "\n"
68 [email protected] "\n" 68 [email protected] "}"
69 [email protected] "}"
70 [email protected] "\n" 69 [email protected] "\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 3110bf5c0..092833417 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
@@ -38,7 +38,6 @@ [email protected]
38 [email protected] ")" 38 [email protected] ")"
39 [email protected] " " 39 [email protected] " "
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "{"
42 [email protected] "{" 42 [email protected] "}"
43 [email protected] "}"
44 [email protected] "\n" 43 [email protected] "\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 3f3e6a9a2..88d512f1a 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
@@ -9,104 +9,103 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "("
19 [email protected] "(" 19 [email protected] ")"
20 [email protected] ")" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "{"
23 [email protected] "{" 23 [email protected] "\n "
24 [email protected] "\n " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "("
27 [email protected] "(" 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "_"
30 [email protected] "_" 30 [email protected] " "
31 [email protected] " " 31 [email protected] "|"
32 [email protected] "|" 32 [email protected] " "
33 [email protected] " " 33 [email protected]
34 [email protected] 34 [email protected] "_"
35 [email protected] "_" 35 [email protected] ")"
36 [email protected] ")" 36 [email protected] " "
37 [email protected] " " 37 [email protected] "=>"
38 [email protected] "=>" 38 [email protected] " "
39 [email protected] " " 39 [email protected]
40 [email protected] 40 [email protected] "("
41 [email protected] "(" 41 [email protected] ")"
42 [email protected] ")" 42 [email protected] ","
43 [email protected] "," 43 [email protected] "\n "
44 [email protected] "\n " 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected] "&"
47 [email protected] "&" 47 [email protected]
48 [email protected] 48 [email protected] "("
49 [email protected] "(" 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected] "_"
52 [email protected] "_" 52 [email protected] " "
53 [email protected] " " 53 [email protected] "|"
54 [email protected] "|" 54 [email protected] " "
55 [email protected] " " 55 [email protected]
56 [email protected] 56 [email protected] "_"
57 [email protected] "_" 57 [email protected] ")"
58 [email protected] ")" 58 [email protected] " "
59 [email protected] " " 59 [email protected] "=>"
60 [email protected] "=>" 60 [email protected] " "
61 [email protected] " " 61 [email protected]
62 [email protected] 62 [email protected] "("
63 [email protected] "(" 63 [email protected] ")"
64 [email protected] ")" 64 [email protected] ","
65 [email protected] "," 65 [email protected] "\n "
66 [email protected] "\n " 66 [email protected]
67 [email protected] 67 [email protected]
68 [email protected] 68 [email protected] "("
69 [email protected] "(" 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected] "_"
72 [email protected] "_" 72 [email protected] " "
73 [email protected] " " 73 [email protected] "|"
74 [email protected] "|" 74 [email protected] " "
75 [email protected] " " 75 [email protected]
76 [email protected] 76 [email protected] "_"
77 [email protected] "_" 77 [email protected] ","
78 [email protected] "," 78 [email protected] ")"
79 [email protected] ")" 79 [email protected] " "
80 [email protected] " " 80 [email protected] "=>"
81 [email protected] "=>" 81 [email protected] " "
82 [email protected] " " 82 [email protected]
83 [email protected] 83 [email protected] "("
84 [email protected] "(" 84 [email protected] ")"
85 [email protected] ")" 85 [email protected] ","
86 [email protected] "," 86 [email protected] "\n "
87 [email protected] "\n " 87 [email protected]
88 [email protected] 88 [email protected]
89 [email protected] 89 [email protected] "["
90 [email protected] "[" 90 [email protected]
91 [email protected] 91 [email protected]
92 [email protected] 92 [email protected] "_"
93 [email protected] "_" 93 [email protected] " "
94 [email protected] " " 94 [email protected] "|"
95 [email protected] "|" 95 [email protected] " "
96 [email protected] " " 96 [email protected]
97 [email protected] 97 [email protected] "_"
98 [email protected] "_" 98 [email protected] ","
99 [email protected] "," 99 [email protected] "]"
100 [email protected] "]" 100 [email protected] " "
101 [email protected] " " 101 [email protected] "=>"
102 [email protected] "=>" 102 [email protected] " "
103 [email protected] " " 103 [email protected]
104 [email protected] 104 [email protected] "("
105 [email protected] "(" 105 [email protected] ")"
106 [email protected] ")" 106 [email protected] ","
107 [email protected] "," 107 [email protected] "\n "
108 [email protected] "\n " 108 [email protected] "}"
109 [email protected] "}" 109 [email protected] "\n"
110 [email protected] "\n" 110 [email protected] "}"
111 [email protected] "}"
112 [email protected] "\n" 111 [email protected] "\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 50db9e967..bd9e8d40f 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
@@ -9,30 +9,28 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "v"
21 [email protected] "v" 21 [email protected] " "
22 [email protected] " " 22 [email protected] "="
23 [email protected] "=" 23 [email protected] " "
24 [email protected] " " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "{"
27 [email protected] 27 [email protected]
28 [email protected] "{" 28 [email protected] "1"
29 [email protected] 29 [email protected] "}"
30 [email protected] "1" 30 [email protected] "&"
31 [email protected] "}" 31 [email protected]
32 [email protected] "&" 32 [email protected] "2"
33 [email protected] 33 [email protected] ";"
34 [email protected] "2" 34 [email protected] "\n"
35 [email protected] ";" 35 [email protected] "}"
36 [email protected] "\n"
37 [email protected] "}"
38 [email protected] "\n" 36 [email protected] "\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 c05e05bf3..08333a325 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
@@ -9,37 +9,35 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected] "|"
19 [email protected] "|" 19 [email protected] "|"
20 [email protected] "|" 20 [email protected] " "
21 [email protected] " " 21 [email protected]
22 [email protected] 22 [email protected] "->"
23 [email protected] "->" 23 [email protected] " "
24 [email protected] " " 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected] "i32"
29 [email protected] "i32" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected] "{"
32 [email protected] 32 [email protected] " "
33 [email protected] "{" 33 [email protected]
34 [email protected] " " 34 [email protected] "92"
35 [email protected] 35 [email protected] " "
36 [email protected] "92" 36 [email protected] "}"
37 [email protected] " " 37 [email protected]
38 [email protected] "}" 38 [email protected] "("
39 [email protected] 39 [email protected] ")"
40 [email protected] "(" 40 [email protected] ";"
41 [email protected] ")" 41 [email protected] " "
42 [email protected] ";" 42 [email protected] "}"
43 [email protected] " "
44 [email protected] "}"
45 [email protected] "\n" 43 [email protected] "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0159_try_macro_fallback.rast b/crates/ra_syntax/test_data/parser/inline/ok/0159_try_macro_fallback.rast
new file mode 100644
index 000000000..5f09e4f4a
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0159_try_macro_fallback.rast
@@ -0,0 +1,34 @@
1[email protected]
2 [email protected]
3 [email protected] "fn"
4 [email protected] " "
5 [email protected]
6 [email protected] "foo"
7 [email protected]
8 [email protected] "("
9 [email protected] ")"
10 [email protected] " "
11 [email protected]
12 [email protected] "{"
13 [email protected] " "
14 [email protected]
15 [email protected]
16 [email protected]
17 [email protected]
18 [email protected]
19 [email protected] "try"
20 [email protected] "!"
21 [email protected]
22 [email protected] "("
23 [email protected] "Ok"
24 [email protected]
25 [email protected] "("
26 [email protected]
27 [email protected] "("
28 [email protected] ")"
29 [email protected] ")"
30 [email protected] ")"
31 [email protected] ";"
32 [email protected] " "
33 [email protected] "}"
34 [email protected] "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0159_try_macro_fallback.rs b/crates/ra_syntax/test_data/parser/inline/ok/0159_try_macro_fallback.rs
new file mode 100644
index 000000000..61a6b46a0
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0159_try_macro_fallback.rs
@@ -0,0 +1 @@
fn foo() { try!(Ok(())); }
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0160_try_macro_rules.rast b/crates/ra_syntax/test_data/parser/inline/ok/0160_try_macro_rules.rast
new file mode 100644
index 000000000..05b89d1c3
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0160_try_macro_rules.rast
@@ -0,0 +1,27 @@
1[email protected]
2 [email protected]
3 [email protected]
4 [email protected]
5 [email protected]
6 [email protected] "macro_rules"
7 [email protected] "!"
8 [email protected] " "
9 [email protected]
10 [email protected] "try"
11 [email protected] " "
12 [email protected]
13 [email protected] "{"
14 [email protected] " "
15 [email protected]
16 [email protected] "("
17 [email protected] ")"
18 [email protected] " "
19 [email protected] "="
20 [email protected] ">"
21 [email protected] " "
22 [email protected]
23 [email protected] "{"
24 [email protected] "}"
25 [email protected] " "
26 [email protected] "}"
27 [email protected] "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0160_try_macro_rules.rs b/crates/ra_syntax/test_data/parser/inline/ok/0160_try_macro_rules.rs
new file mode 100644
index 000000000..2e2ab6e60
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0160_try_macro_rules.rs
@@ -0,0 +1 @@
macro_rules! try { () => {} }
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0161_labeled_block.rast b/crates/ra_syntax/test_data/parser/inline/ok/0161_labeled_block.rast
new file mode 100644
index 000000000..9efebd8b8
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0161_labeled_block.rast
@@ -0,0 +1,26 @@
1[email protected]
2 [email protected]
3 [email protected] "fn"
4 [email protected] " "
5 [email protected]
6 [email protected] "f"
7 [email protected]
8 [email protected] "("
9 [email protected] ")"
10 [email protected] " "
11 [email protected]
12 [email protected] "{"
13 [email protected] " "
14 [email protected]
15 [email protected]
16 [email protected]
17 [email protected] "\'label"
18 [email protected] ":"
19 [email protected] " "
20 [email protected]
21 [email protected] "{"
22 [email protected] "}"
23 [email protected] ";"
24 [email protected] " "
25 [email protected] "}"
26 [email protected] "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0161_labeled_block.rs b/crates/ra_syntax/test_data/parser/inline/ok/0161_labeled_block.rs
new file mode 100644
index 000000000..18b4ff4b1
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0161_labeled_block.rs
@@ -0,0 +1 @@
fn f() { 'label: {}; }
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0162_unsafe_block.rast b/crates/ra_syntax/test_data/parser/inline/ok/0162_unsafe_block.rast
new file mode 100644
index 000000000..4991f2c36
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0162_unsafe_block.rast
@@ -0,0 +1,23 @@
1[email protected]
2 [email protected]
3 [email protected] "fn"
4 [email protected] " "
5 [email protected]
6 [email protected] "f"
7 [email protected]
8 [email protected] "("
9 [email protected] ")"
10 [email protected] " "
11 [email protected]
12 [email protected] "{"
13 [email protected] " "
14 [email protected]
15 [email protected] "unsafe"
16 [email protected] " "
17 [email protected]
18 [email protected] "{"
19 [email protected] " "
20 [email protected] "}"
21 [email protected] " "
22 [email protected] "}"
23 [email protected] "\n"
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0162_unsafe_block.rs b/crates/ra_syntax/test_data/parser/inline/ok/0162_unsafe_block.rs
new file mode 100644
index 000000000..dfb9b2a1c
--- /dev/null
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0162_unsafe_block.rs
@@ -0,0 +1 @@
fn f() { unsafe { } }
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 993ba72b6..0ec237f8e 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
@@ -9,8 +9,7 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n"
14 [email protected] "\n" 14 [email protected] "}"
15 [email protected] "}"
16 [email protected] "\n" 15 [email protected] "\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 353bf2d2e..37b452ec4 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
@@ -36,10 +36,9 @@ [email protected]
36 [email protected] ")" 36 [email protected] ")"
37 [email protected] " " 37 [email protected] " "
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected] "{"
40 [email protected] "{" 40 [email protected] "\n "
41 [email protected] "\n " 41 [email protected] "}"
42 [email protected] "}"
43 [email protected] "\n " 42 [email protected] "\n "
44 [email protected] 43 [email protected]
45 [email protected] "struct" 44 [email protected] "struct"
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 3919cc78b..0b9bc58e8 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
@@ -31,9 +31,8 @@ [email protected]
31 [email protected] ")" 31 [email protected] ")"
32 [email protected] " " 32 [email protected] " "
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected] "{"
35 [email protected] "{" 35 [email protected] "}"
36 [email protected] "}"
37 [email protected] "\n\n" 36 [email protected] "\n\n"
38 [email protected] 37 [email protected]
39 [email protected] 38 [email protected]
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 750a045ef..980b34049 100644
--- a/crates/ra_syntax/test_data/parser/ok/0012_visibility.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0012_visibility.rast
@@ -9,9 +9,8 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "}"
14 [email protected] "}"
15 [email protected] "\n" 14 [email protected] "\n"
16 [email protected] 15 [email protected]
17 [email protected] 16 [email protected]
@@ -26,9 +25,8 @@ [email protected]
26 [email protected] ")" 25 [email protected] ")"
27 [email protected] " " 26 [email protected] " "
28 [email protected] 27 [email protected]
29 [email protected] 28 [email protected] "{"
30 [email protected] "{" 29 [email protected] "}"
31 [email protected] "}"
32 [email protected] "\n" 30 [email protected] "\n"
33 [email protected] 31 [email protected]
34 [email protected] 32 [email protected]
@@ -46,9 +44,8 @@ [email protected]
46 [email protected] ")" 44 [email protected] ")"
47 [email protected] " " 45 [email protected] " "
48 [email protected] 46 [email protected]
49 [email protected] 47 [email protected] "{"
50 [email protected] "{" 48 [email protected] "}"
51 [email protected] "}"
52 [email protected] "\n" 49 [email protected] "\n"
53 [email protected] 50 [email protected]
54 [email protected] 51 [email protected]
@@ -66,9 +63,8 @@ [email protected]
66 [email protected] ")" 63 [email protected] ")"
67 [email protected] " " 64 [email protected] " "
68 [email protected] 65 [email protected]
69 [email protected] 66 [email protected] "{"
70 [email protected] "{" 67 [email protected] "}"
71 [email protected] "}"
72 [email protected] "\n" 68 [email protected] "\n"
73 [email protected] 69 [email protected]
74 [email protected] 70 [email protected]
@@ -101,7 +97,6 @@ [email protected]
101 [email protected] ")" 97 [email protected] ")"
102 [email protected] " " 98 [email protected] " "
103 [email protected] 99 [email protected]
104 [email protected] 100 [email protected] "{"
105 [email protected] "{" 101 [email protected] "}"
106 [email protected] "}"
107 [email protected] "\n" 102 [email protected] "\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 a5a90df7b..05d9c05ad 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,4 +1,4 @@
1SOURCE_FILE@0..65 1SOURCE_FILE@0..38
2 [email protected] 2 [email protected]
3 [email protected] "use" 3 [email protected] "use"
4 [email protected] " " 4 [email protected] " "
@@ -31,27 +31,3 @@ [email protected]
31 [email protected] "bar" 31 [email protected] "bar"
32 [email protected] ";" 32 [email protected] ";"
33 [email protected] "\n" 33 [email protected] "\n"
34 [email protected]
35 [email protected] "use"
36 [email protected] " "
37 [email protected]
38 [email protected]
39 [email protected]
40 [email protected]
41 [email protected]
42 [email protected]
43 [email protected] "::"
44 [email protected] "self"
45 [email protected] "::"
46 [email protected]
47 [email protected]
48 [email protected] "a"
49 [email protected] "::"
50 [email protected]
51 [email protected] "super"
52 [email protected] "::"
53 [email protected]
54 [email protected]
55 [email protected] "bar"
56 [email protected] ";"
57 [email protected] "\n"
diff --git a/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rs b/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rs
index faf6a42c7..9d9eb9917 100644
--- a/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rs
+++ b/crates/ra_syntax/test_data/parser/ok/0013_use_path_self_super.rs
@@ -1,3 +1,2 @@
1use self::foo; 1use self::foo;
2use super::super::bar; 2use super::super::bar;
3use ::self::a::super::bar;
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 b5747aacd..964cbf5dd 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
@@ -23,7 +23,6 @@ [email protected]
23 [email protected] ")" 23 [email protected] ")"
24 [email protected] " " 24 [email protected] " "
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "{"
27 [email protected] "{" 27 [email protected] "}"
28 [email protected] "}"
29 [email protected] "\n" 28 [email protected] "\n"
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 643a1d16c..873791f50 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
@@ -12,10 +12,9 @@ [email protected]
12 [email protected] ")" 12 [email protected] ")"
13 [email protected] " " 13 [email protected] " "
14 [email protected] 14 [email protected]
15 [email protected] 15 [email protected] "{"
16 [email protected] "{" 16 [email protected] "\n"
17 [email protected] "\n" 17 [email protected] "}"
18 [email protected] "}"
19 [email protected] "\n\n" 18 [email protected] "\n\n"
20 [email protected] 19 [email protected]
21 [email protected] 20 [email protected]
@@ -32,10 +31,9 @@ [email protected]
32 [email protected] ")" 31 [email protected] ")"
33 [email protected] " " 32 [email protected] " "
34 [email protected] 33 [email protected]
35 [email protected] 34 [email protected] "{"
36 [email protected] "{" 35 [email protected] "\n"
37 [email protected] "\n" 36 [email protected] "}"
38 [email protected] "}"
39 [email protected] "\n\n" 37 [email protected] "\n\n"
40 [email protected] 38 [email protected]
41 [email protected] 39 [email protected]
@@ -52,8 +50,7 @@ [email protected]
52 [email protected] ")" 50 [email protected] ")"
53 [email protected] " " 51 [email protected] " "
54 [email protected] 52 [email protected]
55 [email protected] 53 [email protected] "{"
56 [email protected] "{" 54 [email protected] "\n"
57 [email protected] "\n" 55 [email protected] "}"
58 [email protected] "}"
59 [email protected] "\n" 56 [email protected] "\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 60af55837..5701f566e 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
@@ -9,25 +9,23 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "extern"
17 [email protected] "extern" 17 [email protected] " "
18 [email protected] " " 18 [email protected] "fn"
19 [email protected] "fn" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "f"
22 [email protected] "f" 22 [email protected]
23 [email protected] 23 [email protected] "("
24 [email protected] "(" 24 [email protected] ")"
25 [email protected] ")" 25 [email protected] " "
26 [email protected] " " 26 [email protected]
27 [email protected] 27 [email protected] "{"
28 [email protected] 28 [email protected] "}"
29 [email protected] "{" 29 [email protected] "\n"
30 [email protected] "}" 30 [email protected] "}"
31 [email protected] "\n"
32 [email protected] "}"
33 [email protected] "\n" 31 [email protected] "\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 4432c0163..b029d8692 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
@@ -9,24 +9,22 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "const"
16 [email protected] "const" 16 [email protected] " "
17 [email protected] " " 17 [email protected] "fn"
18 [email protected] "fn" 18 [email protected] " "
19 [email protected] " " 19 [email protected]
20 [email protected] 20 [email protected] "f"
21 [email protected] "f" 21 [email protected]
22 [email protected] 22 [email protected] "("
23 [email protected] "(" 23 [email protected] ")"
24 [email protected] ")" 24 [email protected] " "
25 [email protected] " " 25 [email protected]
26 [email protected] 26 [email protected] "{"
27 [email protected] 27 [email protected] "}"
28 [email protected] "{" 28 [email protected] "\n"
29 [email protected] "}" 29 [email protected] "}"
30 [email protected] "\n"
31 [email protected] "}"
32 [email protected] "\n" 30 [email protected] "\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 c0162c609..299bbd136 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
@@ -9,35 +9,33 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "unsafe"
16 [email protected] "unsafe" 16 [email protected] " "
17 [email protected] " " 17 [email protected] "fn"
18 [email protected] "fn" 18 [email protected] " "
19 [email protected] " " 19 [email protected]
20 [email protected] 20 [email protected] "f"
21 [email protected] "f" 21 [email protected]
22 [email protected] 22 [email protected] "("
23 [email protected] "(" 23 [email protected] ")"
24 [email protected] ")" 24 [email protected] " "
25 [email protected] " " 25 [email protected]
26 [email protected] 26 [email protected] "{"
27 [email protected] 27 [email protected] "}"
28 [email protected] "{" 28 [email protected] "\n "
29 [email protected] "}" 29 [email protected]
30 [email protected] "\n " 30 [email protected] "unsafe"
31 [email protected] 31 [email protected] " "
32 [email protected] "unsafe" 32 [email protected]
33 [email protected] " " 33 [email protected] "{"
34 [email protected] 34 [email protected] " "
35 [email protected] "{" 35 [email protected]
36 [email protected] " " 36 [email protected] "92"
37 [email protected] 37 [email protected] " "
38 [email protected] "92" 38 [email protected] "}"
39 [email protected] " " 39 [email protected] "\n"
40 [email protected] "}" 40 [email protected] "}"
41 [email protected] "\n"
42 [email protected] "}"
43 [email protected] "\n" 41 [email protected] "\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 6c0daef52..de3c4b786 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
@@ -9,178 +9,177 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "x"
20 [email protected] "x" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "="
22 [email protected] "=" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "1"
27 [email protected] "1" 27 [email protected] " "
28 [email protected] " " 28 [email protected] "+"
29 [email protected] "+" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected] "2"
34 [email protected] "2" 34 [email protected] " "
35 [email protected] " " 35 [email protected] "*"
36 [email protected] "*" 36 [email protected] " "
37 [email protected] " " 37 [email protected]
38 [email protected] 38 [email protected] "3"
39 [email protected] "3" 39 [email protected] " "
40 [email protected] " " 40 [email protected] "%"
41 [email protected] "%" 41 [email protected] " "
42 [email protected] " " 42 [email protected]
43 [email protected] 43 [email protected] "4"
44 [email protected] "4" 44 [email protected] " "
45 [email protected] " " 45 [email protected] "-"
46 [email protected] "-" 46 [email protected] " "
47 [email protected] " " 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected] "5"
50 [email protected] "5" 50 [email protected] " "
51 [email protected] " " 51 [email protected] "/"
52 [email protected] "/" 52 [email protected] " "
53 [email protected] " " 53 [email protected]
54 [email protected] 54 [email protected] "6"
55 [email protected] "6" 55 [email protected] ";"
56 [email protected] ";" 56 [email protected] "\n "
57 [email protected] "\n " 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected] "1"
61 [email protected] "1" 61 [email protected] " "
62 [email protected] " " 62 [email protected] "+"
63 [email protected] "+" 63 [email protected] " "
64 [email protected] " " 64 [email protected]
65 [email protected] 65 [email protected]
66 [email protected] 66 [email protected] "2"
67 [email protected] "2" 67 [email protected] " "
68 [email protected] " " 68 [email protected] "*"
69 [email protected] "*" 69 [email protected] " "
70 [email protected] " " 70 [email protected]
71 [email protected] 71 [email protected] "3"
72 [email protected] "3" 72 [email protected] ";"
73 [email protected] ";" 73 [email protected] "\n "
74 [email protected] "\n " 74 [email protected]
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected]
77 [email protected] 77 [email protected] "1"
78 [email protected] "1" 78 [email protected] " "
79 [email protected] " " 79 [email protected] "<<"
80 [email protected] "<<" 80 [email protected] " "
81 [email protected] " " 81 [email protected]
82 [email protected] 82 [email protected]
83 [email protected] 83 [email protected] "2"
84 [email protected] "2" 84 [email protected] " "
85 [email protected] " " 85 [email protected] "+"
86 [email protected] "+" 86 [email protected] " "
87 [email protected] " " 87 [email protected]
88 [email protected] 88 [email protected] "3"
89 [email protected] "3" 89 [email protected] ";"
90 [email protected] ";" 90 [email protected] "\n "
91 [email protected] "\n " 91 [email protected]
92 [email protected] 92 [email protected]
93 [email protected] 93 [email protected]
94 [email protected] 94 [email protected] "1"
95 [email protected] "1" 95 [email protected] " "
96 [email protected] " " 96 [email protected] "&"
97 [email protected] "&" 97 [email protected] " "
98 [email protected] " " 98 [email protected]
99 [email protected] 99 [email protected]
100 [email protected] 100 [email protected] "2"
101 [email protected] "2" 101 [email protected] " "
102 [email protected] " " 102 [email protected] ">>"
103 [email protected] ">>" 103 [email protected] " "
104 [email protected] " " 104 [email protected]
105 [email protected] 105 [email protected] "3"
106 [email protected] "3" 106 [email protected] ";"
107 [email protected] ";" 107 [email protected] "\n "
108 [email protected] "\n " 108 [email protected]
109 [email protected] 109 [email protected]
110 [email protected] 110 [email protected]
111 [email protected] 111 [email protected] "1"
112 [email protected] "1" 112 [email protected] " "
113 [email protected] " " 113 [email protected] "^"
114 [email protected] "^" 114 [email protected] " "
115 [email protected] " " 115 [email protected]
116 [email protected] 116 [email protected]
117 [email protected] 117 [email protected] "2"
118 [email protected] "2" 118 [email protected] " "
119 [email protected] " " 119 [email protected] "&"
120 [email protected] "&" 120 [email protected] " "
121 [email protected] " " 121 [email protected]
122 [email protected] 122 [email protected] "3"
123 [email protected] "3" 123 [email protected] ";"
124 [email protected] ";" 124 [email protected] "\n "
125 [email protected] "\n " 125 [email protected]
126 [email protected] 126 [email protected]
127 [email protected] 127 [email protected]
128 [email protected] 128 [email protected] "1"
129 [email protected] "1" 129 [email protected] " "
130 [email protected] " " 130 [email protected] "|"
131 [email protected] "|" 131 [email protected] " "
132 [email protected] " " 132 [email protected]
133 [email protected] 133 [email protected]
134 [email protected] 134 [email protected] "2"
135 [email protected] "2" 135 [email protected] " "
136 [email protected] " " 136 [email protected] "^"
137 [email protected] "^" 137 [email protected] " "
138 [email protected] " " 138 [email protected]
139 [email protected] 139 [email protected] "3"
140 [email protected] "3" 140 [email protected] ";"
141 [email protected] ";" 141 [email protected] "\n "
142 [email protected] "\n " 142 [email protected]
143 [email protected] 143 [email protected]
144 [email protected] 144 [email protected]
145 [email protected] 145 [email protected] "1"
146 [email protected] "1" 146 [email protected] " "
147 [email protected] " " 147 [email protected] "=="
148 [email protected] "==" 148 [email protected] " "
149 [email protected] " " 149 [email protected]
150 [email protected] 150 [email protected]
151 [email protected] 151 [email protected] "2"
152 [email protected] "2" 152 [email protected] " "
153 [email protected] " " 153 [email protected] "|"
154 [email protected] "|" 154 [email protected] " "
155 [email protected] " " 155 [email protected]
156 [email protected] 156 [email protected] "3"
157 [email protected] "3" 157 [email protected] ";"
158 [email protected] ";" 158 [email protected] "\n "
159 [email protected] "\n " 159 [email protected]
160 [email protected] 160 [email protected]
161 [email protected] 161 [email protected]
162 [email protected] 162 [email protected] "1"
163 [email protected] "1" 163 [email protected] " "
164 [email protected] " " 164 [email protected] "&&"
165 [email protected] "&&" 165 [email protected] " "
166 [email protected] " " 166 [email protected]
167 [email protected] 167 [email protected]
168 [email protected] 168 [email protected] "2"
169 [email protected] "2" 169 [email protected] " "
170 [email protected] " " 170 [email protected] "=="
171 [email protected] "==" 171 [email protected] " "
172 [email protected] " " 172 [email protected]
173 [email protected] 173 [email protected] "3"
174 [email protected] "3" 174 [email protected] ";"
175 [email protected] ";" 175 [email protected] "\n "
176 [email protected] "\n " 176 [email protected] "//1 || 2 && 2;"
177 [email protected] "//1 || 2 && 2;" 177 [email protected] "\n "
178 [email protected] "\n " 178 [email protected] "//1 .. 2 || 3;"
179 [email protected] "//1 .. 2 || 3;" 179 [email protected] "\n "
180 [email protected] "\n " 180 [email protected] "//1 = 2 .. 3;"
181 [email protected] "//1 = 2 .. 3;" 181 [email protected] "\n "
182 [email protected] "\n " 182 [email protected] "//---&*1 - --2 * 9;"
183 [email protected] "//---&*1 - --2 * 9;" 183 [email protected] "\n"
184 [email protected] "\n" 184 [email protected] "}"
185 [email protected] "}"
186 [email protected] "\n" 185 [email protected] "\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 8177bd89b..dc47d68a6 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
@@ -9,144 +9,143 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] ".."
17 [email protected] ".." 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "1"
20 [email protected] "1" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "+"
22 [email protected] "+" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "1"
25 [email protected] "1" 25 [email protected] ";"
26 [email protected] ";" 26 [email protected] "\n "
27 [email protected] "\n " 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected]
30 [email protected] 30 [email protected] ".."
31 [email protected] ".." 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "z"
36 [email protected] "z" 36 [email protected] " "
37 [email protected] " " 37 [email protected] "="
38 [email protected] "=" 38 [email protected] " "
39 [email protected] " " 39 [email protected]
40 [email protected] 40 [email protected] "2"
41 [email protected] "2" 41 [email protected] ";"
42 [email protected] ";" 42 [email protected] "\n "
43 [email protected] "\n " 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected] "x"
50 [email protected] "x" 50 [email protected] " "
51 [email protected] " " 51 [email protected] "="
52 [email protected] "=" 52 [email protected] " "
53 [email protected] " " 53 [email protected]
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected] "false"
56 [email protected] "false" 56 [email protected] ".."
57 [email protected] ".." 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected] "1"
60 [email protected] "1" 60 [email protected] " "
61 [email protected] " " 61 [email protected] "=="
62 [email protected] "==" 62 [email protected] " "
63 [email protected] " " 63 [email protected]
64 [email protected] 64 [email protected] "1"
65 [email protected] "1" 65 [email protected] ";"
66 [email protected] ";" 66 [email protected] "\n "
67 [email protected] "\n " 67 [email protected]
68 [email protected] 68 [email protected] "let"
69 [email protected] "let" 69 [email protected] " "
70 [email protected] " " 70 [email protected]
71 [email protected] 71 [email protected]
72 [email protected] 72 [email protected] "x"
73 [email protected] "x" 73 [email protected] " "
74 [email protected] " " 74 [email protected] "="
75 [email protected] "=" 75 [email protected] " "
76 [email protected] " " 76 [email protected]
77 [email protected] 77 [email protected]
78 [email protected] 78 [email protected] "1"
79 [email protected] "1" 79 [email protected] ".."
80 [email protected] ".." 80 [email protected] ";"
81 [email protected] ";" 81 [email protected] "\n \n "
82 [email protected] "\n \n " 82 [email protected]
83 [email protected] 83 [email protected]
84 [email protected] 84 [email protected] "..="
85 [email protected] "..=" 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] 87 [email protected] "1"
88 [email protected] "1" 88 [email protected] " "
89 [email protected] " " 89 [email protected] "+"
90 [email protected] "+" 90 [email protected] " "
91 [email protected] " " 91 [email protected]
92 [email protected] 92 [email protected] "1"
93 [email protected] "1" 93 [email protected] ";"
94 [email protected] ";" 94 [email protected] "\n "
95 [email protected] "\n " 95 [email protected]
96 [email protected] 96 [email protected]
97 [email protected] 97 [email protected]
98 [email protected] 98 [email protected] "..="
99 [email protected] "..=" 99 [email protected]
100 [email protected] 100 [email protected]
101 [email protected] 101 [email protected]
102 [email protected] 102 [email protected]
103 [email protected] 103 [email protected] "z"
104 [email protected] "z" 104 [email protected] " "
105 [email protected] " " 105 [email protected] "="
106 [email protected] "=" 106 [email protected] " "
107 [email protected] " " 107 [email protected]
108 [email protected] 108 [email protected] "2"
109 [email protected] "2" 109 [email protected] ";"
110 [email protected] ";" 110 [email protected] "\n "
111 [email protected] "\n " 111 [email protected]
112 [email protected] 112 [email protected]
113 [email protected] 113 [email protected]
114 [email protected] 114 [email protected]
115 [email protected] 115 [email protected]
116 [email protected] 116 [email protected]
117 [email protected] 117 [email protected] "x"
118 [email protected] "x" 118 [email protected] " "
119 [email protected] " " 119 [email protected] "="
120 [email protected] "=" 120 [email protected] " "
121 [email protected] " " 121 [email protected]
122 [email protected] 122 [email protected]
123 [email protected] 123 [email protected] "false"
124 [email protected] "false" 124 [email protected] "..="
125 [email protected] "..=" 125 [email protected]
126 [email protected] 126 [email protected]
127 [email protected] 127 [email protected] "1"
128 [email protected] "1" 128 [email protected] " "
129 [email protected] " " 129 [email protected] "=="
130 [email protected] "==" 130 [email protected] " "
131 [email protected] " " 131 [email protected]
132 [email protected] 132 [email protected] "1"
133 [email protected] "1" 133 [email protected] ";"
134 [email protected] ";" 134 [email protected] "\n "
135 [email protected] "\n " 135 [email protected]
136 [email protected] 136 [email protected] "let"
137 [email protected] "let" 137 [email protected] " "
138 [email protected] " " 138 [email protected]
139 [email protected] 139 [email protected]
140 [email protected] 140 [email protected] "x"
141 [email protected] "x" 141 [email protected] " "
142 [email protected] " " 142 [email protected] "="
143 [email protected] "=" 143 [email protected] " "
144 [email protected] " " 144 [email protected]
145 [email protected] 145 [email protected]
146 [email protected] 146 [email protected] "1"
147 [email protected] "1" 147 [email protected] ".."
148 [email protected] ".." 148 [email protected] ";"
149 [email protected] ";" 149 [email protected] "\n"
150 [email protected] "\n" 150 [email protected] "}"
151 [email protected] "}"
152 [email protected] "\n" 151 [email protected] "\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 953930f6c..86c3b46c4 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
@@ -9,56 +9,55 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] "_"
19 [email protected] "_" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "="
21 [email protected] "=" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "\'c\'u32"
24 [email protected] "\'c\'u32" 24 [email protected] ";"
25 [email protected] ";" 25 [email protected] "\n "
26 [email protected] "\n " 26 [email protected]
27 [email protected] 27 [email protected] "let"
28 [email protected] "let" 28 [email protected] " "
29 [email protected] " " 29 [email protected]
30 [email protected] 30 [email protected] "_"
31 [email protected] "_" 31 [email protected] " "
32 [email protected] " " 32 [email protected] "="
33 [email protected] "=" 33 [email protected] " "
34 [email protected] " " 34 [email protected]
35 [email protected] 35 [email protected] "\"string\"invalid"
36 [email protected] "\"string\"invalid" 36 [email protected] ";"
37 [email protected] ";" 37 [email protected] "\n "
38 [email protected] "\n " 38 [email protected]
39 [email protected] 39 [email protected] "let"
40 [email protected] "let" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected] "_"
43 [email protected] "_" 43 [email protected] " "
44 [email protected] " " 44 [email protected] "="
45 [email protected] "=" 45 [email protected] " "
46 [email protected] " " 46 [email protected]
47 [email protected] 47 [email protected] "b\'b\'_suff"
48 [email protected] "b\'b\'_suff" 48 [email protected] ";"
49 [email protected] ";" 49 [email protected] "\n "
50 [email protected] "\n " 50 [email protected]
51 [email protected] 51 [email protected] "let"
52 [email protected] "let" 52 [email protected] " "
53 [email protected] " " 53 [email protected]
54 [email protected] 54 [email protected] "_"
55 [email protected] "_" 55 [email protected] " "
56 [email protected] " " 56 [email protected] "="
57 [email protected] "=" 57 [email protected] " "
58 [email protected] " " 58 [email protected]
59 [email protected] 59 [email protected] "b\"bs\"invalid"
60 [email protected] "b\"bs\"invalid" 60 [email protected] ";"
61 [email protected] ";" 61 [email protected] "\n"
62 [email protected] "\n" 62 [email protected] "}"
63 [email protected] "}"
64 [email protected] "\n" 63 [email protected] "\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 68eb16bbd..8d76c4e0b 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
@@ -85,7 +85,6 @@ [email protected]
85 [email protected] "," 85 [email protected] ","
86 [email protected] "\n" 86 [email protected] "\n"
87 [email protected] 87 [email protected]
88 [email protected] 88 [email protected] "{"
89 [email protected] "{" 89 [email protected] "}"
90 [email protected] "}"
91 [email protected] "\n" 90 [email protected] "\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 3977faa60..13b730ded 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
@@ -11,210 +11,205 @@ [email protected]
11 [email protected] ")" 11 [email protected] ")"
12 [email protected] " " 12 [email protected] " "
13 [email protected] 13 [email protected]
14 [email protected] 14 [email protected] "{"
15 [email protected] "{" 15 [email protected] "\n "
16 [email protected] "\n " 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "\'empty_block"
20 [email protected] "\'empty_block" 20 [email protected] ":"
21 [email protected] ":" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] "{" 24 [email protected] "}"
25 [email protected] "}" 25 [email protected] "\n\n "
26 [email protected] "\n\n " 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected]
29 [email protected] 29 [email protected] "\'block"
30 [email protected] "\'block" 30 [email protected] ":"
31 [email protected] ":" 31 [email protected] " "
32 [email protected] " " 32 [email protected]
33 [email protected] 33 [email protected] "{"
34 [email protected] "{" 34 [email protected] "\n "
35 [email protected] "\n " 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "do_thing"
42 [email protected] "do_thing" 42 [email protected]
43 [email protected] 43 [email protected] "("
44 [email protected] "(" 44 [email protected] ")"
45 [email protected] ")" 45 [email protected] ";"
46 [email protected] ";" 46 [email protected] "\n "
47 [email protected] "\n " 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected] "if"
50 [email protected] "if" 50 [email protected] " "
51 [email protected] " " 51 [email protected]
52 [email protected] 52 [email protected]
53 [email protected] 53 [email protected]
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected]
56 [email protected] 56 [email protected]
57 [email protected] 57 [email protected] "condition_not_met"
58 [email protected] "condition_not_met" 58 [email protected]
59 [email protected] 59 [email protected] "("
60 [email protected] "(" 60 [email protected] ")"
61 [email protected] ")" 61 [email protected] " "
62 [email protected] " " 62 [email protected]
63 [email protected] 63 [email protected] "{"
64 [email protected] 64 [email protected] "\n "
65 [email protected] "{" 65 [email protected]
66 [email protected] "\n " 66 [email protected]
67 [email protected] 67 [email protected] "break"
68 [email protected] 68 [email protected] " "
69 [email protected] "break" 69 [email protected] "\'block"
70 [email protected] " " 70 [email protected] ";"
71 [email protected] "\'block" 71 [email protected] "\n "
72 [email protected] ";" 72 [email protected] "}"
73 [email protected] "\n " 73 [email protected] "\n "
74 [email protected] "}" 74 [email protected]
75 [email protected] "\n " 75 [email protected]
76 [email protected] 76 [email protected]
77 [email protected] 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected]
80 [email protected] 80 [email protected] "do_next_thing"
81 [email protected] 81 [email protected]
82 [email protected] "do_next_thing" 82 [email protected] "("
83 [email protected] 83 [email protected] ")"
84 [email protected] "(" 84 [email protected] ";"
85 [email protected] ")" 85 [email protected] "\n "
86 [email protected] ";" 86 [email protected]
87 [email protected] "\n " 87 [email protected]
88 [email protected] 88 [email protected] "if"
89 [email protected] 89 [email protected] " "
90 [email protected] "if" 90 [email protected]
91 [email protected] " " 91 [email protected]
92 [email protected] 92 [email protected]
93 [email protected] 93 [email protected]
94 [email protected] 94 [email protected]
95 [email protected] 95 [email protected]
96 [email protected] 96 [email protected] "condition_not_met"
97 [email protected] 97 [email protected]
98 [email protected] "condition_not_met" 98 [email protected] "("
99 [email protected] 99 [email protected] ")"
100 [email protected] "(" 100 [email protected] " "
101 [email protected] ")" 101 [email protected]
102 [email protected] " " 102 [email protected] "{"
103 [email protected] 103 [email protected] "\n "
104 [email protected] 104 [email protected]
105 [email protected] "{" 105 [email protected]
106 [email protected] "\n " 106 [email protected] "break"
107 [email protected] 107 [email protected] " "
108 [email protected] 108 [email protected] "\'block"
109 [email protected] "break" 109 [email protected] ";"
110 [email protected] " " 110 [email protected] "\n "
111 [email protected] "\'block" 111 [email protected] "}"
112 [email protected] ";" 112 [email protected] "\n "
113 [email protected] "\n " 113 [email protected]
114 [email protected] "}" 114 [email protected]
115 [email protected] "\n " 115 [email protected]
116 [email protected] 116 [email protected]
117 [email protected] 117 [email protected]
118 [email protected] 118 [email protected]
119 [email protected] 119 [email protected] "do_last_thing"
120 [email protected] 120 [email protected]
121 [email protected] 121 [email protected] "("
122 [email protected] "do_last_thing" 122 [email protected] ")"
123 [email protected] 123 [email protected] ";"
124 [email protected] "(" 124 [email protected] "\n "
125 [email protected] ")" 125 [email protected] "}"
126 [email protected] ";" 126 [email protected] "\n\n "
127 [email protected] "\n " 127 [email protected]
128 [email protected] "}" 128 [email protected] "let"
129 [email protected] "\n\n " 129 [email protected] " "
130 [email protected] 130 [email protected]
131 [email protected] "let" 131 [email protected]
132 [email protected] " " 132 [email protected] "result"
133 [email protected] 133 [email protected] " "
134 [email protected] 134 [email protected] "="
135 [email protected] "result" 135 [email protected] " "
136 [email protected] " " 136 [email protected]
137 [email protected] "=" 137 [email protected]
138 [email protected] " " 138 [email protected] "\'block"
139 [email protected] 139 [email protected] ":"
140 [email protected] 140 [email protected] " "
141 [email protected] "\'block" 141 [email protected]
142 [email protected] ":" 142 [email protected] "{"
143 [email protected] " " 143 [email protected] "\n "
144 [email protected] 144 [email protected]
145 [email protected] "{" 145 [email protected]
146 [email protected] "\n " 146 [email protected] "if"
147 [email protected] 147 [email protected] " "
148 [email protected] 148 [email protected]
149 [email protected] "if" 149 [email protected]
150 [email protected] " " 150 [email protected]
151 [email protected] 151 [email protected]
152 [email protected] 152 [email protected]
153 [email protected] 153 [email protected]
154 [email protected] 154 [email protected] "foo"
155 [email protected] 155 [email protected]
156 [email protected] 156 [email protected] "("
157 [email protected] "foo" 157 [email protected] ")"
158 [email protected] 158 [email protected] " "
159 [email protected] "(" 159 [email protected]
160 [email protected] ")" 160 [email protected] "{"
161 [email protected] " " 161 [email protected] "\n "
162 [email protected] 162 [email protected] "// comment"
163 [email protected] 163 [email protected] "\n "
164 [email protected] "{" 164 [email protected]
165 [email protected] "\n " 165 [email protected]
166 [email protected] "// comment" 166 [email protected] "break"
167 [email protected] "\n " 167 [email protected] " "
168 [email protected] 168 [email protected] "\'block"
169 [email protected] 169 [email protected] " "
170 [email protected] "break" 170 [email protected]
171 [email protected] " " 171 [email protected] "1"
172 [email protected] "\'block" 172 [email protected] ";"
173 [email protected] " " 173 [email protected] "\n "
174 [email protected] 174 [email protected] "}"
175 [email protected] "1" 175 [email protected] "\n "
176 [email protected] ";" 176 [email protected]
177 [email protected] "\n " 177 [email protected]
178 [email protected] "}" 178 [email protected] "if"
179 [email protected] "\n " 179 [email protected] " "
180 [email protected] 180 [email protected]
181 [email protected] 181 [email protected]
182 [email protected] "if" 182 [email protected]
183 [email protected] " " 183 [email protected]
184 [email protected] 184 [email protected]
185 [email protected] 185 [email protected]
186 [email protected] 186 [email protected] "bar"
187 [email protected] 187 [email protected]
188 [email protected] 188 [email protected] "("
189 [email protected] 189 [email protected] ")"
190 [email protected] "bar" 190 [email protected] " "
191 [email protected] 191 [email protected]
192 [email protected] "(" 192 [email protected] "{"
193 [email protected] ")" 193 [email protected] "\n "
194 [email protected] " " 194 [email protected] "/* comment */"
195 [email protected] 195 [email protected] "\n "
196 [email protected] 196 [email protected]
197 [email protected] "{" 197 [email protected]
198 [email protected] "\n " 198 [email protected] "break"
199 [email protected] "/* comment */" 199 [email protected] " "
200 [email protected] "\n " 200 [email protected] "\'block"
201 [email protected] 201 [email protected] " "
202 [email protected] 202 [email protected]
203 [email protected] "break" 203 [email protected] "2"
204 [email protected] " " 204 [email protected] ";"
205 [email protected] "\'block" 205 [email protected] "\n "
206 [email protected] " " 206 [email protected] "}"
207 [email protected] 207 [email protected] "\n "
208 [email protected] "2" 208 [email protected]
209 [email protected] ";" 209 [email protected] "3"
210 [email protected] "\n " 210 [email protected] "\n "
211 [email protected] "}" 211 [email protected] "}"
212 [email protected] "\n " 212 [email protected] ";"
213 [email protected] 213 [email protected] "\n"
214 [email protected] "3" 214 [email protected] "}"
215 [email protected] "\n "
216 [email protected] "}"
217 [email protected] ";"
218 [email protected] "\n"
219 [email protected] "}"
220 [email protected] "\n" 215 [email protected] "\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 3b9e8c71c..21874ae3a 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
@@ -9,34 +9,33 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "make_query"
21 [email protected] "make_query" 21 [email protected]
22 [email protected] 22 [email protected] "("
23 [email protected] "(" 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected]
27 [email protected] 27 [email protected]
28 [email protected] 28 [email protected] "crate"
29 [email protected] "crate" 29 [email protected] "::"
30 [email protected] "::" 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected] "module_map"
33 [email protected] "module_map" 33 [email protected] "::"
34 [email protected] "::" 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected] "module_tree"
37 [email protected] "module_tree" 37 [email protected] ")"
38 [email protected] ")" 38 [email protected] ";"
39 [email protected] ";" 39 [email protected] "\n"
40 [email protected] "\n" 40 [email protected] "}"
41 [email protected] "}"
42 [email protected] "\n" 41 [email protected] "\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 9af689635..eb59d6e17 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
@@ -139,33 +139,32 @@ [email protected]
139 [email protected] "bool" 139 [email protected] "bool"
140 [email protected] " " 140 [email protected] " "
141 [email protected] 141 [email protected]
142 [email protected] 142 [email protected] "{"
143 [email protected] "{" 143 [email protected] " "
144 [email protected] " " 144 [email protected]
145 [email protected] 145 [email protected] "let"
146 [email protected] "let" 146 [email protected] " "
147 [email protected] " " 147 [email protected]
148 [email protected] 148 [email protected]
149 [email protected] 149 [email protected] "_x"
150 [email protected] "_x" 150 [email protected] ":"
151 [email protected] ":" 151 [email protected] " "
152 [email protected] " " 152 [email protected]
153 [email protected] 153 [email protected]
154 [email protected] 154 [email protected]
155 [email protected] 155 [email protected]
156 [email protected] 156 [email protected] "bool"
157 [email protected] "bool" 157 [email protected] " "
158 [email protected] " " 158 [email protected] "="
159 [email protected] "=" 159 [email protected] " "
160 [email protected] " " 160 [email protected]
161 [email protected] 161 [email protected] "return"
162 [email protected] "return" 162 [email protected] " "
163 [email protected] " " 163 [email protected]
164 [email protected] 164 [email protected] "true"
165 [email protected] "true" 165 [email protected] ";"
166 [email protected] ";" 166 [email protected] " "
167 [email protected] " " 167 [email protected] "}"
168 [email protected] "}"
169 [email protected] "\n\n" 168 [email protected] "\n\n"
170 [email protected] 169 [email protected]
171 [email protected] "fn" 170 [email protected] "fn"
@@ -177,48 +176,46 @@ [email protected]
177 [email protected] ")" 176 [email protected] ")"
178 [email protected] " " 177 [email protected] " "
179 [email protected] 178 [email protected]
180 [email protected] 179 [email protected] "{"
181 [email protected] "{" 180 [email protected] "\n "
182 [email protected] "\n " 181 [email protected]
183 [email protected] 182 [email protected] "fn"
184 [email protected] "fn" 183 [email protected] " "
185 [email protected] " " 184 [email protected]
186 [email protected] 185 [email protected] "f"
187 [email protected] "f" 186 [email protected]
188 [email protected] 187 [email protected] "("
189 [email protected] "(" 188 [email protected]
190 [email protected] 189 [email protected]
191 [email protected] 190 [email protected]
192 [email protected] 191 [email protected] "_x"
193 [email protected] "_x" 192 [email protected] ":"
194 [email protected] ":" 193 [email protected] " "
195 [email protected] " " 194 [email protected]
196 [email protected] 195 [email protected] "("
197 [email protected] "(" 196 [email protected] ")"
198 [email protected] ")" 197 [email protected] ")"
199 [email protected] ")" 198 [email protected] " "
200 [email protected] " " 199 [email protected]
201 [email protected] 200 [email protected] "{"
202 [email protected] 201 [email protected] " "
203 [email protected] "{" 202 [email protected] "}"
204 [email protected] " " 203 [email protected] "\n "
205 [email protected] "}" 204 [email protected]
206 [email protected] "\n " 205 [email protected]
207 [email protected] 206 [email protected]
208 [email protected] 207 [email protected]
209 [email protected] 208 [email protected]
210 [email protected] 209 [email protected]
211 [email protected] 210 [email protected] "f"
212 [email protected] 211 [email protected]
213 [email protected] "f" 212 [email protected] "("
214 [email protected] 213 [email protected]
215 [email protected] "(" 214 [email protected] "return"
216 [email protected] 215 [email protected] ")"
217 [email protected] "return" 216 [email protected] ";"
218 [email protected] ")" 217 [email protected] "\n"
219 [email protected] ";" 218 [email protected] "}"
220 [email protected] "\n"
221 [email protected] "}"
222 [email protected] "\n\n" 219 [email protected] "\n\n"
223 [email protected] 220 [email protected]
224 [email protected] "fn" 221 [email protected] "fn"
@@ -230,189 +227,185 @@ [email protected]
230 [email protected] ")" 227 [email protected] ")"
231 [email protected] " " 228 [email protected] " "
232 [email protected] 229 [email protected]
233 [email protected] 230 [email protected] "{"
234 [email protected] "{" 231 [email protected] "\n "
235 [email protected] "\n " 232 [email protected]
236 [email protected] 233 [email protected] "fn"
237 [email protected] "fn" 234 [email protected] " "
238 [email protected] " " 235 [email protected]
239 [email protected] 236 [email protected] "the"
240 [email protected] "the" 237 [email protected]
241 [email protected] 238 [email protected] "("
242 [email protected] "(" 239 [email protected]
243 [email protected] 240 [email protected]
244 [email protected] 241 [email protected]
245 [email protected] 242 [email protected] "x"
246 [email protected] "x" 243 [email protected] ":"
247 [email protected] ":" 244 [email protected] " "
248 [email protected] " " 245 [email protected]
249 [email protected] 246 [email protected] "&"
250 [email protected] "&" 247 [email protected]
251 [email protected] 248 [email protected]
252 [email protected] 249 [email protected]
253 [email protected] 250 [email protected]
254 [email protected] 251 [email protected] "Cell"
255 [email protected] "Cell" 252 [email protected]
256 [email protected] 253 [email protected] "<"
257 [email protected] "<" 254 [email protected]
258 [email protected] 255 [email protected]
259 [email protected] 256 [email protected]
260 [email protected] 257 [email protected]
261 [email protected] 258 [email protected]
262 [email protected] 259 [email protected] "bool"
263 [email protected] "bool" 260 [email protected] ">"
264 [email protected] ">" 261 [email protected] ")"
265 [email protected] ")" 262 [email protected] " "
266 [email protected] " " 263 [email protected]
267 [email protected] 264 [email protected] "{"
268 [email protected] 265 [email protected] "\n "
269 [email protected] "{" 266 [email protected]
270 [email protected] "\n " 267 [email protected]
271 [email protected] 268 [email protected] "return"
272 [email protected] 269 [email protected] " "
273 [email protected] "return" 270 [email protected]
274 [email protected] " " 271 [email protected] "while"
275 [email protected] 272 [email protected] " "
276 [email protected] "while" 273 [email protected]
277 [email protected] " " 274 [email protected]
278 [email protected] 275 [email protected] "!"
279 [email protected] 276 [email protected]
280 [email protected] "!" 277 [email protected]
281 [email protected] 278 [email protected]
282 [email protected] 279 [email protected]
283 [email protected] 280 [email protected]
284 [email protected] 281 [email protected] "x"
285 [email protected] 282 [email protected] "."
286 [email protected] "x" 283 [email protected]
287 [email protected] "." 284 [email protected] "get"
288 [email protected] 285 [email protected]
289 [email protected] "get" 286 [email protected] "("
290 [email protected] 287 [email protected] ")"
291 [email protected] "(" 288 [email protected] " "
292 [email protected] ")" 289 [email protected]
293 [email protected] " " 290 [email protected] "{"
294 [email protected] 291 [email protected] " "
295 [email protected] 292 [email protected]
296 [email protected] "{" 293 [email protected]
297 [email protected] " " 294 [email protected]
298 [email protected] 295 [email protected]
299 [email protected] 296 [email protected]
300 [email protected] 297 [email protected]
301 [email protected] 298 [email protected] "x"
302 [email protected] 299 [email protected] "."
303 [email protected] 300 [email protected]
304 [email protected] "x" 301 [email protected] "set"
305 [email protected] "." 302 [email protected]
306 [email protected] 303 [email protected] "("
307 [email protected] "set" 304 [email protected]
308 [email protected] 305 [email protected] "true"
309 [email protected] "(" 306 [email protected] ")"
310 [email protected] 307 [email protected] ";"
311 [email protected] "true" 308 [email protected] " "
312 [email protected] ")" 309 [email protected] "}"
313 [email protected] ";" 310 [email protected] ";"
314 [email protected] " " 311 [email protected] "\n "
315 [email protected] "}" 312 [email protected] "}"
316 [email protected] ";" 313 [email protected] "\n "
317 [email protected] "\n " 314 [email protected]
318 [email protected] "}" 315 [email protected] "let"
319 [email protected] "\n " 316 [email protected] " "
320 [email protected] 317 [email protected]
321 [email protected] "let" 318 [email protected]
322 [email protected] " " 319 [email protected] "i"
323 [email protected] 320 [email protected] " "
324 [email protected] 321 [email protected] "="
325 [email protected] "i" 322 [email protected] " "
326 [email protected] " " 323 [email protected]
327 [email protected] "=" 324 [email protected] "&"
328 [email protected] " " 325 [email protected]
329 [email protected] 326 [email protected]
330 [email protected] "&" 327 [email protected]
331 [email protected] 328 [email protected]
332 [email protected] 329 [email protected]
333 [email protected] 330 [email protected]
334 [email protected] 331 [email protected] "Cell"
335 [email protected] 332 [email protected] "::"
336 [email protected] 333 [email protected]
337 [email protected] "Cell" 334 [email protected]
338 [email protected] "::" 335 [email protected] "new"
339 [email protected] 336 [email protected]
340 [email protected] 337 [email protected] "("
341 [email protected] "new" 338 [email protected]
342 [email protected] 339 [email protected] "false"
343 [email protected] "(" 340 [email protected] ")"
344 [email protected] 341 [email protected] ";"
345 [email protected] "false" 342 [email protected] "\n "
346 [email protected] ")" 343 [email protected]
347 [email protected] ";" 344 [email protected] "let"
348 [email protected] "\n " 345 [email protected] " "
349 [email protected] 346 [email protected]
350 [email protected] "let" 347 [email protected]
351 [email protected] " " 348 [email protected] "dont"
352 [email protected] 349 [email protected] " "
353 [email protected] 350 [email protected] "="
354 [email protected] "dont" 351 [email protected] " "
355 [email protected] " " 352 [email protected]
356 [email protected] "=" 353 [email protected] "{"
357 [email protected] " " 354 [email protected]
358 [email protected] 355 [email protected]
359 [email protected] 356 [email protected] "|"
360 [email protected] "{" 357 [email protected] "|"
361 [email protected] 358 [email protected]
362 [email protected] 359 [email protected]
363 [email protected] "|" 360 [email protected]
364 [email protected] "|" 361 [email protected]
365 [email protected] 362 [email protected]
366 [email protected] 363 [email protected] "the"
367 [email protected] 364 [email protected]
368 [email protected] 365 [email protected] "("
369 [email protected] 366 [email protected]
370 [email protected] "the" 367 [email protected]
371 [email protected] 368 [email protected]
372 [email protected] "(" 369 [email protected]
373 [email protected] 370 [email protected] "i"
374 [email protected] 371 [email protected] ")"
375 [email protected] 372 [email protected] "}"
376 [email protected] 373 [email protected] ";"
377 [email protected] "i" 374 [email protected] "\n "
378 [email protected] ")" 375 [email protected]
379 [email protected] "}" 376 [email protected]
380 [email protected] ";" 377 [email protected]
381 [email protected] "\n " 378 [email protected]
382 [email protected] 379 [email protected]
383 [email protected] 380 [email protected]
384 [email protected] 381 [email protected] "dont"
385 [email protected] 382 [email protected]
386 [email protected] 383 [email protected] "("
387 [email protected] 384 [email protected] ")"
388 [email protected] "dont" 385 [email protected] ";"
389 [email protected] 386 [email protected] "\n "
390 [email protected] "(" 387 [email protected]
391 [email protected] ")" 388 [email protected]
392 [email protected] ";" 389 [email protected]
393 [email protected] "\n " 390 [email protected]
394 [email protected] 391 [email protected]
395 [email protected] 392 [email protected] "assert"
396 [email protected] 393 [email protected] "!"
397 [email protected] 394 [email protected]
398 [email protected] 395 [email protected] "("
399 [email protected] "assert" 396 [email protected]
400 [email protected] "!" 397 [email protected] "("
401 [email protected] 398 [email protected] "i"
402 [email protected] "(" 399 [email protected] "."
403 [email protected] 400 [email protected] "get"
404 [email protected] "(" 401 [email protected]
405 [email protected] "i" 402 [email protected] "("
406 [email protected] "." 403 [email protected] ")"
407 [email protected] "get" 404 [email protected] ")"
408 [email protected] 405 [email protected] ")"
409 [email protected] "(" 406 [email protected] ";"
410 [email protected] ")" 407 [email protected] "\n"
411 [email protected] ")" 408 [email protected] "}"
412 [email protected] ")"
413 [email protected] ";"
414 [email protected] "\n"
415 [email protected] "}"
416 [email protected] "\n\n" 409 [email protected] "\n\n"
417 [email protected] 410 [email protected]
418 [email protected] "fn" 411 [email protected] "fn"
@@ -424,170 +417,160 @@ [email protected]
424 [email protected] ")" 417 [email protected] ")"
425 [email protected] " " 418 [email protected] " "
426 [email protected] 419 [email protected]
427 [email protected] 420 [email protected] "{"
428 [email protected] "{" 421 [email protected] "\n "
429 [email protected] "\n " 422 [email protected]
430 [email protected] 423 [email protected] "loop"
431 [email protected] "loop" 424 [email protected] " "
432 [email protected] " " 425 [email protected]
433 [email protected] 426 [email protected] "{"
434 [email protected] 427 [email protected] "\n "
435 [email protected] "{" 428 [email protected]
436 [email protected] "\n " 429 [email protected]
437 [email protected] 430 [email protected] "while"
438 [email protected] 431 [email protected] " "
439 [email protected] "while" 432 [email protected]
440 [email protected] " " 433 [email protected]
441 [email protected] 434 [email protected] "("
442 [email protected] 435 [email protected]
443 [email protected] "(" 436 [email protected] "return"
444 [email protected] 437 [email protected] ")"
445 [email protected] "return" 438 [email protected] " "
446 [email protected] ")" 439 [email protected]
447 [email protected] " " 440 [email protected] "{"
448 [email protected] 441 [email protected] "\n "
449 [email protected] 442 [email protected]
450 [email protected] "{" 443 [email protected] "if"
451 [email protected] "\n " 444 [email protected] " "
452 [email protected] 445 [email protected]
453 [email protected] "if" 446 [email protected]
454 [email protected] " " 447 [email protected] "("
455 [email protected] 448 [email protected]
456 [email protected] 449 [email protected] "return"
457 [email protected] "(" 450 [email protected] ")"
458 [email protected] 451 [email protected] " "
459 [email protected] "return" 452 [email protected]
460 [email protected] ")" 453 [email protected] "{"
461 [email protected] " " 454 [email protected] "\n "
462 [email protected] 455 [email protected]
463 [email protected] 456 [email protected]
464 [email protected] "{" 457 [email protected] "match"
465 [email protected] "\n " 458 [email protected] " "
466 [email protected] 459 [email protected]
467 [email protected] 460 [email protected] "("
468 [email protected] "match" 461 [email protected]
469 [email protected] " " 462 [email protected] "return"
470 [email protected] 463 [email protected] ")"
471 [email protected] "(" 464 [email protected] " "
472 [email protected] 465 [email protected]
473 [email protected] "return" 466 [email protected] "{"
474 [email protected] ")" 467 [email protected] "\n "
475 [email protected] " " 468 [email protected]
476 [email protected] 469 [email protected]
477 [email protected] "{" 470 [email protected]
478 [email protected] "\n " 471 [email protected] "1"
479 [email protected] 472 [email protected] " "
480 [email protected] 473 [email protected] "=>"
481 [email protected] 474 [email protected] " "
482 [email protected] "1" 475 [email protected]
483 [email protected] " " 476 [email protected] "{"
484 [email protected] "=>" 477 [email protected] "\n ..."
485 [email protected] " " 478 [email protected]
486 [email protected] 479 [email protected] "if"
487 [email protected] 480 [email protected] " "
488 [email protected] "{" 481 [email protected]
489 [email protected] "\n ..." 482 [email protected]
490 [email protected] 483 [email protected] "("
491 [email protected] "if" 484 [email protected]
492 [email protected] " " 485 [email protected] "return"
493 [email protected] 486 [email protected] ")"
494 [email protected] 487 [email protected] " "
495 [email protected] "(" 488 [email protected]
496 [email protected] 489 [email protected] "{"
497 [email protected] "return" 490 [email protected] "\n ..."
498 [email protected] ")" 491 [email protected]
499 [email protected] " " 492 [email protected] "return"
500 [email protected] 493 [email protected] "\n ..."
501 [email protected] 494 [email protected] "}"
502 [email protected] "{" 495 [email protected] " "
503 [email protected] "\n ..." 496 [email protected] "else"
504 [email protected] 497 [email protected] " "
505 [email protected] "return" 498 [email protected]
506 [email protected] "\n ..." 499 [email protected] "{"
507 [email protected] "}" 500 [email protected] "\n ..."
508 [email protected] " " 501 [email protected]
509 [email protected] "else" 502 [email protected] "return"
510 [email protected] " " 503 [email protected] "\n ..."
511 [email protected] 504 [email protected] "}"
512 [email protected] 505 [email protected] "\n "
513 [email protected] "{" 506 [email protected] "}"
514 [email protected] "\n ..." 507 [email protected] "\n "
515 [email protected] 508 [email protected]
516 [email protected] "return" 509 [email protected]
517 [email protected] "\n ..." 510 [email protected] "_"
518 [email protected] "}" 511 [email protected] " "
519 [email protected] "\n " 512 [email protected] "=>"
520 [email protected] "}" 513 [email protected] " "
521 [email protected] "\n " 514 [email protected]
522 [email protected] 515 [email protected] "{"
523 [email protected] 516 [email protected] " "
524 [email protected] "_" 517 [email protected]
525 [email protected] " " 518 [email protected] "return"
526 [email protected] "=>" 519 [email protected] " "
527 [email protected] " " 520 [email protected] "}"
528 [email protected] 521 [email protected] "\n "
529 [email protected] 522 [email protected] "}"
530 [email protected] "{" 523 [email protected] ";"
531 [email protected] " " 524 [email protected] "\n "
532 [email protected] 525 [email protected] "}"
533 [email protected] "return" 526 [email protected] " "
534 [email protected] " " 527 [email protected] "else"
535 [email protected] "}" 528 [email protected] " "
536 [email protected] "\n " 529 [email protected]
537 [email protected] "}" 530 [email protected] "if"
538 [email protected] ";" 531 [email protected] " "
539 [email protected] "\n " 532 [email protected]
540 [email protected] "}" 533 [email protected]
541 [email protected] " " 534 [email protected] "("
542 [email protected] "else" 535 [email protected]
543 [email protected] " " 536 [email protected] "return"
544 [email protected] 537 [email protected] ")"
545 [email protected] "if" 538 [email protected] " "
546 [email protected] " " 539 [email protected]
547 [email protected] 540 [email protected] "{"
548 [email protected] 541 [email protected] "\n "
549 [email protected] "(" 542 [email protected]
550 [email protected] 543 [email protected]
551 [email protected] "return" 544 [email protected] "return"
552 [email protected] ")" 545 [email protected] ";"
553 [email protected] " " 546 [email protected] "\n "
554 [email protected] 547 [email protected] "}"
555 [email protected] 548 [email protected] "\n "
556 [email protected] "{" 549 [email protected] "}"
557 [email protected] "\n " 550 [email protected] "\n "
558 [email protected] 551 [email protected]
559 [email protected] 552 [email protected] "if"
560 [email protected] "return" 553 [email protected] " "
561 [email protected] ";" 554 [email protected]
562 [email protected] "\n " 555 [email protected]
563 [email protected] "}" 556 [email protected] "("
564 [email protected] "\n " 557 [email protected]
565 [email protected] "}" 558 [email protected] "return"
566 [email protected] "\n " 559 [email protected] ")"
567 [email protected] 560 [email protected] " "
568 [email protected] "if" 561 [email protected]
569 [email protected] " " 562 [email protected] "{"
570 [email protected] 563 [email protected] " "
571 [email protected] 564 [email protected]
572 [email protected] "(" 565 [email protected]
573 [email protected] 566 [email protected] "break"
574 [email protected] "return" 567 [email protected] ";"
575 [email protected] ")" 568 [email protected] " "
576 [email protected] " " 569 [email protected] "}"
577 [email protected] 570 [email protected] "\n "
578 [email protected] 571 [email protected] "}"
579 [email protected] "{" 572 [email protected] "\n"
580 [email protected] " " 573 [email protected] "}"
581 [email protected]
582 [email protected]
583 [email protected] "break"
584 [email protected] ";"
585 [email protected] " "
586 [email protected] "}"
587 [email protected] "\n "
588 [email protected] "}"
589 [email protected] "\n"
590 [email protected] "}"
591 [email protected] "\n\n" 574 [email protected] "\n\n"
592 [email protected] 575 [email protected]
593 [email protected] "fn" 576 [email protected] "fn"
@@ -599,233 +582,232 @@ [email protected]
599 [email protected] ")" 582 [email protected] ")"
600 [email protected] " " 583 [email protected] " "
601 [email protected] 584 [email protected]
602 [email protected] 585 [email protected] "{"
603 [email protected] "{" 586 [email protected] "\n "
604 [email protected] "\n " 587 [email protected]
605 [email protected] 588 [email protected] "let"
606 [email protected] "let" 589 [email protected] " "
607 [email protected] " " 590 [email protected]
608 [email protected] 591 [email protected] "mut"
609 [email protected] "mut" 592 [email protected] " "
610 [email protected] " " 593 [email protected]
611 [email protected] 594 [email protected] "_x"
612 [email protected] "_x" 595 [email protected] ":"
613 [email protected] ":" 596 [email protected] " "
614 [email protected] " " 597 [email protected]
615 [email protected] 598 [email protected]
616 [email protected] 599 [email protected]
617 [email protected] 600 [email protected]
618 [email protected] 601 [email protected] "isize"
619 [email protected] "isize" 602 [email protected] ";"
620 [email protected] ";" 603 [email protected] "\n "
621 [email protected] "\n " 604 [email protected]
622 [email protected] 605 [email protected] "let"
623 [email protected] "let" 606 [email protected] " "
624 [email protected] " " 607 [email protected]
625 [email protected] 608 [email protected] "mut"
626 [email protected] "mut" 609 [email protected] " "
627 [email protected] " " 610 [email protected]
628 [email protected] 611 [email protected] "_y"
629 [email protected] "_y" 612 [email protected] " "
630 [email protected] " " 613 [email protected] "="
631 [email protected] "=" 614 [email protected] " "
632 [email protected] " " 615 [email protected]
633 [email protected] 616 [email protected]
634 [email protected] 617 [email protected] "("
635 [email protected] "(" 618 [email protected]
636 [email protected] 619 [email protected]
637 [email protected] 620 [email protected]
638 [email protected] 621 [email protected]
639 [email protected] 622 [email protected]
640 [email protected] 623 [email protected] "_x"
641 [email protected] "_x" 624 [email protected] " "
642 [email protected] " " 625 [email protected] "="
643 [email protected] "=" 626 [email protected] " "
644 [email protected] " " 627 [email protected]
645 [email protected] 628 [email protected] "0"
646 [email protected] "0" 629 [email protected] ")"
647 [email protected] ")" 630 [email protected] " "
648 [email protected] " " 631 [email protected] "=="
649 [email protected] "==" 632 [email protected] " "
650 [email protected] " " 633 [email protected]
651 [email protected] 634 [email protected] "("
652 [email protected] "(" 635 [email protected]
653 [email protected] 636 [email protected]
654 [email protected] 637 [email protected]
655 [email protected] 638 [email protected]
656 [email protected] 639 [email protected]
657 [email protected] 640 [email protected] "_x"
658 [email protected] "_x" 641 [email protected] " "
659 [email protected] " " 642 [email protected] "="
660 [email protected] "=" 643 [email protected] " "
661 [email protected] " " 644 [email protected]
662 [email protected] 645 [email protected] "0"
663 [email protected] "0" 646 [email protected] ")"
664 [email protected] ")" 647 [email protected] ";"
665 [email protected] ";" 648 [email protected] "\n "
666 [email protected] "\n " 649 [email protected]
667 [email protected] 650 [email protected] "let"
668 [email protected] "let" 651 [email protected] " "
669 [email protected] " " 652 [email protected]
670 [email protected] 653 [email protected] "mut"
671 [email protected] "mut" 654 [email protected] " "
672 [email protected] " " 655 [email protected]
673 [email protected] 656 [email protected] "_z"
674 [email protected] "_z" 657 [email protected] " "
675 [email protected] " " 658 [email protected] "="
676 [email protected] "=" 659 [email protected] " "
677 [email protected] " " 660 [email protected]
678 [email protected] 661 [email protected]
679 [email protected] 662 [email protected] "("
680 [email protected] "(" 663 [email protected]
681 [email protected] 664 [email protected]
682 [email protected] 665 [email protected]
683 [email protected] 666 [email protected]
684 [email protected] 667 [email protected]
685 [email protected] 668 [email protected] "_x"
686 [email protected] "_x" 669 [email protected] " "
687 [email protected] " " 670 [email protected] "="
688 [email protected] "=" 671 [email protected] " "
689 [email protected] " " 672 [email protected]
690 [email protected] 673 [email protected] "0"
691 [email protected] "0" 674 [email protected] ")"
692 [email protected] ")" 675 [email protected] " "
693 [email protected] " " 676 [email protected] "<"
694 [email protected] "<" 677 [email protected] " "
695 [email protected] " " 678 [email protected]
696 [email protected] 679 [email protected] "("
697 [email protected] "(" 680 [email protected]
698 [email protected] 681 [email protected]
699 [email protected] 682 [email protected]
700 [email protected] 683 [email protected]
701 [email protected] 684 [email protected]
702 [email protected] 685 [email protected] "_x"
703 [email protected] "_x" 686 [email protected] " "
704 [email protected] " " 687 [email protected] "="
705 [email protected] "=" 688 [email protected] " "
706 [email protected] " " 689 [email protected]
707 [email protected] 690 [email protected] "0"
708 [email protected] "0" 691 [email protected] ")"
709 [email protected] ")" 692 [email protected] ";"
710 [email protected] ";" 693 [email protected] "\n "
711 [email protected] "\n " 694 [email protected]
712 [email protected] 695 [email protected] "let"
713 [email protected] "let" 696 [email protected] " "
714 [email protected] " " 697 [email protected]
715 [email protected] 698 [email protected]
716 [email protected] 699 [email protected] "_a"
717 [email protected] "_a" 700 [email protected] " "
718 [email protected] " " 701 [email protected] "="
719 [email protected] "=" 702 [email protected] " "
720 [email protected] " " 703 [email protected]
721 [email protected] 704 [email protected]
722 [email protected] 705 [email protected] "("
723 [email protected] "(" 706 [email protected]
724 [email protected] 707 [email protected]
725 [email protected] 708 [email protected]
726 [email protected] 709 [email protected]
727 [email protected] 710 [email protected]
728 [email protected] 711 [email protected] "_x"
729 [email protected] "_x" 712 [email protected] " "
730 [email protected] " " 713 [email protected] "+="
731 [email protected] "+=" 714 [email protected] " "
732 [email protected] " " 715 [email protected]
733 [email protected] 716 [email protected] "0"
734 [email protected] "0" 717 [email protected] ")"
735 [email protected] ")" 718 [email protected] " "
736 [email protected] " " 719 [email protected] "=="
737 [email protected] "==" 720 [email protected] " "
738 [email protected] " " 721 [email protected]
739 [email protected] 722 [email protected] "("
740 [email protected] "(" 723 [email protected]
741 [email protected] 724 [email protected]
742 [email protected] 725 [email protected]
743 [email protected] 726 [email protected]
744 [email protected] 727 [email protected]
745 [email protected] 728 [email protected] "_x"
746 [email protected] "_x" 729 [email protected] " "
747 [email protected] " " 730 [email protected] "="
748 [email protected] "=" 731 [email protected] " "
749 [email protected] " " 732 [email protected]
750 [email protected] 733 [email protected] "0"
751 [email protected] "0" 734 [email protected] ")"
752 [email protected] ")" 735 [email protected] ";"
753 [email protected] ";" 736 [email protected] "\n "
754 [email protected] "\n " 737 [email protected]
755 [email protected] 738 [email protected] "let"
756 [email protected] "let" 739 [email protected] " "
757 [email protected] " " 740 [email protected]
758 [email protected] 741 [email protected]
759 [email protected] 742 [email protected] "_b"
760 [email protected] "_b" 743 [email protected] " "
761 [email protected] " " 744 [email protected] "="
762 [email protected] "=" 745 [email protected] " "
763 [email protected] " " 746 [email protected]
764 [email protected] 747 [email protected]
765 [email protected] 748 [email protected]
766 [email protected] 749 [email protected]
767 [email protected] 750 [email protected]
768 [email protected] 751 [email protected]
769 [email protected] 752 [email protected] "swap"
770 [email protected] "swap" 753 [email protected]
771 [email protected] 754 [email protected] "("
772 [email protected] "(" 755 [email protected]
773 [email protected] 756 [email protected] "&"
774 [email protected] "&" 757 [email protected] "mut"
775 [email protected] "mut" 758 [email protected] " "
776 [email protected] " " 759 [email protected]
777 [email protected] 760 [email protected]
778 [email protected] 761 [email protected]
779 [email protected] 762 [email protected]
780 [email protected] 763 [email protected] "_y"
781 [email protected] "_y" 764 [email protected] ","
782 [email protected] "," 765 [email protected] " "
783 [email protected] " " 766 [email protected]
784 [email protected] 767 [email protected] "&"
785 [email protected] "&" 768 [email protected] "mut"
786 [email protected] "mut" 769 [email protected] " "
787 [email protected] " " 770 [email protected]
788 [email protected] 771 [email protected]
789 [email protected] 772 [email protected]
790 [email protected] 773 [email protected]
791 [email protected] 774 [email protected] "_z"
792 [email protected] "_z" 775 [email protected] ")"
793 [email protected] ")" 776 [email protected] " "
794 [email protected] " " 777 [email protected] "=="
795 [email protected] "==" 778 [email protected] " "
796 [email protected] " " 779 [email protected]
797 [email protected] 780 [email protected]
798 [email protected] 781 [email protected]
799 [email protected] 782 [email protected]
800 [email protected] 783 [email protected]
801 [email protected] 784 [email protected] "swap"
802 [email protected] "swap" 785 [email protected]
803 [email protected] 786 [email protected] "("
804 [email protected] "(" 787 [email protected]
805 [email protected] 788 [email protected] "&"
806 [email protected] "&" 789 [email protected] "mut"
807 [email protected] "mut" 790 [email protected] " "
808 [email protected] " " 791 [email protected]
809 [email protected] 792 [email protected]
810 [email protected] 793 [email protected]
811 [email protected] 794 [email protected]
812 [email protected] 795 [email protected] "_y"
813 [email protected] "_y" 796 [email protected] ","
814 [email protected] "," 797 [email protected] " "
815 [email protected] " " 798 [email protected]
816 [email protected] 799 [email protected] "&"
817 [email protected] "&" 800 [email protected] "mut"
818 [email protected] "mut" 801 [email protected] " "
819 [email protected] " " 802 [email protected]
820 [email protected] 803 [email protected]
821 [email protected] 804 [email protected]
822 [email protected] 805 [email protected]
823 [email protected] 806 [email protected] "_z"
824 [email protected] "_z" 807 [email protected] ")"
825 [email protected] ")" 808 [email protected] ";"
826 [email protected] ";" 809 [email protected] "\n"
827 [email protected] "\n" 810 [email protected] "}"
828 [email protected] "}"
829 [email protected] "\n\n" 811 [email protected] "\n\n"
830 [email protected] 812 [email protected]
831 [email protected] "fn" 813 [email protected] "fn"
@@ -846,167 +828,165 @@ [email protected]
846 [email protected] "usize" 828 [email protected] "usize"
847 [email protected] " " 829 [email protected] " "
848 [email protected] 830 [email protected]
849 [email protected] 831 [email protected] "{"
850 [email protected] "{" 832 [email protected] "\n "
851 [email protected] "\n " 833 [email protected]
852 [email protected] 834 [email protected] "fn"
853 [email protected] "fn" 835 [email protected] " "
854 [email protected] " " 836 [email protected]
855 [email protected] 837 [email protected] "p"
856 [email protected] "p" 838 [email protected]
857 [email protected] 839 [email protected] "("
858 [email protected] "(" 840 [email protected] ")"
859 [email protected] ")" 841 [email protected] " "
860 [email protected] " " 842 [email protected]
861 [email protected] 843 [email protected] "->"
862 [email protected] "->" 844 [email protected] " "
863 [email protected] " " 845 [email protected]
864 [email protected] 846 [email protected]
865 [email protected] 847 [email protected]
866 [email protected] 848 [email protected]
867 [email protected] 849 [email protected] "bool"
868 [email protected] "bool" 850 [email protected] " "
869 [email protected] " " 851 [email protected]
870 [email protected] 852 [email protected] "{"
871 [email protected] 853 [email protected] " "
872 [email protected] "{" 854 [email protected]
873 [email protected] " " 855 [email protected] "true"
874 [email protected] 856 [email protected] " "
875 [email protected] "true" 857 [email protected] "}"
876 [email protected] " " 858 [email protected] "\n "
877 [email protected] "}" 859 [email protected]
878 [email protected] "\n " 860 [email protected] "let"
879 [email protected] 861 [email protected] " "
880 [email protected] "let" 862 [email protected]
881 [email protected] " " 863 [email protected]
882 [email protected] 864 [email protected] "_a"
883 [email protected] 865 [email protected] " "
884 [email protected] "_a" 866 [email protected] "="
885 [email protected] " " 867 [email protected] " "
886 [email protected] "=" 868 [email protected]
887 [email protected] " " 869 [email protected] "("
888 [email protected] 870 [email protected]
889 [email protected] "(" 871 [email protected]
890 [email protected] 872 [email protected]
891 [email protected] 873 [email protected]
892 [email protected] 874 [email protected]
893 [email protected] 875 [email protected] "assert"
894 [email protected] 876 [email protected] "!"
895 [email protected] "assert" 877 [email protected]
896 [email protected] "!" 878 [email protected] "("
897 [email protected] 879 [email protected]
898 [email protected] "(" 880 [email protected] "("
899 [email protected] 881 [email protected] "true"
900 [email protected] "(" 882 [email protected] ")"
901 [email protected] "true" 883 [email protected] ")"
902 [email protected] ")" 884 [email protected] " "
903 [email protected] ")" 885 [email protected] "=="
904 [email protected] " " 886 [email protected] " "
905 [email protected] "==" 887 [email protected]
906 [email protected] " " 888 [email protected] "("
907 [email protected] 889 [email protected]
908 [email protected] "(" 890 [email protected]
909 [email protected] 891 [email protected]
910 [email protected] 892 [email protected]
911 [email protected] 893 [email protected] "assert"
912 [email protected] 894 [email protected] "!"
913 [email protected] "assert" 895 [email protected]
914 [email protected] "!" 896 [email protected] "("
915 [email protected] 897 [email protected] "p"
916 [email protected] "(" 898 [email protected]
917 [email protected] "p" 899 [email protected] "("
918 [email protected] 900 [email protected] ")"
919 [email protected] "(" 901 [email protected] ")"
920 [email protected] ")" 902 [email protected] ")"
921 [email protected] ")" 903 [email protected] ")"
922 [email protected] ")" 904 [email protected] ";"
923 [email protected] ")" 905 [email protected] "\n "
924 [email protected] ";" 906 [email protected]
925 [email protected] "\n " 907 [email protected] "let"
926 [email protected] 908 [email protected] " "
927 [email protected] "let" 909 [email protected]
928 [email protected] " " 910 [email protected]
929 [email protected] 911 [email protected] "_c"
930 [email protected] 912 [email protected] " "
931 [email protected] "_c" 913 [email protected] "="
932 [email protected] " " 914 [email protected] " "
933 [email protected] "=" 915 [email protected]
934 [email protected] " " 916 [email protected] "("
935 [email protected] 917 [email protected]
936 [email protected] "(" 918 [email protected]
937 [email protected] 919 [email protected]
938 [email protected] 920 [email protected]
939 [email protected] 921 [email protected]
940 [email protected] 922 [email protected] "assert"
941 [email protected] 923 [email protected] "!"
942 [email protected] "assert" 924 [email protected]
943 [email protected] "!" 925 [email protected] "("
944 [email protected] 926 [email protected]
945 [email protected] "(" 927 [email protected] "("
946 [email protected] 928 [email protected] "p"
947 [email protected] "(" 929 [email protected]
948 [email protected] "p" 930 [email protected] "("
949 [email protected] 931 [email protected] ")"
950 [email protected] "(" 932 [email protected] ")"
951 [email protected] ")" 933 [email protected] ")"
952 [email protected] ")" 934 [email protected] " "
953 [email protected] ")" 935 [email protected] "=="
954 [email protected] " " 936 [email protected] " "
955 [email protected] "==" 937 [email protected]
956 [email protected] " " 938 [email protected] "("
957 [email protected] 939 [email protected] ")"
958 [email protected] "(" 940 [email protected] ")"
959 [email protected] ")" 941 [email protected] ";"
960 [email protected] ")" 942 [email protected] "\n "
961 [email protected] ";" 943 [email protected]
962 [email protected] "\n " 944 [email protected] "let"
963 [email protected] 945 [email protected] " "
964 [email protected] "let" 946 [email protected]
965 [email protected] " " 947 [email protected]
966 [email protected] 948 [email protected] "_b"
967 [email protected] 949 [email protected] ":"
968 [email protected] "_b" 950 [email protected] " "
969 [email protected] ":" 951 [email protected]
970 [email protected] " " 952 [email protected]
971 [email protected] 953 [email protected]
972 [email protected] 954 [email protected]
973 [email protected] 955 [email protected] "bool"
974 [email protected] 956 [email protected] " "
975 [email protected] "bool" 957 [email protected] "="
976 [email protected] " " 958 [email protected] " "
977 [email protected] "=" 959 [email protected]
978 [email protected] " " 960 [email protected] "("
979 [email protected] 961 [email protected]
980 [email protected] "(" 962 [email protected]
981 [email protected] 963 [email protected]
982 [email protected] 964 [email protected]
983 [email protected] 965 [email protected]
984 [email protected] 966 [email protected] "println"
985 [email protected] 967 [email protected] "!"
986 [email protected] "println" 968 [email protected]
987 [email protected] "!" 969 [email protected] "("
988 [email protected] 970 [email protected] "\"{}\""
989 [email protected] "(" 971 [email protected] ","
990 [email protected] "\"{}\"" 972 [email protected] " "
991 [email protected] "," 973 [email protected] "0"
992 [email protected] " " 974 [email protected] ")"
993 [email protected] "0" 975 [email protected] " "
994 [email protected] ")" 976 [email protected] "=="
995 [email protected] " " 977 [email protected] " "
996 [email protected] "==" 978 [email protected]
997 [email protected] " " 979 [email protected] "("
998 [email protected] 980 [email protected]
999 [email protected] "(" 981 [email protected] "return"
1000 [email protected] 982 [email protected] " "
1001 [email protected] "return" 983 [email protected]
1002 [email protected] " " 984 [email protected] "0"
1003 [email protected] 985 [email protected] ")"
1004 [email protected] "0" 986 [email protected] ")"
1005 [email protected] ")" 987 [email protected] ";"
1006 [email protected] ")" 988 [email protected] "\n"
1007 [email protected] ";" 989 [email protected] "}"
1008 [email protected] "\n"
1009 [email protected] "}"
1010 [email protected] "\n\n" 990 [email protected] "\n\n"
1011 [email protected] 991 [email protected]
1012 [email protected] "fn" 992 [email protected] "fn"
@@ -1018,144 +998,138 @@ [email protected]
1018 [email protected] ")" 998 [email protected] ")"
1019 [email protected] " " 999 [email protected] " "
1020 [email protected] 1000 [email protected]
1021 [email protected] 1001 [email protected] "{"
1022 [email protected] "{" 1002 [email protected] "\n "
1023 [email protected] "\n " 1003 [email protected]
1024 [email protected] 1004 [email protected]
1025 [email protected] 1005 [email protected] "loop"
1026 [email protected] "loop" 1006 [email protected] " "
1027 [email protected] " " 1007 [email protected]
1028 [email protected] 1008 [email protected] "{"
1029 [email protected] 1009 [email protected] " "
1030 [email protected] "{" 1010 [email protected]
1031 [email protected] " " 1011 [email protected] "if"
1032 [email protected] 1012 [email protected] " "
1033 [email protected] "if" 1013 [email protected]
1034 [email protected] " " 1014 [email protected]
1035 [email protected] 1015 [email protected] "break"
1036 [email protected] 1016 [email protected] " "
1037 [email protected] "break" 1017 [email protected]
1038 [email protected] " " 1018 [email protected] "{"
1039 [email protected] 1019 [email protected] " "
1040 [email protected] 1020 [email protected] "}"
1041 [email protected] "{" 1021 [email protected] " "
1042 [email protected] " " 1022 [email protected] "}"
1043 [email protected] "}" 1023 [email protected] "\n "
1044 [email protected] " " 1024 [email protected]
1045 [email protected] "}" 1025 [email protected] "let"
1046 [email protected] "\n " 1026 [email protected] " "
1047 [email protected] 1027 [email protected]
1048 [email protected] "let" 1028 [email protected] "mut"
1049 [email protected] " " 1029 [email protected] " "
1050 [email protected] 1030 [email protected]
1051 [email protected] "mut" 1031 [email protected] "i"
1052 [email protected] " " 1032 [email protected] " "
1053 [email protected] 1033 [email protected] "="
1054 [email protected] "i" 1034 [email protected] " "
1055 [email protected] " " 1035 [email protected]
1056 [email protected] "=" 1036 [email protected] "0"
1057 [email protected] " " 1037 [email protected] ";"
1058 [email protected] 1038 [email protected] "\n "
1059 [email protected] "0" 1039 [email protected]
1060 [email protected] ";" 1040 [email protected] "loop"
1061 [email protected] "\n " 1041 [email protected] " "
1062 [email protected] 1042 [email protected]
1063 [email protected] "loop" 1043 [email protected] "{"
1064 [email protected] " " 1044 [email protected] " "
1065 [email protected] 1045 [email protected]
1066 [email protected] 1046 [email protected]
1067 [email protected] "{" 1047 [email protected]
1068 [email protected] " " 1048 [email protected]
1069 [email protected] 1049 [email protected]
1070 [email protected] 1050 [email protected]
1071 [email protected] 1051 [email protected] "i"
1072 [email protected] 1052 [email protected] " "
1073 [email protected] 1053 [email protected] "+="
1074 [email protected] 1054 [email protected] " "
1075 [email protected] "i" 1055 [email protected]
1076 [email protected] " " 1056 [email protected] "1"
1077 [email protected] "+=" 1057 [email protected] ";"
1078 [email protected] " " 1058 [email protected] " "
1079 [email protected] 1059 [email protected]
1080 [email protected] "1" 1060 [email protected]
1081 [email protected] ";" 1061 [email protected] "if"
1082 [email protected] " " 1062 [email protected] " "
1083 [email protected] 1063 [email protected]
1084 [email protected] 1064 [email protected]
1085 [email protected] "if" 1065 [email protected]
1086 [email protected] " " 1066 [email protected]
1087 [email protected] 1067 [email protected]
1088 [email protected] 1068 [email protected]
1089 [email protected] 1069 [email protected] "i"
1090 [email protected] 1070 [email protected] " "
1091 [email protected] 1071 [email protected] "=="
1092 [email protected] 1072 [email protected] " "
1093 [email protected] "i" 1073 [email protected]
1094 [email protected] " " 1074 [email protected] "1"
1095 [email protected] "==" 1075 [email protected] " "
1096 [email protected] " " 1076 [email protected]
1097 [email protected] 1077 [email protected] "{"
1098 [email protected] "1" 1078 [email protected] " "
1099 [email protected] " " 1079 [email protected]
1100 [email protected] 1080 [email protected] "match"
1101 [email protected] 1081 [email protected] " "
1102 [email protected] "{" 1082 [email protected]
1103 [email protected] " " 1083 [email protected] "("
1104 [email protected] 1084 [email protected]
1105 [email protected] "match" 1085 [email protected] "continue"
1106 [email protected] " " 1086 [email protected] ")"
1107 [email protected] 1087 [email protected] " "
1108 [email protected] "(" 1088 [email protected]
1109 [email protected] 1089 [email protected] "{"
1110 [email protected] "continue" 1090 [email protected] " "
1111 [email protected] ")" 1091 [email protected]
1112 [email protected] " " 1092 [email protected]
1113 [email protected] 1093 [email protected]
1114 [email protected] "{" 1094 [email protected] "1"
1115 [email protected] " " 1095 [email protected] " "
1116 [email protected] 1096 [email protected] "=>"
1117 [email protected] 1097 [email protected] " "
1118 [email protected] 1098 [email protected]
1119 [email protected] "1" 1099 [email protected] "{"
1120 [email protected] " " 1100 [email protected] " "
1121 [email protected] "=>" 1101 [email protected] "}"
1122 [email protected] " " 1102 [email protected] ","
1123 [email protected] 1103 [email protected] " "
1124 [email protected] 1104 [email protected]
1125 [email protected] "{" 1105 [email protected]
1126 [email protected] " " 1106 [email protected] "_"
1127 [email protected] "}" 1107 [email protected] " "
1128 [email protected] "," 1108 [email protected] "=>"
1129 [email protected] " " 1109 [email protected] " "
1130 [email protected] 1110 [email protected]
1131 [email protected] 1111 [email protected]
1132 [email protected] "_" 1112 [email protected]
1133 [email protected] " " 1113 [email protected]
1134 [email protected] "=>" 1114 [email protected] "panic"
1135 [email protected] " " 1115 [email protected] "!"
1136 [email protected] 1116 [email protected]
1137 [email protected] 1117 [email protected] "("
1138 [email protected] 1118 [email protected] "\"wat\""
1139 [email protected] 1119 [email protected] ")"
1140 [email protected] "panic" 1120 [email protected] " "
1141 [email protected] "!" 1121 [email protected] "}"
1142 [email protected] 1122 [email protected] " "
1143 [email protected] "(" 1123 [email protected] "}"
1144 [email protected] "\"wat\"" 1124 [email protected] "\n "
1145 [email protected] ")" 1125 [email protected]
1146 [email protected] " " 1126 [email protected]
1147 [email protected] "}" 1127 [email protected] "break"
1148 [email protected] " " 1128 [email protected] ";"
1149 [email protected] "}" 1129 [email protected] " "
1150 [email protected] "\n " 1130 [email protected] "}"
1151 [email protected] 1131 [email protected] "\n"
1152 [email protected] 1132 [email protected] "}"
1153 [email protected] "break"
1154 [email protected] ";"
1155 [email protected] " "
1156 [email protected] "}"
1157 [email protected] "\n"
1158 [email protected] "}"
1159 [email protected] "\n\n" 1133 [email protected] "\n\n"
1160 [email protected] 1134 [email protected]
1161 [email protected] "fn" 1135 [email protected] "fn"
@@ -1167,31 +1141,30 @@ [email protected]
1167 [email protected] ")" 1141 [email protected] ")"
1168 [email protected] " " 1142 [email protected] " "
1169 [email protected] 1143 [email protected]
1170 [email protected] 1144 [email protected] "{"
1171 [email protected] "{" 1145 [email protected] " "
1172 [email protected] " " 1146 [email protected]
1173 [email protected] 1147 [email protected] "let"
1174 [email protected] "let" 1148 [email protected] " "
1175 [email protected] " " 1149 [email protected]
1176 [email protected] 1150 [email protected]
1177 [email protected] 1151 [email protected] "_evil"
1178 [email protected] "_evil" 1152 [email protected] " "
1179 [email protected] " " 1153 [email protected] "="
1180 [email protected] "=" 1154 [email protected] " "
1181 [email protected] " " 1155 [email protected]
1182 [email protected] 1156 [email protected]
1183 [email protected] 1157 [email protected]
1184 [email protected] 1158 [email protected]
1185 [email protected] 1159 [email protected] "println"
1186 [email protected] "println" 1160 [email protected] "!"
1187 [email protected] "!" 1161 [email protected]
1188 [email protected] 1162 [email protected] "("
1189 [email protected] "(" 1163 [email protected] "\"lincoln\""
1190 [email protected] "\"lincoln\"" 1164 [email protected] ")"
1191 [email protected] ")" 1165 [email protected] ";"
1192 [email protected] ";" 1166 [email protected] " "
1193 [email protected] " " 1167 [email protected] "}"
1194 [email protected] "}"
1195 [email protected] "\n\n" 1168 [email protected] "\n\n"
1196 [email protected] 1169 [email protected]
1197 [email protected] "fn" 1170 [email protected] "fn"
@@ -1203,114 +1176,113 @@ [email protected]
1203 [email protected] ")" 1176 [email protected] ")"
1204 [email protected] " " 1177 [email protected] " "
1205 [email protected] 1178 [email protected]
1206 [email protected] 1179 [email protected] "{"
1207 [email protected] "{" 1180 [email protected] "\n "
1208 [email protected] "\n " 1181 [email protected]
1209 [email protected] 1182 [email protected]
1210 [email protected] 1183 [email protected]
1211 [email protected] 1184 [email protected]
1212 [email protected] 1185 [email protected]
1213 [email protected] 1186 [email protected] "assert_eq"
1214 [email protected] "assert_eq" 1187 [email protected] "!"
1215 [email protected] "!" 1188 [email protected]
1216 [email protected] 1189 [email protected] "("
1217 [email protected] "(" 1190 [email protected] "String"
1218 [email protected] "String" 1191 [email protected] ":"
1219 [email protected] ":" 1192 [email protected] ":"
1220 [email protected] ":" 1193 [email protected] "from"
1221 [email protected] "from" 1194 [email protected]
1222 [email protected] 1195 [email protected] "("
1223 [email protected] "(" 1196 [email protected] "\".................... ..."
1224 [email protected] "\".................... ..." 1197 [email protected] ")"
1225 [email protected] ")" 1198 [email protected] ","
1226 [email protected] "," 1199 [email protected] "\n "
1227 [email protected] "\n " 1200 [email protected] "format"
1228 [email protected] "format" 1201 [email protected] "!"
1229 [email protected] "!" 1202 [email protected]
1230 [email protected] 1203 [email protected] "("
1231 [email protected] "(" 1204 [email protected] "\"{:?}\""
1232 [email protected] "\"{:?}\"" 1205 [email protected] ","
1233 [email protected] "," 1206 [email protected] " "
1234 [email protected] " " 1207 [email protected] "."
1235 [email protected] "." 1208 [email protected] "."
1236 [email protected] "." 1209 [email protected] " "
1237 [email protected] " " 1210 [email protected] "."
1238 [email protected] "." 1211 [email protected] "."
1239 [email protected] "." 1212 [email protected] " "
1240 [email protected] " " 1213 [email protected] "."
1241 [email protected] "." 1214 [email protected] "."
1242 [email protected] "." 1215 [email protected] " "
1243 [email protected] " " 1216 [email protected] "."
1244 [email protected] "." 1217 [email protected] "."
1245 [email protected] "." 1218 [email protected] " "
1246 [email protected] " " 1219 [email protected] "."
1247 [email protected] "." 1220 [email protected] "."
1248 [email protected] "." 1221 [email protected] " "
1249 [email protected] " " 1222 [email protected] "."
1250 [email protected] "." 1223 [email protected] "."
1251 [email protected] "." 1224 [email protected] " "
1252 [email protected] " " 1225 [email protected] "."
1253 [email protected] "." 1226 [email protected] "."
1254 [email protected] "." 1227 [email protected] " "
1255 [email protected] " " 1228 [email protected] "."
1256 [email protected] "." 1229 [email protected] "."
1257 [email protected] "." 1230 [email protected] " "
1258 [email protected] " " 1231 [email protected] "."
1259 [email protected] "." 1232 [email protected] "."
1260 [email protected] "." 1233 [email protected] " "
1261 [email protected] " " 1234 [email protected] "."
1262 [email protected] "." 1235 [email protected] "."
1263 [email protected] "." 1236 [email protected] " "
1264 [email protected] " " 1237 [email protected] "."
1265 [email protected] "." 1238 [email protected] "."
1266 [email protected] "." 1239 [email protected] " "
1267 [email protected] " " 1240 [email protected] "."
1268 [email protected] "." 1241 [email protected] "."
1269 [email protected] "." 1242 [email protected] " "
1270 [email protected] " " 1243 [email protected] "."
1271 [email protected] "." 1244 [email protected] "."
1272 [email protected] "." 1245 [email protected] "\n ..."
1273 [email protected] "\n ..." 1246 [email protected] "."
1274 [email protected] "." 1247 [email protected] "."
1275 [email protected] "." 1248 [email protected] " "
1276 [email protected] " " 1249 [email protected] "."
1277 [email protected] "." 1250 [email protected] "."
1278 [email protected] "." 1251 [email protected] " "
1279 [email protected] " " 1252 [email protected] "."
1280 [email protected] "." 1253 [email protected] "."
1281 [email protected] "." 1254 [email protected] " "
1282 [email protected] " " 1255 [email protected] "."
1283 [email protected] "." 1256 [email protected] "."
1284 [email protected] "." 1257 [email protected] " "
1285 [email protected] " " 1258 [email protected] "."
1286 [email protected] "." 1259 [email protected] "."
1287 [email protected] "." 1260 [email protected] " "
1288 [email protected] " " 1261 [email protected] "."
1289 [email protected] "." 1262 [email protected] "."
1290 [email protected] "." 1263 [email protected] " "
1291 [email protected] " " 1264 [email protected] "."
1292 [email protected] "." 1265 [email protected] "."
1293 [email protected] "." 1266 [email protected] " "
1294 [email protected] " " 1267 [email protected] "."
1295 [email protected] "." 1268 [email protected] "."
1296 [email protected] "." 1269 [email protected] " "
1297 [email protected] " " 1270 [email protected] "."
1298 [email protected] "." 1271 [email protected] "."
1299 [email protected] "." 1272 [email protected] " "
1300 [email protected] " " 1273 [email protected] "."
1301 [email protected] "." 1274 [email protected] "."
1302 [email protected] "." 1275 [email protected] " "
1303 [email protected] " " 1276 [email protected] "."
1304 [email protected] "." 1277 [email protected] "."
1305 [email protected] "." 1278 [email protected] " "
1306 [email protected] " " 1279 [email protected] "."
1307 [email protected] "." 1280 [email protected] "."
1308 [email protected] "." 1281 [email protected] ")"
1309 [email protected] ")" 1282 [email protected] ")"
1310 [email protected] ")" 1283 [email protected] ";"
1311 [email protected] ";" 1284 [email protected] "\n"
1312 [email protected] "\n" 1285 [email protected] "}"
1313 [email protected] "}"
1314 [email protected] "\n\n" 1286 [email protected] "\n\n"
1315 [email protected] 1287 [email protected]
1316 [email protected] "fn" 1288 [email protected] "fn"
@@ -1333,170 +1305,168 @@ [email protected]
1333 [email protected] ")" 1305 [email protected] ")"
1334 [email protected] " " 1306 [email protected] " "
1335 [email protected] 1307 [email protected]
1336 [email protected] 1308 [email protected] "{"
1337 [email protected] "{" 1309 [email protected] "\n "
1338 [email protected] "\n " 1310 [email protected]
1339 [email protected] 1311 [email protected] "if"
1340 [email protected] "if" 1312 [email protected] " "
1341 [email protected] " " 1313 [email protected]
1342 [email protected] 1314 [email protected]
1343 [email protected] 1315 [email protected]
1344 [email protected] 1316 [email protected]
1345 [email protected] 1317 [email protected]
1346 [email protected] 1318 [email protected]
1347 [email protected] 1319 [email protected] "u8"
1348 [email protected] "u8" 1320 [email protected] " "
1349 [email protected] " " 1321 [email protected] "!="
1350 [email protected] "!=" 1322 [email protected] " "
1351 [email protected] " " 1323 [email protected]
1352 [email protected] 1324 [email protected] "0u8"
1353 [email protected] "0u8" 1325 [email protected] " "
1354 [email protected] " " 1326 [email protected]
1355 [email protected] 1327 [email protected] "{"
1356 [email protected] 1328 [email protected] "\n "
1357 [email protected] "{" 1329 [email protected]
1358 [email protected] "\n " 1330 [email protected]
1359 [email protected] 1331 [email protected]
1360 [email protected] 1332 [email protected]
1361 [email protected] 1333 [email protected]
1362 [email protected] 1334 [email protected] "assert_eq"
1363 [email protected] 1335 [email protected] "!"
1364 [email protected] "assert_eq" 1336 [email protected]
1365 [email protected] "!" 1337 [email protected] "("
1366 [email protected] 1338 [email protected] "8u8"
1367 [email protected] "(" 1339 [email protected] ","
1368 [email protected] "8u8" 1340 [email protected] " "
1369 [email protected] "," 1341 [email protected]
1370 [email protected] " " 1342 [email protected] "{"
1371 [email protected] 1343 [email protected] "\n "
1372 [email protected] "{" 1344 [email protected] "macro_rules"
1373 [email protected] "\n " 1345 [email protected] "!"
1374 [email protected] "macro_rules" 1346 [email protected] " "
1375 [email protected] "!" 1347 [email protected] "u8"
1376 [email protected] " " 1348 [email protected] " "
1377 [email protected] "u8" 1349 [email protected]
1378 [email protected] " " 1350 [email protected] "{"
1379 [email protected] 1351 [email protected] "\n "
1380 [email protected] "{" 1352 [email protected]
1381 [email protected] "\n " 1353 [email protected] "("
1382 [email protected] 1354 [email protected] "u8"
1383 [email protected] "(" 1355 [email protected] ")"
1384 [email protected] "u8" 1356 [email protected] " "
1385 [email protected] ")" 1357 [email protected] "="
1386 [email protected] " " 1358 [email protected] ">"
1387 [email protected] "=" 1359 [email protected] " "
1388 [email protected] ">" 1360 [email protected]
1389 [email protected] " " 1361 [email protected] "{"
1390 [email protected] 1362 [email protected] "\n "
1391 [email protected] "{" 1363 [email protected] "mod"
1392 [email protected] "\n " 1364 [email protected] " "
1393 [email protected] "mod" 1365 [email protected] "u8"
1394 [email protected] " " 1366 [email protected] " "
1395 [email protected] "u8" 1367 [email protected]
1396 [email protected] " " 1368 [email protected] "{"
1397 [email protected] 1369 [email protected] "\n ..."
1398 [email protected] "{" 1370 [email protected] "pub"
1399 [email protected] "\n ..." 1371 [email protected] " "
1400 [email protected] "pub" 1372 [email protected] "fn"
1401 [email protected] " " 1373 [email protected] " "
1402 [email protected] "fn" 1374 [email protected] "u8"
1403 [email protected] " " 1375 [email protected] "<"
1404 [email protected] "u8" 1376 [email protected] "\'u8"
1405 [email protected] "<" 1377 [email protected] ":"
1406 [email protected] "\'u8" 1378 [email protected] " "
1407 [email protected] ":" 1379 [email protected] "\'u8"
1408 [email protected] " " 1380 [email protected] " "
1409 [email protected] "\'u8" 1381 [email protected] "+"
1410 [email protected] " " 1382 [email protected] " "
1411 [email protected] "+" 1383 [email protected] "\'u8"
1412 [email protected] " " 1384 [email protected] ">"
1413 [email protected] "\'u8" 1385 [email protected]
1414 [email protected] ">" 1386 [email protected] "("
1415 [email protected] 1387 [email protected] "u8"
1416 [email protected] "(" 1388 [email protected] ":"
1417 [email protected] "u8" 1389 [email protected] " "
1418 [email protected] ":" 1390 [email protected] "&"
1419 [email protected] " " 1391 [email protected] "\'u8"
1420 [email protected] "&" 1392 [email protected] " "
1421 [email protected] "\'u8" 1393 [email protected] "u8"
1422 [email protected] " " 1394 [email protected] ")"
1423 [email protected] "u8" 1395 [email protected] " "
1424 [email protected] ")" 1396 [email protected] "-"
1425 [email protected] " " 1397 [email protected] ">"
1426 [email protected] "-" 1398 [email protected] " "
1427 [email protected] ">" 1399 [email protected] "&"
1428 [email protected] " " 1400 [email protected] "\'u8"
1429 [email protected] "&" 1401 [email protected] " "
1430 [email protected] "\'u8" 1402 [email protected] "u8"
1431 [email protected] " " 1403 [email protected] " "
1432 [email protected] "u8" 1404 [email protected]
1433 [email protected] " " 1405 [email protected] "{"
1434 [email protected] 1406 [email protected] "\n ..."
1435 [email protected] "{" 1407 [email protected] "\"u8\""
1436 [email protected] "\n ..." 1408 [email protected] ";"
1437 [email protected] "\"u8\"" 1409 [email protected] "\n ..."
1438 [email protected] ";" 1410 [email protected] "u8"
1439 [email protected] "\n ..." 1411 [email protected] "\n ..."
1440 [email protected] "u8" 1412 [email protected] "}"
1441 [email protected] "\n ..." 1413 [email protected] "\n "
1442 [email protected] "}" 1414 [email protected] "}"
1443 [email protected] "\n " 1415 [email protected] "\n "
1444 [email protected] "}" 1416 [email protected] "}"
1445 [email protected] "\n " 1417 [email protected] ";"
1446 [email protected] "}" 1418 [email protected] "\n "
1447 [email protected] ";" 1419 [email protected] "}"
1448 [email protected] "\n " 1420 [email protected] "\n\n "
1449 [email protected] "}" 1421 [email protected] "u8"
1450 [email protected] "\n\n " 1422 [email protected] "!"
1451 [email protected] "u8" 1423 [email protected]
1452 [email protected] "!" 1424 [email protected] "("
1453 [email protected] 1425 [email protected] "u8"
1454 [email protected] "(" 1426 [email protected] ")"
1455 [email protected] "u8" 1427 [email protected] ";"
1456 [email protected] ")" 1428 [email protected] "\n "
1457 [email protected] ";" 1429 [email protected] "let"
1458 [email protected] "\n " 1430 [email protected] " "
1459 [email protected] "let" 1431 [email protected] "&"
1460 [email protected] " " 1432 [email protected] "u8"
1461 [email protected] "&" 1433 [email protected] ":"
1462 [email protected] "u8" 1434 [email protected] " "
1463 [email protected] ":" 1435 [email protected] "&"
1464 [email protected] " " 1436 [email protected] "u8"
1465 [email protected] "&" 1437 [email protected] " "
1466 [email protected] "u8" 1438 [email protected] "="
1467 [email protected] " " 1439 [email protected] " "
1468 [email protected] "=" 1440 [email protected] "u8"
1469 [email protected] " " 1441 [email protected] ":"
1470 [email protected] "u8" 1442 [email protected] ":"
1471 [email protected] ":" 1443 [email protected] "u8"
1472 [email protected] ":" 1444 [email protected]
1473 [email protected] "u8" 1445 [email protected] "("
1474 [email protected] 1446 [email protected] "&"
1475 [email protected] "(" 1447 [email protected] "8u8"
1476 [email protected] "&" 1448 [email protected] ")"
1477 [email protected] "8u8" 1449 [email protected] ";"
1478 [email protected] ")" 1450 [email protected] "\n "
1479 [email protected] ";" 1451 [email protected] "crate"
1480 [email protected] "\n " 1452 [email protected] ":"
1481 [email protected] "crate" 1453 [email protected] ":"
1482 [email protected] ":" 1454 [email protected] "u8"
1483 [email protected] ":" 1455 [email protected]
1484 [email protected] "u8" 1456 [email protected] "("
1485 [email protected] 1457 [email protected] "0u8"
1486 [email protected] "(" 1458 [email protected] ")"
1487 [email protected] "0u8" 1459 [email protected] ";"
1488 [email protected] ")" 1460 [email protected] "\n "
1489 [email protected] ";" 1461 [email protected] "u8"
1490 [email protected] "\n " 1462 [email protected] "\n "
1491 [email protected] "u8" 1463 [email protected] "}"
1492 [email protected] "\n " 1464 [email protected] ")"
1493 [email protected] "}" 1465 [email protected] ";"
1494 [email protected] ")" 1466 [email protected] "\n "
1495 [email protected] ";" 1467 [email protected] "}"
1496 [email protected] "\n " 1468 [email protected] "\n"
1497 [email protected] "}" 1469 [email protected] "}"
1498 [email protected] "\n"
1499 [email protected] "}"
1500 [email protected] "\n\n" 1470 [email protected] "\n\n"
1501 [email protected] 1471 [email protected]
1502 [email protected] "fn" 1472 [email protected] "fn"
@@ -1508,76 +1478,75 @@ [email protected]
1508 [email protected] ")" 1478 [email protected] ")"
1509 [email protected] " " 1479 [email protected] " "
1510 [email protected] 1480 [email protected]
1511 [email protected] 1481 [email protected] "{"
1512 [email protected] "{" 1482 [email protected] "\n "
1513 [email protected] "\n " 1483 [email protected]
1514 [email protected] 1484 [email protected]
1515 [email protected] 1485 [email protected]
1516 [email protected] 1486 [email protected]
1517 [email protected] 1487 [email protected]
1518 [email protected] 1488 [email protected] "assert_eq"
1519 [email protected] "assert_eq" 1489 [email protected] "!"
1520 [email protected] "!" 1490 [email protected]
1521 [email protected] 1491 [email protected] "("
1522 [email protected] "(" 1492 [email protected] "String"
1523 [email protected] "String" 1493 [email protected] ":"
1524 [email protected] ":" 1494 [email protected] ":"
1525 [email protected] ":" 1495 [email protected] "from"
1526 [email protected] "from" 1496 [email protected]
1527 [email protected] 1497 [email protected] "("
1528 [email protected] "(" 1498 [email protected] "\"><>\""
1529 [email protected] "\"><>\"" 1499 [email protected] ")"
1530 [email protected] ")" 1500 [email protected] ","
1531 [email protected] "," 1501 [email protected] "\n "
1532 [email protected] "\n " 1502 [email protected] "String"
1533 [email protected] "String" 1503 [email protected] ":"
1534 [email protected] ":" 1504 [email protected] ":"
1535 [email protected] ":" 1505 [email protected] "<"
1536 [email protected] "<" 1506 [email protected] ">"
1537 [email protected] ">" 1507 [email protected] ":"
1538 [email protected] ":" 1508 [email protected] ":"
1539 [email protected] ":" 1509 [email protected] "from"
1540 [email protected] "from" 1510 [email protected] ":"
1541 [email protected] ":" 1511 [email protected] ":"
1542 [email protected] ":" 1512 [email protected] "<"
1543 [email protected] "<" 1513 [email protected] ">"
1544 [email protected] ">" 1514 [email protected]
1545 [email protected] 1515 [email protected] "("
1546 [email protected] "(" 1516 [email protected] "\"><>\""
1547 [email protected] "\"><>\"" 1517 [email protected] ")"
1548 [email protected] ")" 1518 [email protected] "."
1549 [email protected] "." 1519 [email protected] "chars"
1550 [email protected] "chars" 1520 [email protected] ":"
1551 [email protected] ":" 1521 [email protected] ":"
1552 [email protected] ":" 1522 [email protected] "<"
1553 [email protected] "<" 1523 [email protected] ">"
1554 [email protected] ">" 1524 [email protected]
1555 [email protected] 1525 [email protected] "("
1556 [email protected] "(" 1526 [email protected] ")"
1557 [email protected] ")" 1527 [email protected] "."
1558 [email protected] "." 1528 [email protected] "rev"
1559 [email protected] "rev" 1529 [email protected] ":"
1560 [email protected] ":" 1530 [email protected] ":"
1561 [email protected] ":" 1531 [email protected] "<"
1562 [email protected] "<" 1532 [email protected] ">"
1563 [email protected] ">" 1533 [email protected]
1564 [email protected] 1534 [email protected] "("
1565 [email protected] "(" 1535 [email protected] ")"
1566 [email protected] ")" 1536 [email protected] "."
1567 [email protected] "." 1537 [email protected] "collect"
1568 [email protected] "collect" 1538 [email protected] ":"
1569 [email protected] ":" 1539 [email protected] ":"
1570 [email protected] ":" 1540 [email protected] "<"
1571 [email protected] "<" 1541 [email protected] "String"
1572 [email protected] "String" 1542 [email protected] ">"
1573 [email protected] ">" 1543 [email protected]
1574 [email protected] 1544 [email protected] "("
1575 [email protected] "(" 1545 [email protected] ")"
1576 [email protected] ")" 1546 [email protected] ")"
1577 [email protected] ")" 1547 [email protected] ";"
1578 [email protected] ";" 1548 [email protected] "\n"
1579 [email protected] "\n" 1549 [email protected] "}"
1580 [email protected] "}"
1581 [email protected] "\n\n" 1550 [email protected] "\n\n"
1582 [email protected] 1551 [email protected]
1583 [email protected] "fn" 1552 [email protected] "fn"
@@ -1589,47 +1558,46 @@ [email protected]
1589 [email protected] ")" 1558 [email protected] ")"
1590 [email protected] " " 1559 [email protected] " "
1591 [email protected] 1560 [email protected]
1592 [email protected] 1561 [email protected] "{"
1593 [email protected] "{" 1562 [email protected] "\n "
1594 [email protected] "\n " 1563 [email protected]
1595 [email protected] 1564 [email protected] "union"
1596 [email protected] "union" 1565 [email protected] " "
1597 [email protected] " " 1566 [email protected]
1598 [email protected] 1567 [email protected] "union"
1599 [email protected] "union" 1568 [email protected]
1600 [email protected] 1569 [email protected] "<"
1601 [email protected] "<" 1570 [email protected]
1602 [email protected] 1571 [email protected] "\'union"
1603 [email protected] "\'union" 1572 [email protected] ">"
1604 [email protected] ">" 1573 [email protected] " "
1605 [email protected] " " 1574 [email protected]
1606 [email protected] 1575 [email protected] "{"
1607 [email protected] "{" 1576 [email protected] " "
1608 [email protected] " " 1577 [email protected]
1609 [email protected] 1578 [email protected]
1610 [email protected] 1579 [email protected] "union"
1611 [email protected] "union" 1580 [email protected] ":"
1612 [email protected] ":" 1581 [email protected] " "
1613 [email protected] " " 1582 [email protected]
1614 [email protected] 1583 [email protected] "&"
1615 [email protected] "&" 1584 [email protected] "\'union"
1616 [email protected] "\'union" 1585 [email protected] " "
1617 [email protected] " " 1586 [email protected]
1618 [email protected] 1587 [email protected]
1619 [email protected] 1588 [email protected]
1620 [email protected] 1589 [email protected]
1621 [email protected] 1590 [email protected] "union"
1622 [email protected] "union" 1591 [email protected]
1623 [email protected] 1592 [email protected] "<"
1624 [email protected] "<" 1593 [email protected]
1625 [email protected] 1594 [email protected] "\'union"
1626 [email protected] "\'union" 1595 [email protected] ">"
1627 [email protected] ">" 1596 [email protected] ","
1628 [email protected] "," 1597 [email protected] " "
1629 [email protected] " " 1598 [email protected] "}"
1630 [email protected] "}" 1599 [email protected] "\n"
1631 [email protected] "\n" 1600 [email protected] "}"
1632 [email protected] "}"
1633 [email protected] "\n\n" 1601 [email protected] "\n\n"
1634 [email protected] 1602 [email protected]
1635 [email protected] "fn" 1603 [email protected] "fn"
@@ -1641,121 +1609,118 @@ [email protected]
1641 [email protected] ")" 1609 [email protected] ")"
1642 [email protected] " " 1610 [email protected] " "
1643 [email protected] 1611 [email protected]
1644 [email protected] 1612 [email protected] "{"
1645 [email protected] "{" 1613 [email protected] "\n "
1646 [email protected] "\n " 1614 [email protected]
1647 [email protected] 1615 [email protected] "let"
1648 [email protected] "let" 1616 [email protected] " "
1649 [email protected] " " 1617 [email protected]
1650 [email protected] 1618 [email protected]
1651 [email protected] 1619 [email protected] "val"
1652 [email protected] "val" 1620 [email protected] " "
1653 [email protected] " " 1621 [email protected] "="
1654 [email protected] "=" 1622 [email protected] " "
1655 [email protected] " " 1623 [email protected]
1656 [email protected] 1624 [email protected] "!"
1657 [email protected] "!" 1625 [email protected]
1658 [email protected] 1626 [email protected] "("
1659 [email protected] "(" 1627 [email protected]
1660 [email protected] 1628 [email protected]
1661 [email protected] 1629 [email protected]
1662 [email protected] 1630 [email protected] "("
1663 [email protected] "(" 1631 [email protected]
1664 [email protected] 1632 [email protected]
1665 [email protected] 1633 [email protected] "|"
1666 [email protected] "|" 1634 [email protected]
1667 [email protected] 1635 [email protected]
1668 [email protected] 1636 [email protected] "("
1669 [email protected] "(" 1637 [email protected]
1670 [email protected] 1638 [email protected] ".."
1671 [email protected] ".." 1639 [email protected] ")"
1672 [email protected] ")" 1640 [email protected] ":"
1673 [email protected] ":" 1641 [email protected]
1674 [email protected] 1642 [email protected] "("
1675 [email protected] "(" 1643 [email protected]
1676 [email protected] 1644 [email protected] "_"
1677 [email protected] "_" 1645 [email protected] ","
1678 [email protected] "," 1646 [email protected]
1679 [email protected] 1647 [email protected] "_"
1680 [email protected] "_" 1648 [email protected] ")"
1681 [email protected] ")" 1649 [email protected] ","
1682 [email protected] "," 1650 [email protected]
1683 [email protected] 1651 [email protected]
1684 [email protected] 1652 [email protected]
1685 [email protected] 1653 [email protected] "__"
1686 [email protected] "__" 1654 [email protected] "@"
1687 [email protected] "@" 1655 [email protected]
1688 [email protected] 1656 [email protected] "_"
1689 [email protected] "_" 1657 [email protected] "|"
1690 [email protected] "|" 1658 [email protected]
1691 [email protected] 1659 [email protected]
1692 [email protected] 1660 [email protected]
1693 [email protected] 1661 [email protected]
1694 [email protected] 1662 [email protected] "__"
1695 [email protected] "__" 1663 [email protected] ")"
1696 [email protected] ")" 1664 [email protected]
1697 [email protected] 1665 [email protected] "("
1698 [email protected] "(" 1666 [email protected]
1699 [email protected] 1667 [email protected] "("
1700 [email protected] "(" 1668 [email protected]
1701 [email protected] 1669 [email protected] "&"
1702 [email protected] "&" 1670 [email protected]
1703 [email protected] 1671 [email protected] "*"
1704 [email protected] "*" 1672 [email protected]
1705 [email protected] 1673 [email protected] "\"\\\\\""
1706 [email protected] "\"\\\\\"" 1674 [email protected] ","
1707 [email protected] "," 1675 [email protected]
1708 [email protected] 1676 [email protected] "\'🤔\'"
1709 [email protected] "\'🤔\'" 1677 [email protected] ")"
1710 [email protected] ")" 1678 [email protected] "/**/"
1711 [email protected] "/**/" 1679 [email protected] ","
1712 [email protected] "," 1680 [email protected]
1713 [email protected] 1681 [email protected] "{"
1714 [email protected] 1682 [email protected] "}"
1715 [email protected] "{" 1683 [email protected] ")"
1716 [email protected] "}" 1684 [email protected] "=="
1717 [email protected] ")" 1685 [email protected]
1718 [email protected] "==" 1686 [email protected] "{"
1719 [email protected] 1687 [email protected]
1720 [email protected] 1688 [email protected]
1721 [email protected] "{" 1689 [email protected] "&"
1722 [email protected] 1690 [email protected]
1723 [email protected] 1691 [email protected]
1724 [email protected] "&" 1692 [email protected] "["
1725 [email protected] 1693 [email protected]
1726 [email protected] 1694 [email protected] "..="
1727 [email protected] "[" 1695 [email protected]
1728 [email protected] 1696 [email protected] ".."
1729 [email protected] "..=" 1697 [email protected] "]"
1730 [email protected] 1698 [email protected] "["
1731 [email protected] ".." 1699 [email protected]
1732 [email protected] "]" 1700 [email protected] ".."
1733 [email protected] "[" 1701 [email protected] "]"
1734 [email protected] 1702 [email protected] ";"
1735 [email protected] ".." 1703 [email protected] "}"
1736 [email protected] "]" 1704 [email protected] ")"
1737 [email protected] ";" 1705 [email protected] "//"
1738 [email protected] "}" 1706 [email protected] "\n "
1739 [email protected] ")" 1707 [email protected] ";"
1740 [email protected] "//" 1708 [email protected] "\n "
1741 [email protected] "\n " 1709 [email protected]
1742 [email protected] ";" 1710 [email protected]
1743 [email protected] "\n " 1711 [email protected]
1744 [email protected] 1712 [email protected]
1745 [email protected] 1713 [email protected]
1746 [email protected] 1714 [email protected] "assert"
1747 [email protected] 1715 [email protected] "!"
1748 [email protected] 1716 [email protected]
1749 [email protected] "assert" 1717 [email protected] "("
1750 [email protected] "!" 1718 [email protected] "!"
1751 [email protected] 1719 [email protected] "val"
1752 [email protected] "(" 1720 [email protected] ")"
1753 [email protected] "!" 1721 [email protected] ";"
1754 [email protected] "val" 1722 [email protected] "\n"
1755 [email protected] ")" 1723 [email protected] "}"
1756 [email protected] ";"
1757 [email protected] "\n"
1758 [email protected] "}"
1759 [email protected] "\n\n" 1724 [email protected] "\n\n"
1760 [email protected] 1725 [email protected]
1761 [email protected] "fn" 1726 [email protected] "fn"
@@ -1791,306 +1756,305 @@ [email protected]
1791 [email protected] "Debug" 1756 [email protected] "Debug"
1792 [email protected] " " 1757 [email protected] " "
1793 [email protected] 1758 [email protected]
1794 [email protected] 1759 [email protected] "{"
1795 [email protected] "{" 1760 [email protected] "\n "
1796 [email protected] "\n " 1761 [email protected]
1797 [email protected] 1762 [email protected] "..="
1798 [email protected] "..=" 1763 [email protected]
1799 [email protected] 1764 [email protected] "..="
1800 [email protected] "..=" 1765 [email protected]
1801 [email protected] 1766 [email protected] ".."
1802 [email protected] ".." 1767 [email protected] " "
1803 [email protected] " " 1768 [email protected]
1804 [email protected] 1769 [email protected] ".."
1805 [email protected] ".." 1770 [email protected] " "
1806 [email protected] " " 1771 [email protected]
1807 [email protected] 1772 [email protected] ".."
1808 [email protected] ".." 1773 [email protected] " "
1809 [email protected] " " 1774 [email protected]
1810 [email protected] 1775 [email protected] ".."
1811 [email protected] ".." 1776 [email protected] " "
1812 [email protected] " " 1777 [email protected]
1813 [email protected] 1778 [email protected] ".."
1814 [email protected] ".." 1779 [email protected] " "
1815 [email protected] " " 1780 [email protected]
1816 [email protected] 1781 [email protected] ".."
1817 [email protected] ".." 1782 [email protected] " "
1818 [email protected] " " 1783 [email protected]
1819 [email protected] 1784 [email protected] ".."
1820 [email protected] ".." 1785 [email protected] " "
1821 [email protected] " " 1786 [email protected]
1822 [email protected] 1787 [email protected] ".."
1823 [email protected] ".." 1788 [email protected] " "
1824 [email protected] " " 1789 [email protected]
1825 [email protected] 1790 [email protected] ".."
1826 [email protected] ".." 1791 [email protected] " "
1827 [email protected] " " 1792 [email protected]
1828 [email protected] 1793 [email protected] ".."
1829 [email protected] ".." 1794 [email protected] " "
1830 [email protected] " " 1795 [email protected]
1831 [email protected] 1796 [email protected] ".."
1832 [email protected] ".." 1797 [email protected] " "
1833 [email protected] " " 1798 [email protected]
1834 [email protected] 1799 [email protected] "..="
1835 [email protected] "..=" 1800 [email protected]
1836 [email protected] 1801 [email protected] ".."
1837 [email protected] ".." 1802 [email protected] " "
1838 [email protected] " " 1803 [email protected]
1839 [email protected] 1804 [email protected] ".."
1840 [email protected] ".." 1805 [email protected] "\n "
1841 [email protected] "\n " 1806 [email protected]
1842 [email protected] 1807 [email protected] "..="
1843 [email protected] "..=" 1808 [email protected]
1844 [email protected] 1809 [email protected] ".."
1845 [email protected] ".." 1810 [email protected] " "
1846 [email protected] " " 1811 [email protected]
1847 [email protected] 1812 [email protected] "..="
1848 [email protected] "..=" 1813 [email protected]
1849 [email protected] 1814 [email protected] ".."
1850 [email protected] ".." 1815 [email protected] " "
1851 [email protected] " " 1816 [email protected]
1852 [email protected] 1817 [email protected] ".."
1853 [email protected] ".." 1818 [email protected] " "
1854 [email protected] " " 1819 [email protected]
1855 [email protected] 1820 [email protected] ".."
1856 [email protected] ".." 1821 [email protected] " "
1857 [email protected] " " 1822 [email protected]
1858 [email protected] 1823 [email protected] ".."
1859 [email protected] ".." 1824 [email protected] " "
1860 [email protected] " " 1825 [email protected]
1861 [email protected] 1826 [email protected] ".."
1862 [email protected] ".." 1827 [email protected] " "
1863 [email protected] " " 1828 [email protected]
1864 [email protected] 1829 [email protected] ".."
1865 [email protected] ".." 1830 [email protected] " "
1866 [email protected] " " 1831 [email protected]
1867 [email protected] 1832 [email protected] ".."
1868 [email protected] ".." 1833 [email protected] " "
1869 [email protected] " " 1834 [email protected]
1870 [email protected] 1835 [email protected] ".."
1871 [email protected] ".." 1836 [email protected] " "
1872 [email protected] " " 1837 [email protected]
1873 [email protected] 1838 [email protected] ".."
1874 [email protected] ".." 1839 [email protected] " "
1875 [email protected] " " 1840 [email protected]
1876 [email protected] 1841 [email protected] "..="
1877 [email protected] "..=" 1842 [email protected]
1878 [email protected] 1843 [email protected] "..="
1879 [email protected] "..=" 1844 [email protected]
1880 [email protected] 1845 [email protected] "..="
1881 [email protected] "..=" 1846 [email protected]
1882 [email protected] 1847 [email protected] ".."
1883 [email protected] ".." 1848 [email protected] "\n "
1884 [email protected] "\n " 1849 [email protected]
1885 [email protected] 1850 [email protected] "..="
1886 [email protected] "..=" 1851 [email protected]
1887 [email protected] 1852 [email protected] ".."
1888 [email protected] ".." 1853 [email protected] " "
1889 [email protected] " " 1854 [email protected]
1890 [email protected] 1855 [email protected] "..="
1891 [email protected] "..=" 1856 [email protected]
1892 [email protected] 1857 [email protected] ".."
1893 [email protected] ".." 1858 [email protected] " "
1894 [email protected] " " 1859 [email protected]
1895 [email protected] 1860 [email protected] "..="
1896 [email protected] "..=" 1861 [email protected]
1897 [email protected] 1862 [email protected] ".."
1898 [email protected] ".." 1863 [email protected] " "
1899 [email protected] " " 1864 [email protected]
1900 [email protected] 1865 [email protected] "..="
1901 [email protected] "..=" 1866 [email protected]
1902 [email protected] 1867 [email protected] ".."
1903 [email protected] ".." 1868 [email protected] " "
1904 [email protected] " " 1869 [email protected]
1905 [email protected] 1870 [email protected] ".."
1906 [email protected] ".." 1871 [email protected] " "
1907 [email protected] " " 1872 [email protected]
1908 [email protected] 1873 [email protected] "..="
1909 [email protected] "..=" 1874 [email protected]
1910 [email protected] 1875 [email protected] "..="
1911 [email protected] "..=" 1876 [email protected]
1912 [email protected] 1877 [email protected] ".."
1913 [email protected] ".." 1878 [email protected] " "
1914 [email protected] " " 1879 [email protected]
1915 [email protected] 1880 [email protected] ".."
1916 [email protected] ".." 1881 [email protected] " "
1917 [email protected] " " 1882 [email protected]
1918 [email protected] 1883 [email protected] "..="
1919 [email protected] "..=" 1884 [email protected]
1920 [email protected] 1885 [email protected] ".."
1921 [email protected] ".." 1886 [email protected] " "
1922 [email protected] " " 1887 [email protected]
1923 [email protected] 1888 [email protected] ".."
1924 [email protected] ".." 1889 [email protected] "\n "
1925 [email protected] "\n " 1890 [email protected]
1926 [email protected] 1891 [email protected] "..="
1927 [email protected] "..=" 1892 [email protected]
1928 [email protected] 1893 [email protected] "..="
1929 [email protected] "..=" 1894 [email protected]
1930 [email protected] 1895 [email protected] ".."
1931 [email protected] ".." 1896 [email protected] " "
1932 [email protected] " " 1897 [email protected]
1933 [email protected] 1898 [email protected] ".."
1934 [email protected] ".." 1899 [email protected] " "
1935 [email protected] " " 1900 [email protected]
1936 [email protected] 1901 [email protected] "..="
1937 [email protected] "..=" 1902 [email protected]
1938 [email protected] 1903 [email protected] ".."
1939 [email protected] ".." 1904 [email protected] " "
1940 [email protected] " " 1905 [email protected]
1941 [email protected] 1906 [email protected] "..="
1942 [email protected] "..=" 1907 [email protected]
1943 [email protected] 1908 [email protected] ".."
1944 [email protected] ".." 1909 [email protected] " "
1945 [email protected] " " 1910 [email protected]
1946 [email protected] 1911 [email protected] "..="
1947 [email protected] "..=" 1912 [email protected]
1948 [email protected] 1913 [email protected] ".."
1949 [email protected] ".." 1914 [email protected] " "
1950 [email protected] " " 1915 [email protected]
1951 [email protected] 1916 [email protected] ".."
1952 [email protected] ".." 1917 [email protected] " "
1953 [email protected] " " 1918 [email protected]
1954 [email protected] 1919 [email protected] ".."
1955 [email protected] ".." 1920 [email protected] " "
1956 [email protected] " " 1921 [email protected]
1957 [email protected] 1922 [email protected] ".."
1958 [email protected] ".." 1923 [email protected] " "
1959 [email protected] " " 1924 [email protected]
1960 [email protected] 1925 [email protected] "..="
1961 [email protected] "..=" 1926 [email protected]
1962 [email protected] 1927 [email protected] ".."
1963 [email protected] ".." 1928 [email protected] " "
1964 [email protected] " " 1929 [email protected]
1965 [email protected] 1930 [email protected] ".."
1966 [email protected] ".." 1931 [email protected] "\n "
1967 [email protected] "\n " 1932 [email protected]
1968 [email protected] 1933 [email protected] "..="
1969 [email protected] "..=" 1934 [email protected]
1970 [email protected] 1935 [email protected] ".."
1971 [email protected] ".." 1936 [email protected] " "
1972 [email protected] " " 1937 [email protected]
1973 [email protected] 1938 [email protected] "..="
1974 [email protected] "..=" 1939 [email protected]
1975 [email protected] 1940 [email protected] ".."
1976 [email protected] ".." 1941 [email protected] " "
1977 [email protected] " " 1942 [email protected]
1978 [email protected] 1943 [email protected] "..="
1979 [email protected] "..=" 1944 [email protected]
1980 [email protected] 1945 [email protected] ".."
1981 [email protected] ".." 1946 [email protected] " "
1982 [email protected] " " 1947 [email protected]
1983 [email protected] 1948 [email protected] "..="
1984 [email protected] "..=" 1949 [email protected]
1985 [email protected] 1950 [email protected] ".."
1986 [email protected] ".." 1951 [email protected] " "
1987 [email protected] " " 1952 [email protected]
1988 [email protected] 1953 [email protected] ".."
1989 [email protected] ".." 1954 [email protected] " "
1990 [email protected] " " 1955 [email protected]
1991 [email protected] 1956 [email protected] "..="
1992 [email protected] "..=" 1957 [email protected]
1993 [email protected] 1958 [email protected] ".."
1994 [email protected] ".." 1959 [email protected] " "
1995 [email protected] " " 1960 [email protected]
1996 [email protected] 1961 [email protected] ".."
1997 [email protected] ".." 1962 [email protected] " "
1998 [email protected] " " 1963 [email protected]
1999 [email protected] 1964 [email protected] ".."
2000 [email protected] ".." 1965 [email protected] " "
2001 [email protected] " " 1966 [email protected]
2002 [email protected] 1967 [email protected] "..="
2003 [email protected] "..=" 1968 [email protected]
2004 [email protected] 1969 [email protected] ".."
2005 [email protected] ".." 1970 [email protected] " "
2006 [email protected] " " 1971 [email protected]
2007 [email protected] 1972 [email protected] ".."
2008 [email protected] ".." 1973 [email protected] "\n "
2009 [email protected] "\n " 1974 [email protected]
2010 [email protected] 1975 [email protected] "..="
2011 [email protected] "..=" 1976 [email protected]
2012 [email protected] 1977 [email protected] ".."
2013 [email protected] ".." 1978 [email protected] " "
2014 [email protected] " " 1979 [email protected]
2015 [email protected] 1980 [email protected] "..="
2016 [email protected] "..=" 1981 [email protected]
2017 [email protected] 1982 [email protected] ".."
2018 [email protected] ".." 1983 [email protected] " "
2019 [email protected] " " 1984 [email protected]
2020 [email protected] 1985 [email protected] "..="
2021 [email protected] "..=" 1986 [email protected]
2022 [email protected] 1987 [email protected] ".."
2023 [email protected] ".." 1988 [email protected] " "
2024 [email protected] " " 1989 [email protected]
2025 [email protected] 1990 [email protected] "..="
2026 [email protected] "..=" 1991 [email protected]
2027 [email protected] 1992 [email protected] ".."
2028 [email protected] ".." 1993 [email protected] " "
2029 [email protected] " " 1994 [email protected]
2030 [email protected] 1995 [email protected] ".."
2031 [email protected] ".." 1996 [email protected] " "
2032 [email protected] " " 1997 [email protected]
2033 [email protected] 1998 [email protected] ".."
2034 [email protected] ".." 1999 [email protected] " "
2035 [email protected] " " 2000 [email protected]
2036 [email protected] 2001 [email protected] "..="
2037 [email protected] "..=" 2002 [email protected]
2038 [email protected] 2003 [email protected] ".."
2039 [email protected] ".." 2004 [email protected] " "
2040 [email protected] " " 2005 [email protected]
2041 [email protected] 2006 [email protected] ".."
2042 [email protected] ".." 2007 [email protected] " "
2043 [email protected] " " 2008 [email protected]
2044 [email protected] 2009 [email protected] "..="
2045 [email protected] "..=" 2010 [email protected]
2046 [email protected] 2011 [email protected] ".."
2047 [email protected] ".." 2012 [email protected] " "
2048 [email protected] " " 2013 [email protected]
2049 [email protected] 2014 [email protected] ".."
2050 [email protected] ".." 2015 [email protected] "\n "
2051 [email protected] "\n " 2016 [email protected]
2052 [email protected] 2017 [email protected] "..="
2053 [email protected] "..=" 2018 [email protected]
2054 [email protected] 2019 [email protected] ".."
2055 [email protected] ".." 2020 [email protected] " "
2056 [email protected] " " 2021 [email protected]
2057 [email protected] 2022 [email protected] "..="
2058 [email protected] "..=" 2023 [email protected]
2059 [email protected] 2024 [email protected] ".."
2060 [email protected] ".." 2025 [email protected] " "
2061 [email protected] " " 2026 [email protected]
2062 [email protected] 2027 [email protected] ".."
2063 [email protected] ".." 2028 [email protected] " "
2064 [email protected] " " 2029 [email protected]
2065 [email protected] 2030 [email protected] "..="
2066 [email protected] "..=" 2031 [email protected]
2067 [email protected] 2032 [email protected] "..="
2068 [email protected] "..=" 2033 [email protected]
2069 [email protected] 2034 [email protected] ".."
2070 [email protected] ".." 2035 [email protected] " "
2071 [email protected] " " 2036 [email protected]
2072 [email protected] 2037 [email protected] "..="
2073 [email protected] "..=" 2038 [email protected]
2074 [email protected] 2039 [email protected] "..="
2075 [email protected] "..=" 2040 [email protected]
2076 [email protected] 2041 [email protected] ".."
2077 [email protected] ".." 2042 [email protected] " "
2078 [email protected] " " 2043 [email protected]
2079 [email protected] 2044 [email protected] ".."
2080 [email protected] ".." 2045 [email protected] " "
2081 [email protected] " " 2046 [email protected]
2082 [email protected] 2047 [email protected] ".."
2083 [email protected] ".." 2048 [email protected] " "
2084 [email protected] " " 2049 [email protected]
2085 [email protected] 2050 [email protected] "..="
2086 [email protected] "..=" 2051 [email protected]
2087 [email protected] 2052 [email protected] ".."
2088 [email protected] ".." 2053 [email protected] " "
2089 [email protected] " " 2054 [email protected]
2090 [email protected] 2055 [email protected] ".."
2091 [email protected] ".." 2056 [email protected] "\n"
2092 [email protected] "\n" 2057 [email protected] "}"
2093 [email protected] "}"
2094 [email protected] "\n\n" 2058 [email protected] "\n\n"
2095 [email protected] 2059 [email protected]
2096 [email protected] "fn" 2060 [email protected] "fn"
@@ -2102,30 +2066,29 @@ [email protected]
2102 [email protected] ")" 2066 [email protected] ")"
2103 [email protected] " " 2067 [email protected] " "
2104 [email protected] 2068 [email protected]
2105 [email protected] 2069 [email protected] "{"
2106 [email protected] "{" 2070 [email protected] "\n "
2107 [email protected] "\n " 2071 [email protected] ";"
2108 [email protected] ";" 2072 [email protected] ";"
2109 [email protected] ";" 2073 [email protected] ";"
2110 [email protected] ";" 2074 [email protected]
2111 [email protected] 2075 [email protected]
2112 [email protected] 2076 [email protected] "("
2113 [email protected] "(" 2077 [email protected] ")"
2114 [email protected] ")" 2078 [email protected] ";"
2115 [email protected] ";" 2079 [email protected] ";"
2116 [email protected] ";" 2080 [email protected] ";"
2117 [email protected] ";" 2081 [email protected] ";"
2118 [email protected] ";" 2082 [email protected] ";"
2119 [email protected] ";" 2083 [email protected] ";"
2120 [email protected] ";" 2084 [email protected] ";"
2121 [email protected] ";" 2085 [email protected] ";"
2122 [email protected] ";" 2086 [email protected] ";"
2123 [email protected] ";" 2087 [email protected]
2124 [email protected] 2088 [email protected] "("
2125 [email protected] "(" 2089 [email protected] ")"
2126 [email protected] ")" 2090 [email protected] "\n"
2127 [email protected] "\n" 2091 [email protected] "}"
2128 [email protected] "}"
2129 [email protected] "\n\n" 2092 [email protected] "\n\n"
2130 [email protected] 2093 [email protected]
2131 [email protected] 2094 [email protected]
@@ -2140,190 +2103,189 @@ [email protected]
2140 [email protected] ")" 2103 [email protected] ")"
2141 [email protected] " " 2104 [email protected] " "
2142 [email protected] 2105 [email protected]
2143 [email protected] 2106 [email protected] "{"
2144 [email protected] "{" 2107 [email protected] "\n "
2145 [email protected] "\n " 2108 [email protected]
2146 [email protected] 2109 [email protected]
2147 [email protected] 2110 [email protected]
2148 [email protected] 2111 [email protected]
2149 [email protected] 2112 [email protected]
2150 [email protected] 2113 [email protected]
2151 [email protected] 2114 [email protected] "strange"
2152 [email protected] "strange" 2115 [email protected]
2153 [email protected] 2116 [email protected] "("
2154 [email protected] "(" 2117 [email protected] ")"
2155 [email protected] ")" 2118 [email protected] ";"
2156 [email protected] ";" 2119 [email protected] "\n "
2157 [email protected] "\n " 2120 [email protected]
2158 [email protected] 2121 [email protected]
2159 [email protected] 2122 [email protected]
2160 [email protected] 2123 [email protected]
2161 [email protected] 2124 [email protected]
2162 [email protected] 2125 [email protected]
2163 [email protected] 2126 [email protected] "funny"
2164 [email protected] "funny" 2127 [email protected]
2165 [email protected] 2128 [email protected] "("
2166 [email protected] "(" 2129 [email protected] ")"
2167 [email protected] ")" 2130 [email protected] ";"
2168 [email protected] ";" 2131 [email protected] "\n "
2169 [email protected] "\n " 2132 [email protected]
2170 [email protected] 2133 [email protected]
2171 [email protected] 2134 [email protected]
2172 [email protected] 2135 [email protected]
2173 [email protected] 2136 [email protected]
2174 [email protected] 2137 [email protected]
2175 [email protected] 2138 [email protected] "what"
2176 [email protected] "what" 2139 [email protected]
2177 [email protected] 2140 [email protected] "("
2178 [email protected] "(" 2141 [email protected] ")"
2179 [email protected] ")" 2142 [email protected] ";"
2180 [email protected] ";" 2143 [email protected] "\n "
2181 [email protected] "\n " 2144 [email protected]
2182 [email protected] 2145 [email protected]
2183 [email protected] 2146 [email protected]
2184 [email protected] 2147 [email protected]
2185 [email protected] 2148 [email protected]
2186 [email protected] 2149 [email protected]
2187 [email protected] 2150 [email protected] "zombiejesus"
2188 [email protected] "zombiejesus" 2151 [email protected]
2189 [email protected] 2152 [email protected] "("
2190 [email protected] "(" 2153 [email protected] ")"
2191 [email protected] ")" 2154 [email protected] ";"
2192 [email protected] ";" 2155 [email protected] "\n "
2193 [email protected] "\n " 2156 [email protected]
2194 [email protected] 2157 [email protected]
2195 [email protected] 2158 [email protected]
2196 [email protected] 2159 [email protected]
2197 [email protected] 2160 [email protected]
2198 [email protected] 2161 [email protected]
2199 [email protected] 2162 [email protected] "notsure"
2200 [email protected] "notsure" 2163 [email protected]
2201 [email protected] 2164 [email protected] "("
2202 [email protected] "(" 2165 [email protected] ")"
2203 [email protected] ")" 2166 [email protected] ";"
2204 [email protected] ";" 2167 [email protected] "\n "
2205 [email protected] "\n " 2168 [email protected]
2206 [email protected] 2169 [email protected]
2207 [email protected] 2170 [email protected]
2208 [email protected] 2171 [email protected]
2209 [email protected] 2172 [email protected]
2210 [email protected] 2173 [email protected]
2211 [email protected] 2174 [email protected] "canttouchthis"
2212 [email protected] "canttouchthis" 2175 [email protected]
2213 [email protected] 2176 [email protected] "("
2214 [email protected] "(" 2177 [email protected] ")"
2215 [email protected] ")" 2178 [email protected] ";"
2216 [email protected] ";" 2179 [email protected] "\n "
2217 [email protected] "\n " 2180 [email protected]
2218 [email protected] 2181 [email protected]
2219 [email protected] 2182 [email protected]
2220 [email protected] 2183 [email protected]
2221 [email protected] 2184 [email protected]
2222 [email protected] 2185 [email protected]
2223 [email protected] 2186 [email protected] "angrydome"
2224 [email protected] "angrydome" 2187 [email protected]
2225 [email protected] 2188 [email protected] "("
2226 [email protected] "(" 2189 [email protected] ")"
2227 [email protected] ")" 2190 [email protected] ";"
2228 [email protected] ";" 2191 [email protected] "\n "
2229 [email protected] "\n " 2192 [email protected]
2230 [email protected] 2193 [email protected]
2231 [email protected] 2194 [email protected]
2232 [email protected] 2195 [email protected]
2233 [email protected] 2196 [email protected]
2234 [email protected] 2197 [email protected]
2235 [email protected] 2198 [email protected] "evil_lincoln"
2236 [email protected] "evil_lincoln" 2199 [email protected]
2237 [email protected] 2200 [email protected] "("
2238 [email protected] "(" 2201 [email protected] ")"
2239 [email protected] ")" 2202 [email protected] ";"
2240 [email protected] ";" 2203 [email protected] "\n "
2241 [email protected] "\n " 2204 [email protected]
2242 [email protected] 2205 [email protected]
2243 [email protected] 2206 [email protected]
2244 [email protected] 2207 [email protected]
2245 [email protected] 2208 [email protected]
2246 [email protected] 2209 [email protected]
2247 [email protected] 2210 [email protected] "dots"
2248 [email protected] "dots" 2211 [email protected]
2249 [email protected] 2212 [email protected] "("
2250 [email protected] "(" 2213 [email protected] ")"
2251 [email protected] ")" 2214 [email protected] ";"
2252 [email protected] ";" 2215 [email protected] "\n "
2253 [email protected] "\n " 2216 [email protected]
2254 [email protected] 2217 [email protected]
2255 [email protected] 2218 [email protected]
2256 [email protected] 2219 [email protected]
2257 [email protected] 2220 [email protected]
2258 [email protected] 2221 [email protected]
2259 [email protected] 2222 [email protected] "u8"
2260 [email protected] "u8" 2223 [email protected]
2261 [email protected] 2224 [email protected] "("
2262 [email protected] "(" 2225 [email protected]
2263 [email protected] 2226 [email protected] "8u8"
2264 [email protected] "8u8" 2227 [email protected] ")"
2265 [email protected] ")" 2228 [email protected] ";"
2266 [email protected] ";" 2229 [email protected] "\n "
2267 [email protected] "\n " 2230 [email protected]
2268 [email protected] 2231 [email protected]
2269 [email protected] 2232 [email protected]
2270 [email protected] 2233 [email protected]
2271 [email protected] 2234 [email protected]
2272 [email protected] 2235 [email protected]
2273 [email protected] 2236 [email protected] "fishy"
2274 [email protected] "fishy" 2237 [email protected]
2275 [email protected] 2238 [email protected] "("
2276 [email protected] "(" 2239 [email protected] ")"
2277 [email protected] ")" 2240 [email protected] ";"
2278 [email protected] ";" 2241 [email protected] "\n "
2279 [email protected] "\n " 2242 [email protected]
2280 [email protected] 2243 [email protected]
2281 [email protected] 2244 [email protected]
2282 [email protected] 2245 [email protected]
2283 [email protected] 2246 [email protected]
2284 [email protected] 2247 [email protected]
2285 [email protected] 2248 [email protected] "union"
2286 [email protected] "union" 2249 [email protected]
2287 [email protected] 2250 [email protected] "("
2288 [email protected] "(" 2251 [email protected] ")"
2289 [email protected] ")" 2252 [email protected] ";"
2290 [email protected] ";" 2253 [email protected] "\n "
2291 [email protected] "\n " 2254 [email protected]
2292 [email protected] 2255 [email protected]
2293 [email protected] 2256 [email protected]
2294 [email protected] 2257 [email protected]
2295 [email protected] 2258 [email protected]
2296 [email protected] 2259 [email protected]
2297 [email protected] 2260 [email protected] "special_characters"
2298 [email protected] "special_characters" 2261 [email protected]
2299 [email protected] 2262 [email protected] "("
2300 [email protected] "(" 2263 [email protected] ")"
2301 [email protected] ")" 2264 [email protected] ";"
2302 [email protected] ";" 2265 [email protected] "\n "
2303 [email protected] "\n " 2266 [email protected]
2304 [email protected] 2267 [email protected]
2305 [email protected] 2268 [email protected]
2306 [email protected] 2269 [email protected]
2307 [email protected] 2270 [email protected]
2308 [email protected] 2271 [email protected]
2309 [email protected] 2272 [email protected] "punch_card"
2310 [email protected] "punch_card" 2273 [email protected]
2311 [email protected] 2274 [email protected] "("
2312 [email protected] "(" 2275 [email protected] ")"
2313 [email protected] ")" 2276 [email protected] ";"
2314 [email protected] ";" 2277 [email protected] "\n "
2315 [email protected] "\n " 2278 [email protected]
2316 [email protected] 2279 [email protected]
2317 [email protected] 2280 [email protected]
2318 [email protected] 2281 [email protected]
2319 [email protected] 2282 [email protected]
2320 [email protected] 2283 [email protected]
2321 [email protected] 2284 [email protected] "ktulhu"
2322 [email protected] "ktulhu" 2285 [email protected]
2323 [email protected] 2286 [email protected] "("
2324 [email protected] "(" 2287 [email protected] ")"
2325 [email protected] ")" 2288 [email protected] ";"
2326 [email protected] ";" 2289 [email protected] "\n"
2327 [email protected] "\n" 2290 [email protected] "}"
2328 [email protected] "}"
2329 [email protected] "\n" 2291 [email protected] "\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 8f616623b..a64a82e94 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
@@ -76,18 +76,17 @@ [email protected]
76 [email protected] "," 76 [email protected] ","
77 [email protected] "\n" 77 [email protected] "\n"
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected] "{"
80 [email protected] "{" 80 [email protected] "\n "
81 [email protected] "\n " 81 [email protected]
82 [email protected] 82 [email protected]
83 [email protected] 83 [email protected] "\"\""
84 [email protected] "\"\"" 84 [email protected] "."
85 [email protected] "." 85 [email protected]
86 [email protected] 86 [email protected] "to_owned"
87 [email protected] "to_owned" 87 [email protected]
88 [email protected] 88 [email protected] "("
89 [email protected] "(" 89 [email protected] ")"
90 [email protected] ")" 90 [email protected] "\n"
91 [email protected] "\n" 91 [email protected] "}"
92 [email protected] "}"
93 [email protected] "\n" 92 [email protected] "\n"
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 14d82feb0..7fd414090 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
@@ -38,6 +38,5 @@ [email protected]
38 [email protected] "Foo" 38 [email protected] "Foo"
39 [email protected] " " 39 [email protected] " "
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "{"
42 [email protected] "{" 42 [email protected] "}"
43 [email protected] "}"
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 d38a60665..17be2c238 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
@@ -9,8 +9,7 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n"
14 [email protected] "\n" 14 [email protected] "}"
15 [email protected] "}"
16 [email protected] "\n" 15 [email protected] "\n"
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 db25bc2b8..acf32a852 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
@@ -9,42 +9,41 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] " "
14 [email protected] " " 14 [email protected]
15 [email protected] 15 [email protected] "let"
16 [email protected] "let" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "r#struct"
20 [email protected] "r#struct" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "="
22 [email protected] "=" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected] "92"
25 [email protected] "92" 25 [email protected] ";"
26 [email protected] ";" 26 [email protected] " "
27 [email protected] " " 27 [email protected]
28 [email protected] 28 [email protected] "let"
29 [email protected] "let" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected] "r#trait"
33 [email protected] "r#trait" 33 [email protected] " "
34 [email protected] " " 34 [email protected] "="
35 [email protected] "=" 35 [email protected] " "
36 [email protected] " " 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "r#struct"
42 [email protected] "r#struct" 42 [email protected] " "
43 [email protected] " " 43 [email protected] "*"
44 [email protected] "*" 44 [email protected] " "
45 [email protected] " " 45 [email protected]
46 [email protected] 46 [email protected] "2"
47 [email protected] "2" 47 [email protected] ";"
48 [email protected] ";" 48 [email protected] " "
49 [email protected] " " 49 [email protected] "}"
50 [email protected] "}"
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 9704bea95..468982b74 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
@@ -39,20 +39,19 @@ [email protected]
39 [email protected] "bool" 39 [email protected] "bool"
40 [email protected] " " 40 [email protected] " "
41 [email protected] 41 [email protected]
42 [email protected] 42 [email protected] "{"
43 [email protected] "{" 43 [email protected] "\n "
44 [email protected] "\n " 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "unimplemented"
49 [email protected] "unimplemented" 49 [email protected] "!"
50 [email protected] "!" 50 [email protected]
51 [email protected] 51 [email protected] "("
52 [email protected] "(" 52 [email protected] ")"
53 [email protected] ")" 53 [email protected] "\n "
54 [email protected] "\n " 54 [email protected] "}"
55 [email protected] "}"
56 [email protected] "\n" 55 [email protected] "\n"
57 [email protected] "}" 56 [email protected] "}"
58 [email protected] "\n\n" 57 [email protected] "\n\n"
@@ -76,9 +75,8 @@ [email protected]
76 [email protected] ")" 75 [email protected] ")"
77 [email protected] " " 76 [email protected] " "
78 [email protected] 77 [email protected]
79 [email protected] 78 [email protected] "{"
80 [email protected] "{" 79 [email protected] "}"
81 [email protected] "}"
82 [email protected] "\n\n" 80 [email protected] "\n\n"
83 [email protected] 81 [email protected]
84 [email protected] "fn" 82 [email protected] "fn"
@@ -90,37 +88,36 @@ [email protected]
90 [email protected] ")" 88 [email protected] ")"
91 [email protected] " " 89 [email protected] " "
92 [email protected] 90 [email protected]
93 [email protected] 91 [email protected] "{"
94 [email protected] "{" 92 [email protected] "\n "
95 [email protected] "\n " 93 [email protected]
96 [email protected] 94 [email protected]
97 [email protected] 95 [email protected]
98 [email protected] 96 [email protected]
99 [email protected] 97 [email protected]
100 [email protected] 98 [email protected] "baz"
101 [email protected] "baz" 99 [email protected]
102 [email protected] 100 [email protected] "("
103 [email protected] "(" 101 [email protected]
104 [email protected] 102 [email protected]
105 [email protected] 103 [email protected]
106 [email protected] 104 [email protected]
107 [email protected] 105 [email protected]
108 [email protected] 106 [email protected] "<"
109 [email protected] "<" 107 [email protected]
110 [email protected] 108 [email protected]
111 [email protected] 109 [email protected]
112 [email protected] 110 [email protected]
113 [email protected] 111 [email protected] "Foo"
114 [email protected] "Foo" 112 [email protected] ">"
115 [email protected] ">" 113 [email protected] "::"
116 [email protected] "::" 114 [email protected]
117 [email protected] 115 [email protected]
118 [email protected] 116 [email protected] "bar"
119 [email protected] "bar" 117 [email protected]
120 [email protected] 118 [email protected] "("
121 [email protected] "(" 119 [email protected] ")"
122 [email protected] ")" 120 [email protected] ")"
123 [email protected] ")" 121 [email protected] "\n"
124 [email protected] "\n" 122 [email protected] "}"
125 [email protected] "}"
126 [email protected] "\n" 123 [email protected] "\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 6e5b25748..900eeb445 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
@@ -40,71 +40,70 @@ [email protected]
40 [email protected] ")" 40 [email protected] ")"
41 [email protected] " " 41 [email protected] " "
42 [email protected] 42 [email protected]
43 [email protected] 43 [email protected] "{"
44 [email protected] "{" 44 [email protected] "\n "
45 [email protected] "\n " 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected]
53 [email protected] 53 [email protected] "Repr"
54 [email protected] "Repr" 54 [email protected] " "
55 [email protected] " " 55 [email protected]
56 [email protected] 56 [email protected] "{"
57 [email protected] "{" 57 [email protected] " "
58 [email protected] " " 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected] "raw"
61 [email protected] "raw" 61 [email protected] ":"
62 [email protected] ":" 62 [email protected] " "
63 [email protected] " " 63 [email protected]
64 [email protected] 64 [email protected] "["
65 [email protected] "[" 65 [email protected]
66 [email protected] 66 [email protected] "0"
67 [email protected] "0" 67 [email protected] "]"
68 [email protected] "]" 68 [email protected] " "
69 [email protected] " " 69 [email protected] "}"
70 [email protected] "}" 70 [email protected] "."
71 [email protected] "." 71 [email protected]
72 [email protected] 72 [email protected] "raw"
73 [email protected] "raw" 73 [email protected] "["
74 [email protected] "[" 74 [email protected]
75 [email protected] 75 [email protected] "0"
76 [email protected] "0" 76 [email protected] "]"
77 [email protected] "]" 77 [email protected] " "
78 [email protected] " " 78 [email protected] "="
79 [email protected] "=" 79 [email protected] " "
80 [email protected] " " 80 [email protected]
81 [email protected] 81 [email protected] "0"
82 [email protected] "0" 82 [email protected] ";"
83 [email protected] ";" 83 [email protected] "\n "
84 [email protected] "\n " 84 [email protected]
85 [email protected] 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] 87 [email protected]
88 [email protected] 88 [email protected]
89 [email protected] 89 [email protected]
90 [email protected] 90 [email protected] "Repr"
91 [email protected] "Repr" 91 [email protected]
92 [email protected] 92 [email protected] "{"
93 [email protected] "{" 93 [email protected]
94 [email protected] 94 [email protected]
95 [email protected] 95 [email protected] "raw"
96 [email protected] "raw" 96 [email protected] ":"
97 [email protected] ":" 97 [email protected]
98 [email protected] 98 [email protected] "["
99 [email protected] "[" 99 [email protected]
100 [email protected] 100 [email protected] "0"
101 [email protected] "0" 101 [email protected] "]"
102 [email protected] "]" 102 [email protected] "}"
103 [email protected] "}" 103 [email protected]
104 [email protected] 104 [email protected] "("
105 [email protected] "(" 105 [email protected] ")"
106 [email protected] ")" 106 [email protected] ";"
107 [email protected] ";" 107 [email protected] "\n"
108 [email protected] "\n" 108 [email protected] "}"
109 [email protected] "}"
110 [email protected] "\n" 109 [email protected] "\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 f1eef3be0..6d941487b 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
@@ -11,66 +11,65 @@ [email protected]
11 [email protected] ")" 11 [email protected] ")"
12 [email protected] " " 12 [email protected] " "
13 [email protected] 13 [email protected]
14 [email protected] 14 [email protected] "{"
15 [email protected] "{" 15 [email protected] "\n "
16 [email protected] "\n " 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected] "#"
19 [email protected] "#" 19 [email protected] "["
20 [email protected] "[" 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected]
23 [email protected] 23 [email protected] "cfg"
24 [email protected] "cfg" 24 [email protected]
25 [email protected] 25 [email protected] "("
26 [email protected] "(" 26 [email protected] "feature"
27 [email protected] "feature" 27 [email protected] " "
28 [email protected] " " 28 [email protected] "="
29 [email protected] "=" 29 [email protected] " "
30 [email protected] " " 30 [email protected] "\"backtrace\""
31 [email protected] "\"backtrace\"" 31 [email protected] ")"
32 [email protected] ")" 32 [email protected] "]"
33 [email protected] "]" 33 [email protected] "\n "
34 [email protected] "\n " 34 [email protected] "let"
35 [email protected] "let" 35 [email protected] " "
36 [email protected] " " 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected] "exit_code"
39 [email protected] "exit_code" 39 [email protected] " "
40 [email protected] " " 40 [email protected] "="
41 [email protected] "=" 41 [email protected] " "
42 [email protected] " " 42 [email protected]
43 [email protected] 43 [email protected]
44 [email protected] 44 [email protected]
45 [email protected] 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected] "panic"
49 [email protected] "panic" 49 [email protected] "::"
50 [email protected] "::" 50 [email protected]
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected] "catch_unwind"
53 [email protected] "catch_unwind" 53 [email protected]
54 [email protected] 54 [email protected] "("
55 [email protected] "(" 55 [email protected]
56 [email protected] 56 [email protected] "move"
57 [email protected] "move" 57 [email protected] " "
58 [email protected] " " 58 [email protected]
59 [email protected] 59 [email protected] "|"
60 [email protected] "|" 60 [email protected] "|"
61 [email protected] "|" 61 [email protected] " "
62 [email protected] " " 62 [email protected]
63 [email protected] 63 [email protected]
64 [email protected] 64 [email protected]
65 [email protected] 65 [email protected]
66 [email protected] 66 [email protected]
67 [email protected] 67 [email protected] "main"
68 [email protected] "main" 68 [email protected]
69 [email protected] 69 [email protected] "("
70 [email protected] "(" 70 [email protected] ")"
71 [email protected] ")" 71 [email protected] ")"
72 [email protected] ")" 72 [email protected] ";"
73 [email protected] ";" 73 [email protected] "\n"
74 [email protected] "\n" 74 [email protected] "}"
75 [email protected] "}"
76 [email protected] "\n" 75 [email protected] "\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 f79feec19..e8b095251 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
@@ -9,86 +9,83 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "#"
16 [email protected] "#" 16 [email protected] "!"
17 [email protected] "!" 17 [email protected] "["
18 [email protected] "[" 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected] "doc"
22 [email protected] "doc" 22 [email protected]
23 [email protected] 23 [email protected] "("
24 [email protected] "(" 24 [email protected] "\"Inner attributes all ..."
25 [email protected] "\"Inner attributes all ..." 25 [email protected] ")"
26 [email protected] ")" 26 [email protected] "]"
27 [email protected] "]" 27 [email protected] "\n "
28 [email protected] "\n " 28 [email protected] "//! As are ModuleDoc ..."
29 [email protected] "//! As are ModuleDoc ..." 29 [email protected] "\n "
30 [email protected] "\n " 30 [email protected]
31 [email protected] 31 [email protected]
32 [email protected] 32 [email protected] "{"
33 [email protected] 33 [email protected] "\n "
34 [email protected] "{" 34 [email protected]
35 [email protected] "\n " 35 [email protected] "#"
36 [email protected] 36 [email protected] "!"
37 [email protected] "#" 37 [email protected] "["
38 [email protected] "!" 38 [email protected]
39 [email protected] "[" 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "doc"
42 [email protected] 42 [email protected]
43 [email protected] "doc" 43 [email protected] "("
44 [email protected] 44 [email protected] "\"Inner attributes are ..."
45 [email protected] "(" 45 [email protected] ")"
46 [email protected] "\"Inner attributes are ..." 46 [email protected] "]"
47 [email protected] ")" 47 [email protected] "\n "
48 [email protected] "]" 48 [email protected]
49 [email protected] "\n " 49 [email protected] "#"
50 [email protected] 50 [email protected] "!"
51 [email protected] "#" 51 [email protected] "["
52 [email protected] "!" 52 [email protected]
53 [email protected] "[" 53 [email protected]
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected] "doc"
56 [email protected] 56 [email protected]
57 [email protected] "doc" 57 [email protected] "("
58 [email protected] 58 [email protected] "\"Being validated is n ..."
59 [email protected] "(" 59 [email protected] ")"
60 [email protected] "\"Being validated is n ..." 60 [email protected] "]"
61 [email protected] ")" 61 [email protected] "\n "
62 [email protected] "]" 62 [email protected] "//! As are ModuleDoc ..."
63 [email protected] "\n " 63 [email protected] "\n "
64 [email protected] "//! As are ModuleDoc ..." 64 [email protected] "}"
65 [email protected] "\n " 65 [email protected] ";"
66 [email protected] "}" 66 [email protected] "\n "
67 [email protected] ";" 67 [email protected]
68 [email protected] "\n " 68 [email protected] "{"
69 [email protected] 69 [email protected] "\n "
70 [email protected] 70 [email protected]
71 [email protected] "{" 71 [email protected] "#"
72 [email protected] "\n " 72 [email protected] "!"
73 [email protected] 73 [email protected] "["
74 [email protected] "#" 74 [email protected]
75 [email protected] "!" 75 [email protected]
76 [email protected] "[" 76 [email protected]
77 [email protected] 77 [email protected] "doc"
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected] "("
80 [email protected] "doc" 80 [email protected] "\"Inner attributes are ..."
81 [email protected] 81 [email protected] ")"
82 [email protected] "(" 82 [email protected] "]"
83 [email protected] "\"Inner attributes are ..." 83 [email protected] "\n "
84 [email protected] ")" 84 [email protected] "//! As are ModuleDoc ..."
85 [email protected] "]" 85 [email protected] "\n "
86 [email protected] "\n " 86 [email protected] "}"
87 [email protected] "//! As are ModuleDoc ..." 87 [email protected] "\n"
88 [email protected] "\n " 88 [email protected] "}"
89 [email protected] "}"
90 [email protected] "\n"
91 [email protected] "}"
92 [email protected] "\n\n" 89 [email protected] "\n\n"
93 [email protected] "// https://github.com ..." 90 [email protected] "// https://github.com ..."
94 [email protected] "\n" 91 [email protected] "\n"
@@ -156,26 +153,25 @@ [email protected]
156 [email protected] ")" 153 [email protected] ")"
157 [email protected] " " 154 [email protected] " "
158 [email protected] 155 [email protected]
159 [email protected] 156 [email protected] "{"
160 [email protected] "{" 157 [email protected] "\n "
161 [email protected] "\n " 158 [email protected]
162 [email protected] 159 [email protected] "#"
163 [email protected] "#" 160 [email protected] "!"
164 [email protected] "!" 161 [email protected] "["
165 [email protected] "[" 162 [email protected]
166 [email protected] 163 [email protected]
167 [email protected] 164 [email protected]
168 [email protected] 165 [email protected] "allow"
169 [email protected] "allow" 166 [email protected]
170 [email protected] 167 [email protected] "("
171 [email protected] "(" 168 [email protected] "unused_variables"
172 [email protected] "unused_variables" 169 [email protected] ")"
173 [email protected] ")" 170 [email protected] "]"
174 [email protected] "]" 171 [email protected] " "
175 [email protected] " " 172 [email protected] "// this is `inner_at ..."
176 [email protected] "// this is `inner_at ..." 173 [email protected] "\n "
177 [email protected] "\n " 174 [email protected] "}"
178 [email protected] "}"
179 [email protected] "\n" 175 [email protected] "\n"
180 [email protected] "}" 176 [email protected] "}"
181 [email protected] "\n" 177 [email protected] "\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 1cf12d670..38e44e48a 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
@@ -11,252 +11,250 @@ [email protected]
11 [email protected] ")" 11 [email protected] ")"
12 [email protected] " " 12 [email protected] " "
13 [email protected] 13 [email protected]
14 [email protected] 14 [email protected] "{"
15 [email protected] "{" 15 [email protected] "\n "
16 [email protected] "\n " 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected] "match"
19 [email protected] "match" 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "Some"
26 [email protected] "Some" 26 [email protected]
27 [email protected] 27 [email protected] "("
28 [email protected] "(" 28 [email protected]
29 [email protected] 29 [email protected] "-"
30 [email protected] "-" 30 [email protected]
31 [email protected] 31 [email protected] "1"
32 [email protected] "1" 32 [email protected] ")"
33 [email protected] ")" 33 [email protected] " "
34 [email protected] " " 34 [email protected]
35 [email protected] 35 [email protected] "{"
36 [email protected] "{" 36 [email protected] "\n "
37 [email protected] "\n " 37 [email protected]
38 [email protected] 38 [email protected]
39 [email protected] 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected]
42 [email protected] 42 [email protected] "Some"
43 [email protected] "Some" 43 [email protected] "("
44 [email protected] "(" 44 [email protected]
45 [email protected] 45 [email protected] "-"
46 [email protected] "-" 46 [email protected]
47 [email protected] 47 [email protected] "1"
48 [email protected] "1" 48 [email protected] ")"
49 [email protected] ")" 49 [email protected] " "
50 [email protected] " " 50 [email protected] "=>"
51 [email protected] "=>" 51 [email protected] " "
52 [email protected] " " 52 [email protected]
53 [email protected] 53 [email protected] "("
54 [email protected] "(" 54 [email protected] ")"
55 [email protected] ")" 55 [email protected] ","
56 [email protected] "," 56 [email protected] "\n "
57 [email protected] "\n " 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected] "_"
60 [email protected] "_" 60 [email protected] " "
61 [email protected] " " 61 [email protected] "=>"
62 [email protected] "=>" 62 [email protected] " "
63 [email protected] " " 63 [email protected]
64 [email protected] 64 [email protected] "("
65 [email protected] "(" 65 [email protected] ")"
66 [email protected] ")" 66 [email protected] ","
67 [email protected] "," 67 [email protected] "\n "
68 [email protected] "\n " 68 [email protected] "}"
69 [email protected] "}" 69 [email protected] "\n\n "
70 [email protected] "\n\n " 70 [email protected]
71 [email protected] 71 [email protected]
72 [email protected] 72 [email protected] "match"
73 [email protected] "match" 73 [email protected] " "
74 [email protected] " " 74 [email protected]
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected]
77 [email protected] 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected] "Some"
80 [email protected] "Some" 80 [email protected]
81 [email protected] 81 [email protected] "("
82 [email protected] "(" 82 [email protected]
83 [email protected] 83 [email protected] "("
84 [email protected] "(" 84 [email protected]
85 [email protected] 85 [email protected] "-"
86 [email protected] "-" 86 [email protected]
87 [email protected] 87 [email protected] "1"
88 [email protected] "1" 88 [email protected] ","
89 [email protected] "," 89 [email protected] " "
90 [email protected] " " 90 [email protected]
91 [email protected] 91 [email protected] "-"
92 [email protected] "-" 92 [email protected]
93 [email protected] 93 [email protected] "1"
94 [email protected] "1" 94 [email protected] ")"
95 [email protected] ")" 95 [email protected] ")"
96 [email protected] ")" 96 [email protected] " "
97 [email protected] " " 97 [email protected]
98 [email protected] 98 [email protected] "{"
99 [email protected] "{" 99 [email protected] "\n "
100 [email protected] "\n " 100 [email protected]
101 [email protected] 101 [email protected]
102 [email protected] 102 [email protected]
103 [email protected] 103 [email protected]
104 [email protected] 104 [email protected]
105 [email protected] 105 [email protected] "Some"
106 [email protected] "Some" 106 [email protected] "("
107 [email protected] "(" 107 [email protected]
108 [email protected] 108 [email protected] "("
109 [email protected] "(" 109 [email protected]
110 [email protected] 110 [email protected] "-"
111 [email protected] "-" 111 [email protected]
112 [email protected] 112 [email protected] "1"
113 [email protected] "1" 113 [email protected] ","
114 [email protected] "," 114 [email protected] " "
115 [email protected] " " 115 [email protected]
116 [email protected] 116 [email protected] "-"
117 [email protected] "-" 117 [email protected]
118 [email protected] 118 [email protected] "1"
119 [email protected] "1" 119 [email protected] ")"
120 [email protected] ")" 120 [email protected] ")"
121 [email protected] ")" 121 [email protected] " "
122 [email protected] " " 122 [email protected] "=>"
123 [email protected] "=>" 123 [email protected] " "
124 [email protected] " " 124 [email protected]
125 [email protected] 125 [email protected] "("
126 [email protected] "(" 126 [email protected] ")"
127 [email protected] ")" 127 [email protected] ","
128 [email protected] "," 128 [email protected] "\n "
129 [email protected] "\n " 129 [email protected]
130 [email protected] 130 [email protected]
131 [email protected] 131 [email protected] "_"
132 [email protected] "_" 132 [email protected] " "
133 [email protected] " " 133 [email protected] "=>"
134 [email protected] "=>" 134 [email protected] " "
135 [email protected] " " 135 [email protected]
136 [email protected] 136 [email protected] "("
137 [email protected] "(" 137 [email protected] ")"
138 [email protected] ")" 138 [email protected] ","
139 [email protected] "," 139 [email protected] "\n "
140 [email protected] "\n " 140 [email protected] "}"
141 [email protected] "}" 141 [email protected] "\n\n "
142 [email protected] "\n\n " 142 [email protected]
143 [email protected] 143 [email protected]
144 [email protected] 144 [email protected] "match"
145 [email protected] "match" 145 [email protected] " "
146 [email protected] " " 146 [email protected]
147 [email protected] 147 [email protected]
148 [email protected] 148 [email protected]
149 [email protected] 149 [email protected]
150 [email protected] 150 [email protected]
151 [email protected] 151 [email protected]
152 [email protected] 152 [email protected] "A"
153 [email protected] "A" 153 [email protected] "::"
154 [email protected] "::" 154 [email protected]
155 [email protected] 155 [email protected]
156 [email protected] 156 [email protected] "B"
157 [email protected] "B" 157 [email protected]
158 [email protected] 158 [email protected] "("
159 [email protected] "(" 159 [email protected]
160 [email protected] 160 [email protected] "-"
161 [email protected] "-" 161 [email protected]
162 [email protected] 162 [email protected] "1"
163 [email protected] "1" 163 [email protected] ","
164 [email protected] "," 164 [email protected] " "
165 [email protected] " " 165 [email protected]
166 [email protected] 166 [email protected] "-"
167 [email protected] "-" 167 [email protected]
168 [email protected] 168 [email protected] "1"
169 [email protected] "1" 169 [email protected] ")"
170 [email protected] ")" 170 [email protected] " "
171 [email protected] " " 171 [email protected]
172 [email protected] 172 [email protected] "{"
173 [email protected] "{" 173 [email protected] "\n "
174 [email protected] "\n " 174 [email protected]
175 [email protected] 175 [email protected]
176 [email protected] 176 [email protected]
177 [email protected] 177 [email protected]
178 [email protected] 178 [email protected]
179 [email protected] 179 [email protected]
180 [email protected] 180 [email protected] "A"
181 [email protected] "A" 181 [email protected] "::"
182 [email protected] "::" 182 [email protected]
183 [email protected] 183 [email protected]
184 [email protected] 184 [email protected] "B"
185 [email protected] "B" 185 [email protected] "("
186 [email protected] "(" 186 [email protected]
187 [email protected] 187 [email protected] "-"
188 [email protected] "-" 188 [email protected]
189 [email protected] 189 [email protected] "1"
190 [email protected] "1" 190 [email protected] ","
191 [email protected] "," 191 [email protected] " "
192 [email protected] " " 192 [email protected]
193 [email protected] 193 [email protected] "-"
194 [email protected] "-" 194 [email protected]
195 [email protected] 195 [email protected] "1"
196 [email protected] "1" 196 [email protected] ")"
197 [email protected] ")" 197 [email protected] " "
198 [email protected] " " 198 [email protected] "=>"
199 [email protected] "=>" 199 [email protected] " "
200 [email protected] " " 200 [email protected]
201 [email protected] 201 [email protected] "("
202 [email protected] "(" 202 [email protected] ")"
203 [email protected] ")" 203 [email protected] ","
204 [email protected] "," 204 [email protected] "\n "
205 [email protected] "\n " 205 [email protected]
206 [email protected] 206 [email protected]
207 [email protected] 207 [email protected] "_"
208 [email protected] "_" 208 [email protected] " "
209 [email protected] " " 209 [email protected] "=>"
210 [email protected] "=>" 210 [email protected] " "
211 [email protected] " " 211 [email protected]
212 [email protected] 212 [email protected] "("
213 [email protected] "(" 213 [email protected] ")"
214 [email protected] ")" 214 [email protected] ","
215 [email protected] "," 215 [email protected] "\n "
216 [email protected] "\n " 216 [email protected] "}"
217 [email protected] "}" 217 [email protected] "\n\n "
218 [email protected] "\n\n " 218 [email protected]
219 [email protected] 219 [email protected] "if"
220 [email protected] "if" 220 [email protected] " "
221 [email protected] " " 221 [email protected]
222 [email protected] 222 [email protected] "let"
223 [email protected] "let" 223 [email protected] " "
224 [email protected] " " 224 [email protected]
225 [email protected] 225 [email protected]
226 [email protected] 226 [email protected]
227 [email protected] 227 [email protected]
228 [email protected] 228 [email protected] "Some"
229 [email protected] "Some" 229 [email protected] "("
230 [email protected] "(" 230 [email protected]
231 [email protected] 231 [email protected] "-"
232 [email protected] "-" 232 [email protected]
233 [email protected] 233 [email protected] "1"
234 [email protected] "1" 234 [email protected] ")"
235 [email protected] ")" 235 [email protected] " "
236 [email protected] " " 236 [email protected] "="
237 [email protected] "=" 237 [email protected] " "
238 [email protected] " " 238 [email protected]
239 [email protected] 239 [email protected]
240 [email protected] 240 [email protected]
241 [email protected] 241 [email protected]
242 [email protected] 242 [email protected]
243 [email protected] 243 [email protected] "Some"
244 [email protected] "Some" 244 [email protected]
245 [email protected] 245 [email protected] "("
246 [email protected] "(" 246 [email protected]
247 [email protected] 247 [email protected] "-"
248 [email protected] "-" 248 [email protected]
249 [email protected] 249 [email protected] "1"
250 [email protected] "1" 250 [email protected] ")"
251 [email protected] ")" 251 [email protected] " "
252 [email protected] " " 252 [email protected]
253 [email protected] 253 [email protected] "{"
254 [email protected] 254 [email protected] "\n "
255 [email protected] "{" 255 [email protected] "}"
256 [email protected] "\n " 256 [email protected] "\n"
257 [email protected] "}" 257 [email protected] "}"
258 [email protected] "\n"
259 [email protected] "}"
260 [email protected] "\n\n" 258 [email protected] "\n\n"
261 [email protected] 259 [email protected]
262 [email protected] "enum" 260 [email protected] "enum"
@@ -317,7 +315,6 @@ [email protected]
317 [email protected] ")" 315 [email protected] ")"
318 [email protected] " " 316 [email protected] " "
319 [email protected] 317 [email protected]
320 [email protected] 318 [email protected] "{"
321 [email protected] "{" 319 [email protected] "}"
322 [email protected] "}"
323 [email protected] "\n" 320 [email protected] "\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 9c2701bf7..28233c5d0 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
@@ -11,191 +11,190 @@ [email protected]
11 [email protected] ")" 11 [email protected] ")"
12 [email protected] " " 12 [email protected] " "
13 [email protected] 13 [email protected]
14 [email protected] 14 [email protected] "{"
15 [email protected] "{" 15 [email protected] "\n "
16 [email protected] "\n " 16 [email protected]
17 [email protected] 17 [email protected] "let"
18 [email protected] "let" 18 [email protected] " "
19 [email protected] " " 19 [email protected]
20 [email protected] 20 [email protected] "mut"
21 [email protected] "mut" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "a"
24 [email protected] "a" 24 [email protected] " "
25 [email protected] " " 25 [email protected] "="
26 [email protected] "=" 26 [email protected] " "
27 [email protected] " " 27 [email protected]
28 [email protected] 28 [email protected] "0"
29 [email protected] "0" 29 [email protected] ";"
30 [email protected] ";" 30 [email protected] "\n "
31 [email protected] "\n " 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected] "a"
38 [email protected] "a" 38 [email protected] " "
39 [email protected] " " 39 [email protected] "+="
40 [email protected] "+=" 40 [email protected] " "
41 [email protected] " " 41 [email protected]
42 [email protected] 42 [email protected] "1"
43 [email protected] "1" 43 [email protected] ";"
44 [email protected] ";" 44 [email protected] "\n "
45 [email protected] "\n " 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected]
51 [email protected] 51 [email protected] "a"
52 [email protected] "a" 52 [email protected] " "
53 [email protected] " " 53 [email protected] "-="
54 [email protected] "-=" 54 [email protected] " "
55 [email protected] " " 55 [email protected]
56 [email protected] 56 [email protected] "2"
57 [email protected] "2" 57 [email protected] ";"
58 [email protected] ";" 58 [email protected] "\n "
59 [email protected] "\n " 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected]
62 [email protected] 62 [email protected]
63 [email protected] 63 [email protected]
64 [email protected] 64 [email protected]
65 [email protected] 65 [email protected] "a"
66 [email protected] "a" 66 [email protected] " "
67 [email protected] " " 67 [email protected] "*="
68 [email protected] "*=" 68 [email protected] " "
69 [email protected] " " 69 [email protected]
70 [email protected] 70 [email protected] "3"
71 [email protected] "3" 71 [email protected] ";"
72 [email protected] ";" 72 [email protected] "\n "
73 [email protected] "\n " 73 [email protected]
74 [email protected] 74 [email protected]
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected]
77 [email protected] 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected] "a"
80 [email protected] "a" 80 [email protected] " "
81 [email protected] " " 81 [email protected] "%="
82 [email protected] "%=" 82 [email protected] " "
83 [email protected] " " 83 [email protected]
84 [email protected] 84 [email protected] "4"
85 [email protected] "4" 85 [email protected] ";"
86 [email protected] ";" 86 [email protected] "\n "
87 [email protected] "\n " 87 [email protected]
88 [email protected] 88 [email protected]
89 [email protected] 89 [email protected]
90 [email protected] 90 [email protected]
91 [email protected] 91 [email protected]
92 [email protected] 92 [email protected]
93 [email protected] 93 [email protected] "a"
94 [email protected] "a" 94 [email protected] " "
95 [email protected] " " 95 [email protected] "/="
96 [email protected] "/=" 96 [email protected] " "
97 [email protected] " " 97 [email protected]
98 [email protected] 98 [email protected] "5"
99 [email protected] "5" 99 [email protected] ";"
100 [email protected] ";" 100 [email protected] "\n "
101 [email protected] "\n " 101 [email protected]
102 [email protected] 102 [email protected]
103 [email protected] 103 [email protected]
104 [email protected] 104 [email protected]
105 [email protected] 105 [email protected]
106 [email protected] 106 [email protected]
107 [email protected] 107 [email protected] "a"
108 [email protected] "a" 108 [email protected] " "
109 [email protected] " " 109 [email protected] "|="
110 [email protected] "|=" 110 [email protected] " "
111 [email protected] " " 111 [email protected]
112 [email protected] 112 [email protected] "6"
113 [email protected] "6" 113 [email protected] ";"
114 [email protected] ";" 114 [email protected] "\n "
115 [email protected] "\n " 115 [email protected]
116 [email protected] 116 [email protected]
117 [email protected] 117 [email protected]
118 [email protected] 118 [email protected]
119 [email protected] 119 [email protected]
120 [email protected] 120 [email protected]
121 [email protected] 121 [email protected] "a"
122 [email protected] "a" 122 [email protected] " "
123 [email protected] " " 123 [email protected] "&="
124 [email protected] "&=" 124 [email protected] " "
125 [email protected] " " 125 [email protected]
126 [email protected] 126 [email protected] "7"
127 [email protected] "7" 127 [email protected] ";"
128 [email protected] ";" 128 [email protected] "\n "
129 [email protected] "\n " 129 [email protected]
130 [email protected] 130 [email protected]
131 [email protected] 131 [email protected]
132 [email protected] 132 [email protected]
133 [email protected] 133 [email protected]
134 [email protected] 134 [email protected]
135 [email protected] 135 [email protected] "a"
136 [email protected] "a" 136 [email protected] " "
137 [email protected] " " 137 [email protected] "^="
138 [email protected] "^=" 138 [email protected] " "
139 [email protected] " " 139 [email protected]
140 [email protected] 140 [email protected] "8"
141 [email protected] "8" 141 [email protected] ";"
142 [email protected] ";" 142 [email protected] "\n "
143 [email protected] "\n " 143 [email protected]
144 [email protected] 144 [email protected]
145 [email protected] 145 [email protected]
146 [email protected] 146 [email protected]
147 [email protected] 147 [email protected]
148 [email protected] 148 [email protected]
149 [email protected] 149 [email protected] "a"
150 [email protected] "a" 150 [email protected] " "
151 [email protected] " " 151 [email protected] "<="
152 [email protected] "<=" 152 [email protected] " "
153 [email protected] " " 153 [email protected]
154 [email protected] 154 [email protected] "9"
155 [email protected] "9" 155 [email protected] ";"
156 [email protected] ";" 156 [email protected] "\n "
157 [email protected] "\n " 157 [email protected]
158 [email protected] 158 [email protected]
159 [email protected] 159 [email protected]
160 [email protected] 160 [email protected]
161 [email protected] 161 [email protected]
162 [email protected] 162 [email protected]
163 [email protected] 163 [email protected] "a"
164 [email protected] "a" 164 [email protected] " "
165 [email protected] " " 165 [email protected] ">="
166 [email protected] ">=" 166 [email protected] " "
167 [email protected] " " 167 [email protected]
168 [email protected] 168 [email protected] "10"
169 [email protected] "10" 169 [email protected] ";"
170 [email protected] ";" 170 [email protected] "\n "
171 [email protected] "\n " 171 [email protected]
172 [email protected] 172 [email protected]
173 [email protected] 173 [email protected]
174 [email protected] 174 [email protected]
175 [email protected] 175 [email protected]
176 [email protected] 176 [email protected]
177 [email protected] 177 [email protected] "a"
178 [email protected] "a" 178 [email protected] " "
179 [email protected] " " 179 [email protected] ">>="
180 [email protected] ">>=" 180 [email protected] " "
181 [email protected] " " 181 [email protected]
182 [email protected] 182 [email protected] "11"
183 [email protected] "11" 183 [email protected] ";"
184 [email protected] ";" 184 [email protected] "\n "
185 [email protected] "\n " 185 [email protected]
186 [email protected] 186 [email protected]
187 [email protected] 187 [email protected]
188 [email protected] 188 [email protected]
189 [email protected] 189 [email protected]
190 [email protected] 190 [email protected]
191 [email protected] 191 [email protected] "a"
192 [email protected] "a" 192 [email protected] " "
193 [email protected] " " 193 [email protected] "<<="
194 [email protected] "<<=" 194 [email protected] " "
195 [email protected] " " 195 [email protected]
196 [email protected] 196 [email protected] "12"
197 [email protected] "12" 197 [email protected] ";"
198 [email protected] ";" 198 [email protected] "\n"
199 [email protected] "\n" 199 [email protected] "}"
200 [email protected] "}"
201 [email protected] "\n" 200 [email protected] "\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 750527bb9..0569488f8 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
@@ -9,28 +9,27 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected] "async"
17 [email protected] "async" 17 [email protected] " "
18 [email protected] " " 18 [email protected]
19 [email protected] 19 [email protected] "{"
20 [email protected] "{" 20 [email protected] "}"
21 [email protected] "}" 21 [email protected] ";"
22 [email protected] ";" 22 [email protected] "\n "
23 [email protected] "\n " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "async"
26 [email protected] "async" 26 [email protected] " "
27 [email protected] " " 27 [email protected] "move"
28 [email protected] "move" 28 [email protected] " "
29 [email protected] " " 29 [email protected]
30 [email protected] 30 [email protected] "{"
31 [email protected] "{" 31 [email protected] "}"
32 [email protected] "}" 32 [email protected] ";"
33 [email protected] ";" 33 [email protected] "\n"
34 [email protected] "\n" 34 [email protected] "}"
35 [email protected] "}"
36 [email protected] "\n\n" 35 [email protected] "\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 b5577e933..7847da085 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
@@ -49,9 +49,8 @@ [email protected]
49 [email protected] ")" 49 [email protected] ")"
50 [email protected] " " 50 [email protected] " "
51 [email protected] 51 [email protected]
52 [email protected] 52 [email protected] "{"
53 [email protected] "{" 53 [email protected] "}"
54 [email protected] "}"
55 [email protected] "\n\n" 54 [email protected] "\n\n"
56 [email protected] 55 [email protected]
57 [email protected] "fn" 56 [email protected] "fn"
@@ -63,30 +62,29 @@ [email protected]
63 [email protected] ")" 62 [email protected] ")"
64 [email protected] " " 63 [email protected] " "
65 [email protected] 64 [email protected]
66 [email protected] 65 [email protected] "{"
67 [email protected] "{" 66 [email protected] "\n "
68 [email protected] "\n " 67 [email protected]
69 [email protected] 68 [email protected]
70 [email protected] 69 [email protected]
71 [email protected] 70 [email protected]
72 [email protected] 71 [email protected]
73 [email protected] 72 [email protected] "foo"
74 [email protected] "foo" 73 [email protected]
75 [email protected] 74 [email protected] "("
76 [email protected] "(" 75 [email protected]
77 [email protected] 76 [email protected] "async"
78 [email protected] "async" 77 [email protected] " "
79 [email protected] " " 78 [email protected] "move"
80 [email protected] "move" 79 [email protected] " "
81 [email protected] " " 80 [email protected]
82 [email protected] 81 [email protected] "{"
83 [email protected] "{" 82 [email protected] " "
84 [email protected] " " 83 [email protected]
85 [email protected] 84 [email protected] "12"
86 [email protected] "12" 85 [email protected] " "
87 [email protected] " " 86 [email protected] "}"
88 [email protected] "}" 87 [email protected] ")"
89 [email protected] ")" 88 [email protected] "\n"
90 [email protected] "\n" 89 [email protected] "}"
91 [email protected] "}"
92 [email protected] "\n" 90 [email protected] "\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 6aacc2141..816740a7c 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
@@ -38,9 +38,8 @@ [email protected]
38 [email protected] ")" 38 [email protected] ")"
39 [email protected] " " 39 [email protected] " "
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "{"
42 [email protected] "{" 42 [email protected] "}"
43 [email protected] "}"
44 [email protected] "\n" 43 [email protected] "\n"
45 [email protected] 44 [email protected]
46 [email protected] "fn" 45 [email protected] "fn"
@@ -72,9 +71,8 @@ [email protected]
72 [email protected] ")" 71 [email protected] ")"
73 [email protected] " " 72 [email protected] " "
74 [email protected] 73 [email protected]
75 [email protected] 74 [email protected] "{"
76 [email protected] "{" 75 [email protected] "}"
77 [email protected] "}"
78 [email protected] "\n\n" 76 [email protected] "\n\n"
79 [email protected] 77 [email protected]
80 [email protected] 78 [email protected]
@@ -185,9 +183,8 @@ [email protected]
185 [email protected] "(" 183 [email protected] "("
186 [email protected] ")" 184 [email protected] ")"
187 [email protected] 185 [email protected]
188 [email protected] 186 [email protected] "{"
189 [email protected] "{" 187 [email protected] "}"
190 [email protected] "}"
191 [email protected] "\n\n" 188 [email protected] "\n\n"
192 [email protected] 189 [email protected]
193 [email protected] "trait" 190 [email protected] "trait"
@@ -287,9 +284,8 @@ [email protected]
287 [email protected] ")" 284 [email protected] ")"
288 [email protected] " " 285 [email protected] " "
289 [email protected] 286 [email protected]
290 [email protected] 287 [email protected] "{"
291 [email protected] "{" 288 [email protected] "}"
292 [email protected] "}"
293 [email protected] "\n " 289 [email protected] "\n "
294 [email protected] 290 [email protected]
295 [email protected] "fn" 291 [email protected] "fn"
@@ -312,9 +308,8 @@ [email protected]
312 [email protected] ")" 308 [email protected] ")"
313 [email protected] " " 309 [email protected] " "
314 [email protected] 310 [email protected]
315 [email protected] 311 [email protected] "{"
316 [email protected] "{" 312 [email protected] "}"
317 [email protected] "}"
318 [email protected] "\n " 313 [email protected] "\n "
319 [email protected] 314 [email protected]
320 [email protected] "fn" 315 [email protected] "fn"
@@ -338,9 +333,8 @@ [email protected]
338 [email protected] ")" 333 [email protected] ")"
339 [email protected] " " 334 [email protected] " "
340 [email protected] 335 [email protected]
341 [email protected] 336 [email protected] "{"
342 [email protected] "{" 337 [email protected] "}"
343 [email protected] "}"
344 [email protected] "\n " 338 [email protected] "\n "
345 [email protected] 339 [email protected]
346 [email protected] "fn" 340 [email protected] "fn"
@@ -371,9 +365,8 @@ [email protected]
371 [email protected] ")" 365 [email protected] ")"
372 [email protected] " " 366 [email protected] " "
373 [email protected] 367 [email protected]
374 [email protected] 368 [email protected] "{"
375 [email protected] "{" 369 [email protected] "}"
376 [email protected] "}"
377 [email protected] "\n " 370 [email protected] "\n "
378 [email protected] 371 [email protected]
379 [email protected] "fn" 372 [email protected] "fn"
@@ -404,9 +397,8 @@ [email protected]
404 [email protected] ")" 397 [email protected] ")"
405 [email protected] " " 398 [email protected] " "
406 [email protected] 399 [email protected]
407 [email protected] 400 [email protected] "{"
408 [email protected] "{" 401 [email protected] "}"
409 [email protected] "}"
410 [email protected] "\n " 402 [email protected] "\n "
411 [email protected] 403 [email protected]
412 [email protected] "fn" 404 [email protected] "fn"
@@ -439,9 +431,8 @@ [email protected]
439 [email protected] ")" 431 [email protected] ")"
440 [email protected] " " 432 [email protected] " "
441 [email protected] 433 [email protected]
442 [email protected] 434 [email protected] "{"
443 [email protected] "{" 435 [email protected] "}"
444 [email protected] "}"
445 [email protected] "\n " 436 [email protected] "\n "
446 [email protected] 437 [email protected]
447 [email protected] "fn" 438 [email protected] "fn"
@@ -471,9 +462,8 @@ [email protected]
471 [email protected] ")" 462 [email protected] ")"
472 [email protected] " " 463 [email protected] " "
473 [email protected] 464 [email protected]
474 [email protected] 465 [email protected] "{"
475 [email protected] "{" 466 [email protected] "}"
476 [email protected] "}"
477 [email protected] "\n " 467 [email protected] "\n "
478 [email protected] 468 [email protected]
479 [email protected] "fn" 469 [email protected] "fn"
@@ -512,8 +502,7 @@ [email protected]
512 [email protected] ")" 502 [email protected] ")"
513 [email protected] " " 503 [email protected] " "
514 [email protected] 504 [email protected]
515 [email protected] 505 [email protected] "{"
516 [email protected] "{" 506 [email protected] "}"
517 [email protected] "}"
518 [email protected] "\n" 507 [email protected] "\n"
519 [email protected] "}" 508 [email protected] "}"
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 f376f86a7..65cfa7bc5 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
@@ -9,73 +9,70 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "for"
16 [email protected] "for" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected] "_x"
20 [email protected] "_x" 20 [email protected] " "
21 [email protected] " " 21 [email protected] "in"
22 [email protected] "in" 22 [email protected] " "
23 [email protected] " " 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "0"
26 [email protected] "0" 26 [email protected] " "
27 [email protected] " " 27 [email protected] ".."
28 [email protected] ".." 28 [email protected] " "
29 [email protected] " " 29 [email protected]
30 [email protected] 30 [email protected]
31 [email protected] 31 [email protected] "("
32 [email protected] "(" 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected] "0"
35 [email protected] "0" 35 [email protected] " "
36 [email protected] " " 36 [email protected] ".."
37 [email protected] ".." 37 [email protected] " "
38 [email protected] " " 38 [email protected]
39 [email protected] 39 [email protected] "{"
40 [email protected] 40 [email protected]
41 [email protected] "{" 41 [email protected]
42 [email protected] 42 [email protected] "1"
43 [email protected] 43 [email protected] " "
44 [email protected] "1" 44 [email protected] "+"
45 [email protected] " " 45 [email protected] " "
46 [email protected] "+" 46 [email protected]
47 [email protected] " " 47 [email protected] "2"
48 [email protected] 48 [email protected] "}"
49 [email protected] "2" 49 [email protected] ")"
50 [email protected] "}" 50 [email protected] "."
51 [email protected] ")" 51 [email protected]
52 [email protected] "." 52 [email protected] "sum"
53 [email protected] 53 [email protected]
54 [email protected] "sum" 54 [email protected] "::"
55 [email protected] 55 [email protected] "<"
56 [email protected] "::" 56 [email protected]
57 [email protected] "<" 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected] "u32"
62 [email protected] 62 [email protected] ">"
63 [email protected] "u32" 63 [email protected]
64 [email protected] ">" 64 [email protected] "("
65 [email protected] 65 [email protected] ")"
66 [email protected] "(" 66 [email protected] " "
67 [email protected] ")" 67 [email protected]
68 [email protected] " " 68 [email protected] "{"
69 [email protected] 69 [email protected] "\n "
70 [email protected] 70 [email protected]
71 [email protected] "{" 71 [email protected]
72 [email protected] "\n " 72 [email protected] "break"
73 [email protected] 73 [email protected] ";"
74 [email protected] 74 [email protected] "\n "
75 [email protected] "break" 75 [email protected] "}"
76 [email protected] ";" 76 [email protected] "\n"
77 [email protected] "\n " 77 [email protected] "}"
78 [email protected] "}"
79 [email protected] "\n"
80 [email protected] "}"
81 [email protected] "\n" 78 [email protected] "\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 f20819bd2..d6aec7ab9 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
@@ -32,9 +32,8 @@ [email protected]
32 [email protected] ">" 32 [email protected] ">"
33 [email protected] " " 33 [email protected] " "
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "{"
36 [email protected] "{" 36 [email protected] "}"
37 [email protected] "}"
38 [email protected] "\n\n" 37 [email protected] "\n\n"
39 [email protected] 38 [email protected]
40 [email protected] "fn" 39 [email protected] "fn"
@@ -75,9 +74,8 @@ [email protected]
75 [email protected] ")" 74 [email protected] ")"
76 [email protected] " " 75 [email protected] " "
77 [email protected] 76 [email protected]
78 [email protected] 77 [email protected] "{"
79 [email protected] "{" 78 [email protected] "}"
80 [email protected] "}"
81 [email protected] "\n\n" 79 [email protected] "\n\n"
82 [email protected] 80 [email protected]
83 [email protected] "fn" 81 [email protected] "fn"
@@ -120,7 +118,6 @@ [email protected]
120 [email protected] ")" 118 [email protected] ")"
121 [email protected] " " 119 [email protected] " "
122 [email protected] 120 [email protected]
123 [email protected] 121 [email protected] "{"
124 [email protected] "{" 122 [email protected] "}"
125 [email protected] "}"
126 [email protected] "\n" 123 [email protected] "\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 dcdb3cc6d..9e0cec35f 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
@@ -22,29 +22,28 @@ [email protected]
22 [email protected] ")" 22 [email protected] ")"
23 [email protected] " " 23 [email protected] " "
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected] "{"
26 [email protected] "{" 26 [email protected] "\n "
27 [email protected] "\n " 27 [email protected]
28 [email protected] 28 [email protected] "let"
29 [email protected] "let" 29 [email protected] " "
30 [email protected] " " 30 [email protected]
31 [email protected] 31 [email protected] "("
32 [email protected] "(" 32 [email protected] ")"
33 [email protected] ")" 33 [email protected] ":"
34 [email protected] ":" 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected] "::"
38 [email protected] "::" 38 [email protected]
39 [email protected] 39 [email protected] "X"
40 [email protected] "X" 40 [email protected] " "
41 [email protected] " " 41 [email protected] "="
42 [email protected] "=" 42 [email protected] " "
43 [email protected] " " 43 [email protected]
44 [email protected] 44 [email protected] "("
45 [email protected] "(" 45 [email protected] ")"
46 [email protected] ")" 46 [email protected] ";"
47 [email protected] ";" 47 [email protected] "\n"
48 [email protected] "\n" 48 [email protected] "}"
49 [email protected] "}"
50 [email protected] "\n" 49 [email protected] "\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 6176a9620..7fa3033ac 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
@@ -9,58 +9,56 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "if"
16 [email protected] "if" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected]
21 [email protected] 21 [email protected]
22 [email protected] 22 [email protected] "1.0f32"
23 [email protected] "1.0f32" 23 [email protected] "."
24 [email protected] "." 24 [email protected]
25 [email protected] 25 [email protected] "floor"
26 [email protected] "floor" 26 [email protected]
27 [email protected] 27 [email protected] "("
28 [email protected] "(" 28 [email protected] ")"
29 [email protected] ")" 29 [email protected] " "
30 [email protected] " " 30 [email protected] "as"
31 [email protected] "as" 31 [email protected] " "
32 [email protected] " " 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected]
36 [email protected] 36 [email protected] "i64"
37 [email protected] "i64" 37 [email protected] " "
38 [email protected] " " 38 [email protected] "!="
39 [email protected] "!=" 39 [email protected] " "
40 [email protected] " " 40 [email protected]
41 [email protected] 41 [email protected]
42 [email protected] 42 [email protected]
43 [email protected] 43 [email protected] "1.0f32"
44 [email protected] "1.0f32" 44 [email protected] "."
45 [email protected] "." 45 [email protected]
46 [email protected] 46 [email protected] "floor"
47 [email protected] "floor" 47 [email protected]
48 [email protected] 48 [email protected] "("
49 [email protected] "(" 49 [email protected] ")"
50 [email protected] ")" 50 [email protected] " "
51 [email protected] " " 51 [email protected] "as"
52 [email protected] "as" 52 [email protected] " "
53 [email protected] " " 53 [email protected]
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected]
56 [email protected] 56 [email protected]
57 [email protected] 57 [email protected] "i64"
58 [email protected] "i64" 58 [email protected] " "
59 [email protected] " " 59 [email protected]
60 [email protected] 60 [email protected] "{"
61 [email protected] 61 [email protected] "}"
62 [email protected] "{" 62 [email protected] "\n"
63 [email protected] "}" 63 [email protected] "}"
64 [email protected] "\n"
65 [email protected] "}"
66 [email protected] "\n" 64 [email protected] "\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 342fe23f5..d93968016 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
@@ -20,9 +20,8 @@ [email protected]
20 [email protected] ")" 20 [email protected] ")"
21 [email protected] " " 21 [email protected] " "
22 [email protected] 22 [email protected]
23 [email protected] 23 [email protected] "{"
24 [email protected] "{" 24 [email protected] "}"
25 [email protected] "}"
26 [email protected] "\n\n" 25 [email protected] "\n\n"
27 [email protected] 26 [email protected]
28 [email protected] "fn" 27 [email protected] "fn"
@@ -34,26 +33,24 @@ [email protected]
34 [email protected] ")" 33 [email protected] ")"
35 [email protected] " " 34 [email protected] " "
36 [email protected] 35 [email protected]
37 [email protected] 36 [email protected] "{"
38 [email protected] "{" 37 [email protected] "\n "
39 [email protected] "\n " 38 [email protected]
40 [email protected] 39 [email protected]
41 [email protected] 40 [email protected]
42 [email protected] 41 [email protected]
43 [email protected] 42 [email protected]
44 [email protected] 43 [email protected]
45 [email protected] 44 [email protected] "foo"
46 [email protected] "foo" 45 [email protected]
47 [email protected] 46 [email protected] "("
48 [email protected] "(" 47 [email protected]
49 [email protected] 48 [email protected] "loop"
50 [email protected] "loop" 49 [email protected] " "
51 [email protected] " " 50 [email protected]
52 [email protected] 51 [email protected] "{"
53 [email protected] 52 [email protected] "}"
54 [email protected] "{" 53 [email protected] ")"
55 [email protected] "}" 54 [email protected] ";"
56 [email protected] ")" 55 [email protected] "\n"
57 [email protected] ";" 56 [email protected] "}"
58 [email protected] "\n"
59 [email protected] "}"
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 360b6e044..b5c72ee36 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
@@ -9,89 +9,88 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected] "1"
19 [email protected] "1" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "+"
21 [email protected] "+" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected] "*"
24 [email protected] "*" 24 [email protected]
25 [email protected] 25 [email protected] "&"
26 [email protected] "&" 26 [email protected]
27 [email protected] 27 [email protected] "2"
28 [email protected] "2" 28 [email protected] " "
29 [email protected] " " 29 [email protected] "+"
30 [email protected] "+" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected] "3"
33 [email protected] "3" 33 [email protected] ";"
34 [email protected] ";" 34 [email protected] "\n "
35 [email protected] "\n " 35 [email protected]
36 [email protected] 36 [email protected]
37 [email protected] 37 [email protected]
38 [email protected] 38 [email protected] "*"
39 [email protected] "*" 39 [email protected]
40 [email protected] 40 [email protected] "&"
41 [email protected] "&" 41 [email protected]
42 [email protected] 42 [email protected] "1"
43 [email protected] "1" 43 [email protected] " "
44 [email protected] " " 44 [email protected] "as"
45 [email protected] "as" 45 [email protected] " "
46 [email protected] " " 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected] "u64"
51 [email protected] "u64" 51 [email protected] ";"
52 [email protected] ";" 52 [email protected] "\n "
53 [email protected] "\n " 53 [email protected]
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected] "*"
56 [email protected] "*" 56 [email protected]
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected]
59 [email protected] 59 [email protected]
60 [email protected] 60 [email protected]
61 [email protected] 61 [email protected] "x"
62 [email protected] "x" 62 [email protected]
63 [email protected] 63 [email protected] "("
64 [email protected] "(" 64 [email protected]
65 [email protected] 65 [email protected] "1"
66 [email protected] "1" 66 [email protected] ")"
67 [email protected] ")" 67 [email protected] ";"
68 [email protected] ";" 68 [email protected] "\n "
69 [email protected] "\n " 69 [email protected]
70 [email protected] 70 [email protected]
71 [email protected] 71 [email protected] "&"
72 [email protected] "&" 72 [email protected]
73 [email protected] 73 [email protected]
74 [email protected] 74 [email protected]
75 [email protected] 75 [email protected]
76 [email protected] 76 [email protected]
77 [email protected] 77 [email protected] "x"
78 [email protected] "x" 78 [email protected] "["
79 [email protected] "[" 79 [email protected]
80 [email protected] 80 [email protected] "1"
81 [email protected] "1" 81 [email protected] "]"
82 [email protected] "]" 82 [email protected] ";"
83 [email protected] ";" 83 [email protected] "\n "
84 [email protected] "\n " 84 [email protected]
85 [email protected] 85 [email protected]
86 [email protected] 86 [email protected]
87 [email protected] 87 [email protected] "-"
88 [email protected] "-" 88 [email protected]
89 [email protected] 89 [email protected] "1"
90 [email protected] "1" 90 [email protected] ".."
91 [email protected] ".." 91 [email protected]
92 [email protected] 92 [email protected] "2"
93 [email protected] "2" 93 [email protected] ";"
94 [email protected] ";" 94 [email protected] "\n"
95 [email protected] "\n" 95 [email protected] "}"
96 [email protected] "}"
97 [email protected] "\n" 96 [email protected] "\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 225b1d0b6..ddcb139c1 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
@@ -9,93 +9,89 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected]
19 [email protected] 19 [email protected]
20 [email protected] 20 [email protected] "Some"
21 [email protected] "Some" 21 [email protected]
22 [email protected] 22 [email protected] "("
23 [email protected] "(" 23 [email protected]
24 [email protected] 24 [email protected] "for"
25 [email protected] "for" 25 [email protected] " "
26 [email protected] " " 26 [email protected]
27 [email protected] 27 [email protected] "_"
28 [email protected] "_" 28 [email protected] " "
29 [email protected] " " 29 [email protected] "in"
30 [email protected] "in" 30 [email protected] " "
31 [email protected] " " 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected] "["
34 [email protected] "[" 34 [email protected]
35 [email protected] 35 [email protected] "1"
36 [email protected] "1" 36 [email protected] "]"
37 [email protected] "]" 37 [email protected] "."
38 [email protected] "." 38 [email protected]
39 [email protected] 39 [email protected] "into_iter"
40 [email protected] "into_iter" 40 [email protected]
41 [email protected] 41 [email protected] "("
42 [email protected] "(" 42 [email protected] ")"
43 [email protected] ")" 43 [email protected] " "
44 [email protected] " " 44 [email protected]
45 [email protected] 45 [email protected] "{"
46 [email protected] 46 [email protected] "}"
47 [email protected] "{" 47 [email protected] ")"
48 [email protected] "}" 48 [email protected] ";"
49 [email protected] ")" 49 [email protected] "\n "
50 [email protected] ";" 50 [email protected]
51 [email protected] "\n " 51 [email protected]
52 [email protected] 52 [email protected]
53 [email protected] 53 [email protected]
54 [email protected] 54 [email protected]
55 [email protected] 55 [email protected]
56 [email protected] 56 [email protected] "Some"
57 [email protected] 57 [email protected]
58 [email protected] "Some" 58 [email protected] "("
59 [email protected] 59 [email protected]
60 [email protected] "(" 60 [email protected] "loop"
61 [email protected] 61 [email protected] " "
62 [email protected] "loop" 62 [email protected]
63 [email protected] " " 63 [email protected] "{"
64 [email protected] 64 [email protected] " "
65 [email protected] 65 [email protected]
66 [email protected] "{" 66 [email protected]
67 [email protected] " " 67 [email protected] "break"
68 [email protected] 68 [email protected] ";"
69 [email protected] 69 [email protected] " "
70 [email protected] "break" 70 [email protected] "}"
71 [email protected] ";" 71 [email protected] ")"
72 [email protected] " " 72 [email protected] ";"
73 [email protected] "}" 73 [email protected] "\n "
74 [email protected] ")" 74 [email protected]
75 [email protected] ";" 75 [email protected]
76 [email protected] "\n " 76 [email protected]
77 [email protected] 77 [email protected]
78 [email protected] 78 [email protected]
79 [email protected] 79 [email protected]
80 [email protected] 80 [email protected] "Some"
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected] "("
83 [email protected] "Some" 83 [email protected]
84 [email protected] 84 [email protected] "while"
85 [email protected] "(" 85 [email protected] " "
86 [email protected] 86 [email protected]
87 [email protected] "while" 87 [email protected]
88 [email protected] " " 88 [email protected] "true"
89 [email protected] 89 [email protected] " "
90 [email protected] 90 [email protected]
91 [email protected] "true" 91 [email protected] "{"
92 [email protected] " " 92 [email protected] "}"
93 [email protected] 93 [email protected] ")"
94 [email protected] 94 [email protected] ";"
95 [email protected] "{" 95 [email protected] "\n"
96 [email protected] "}" 96 [email protected] "}"
97 [email protected] ")"
98 [email protected] ";"
99 [email protected] "\n"
100 [email protected] "}"
101 [email protected] "\n" 97 [email protected] "\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 a52a08ed0..098152fc3 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
@@ -9,48 +9,47 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected]
16 [email protected] 16 [email protected]
17 [email protected] 17 [email protected]
18 [email protected] 18 [email protected] "0"
19 [email protected] "0" 19 [email protected] " "
20 [email protected] " " 20 [email protected] "as"
21 [email protected] "as" 21 [email protected] " "
22 [email protected] " " 22 [email protected]
23 [email protected] 23 [email protected]
24 [email protected] 24 [email protected]
25 [email protected] 25 [email protected]
26 [email protected] 26 [email protected] "usize"
27 [email protected] "usize" 27 [email protected] " "
28 [email protected] " " 28 [email protected] ".."
29 [email protected] ".." 29 [email protected] ";"
30 [email protected] ";" 30 [email protected] "\n "
31 [email protected] "\n " 31 [email protected]
32 [email protected] 32 [email protected]
33 [email protected] 33 [email protected]
34 [email protected] 34 [email protected]
35 [email protected] 35 [email protected] "1"
36 [email protected] "1" 36 [email protected] " "
37 [email protected] " " 37 [email protected] "+"
38 [email protected] "+" 38 [email protected] " "
39 [email protected] " " 39 [email protected]
40 [email protected] 40 [email protected]
41 [email protected] 41 [email protected] "2"
42 [email protected] "2" 42 [email protected] " "
43 [email protected] " " 43 [email protected] "as"
44 [email protected] "as" 44 [email protected] " "
45 [email protected] " " 45 [email protected]
46 [email protected] 46 [email protected]
47 [email protected] 47 [email protected]
48 [email protected] 48 [email protected]
49 [email protected] 49 [email protected] "usize"
50 [email protected] "usize" 50 [email protected] " "
51 [email protected] " " 51 [email protected] ".."
52 [email protected] ".." 52 [email protected] ";"
53 [email protected] ";" 53 [email protected] "\n"
54 [email protected] "\n" 54 [email protected] "}"
55 [email protected] "}"
56 [email protected] "\n" 55 [email protected] "\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 b8974c942..c6e982976 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
@@ -9,19 +9,18 @@ [email protected]
9 [email protected] ")" 9 [email protected] ")"
10 [email protected] " " 10 [email protected] " "
11 [email protected] 11 [email protected]
12 [email protected] 12 [email protected] "{"
13 [email protected] "{" 13 [email protected] "\n "
14 [email protected] "\n " 14 [email protected]
15 [email protected] 15 [email protected] "match"
16 [email protected] "match" 16 [email protected] " "
17 [email protected] " " 17 [email protected]
18 [email protected] 18 [email protected] ".."
19 [email protected] ".." 19 [email protected] " "
20 [email protected] " " 20 [email protected]
21 [email protected] 21 [email protected] "{"
22 [email protected] "{" 22 [email protected] "\n "
23 [email protected] "\n " 23 [email protected] "}"
24 [email protected] "}" 24 [email protected] "\n"
25 [email protected] "\n" 25 [email protected] "}"
26 [email protected] "}"
27 [email protected] "\n" 26 [email protected] "\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 46f370eec..bf791ee2b 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
@@ -70,107 +70,106 @@ [email protected]
70 [email protected] ")" 70 [email protected] ")"
71 [email protected] " " 71 [email protected] " "
72 [email protected] 72 [email protected]
73 [email protected] 73 [email protected] "{"
74 [email protected] "{" 74 [email protected] "\n "
75 [email protected] "\n " 75 [email protected]
76 [email protected] 76 [email protected] "macro"
77 [email protected] "macro" 77 [email protected] " "
78 [email protected] " " 78 [email protected]
79 [email protected] 79 [email protected] "test_merge"
80 [email protected] "test_merge" 80 [email protected]
81 [email protected] 81 [email protected]
82 [email protected] 82 [email protected] "("
83 [email protected] "(" 83 [email protected]
84 [email protected] 84 [email protected] "["
85 [email protected] "[" 85 [email protected] "$"
86 [email protected] "$" 86 [email protected]
87 [email protected] 87 [email protected] "("
88 [email protected] "(" 88 [email protected] "$"
89 [email protected] "$" 89 [email protected] "input"
90 [email protected] "input" 90 [email protected] ":"
91 [email protected] ":" 91 [email protected] "expr"
92 [email protected] "expr" 92 [email protected] ")"
93 [email protected] ")" 93 [email protected] ","
94 [email protected] "," 94 [email protected] "*"
95 [email protected] "*" 95 [email protected] " "
96 [email protected] " " 96 [email protected] "$"
97 [email protected] "$" 97 [email protected]
98 [email protected] 98 [email protected] "("
99 [email protected] "(" 99 [email protected] ","
100 [email protected] "," 100 [email protected] ")"
101 [email protected] ")" 101 [email protected] "*"
102 [email protected] "*" 102 [email protected] "]"
103 [email protected] "]" 103 [email protected] ","
104 [email protected] "," 104 [email protected] " "
105 [email protected] " " 105 [email protected]
106 [email protected] 106 [email protected] "["
107 [email protected] "[" 107 [email protected] "$"
108 [email protected] "$" 108 [email protected]
109 [email protected] 109 [email protected] "("
110 [email protected] "(" 110 [email protected] "$"
111 [email protected] "$" 111 [email protected] "output"
112 [email protected] "output" 112 [email protected] ":"
113 [email protected] ":" 113 [email protected] "expr"
114 [email protected] "expr" 114 [email protected] ")"
115 [email protected] ")" 115 [email protected] ","
116 [email protected] "," 116 [email protected] "*"
117 [email protected] "*" 117 [email protected] " "
118 [email protected] " " 118 [email protected] "$"
119 [email protected] "$" 119 [email protected]
120 [email protected] 120 [email protected] "("
121 [email protected] "(" 121 [email protected] ","
122 [email protected] "," 122 [email protected] ")"
123 [email protected] ")" 123 [email protected] "*"
124 [email protected] "*" 124 [email protected] "]"
125 [email protected] "]" 125 [email protected] ")"
126 [email protected] ")" 126 [email protected] " "
127 [email protected] " " 127 [email protected]
128 [email protected] 128 [email protected] "{"
129 [email protected] "{" 129 [email protected] "\n "
130 [email protected] "\n " 130 [email protected] "assert_eq"
131 [email protected] "assert_eq" 131 [email protected] "!"
132 [email protected] "!" 132 [email protected]
133 [email protected] 133 [email protected] "("
134 [email protected] "(" 134 [email protected] "\n "
135 [email protected] "\n " 135 [email protected] "merge_use_trees"
136 [email protected] "merge_use_trees" 136 [email protected]
137 [email protected] 137 [email protected] "("
138 [email protected] "(" 138 [email protected] "parse_use_trees"
139 [email protected] "parse_use_trees" 139 [email protected] "!"
140 [email protected] "!" 140 [email protected]
141 [email protected] 141 [email protected] "("
142 [email protected] "(" 142 [email protected] "$"
143 [email protected] "$" 143 [email protected]
144 [email protected] 144 [email protected] "("
145 [email protected] "(" 145 [email protected] "$"
146 [email protected] "$" 146 [email protected] "input"
147 [email protected] "input" 147 [email protected] ","
148 [email protected] "," 148 [email protected] ")"
149 [email protected] ")" 149 [email protected] "*"
150 [email protected] "*" 150 [email protected] ")"
151 [email protected] ")" 151 [email protected] ")"
152 [email protected] ")" 152 [email protected] ","
153 [email protected] "," 153 [email protected] "\n "
154 [email protected] "\n " 154 [email protected] "parse_use_trees"
155 [email protected] "parse_use_trees" 155 [email protected] "!"
156 [email protected] "!" 156 [email protected]
157 [email protected] 157 [email protected] "("
158 [email protected] "(" 158 [email protected] "$"
159 [email protected] "$" 159 [email protected]
160 [email protected] 160 [email protected] "("
161 [email protected] "(" 161 [email protected] "$"
162 [email protected] "$" 162 [email protected] "output"
163 [email protected] "output" 163 [email protected] ","
164 [email protected] "," 164 [email protected] ")"
165 [email protected] ")" 165 [email protected] "*"
166 [email protected] "*" 166 [email protected] ")"
167 [email protected] ")" 167 [email protected] ","
168 [email protected] "," 168 [email protected] "\n "
169 [email protected] "\n " 169 [email protected] ")"
170 [email protected] ")" 170 [email protected] ";"
171 [email protected] ";" 171 [email protected] "\n "
172 [email protected] "\n " 172 [email protected] "}"
173 [email protected] "}" 173 [email protected] "\n"
174 [email protected] "\n" 174 [email protected] "}"
175 [email protected] "}"
176 [email protected] "\n" 175 [email protected] "\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 1cd77aa14..886b211d0 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
@@ -47,9 +47,8 @@ [email protected]
47 [email protected] ")" 47 [email protected] ")"
48 [email protected] " " 48 [email protected] " "
49 [email protected] 49 [email protected]
50 [email protected] 50 [email protected] "{"
51 [email protected] "{" 51 [email protected] "}"
52 [email protected] "}"
53 [email protected] "\n " 52 [email protected] "\n "
54 [email protected] 53 [email protected]
55 [email protected] "fn" 54 [email protected] "fn"
@@ -90,9 +89,8 @@ [email protected]
90 [email protected] ")" 89 [email protected] ")"
91 [email protected] " " 90 [email protected] " "
92 [email protected] 91 [email protected]
93 [email protected] 92 [email protected] "{"
94 [email protected] "{" 93 [email protected] "}"
95 [email protected] "}"
96 [email protected] "\n " 94 [email protected] "\n "
97 [email protected] 95 [email protected]
98 [email protected] "fn" 96 [email protected] "fn"
@@ -122,9 +120,8 @@ [email protected]
122 [email protected] ")" 120 [email protected] ")"
123 [email protected] " " 121 [email protected] " "
124 [email protected] 122 [email protected]
125 [email protected] 123 [email protected] "{"
126 [email protected] "{" 124 [email protected] "}"
127 [email protected] "}"
128 [email protected] "\n " 125 [email protected] "\n "
129 [email protected] 126 [email protected]
130 [email protected] "fn" 127 [email protected] "fn"
@@ -155,9 +152,8 @@ [email protected]
155 [email protected] ")" 152 [email protected] ")"
156 [email protected] " " 153 [email protected] " "
157 [email protected] 154 [email protected]
158 [email protected] 155 [email protected] "{"
159 [email protected] "{" 156 [email protected] "}"
160 [email protected] "}"
161 [email protected] "\n " 157 [email protected] "\n "
162 [email protected] 158 [email protected]
163 [email protected] "fn" 159 [email protected] "fn"
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 4f9a14066..a0423806c 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
@@ -50,9 +50,8 @@ [email protected]
50 [email protected] ")" 50 [email protected] ")"
51 [email protected] " " 51 [email protected] " "
52 [email protected] 52 [email protected]
53 [email protected] 53 [email protected] "{"
54 [email protected] "{" 54 [email protected] "}"
55 [email protected] "}"
56 [email protected] "\n " 55 [email protected] "\n "
57 [email protected] 56 [email protected]
58 [email protected] "fn" 57 [email protected] "fn"
@@ -93,9 +92,8 @@ [email protected]
93 [email protected] ")" 92 [email protected] ")"
94 [email protected] " " 93 [email protected] " "
95 [email protected] 94 [email protected]
96 [email protected] 95 [email protected] "{"
97 [email protected] "{" 96 [email protected] "}"
98 [email protected] "}"
99 [email protected] "\n " 97 [email protected] "\n "
100 [email protected] 98 [email protected]
101 [email protected] "fn" 99 [email protected] "fn"
@@ -125,9 +123,8 @@ [email protected]
125 [email protected] ")" 123 [email protected] ")"
126 [email protected] " " 124 [email protected] " "
127 [email protected] 125 [email protected]
128 [email protected] 126 [email protected] "{"
129 [email protected] "{" 127 [email protected] "}"
130 [email protected] "}"
131 [email protected] "\n " 128 [email protected] "\n "
132 [email protected] 129 [email protected]
133 [email protected] "fn" 130 [email protected] "fn"
@@ -158,9 +155,8 @@ [email protected]
158 [email protected] ")" 155 [email protected] ")"
159 [email protected] " " 156 [email protected] " "
160 [email protected] 157 [email protected]
161 [email protected] 158 [email protected] "{"
162 [email protected] "{" 159 [email protected] "}"
163 [email protected] "}"
164 [email protected] "\n" 160 [email protected] "\n"
165 [email protected] "}" 161 [email protected] "}"
166 [email protected] "\n" 162 [email protected] "\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 3294f4901..d1fffdd63 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
@@ -11,7 +11,6 @@ [email protected]
11 [email protected] ")" 11 [email protected] ")"
12 [email protected] " " 12 [email protected] " "
13 [email protected] 13 [email protected]
14 [email protected] 14 [email protected] "{"
15 [email protected] "{" 15 [email protected] "}"
16 [email protected] "}"
17 [email protected] "\n" 16 [email protected] "\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 633b14000..eb2f8eb3c 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
@@ -55,7 +55,6 @@ [email protected]
55 [email protected] "Send" 55 [email protected] "Send"
56 [email protected] " " 56 [email protected] " "
57 [email protected] 57 [email protected]
58 [email protected] 58 [email protected] "{"
59 [email protected] "{" 59 [email protected] "}"
60 [email protected] "}"
61 [email protected] "\n" 60 [email protected] "\n"
diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml
index cee0248b6..8c94f430a 100644
--- a/crates/rust-analyzer/Cargo.toml
+++ b/crates/rust-analyzer/Cargo.toml
@@ -20,13 +20,13 @@ globset = "0.4.4"
20itertools = "0.9.0" 20itertools = "0.9.0"
21jod-thread = "0.1.0" 21jod-thread = "0.1.0"
22log = "0.4.8" 22log = "0.4.8"
23lsp-types = { version = "0.73.0", features = ["proposed"] } 23lsp-types = { version = "0.74.0", features = ["proposed"] }
24parking_lot = "0.10.0" 24parking_lot = "0.10.0"
25pico-args = "0.3.1" 25pico-args = "0.3.1"
26rand = { version = "0.7.3", features = ["small_rng"] } 26rand = { version = "0.7.3", features = ["small_rng"] }
27relative-path = "1.0.0" 27relative-path = "1.0.0"
28rustc-hash = "1.1.0" 28rustc-hash = "1.1.0"
29serde = { version = "1.0.104", features = ["derive"] } 29serde = { version = "1.0.106", features = ["derive"] }
30serde_json = "1.0.48" 30serde_json = "1.0.48"
31threadpool = "1.7.1" 31threadpool = "1.7.1"
32 32
@@ -39,7 +39,7 @@ ra_prof = { path = "../ra_prof" }
39ra_project_model = { path = "../ra_project_model" } 39ra_project_model = { path = "../ra_project_model" }
40ra_syntax = { path = "../ra_syntax" } 40ra_syntax = { path = "../ra_syntax" }
41ra_text_edit = { path = "../ra_text_edit" } 41ra_text_edit = { path = "../ra_text_edit" }
42ra_vfs = "0.5.2" 42ra_vfs = "0.6.0"
43 43
44# This should only be used in CLI 44# This should only be used in CLI
45ra_db = { path = "../ra_db" } 45ra_db = { path = "../ra_db" }
diff --git a/crates/rust-analyzer/src/caps.rs b/crates/rust-analyzer/src/caps.rs
index 45b60768a..44222d8bd 100644
--- a/crates/rust-analyzer/src/caps.rs
+++ b/crates/rust-analyzer/src/caps.rs
@@ -3,20 +3,20 @@
3use crate::semantic_tokens; 3use crate::semantic_tokens;
4 4
5use lsp_types::{ 5use lsp_types::{
6 CallHierarchyServerCapability, CodeActionProviderCapability, CodeLensOptions, 6 CallHierarchyServerCapability, CodeActionOptions, CodeActionProviderCapability,
7 CompletionOptions, DocumentOnTypeFormattingOptions, FoldingRangeProviderCapability, 7 CodeLensOptions, CompletionOptions, DocumentOnTypeFormattingOptions,
8 ImplementationProviderCapability, RenameOptions, RenameProviderCapability, SaveOptions, 8 FoldingRangeProviderCapability, ImplementationProviderCapability, RenameOptions,
9 SelectionRangeProviderCapability, SemanticTokensDocumentProvider, SemanticTokensLegend, 9 RenameProviderCapability, SaveOptions, SelectionRangeProviderCapability,
10 SemanticTokensOptions, ServerCapabilities, SignatureHelpOptions, TextDocumentSyncCapability, 10 SemanticTokensDocumentProvider, SemanticTokensLegend, SemanticTokensOptions,
11 TextDocumentSyncKind, TextDocumentSyncOptions, TypeDefinitionProviderCapability, 11 ServerCapabilities, SignatureHelpOptions, TextDocumentSyncCapability, TextDocumentSyncKind,
12 WorkDoneProgressOptions, 12 TextDocumentSyncOptions, TypeDefinitionProviderCapability, WorkDoneProgressOptions,
13}; 13};
14 14
15pub fn server_capabilities() -> ServerCapabilities { 15pub fn server_capabilities() -> ServerCapabilities {
16 ServerCapabilities { 16 ServerCapabilities {
17 text_document_sync: Some(TextDocumentSyncCapability::Options(TextDocumentSyncOptions { 17 text_document_sync: Some(TextDocumentSyncCapability::Options(TextDocumentSyncOptions {
18 open_close: Some(true), 18 open_close: Some(true),
19 change: Some(TextDocumentSyncKind::Full), 19 change: Some(TextDocumentSyncKind::Incremental),
20 will_save: None, 20 will_save: None,
21 will_save_wait_until: None, 21 will_save_wait_until: None,
22 save: Some(SaveOptions::default()), 22 save: Some(SaveOptions::default()),
@@ -40,7 +40,20 @@ pub fn server_capabilities() -> ServerCapabilities {
40 document_highlight_provider: Some(true), 40 document_highlight_provider: Some(true),
41 document_symbol_provider: Some(true), 41 document_symbol_provider: Some(true),
42 workspace_symbol_provider: Some(true), 42 workspace_symbol_provider: Some(true),
43 code_action_provider: Some(CodeActionProviderCapability::Simple(true)), 43 code_action_provider: Some(CodeActionProviderCapability::Options(CodeActionOptions {
44 // Advertise support for all built-in CodeActionKinds
45 code_action_kinds: Some(vec![
46 lsp_types::code_action_kind::EMPTY.to_string(),
47 lsp_types::code_action_kind::QUICKFIX.to_string(),
48 lsp_types::code_action_kind::REFACTOR.to_string(),
49 lsp_types::code_action_kind::REFACTOR_EXTRACT.to_string(),
50 lsp_types::code_action_kind::REFACTOR_INLINE.to_string(),
51 lsp_types::code_action_kind::REFACTOR_REWRITE.to_string(),
52 lsp_types::code_action_kind::SOURCE.to_string(),
53 lsp_types::code_action_kind::SOURCE_ORGANIZE_IMPORTS.to_string(),
54 ]),
55 work_done_progress_options: Default::default(),
56 })),
44 code_lens_provider: Some(CodeLensOptions { resolve_provider: Some(true) }), 57 code_lens_provider: Some(CodeLensOptions { resolve_provider: Some(true) }),
45 document_formatting_provider: Some(true), 58 document_formatting_provider: Some(true),
46 document_range_formatting_provider: None, 59 document_range_formatting_provider: None,
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs
index 74a63e32a..15b7c6912 100644
--- a/crates/rust-analyzer/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
@@ -49,7 +49,6 @@ pub enum FilesWatcher {
49 49
50#[derive(Debug, Clone)] 50#[derive(Debug, Clone)]
51pub struct NotificationsConfig { 51pub struct NotificationsConfig {
52 pub workspace_loaded: bool,
53 pub cargo_toml_not_found: bool, 52 pub cargo_toml_not_found: bool,
54} 53}
55 54
@@ -70,6 +69,7 @@ pub struct ClientCapsConfig {
70 pub location_link: bool, 69 pub location_link: bool,
71 pub line_folding_only: bool, 70 pub line_folding_only: bool,
72 pub hierarchical_symbols: bool, 71 pub hierarchical_symbols: bool,
72 pub code_action_literals: bool,
73} 73}
74 74
75impl Default for Config { 75impl Default for Config {
@@ -82,10 +82,7 @@ impl Default for Config {
82 lru_capacity: None, 82 lru_capacity: None,
83 proc_macro_srv: None, 83 proc_macro_srv: None,
84 files: FilesConfig { watcher: FilesWatcher::Notify, exclude: Vec::new() }, 84 files: FilesConfig { watcher: FilesWatcher::Notify, exclude: Vec::new() },
85 notifications: NotificationsConfig { 85 notifications: NotificationsConfig { cargo_toml_not_found: true },
86 workspace_loaded: true,
87 cargo_toml_not_found: true,
88 },
89 86
90 cargo: CargoConfig::default(), 87 cargo: CargoConfig::default(),
91 rustfmt: RustfmtConfig::Rustfmt { extra_args: Vec::new() }, 88 rustfmt: RustfmtConfig::Rustfmt { extra_args: Vec::new() },
@@ -128,7 +125,6 @@ impl Config {
128 Some("client") => FilesWatcher::Client, 125 Some("client") => FilesWatcher::Client,
129 Some("notify") | _ => FilesWatcher::Notify 126 Some("notify") | _ => FilesWatcher::Notify
130 }; 127 };
131 set(value, "/notifications/workspaceLoaded", &mut self.notifications.workspace_loaded);
132 set(value, "/notifications/cargoTomlNotFound", &mut self.notifications.cargo_toml_not_found); 128 set(value, "/notifications/cargoTomlNotFound", &mut self.notifications.cargo_toml_not_found);
133 129
134 set(value, "/cargo/noDefaultFeatures", &mut self.cargo.no_default_features); 130 set(value, "/cargo/noDefaultFeatures", &mut self.cargo.no_default_features);
@@ -221,6 +217,11 @@ impl Config {
221 { 217 {
222 self.client_caps.hierarchical_symbols = value 218 self.client_caps.hierarchical_symbols = value
223 } 219 }
220 if let Some(value) =
221 caps.code_action.as_ref().and_then(|it| Some(it.code_action_literal_support.is_some()))
222 {
223 self.client_caps.code_action_literals = value;
224 }
224 self.completion.allow_snippets(false); 225 self.completion.allow_snippets(false);
225 if let Some(completion) = &caps.completion { 226 if let Some(completion) = &caps.completion {
226 if let Some(completion_item) = &completion.completion_item { 227 if let Some(completion_item) = &completion.completion_item {
diff --git a/crates/rust-analyzer/src/conv.rs b/crates/rust-analyzer/src/conv.rs
index ffe3ea84d..7be5ebcdb 100644
--- a/crates/rust-analyzer/src/conv.rs
+++ b/crates/rust-analyzer/src/conv.rs
@@ -150,7 +150,7 @@ impl ConvWith<(&LineIndex, LineEndings)> for CompletionItem {
150 detail: self.detail().map(|it| it.to_string()), 150 detail: self.detail().map(|it| it.to_string()),
151 filter_text: Some(self.lookup().to_string()), 151 filter_text: Some(self.lookup().to_string()),
152 kind: self.kind().map(|it| it.conv()), 152 kind: self.kind().map(|it| it.conv()),
153 text_edit: Some(text_edit), 153 text_edit: Some(text_edit.into()),
154 additional_text_edits: Some(additional_text_edits), 154 additional_text_edits: Some(additional_text_edits),
155 documentation: self.documentation().map(|it| it.conv()), 155 documentation: self.documentation().map(|it| it.conv()),
156 deprecated: Some(self.deprecated()), 156 deprecated: Some(self.deprecated()),
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index f3aef3f0f..3bc2e0a46 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -6,9 +6,12 @@ mod subscriptions;
6pub(crate) mod pending_requests; 6pub(crate) mod pending_requests;
7 7
8use std::{ 8use std::{
9 borrow::Cow,
9 env, 10 env,
10 error::Error, 11 error::Error,
11 fmt, panic, 12 fmt,
13 ops::Range,
14 panic,
12 path::PathBuf, 15 path::PathBuf,
13 sync::Arc, 16 sync::Arc,
14 time::{Duration, Instant}, 17 time::{Duration, Instant},
@@ -18,11 +21,12 @@ use crossbeam_channel::{never, select, unbounded, RecvError, Sender};
18use itertools::Itertools; 21use itertools::Itertools;
19use lsp_server::{Connection, ErrorCode, Message, Notification, Request, RequestId, Response}; 22use lsp_server::{Connection, ErrorCode, Message, Notification, Request, RequestId, Response};
20use lsp_types::{ 23use lsp_types::{
21 NumberOrString, WorkDoneProgress, WorkDoneProgressBegin, WorkDoneProgressCreateParams, 24 DidChangeTextDocumentParams, NumberOrString, TextDocumentContentChangeEvent, WorkDoneProgress,
22 WorkDoneProgressEnd, WorkDoneProgressReport, 25 WorkDoneProgressBegin, WorkDoneProgressCreateParams, WorkDoneProgressEnd,
26 WorkDoneProgressReport,
23}; 27};
24use ra_flycheck::{url_from_path_with_drive_lowercasing, CheckTask}; 28use ra_flycheck::{url_from_path_with_drive_lowercasing, CheckTask};
25use ra_ide::{Canceled, FileId, LibraryData, SourceRootId}; 29use ra_ide::{Canceled, FileId, LibraryData, LineIndex, SourceRootId};
26use ra_prof::profile; 30use ra_prof::profile;
27use ra_project_model::{PackageRoot, ProjectWorkspace}; 31use ra_project_model::{PackageRoot, ProjectWorkspace};
28use ra_vfs::{VfsFile, VfsTask, Watch}; 32use ra_vfs::{VfsFile, VfsTask, Watch};
@@ -33,6 +37,7 @@ use threadpool::ThreadPool;
33 37
34use crate::{ 38use crate::{
35 config::{Config, FilesWatcher}, 39 config::{Config, FilesWatcher},
40 conv::{ConvWith, TryConvWith},
36 diagnostics::DiagnosticTask, 41 diagnostics::DiagnosticTask,
37 main_loop::{ 42 main_loop::{
38 pending_requests::{PendingRequest, PendingRequests}, 43 pending_requests::{PendingRequest, PendingRequests},
@@ -410,8 +415,7 @@ fn loop_turn(
410 }); 415 });
411 } 416 }
412 417
413 let show_progress = 418 let show_progress = !loop_state.workspace_loaded;
414 !loop_state.workspace_loaded && world_state.config.notifications.workspace_loaded;
415 419
416 if !loop_state.workspace_loaded 420 if !loop_state.workspace_loaded
417 && loop_state.roots_scanned == loop_state.roots_total 421 && loop_state.roots_scanned == loop_state.roots_total
@@ -579,12 +583,16 @@ fn on_notification(
579 Err(not) => not, 583 Err(not) => not,
580 }; 584 };
581 let not = match notification_cast::<req::DidChangeTextDocument>(not) { 585 let not = match notification_cast::<req::DidChangeTextDocument>(not) {
582 Ok(mut params) => { 586 Ok(params) => {
583 let uri = params.text_document.uri; 587 let DidChangeTextDocumentParams { text_document, content_changes } = params;
588 let world = state.snapshot();
589 let file_id = text_document.try_conv_with(&world)?;
590 let line_index = world.analysis().file_line_index(file_id)?;
591 let uri = text_document.uri;
584 let path = uri.to_file_path().map_err(|()| format!("invalid uri: {}", uri))?; 592 let path = uri.to_file_path().map_err(|()| format!("invalid uri: {}", uri))?;
585 let text = 593 state.vfs.write().change_file_overlay(&path, |old_text| {
586 params.content_changes.pop().ok_or_else(|| "empty changes".to_string())?.text; 594 apply_document_changes(old_text, Cow::Borrowed(&line_index), content_changes);
587 state.vfs.write().change_file_overlay(path.as_path(), text); 595 });
588 return Ok(()); 596 return Ok(());
589 } 597 }
590 Err(not) => not, 598 Err(not) => not,
@@ -653,6 +661,48 @@ fn on_notification(
653 Ok(()) 661 Ok(())
654} 662}
655 663
664fn apply_document_changes(
665 old_text: &mut String,
666 mut line_index: Cow<'_, LineIndex>,
667 content_changes: Vec<TextDocumentContentChangeEvent>,
668) {
669 // The changes we got must be applied sequentially, but can cross lines so we
670 // have to keep our line index updated.
671 // Some clients (e.g. Code) sort the ranges in reverse. As an optimization, we
672 // remember the last valid line in the index and only rebuild it if needed.
673 enum IndexValid {
674 All,
675 UpToLine(u64),
676 }
677
678 impl IndexValid {
679 fn covers(&self, line: u64) -> bool {
680 match *self {
681 IndexValid::UpToLine(to) => to >= line,
682 _ => true,
683 }
684 }
685 }
686
687 let mut index_valid = IndexValid::All;
688 for change in content_changes {
689 match change.range {
690 Some(range) => {
691 if !index_valid.covers(range.start.line) {
692 line_index = Cow::Owned(LineIndex::new(&old_text));
693 }
694 index_valid = IndexValid::UpToLine(range.start.line);
695 let range = range.conv_with(&line_index);
696 old_text.replace_range(Range::<usize>::from(range), &change.text);
697 }
698 None => {
699 *old_text = change.text;
700 index_valid = IndexValid::UpToLine(0);
701 }
702 }
703 }
704}
705
656fn on_check_task( 706fn on_check_task(
657 task: CheckTask, 707 task: CheckTask,
658 world_state: &mut WorldState, 708 world_state: &mut WorldState,
@@ -958,3 +1008,64 @@ where
958{ 1008{
959 Request::new(id, R::METHOD.to_string(), params) 1009 Request::new(id, R::METHOD.to_string(), params)
960} 1010}
1011
1012#[cfg(test)]
1013mod tests {
1014 use std::borrow::Cow;
1015
1016 use lsp_types::{Position, Range, TextDocumentContentChangeEvent};
1017 use ra_ide::LineIndex;
1018
1019 #[test]
1020 fn apply_document_changes() {
1021 fn run(text: &mut String, changes: Vec<TextDocumentContentChangeEvent>) {
1022 let line_index = Cow::Owned(LineIndex::new(&text));
1023 super::apply_document_changes(text, line_index, changes);
1024 }
1025
1026 macro_rules! c {
1027 [$($sl:expr, $sc:expr; $el:expr, $ec:expr => $text:expr),+] => {
1028 vec![$(TextDocumentContentChangeEvent {
1029 range: Some(Range {
1030 start: Position { line: $sl, character: $sc },
1031 end: Position { line: $el, character: $ec },
1032 }),
1033 range_length: None,
1034 text: String::from($text),
1035 }),+]
1036 };
1037 }
1038
1039 let mut text = String::new();
1040 run(&mut text, vec![]);
1041 assert_eq!(text, "");
1042 run(
1043 &mut text,
1044 vec![TextDocumentContentChangeEvent {
1045 range: None,
1046 range_length: None,
1047 text: String::from("the"),
1048 }],
1049 );
1050 assert_eq!(text, "the");
1051 run(&mut text, c![0, 3; 0, 3 => " quick"]);
1052 assert_eq!(text, "the quick");
1053 run(&mut text, c![0, 0; 0, 4 => "", 0, 5; 0, 5 => " foxes"]);
1054 assert_eq!(text, "quick foxes");
1055 run(&mut text, c![0, 11; 0, 11 => "\ndream"]);
1056 assert_eq!(text, "quick foxes\ndream");
1057 run(&mut text, c![1, 0; 1, 0 => "have "]);
1058 assert_eq!(text, "quick foxes\nhave dream");
1059 run(&mut text, c![0, 0; 0, 0 => "the ", 1, 4; 1, 4 => " quiet", 1, 16; 1, 16 => "s\n"]);
1060 assert_eq!(text, "the quick foxes\nhave quiet dreams\n");
1061 run(&mut text, c![0, 15; 0, 15 => "\n", 2, 17; 2, 17 => "\n"]);
1062 assert_eq!(text, "the quick foxes\n\nhave quiet dreams\n\n");
1063 run(
1064 &mut text,
1065 c![1, 0; 1, 0 => "DREAM", 2, 0; 2, 0 => "they ", 3, 0; 3, 0 => "DON'T THEY?"],
1066 );
1067 assert_eq!(text, "the quick foxes\nDREAM\nthey have quiet dreams\nDON'T THEY?\n");
1068 run(&mut text, c![0, 10; 1, 5 => "", 2, 0; 2, 12 => ""]);
1069 assert_eq!(text, "the quick \nthey have quiet dreams\n");
1070 }
1071}
diff --git a/crates/rust-analyzer/src/main_loop/handlers.rs b/crates/rust-analyzer/src/main_loop/handlers.rs
index 6caaf5f88..c7a96ba93 100644
--- a/crates/rust-analyzer/src/main_loop/handlers.rs
+++ b/crates/rust-analyzer/src/main_loop/handlers.rs
@@ -19,8 +19,7 @@ use lsp_types::{
19 TextEdit, Url, WorkspaceEdit, 19 TextEdit, Url, WorkspaceEdit,
20}; 20};
21use ra_ide::{ 21use ra_ide::{
22 Assist, AssistId, FileId, FilePosition, FileRange, Query, RangeInfo, Runnable, RunnableKind, 22 Assist, FileId, FilePosition, FileRange, Query, RangeInfo, Runnable, RunnableKind, SearchScope,
23 SearchScope,
24}; 23};
25use ra_prof::profile; 24use ra_prof::profile;
26use ra_syntax::{AstNode, SyntaxKind, TextRange, TextSize}; 25use ra_syntax::{AstNode, SyntaxKind, TextRange, TextSize};
@@ -47,11 +46,11 @@ use crate::{
47pub fn handle_analyzer_status(world: WorldSnapshot, _: ()) -> Result<String> { 46pub fn handle_analyzer_status(world: WorldSnapshot, _: ()) -> Result<String> {
48 let _p = profile("handle_analyzer_status"); 47 let _p = profile("handle_analyzer_status");
49 let mut buf = world.status(); 48 let mut buf = world.status();
50 format_to!(buf, "\n\nrequests:"); 49 format_to!(buf, "\n\nrequests:\n");
51 let requests = world.latest_requests.read(); 50 let requests = world.latest_requests.read();
52 for (is_last, r) in requests.iter() { 51 for (is_last, r) in requests.iter() {
53 let mark = if is_last { "*" } else { " " }; 52 let mark = if is_last { "*" } else { " " };
54 format_to!(buf, "{}{:4} {:<36}{}ms", mark, r.id, r.method, r.duration.as_millis()); 53 format_to!(buf, "{}{:4} {:<36}{}ms\n", mark, r.id, r.method, r.duration.as_millis());
55 } 54 }
56 Ok(buf) 55 Ok(buf)
57} 56}
@@ -326,10 +325,10 @@ pub fn handle_workspace_symbol(
326 325
327pub fn handle_goto_definition( 326pub fn handle_goto_definition(
328 world: WorldSnapshot, 327 world: WorldSnapshot,
329 params: req::TextDocumentPositionParams, 328 params: req::GotoDefinitionParams,
330) -> Result<Option<req::GotoDefinitionResponse>> { 329) -> Result<Option<req::GotoDefinitionResponse>> {
331 let _p = profile("handle_goto_definition"); 330 let _p = profile("handle_goto_definition");
332 let position = params.try_conv_with(&world)?; 331 let position = params.text_document_position_params.try_conv_with(&world)?;
333 let nav_info = match world.analysis().goto_definition(position)? { 332 let nav_info = match world.analysis().goto_definition(position)? {
334 None => return Ok(None), 333 None => return Ok(None),
335 Some(it) => it, 334 Some(it) => it,
@@ -340,10 +339,10 @@ pub fn handle_goto_definition(
340 339
341pub fn handle_goto_implementation( 340pub fn handle_goto_implementation(
342 world: WorldSnapshot, 341 world: WorldSnapshot,
343 params: req::TextDocumentPositionParams, 342 params: req::GotoImplementationParams,
344) -> Result<Option<req::GotoImplementationResponse>> { 343) -> Result<Option<req::GotoImplementationResponse>> {
345 let _p = profile("handle_goto_implementation"); 344 let _p = profile("handle_goto_implementation");
346 let position = params.try_conv_with(&world)?; 345 let position = params.text_document_position_params.try_conv_with(&world)?;
347 let nav_info = match world.analysis().goto_implementation(position)? { 346 let nav_info = match world.analysis().goto_implementation(position)? {
348 None => return Ok(None), 347 None => return Ok(None),
349 Some(it) => it, 348 Some(it) => it,
@@ -354,10 +353,10 @@ pub fn handle_goto_implementation(
354 353
355pub fn handle_goto_type_definition( 354pub fn handle_goto_type_definition(
356 world: WorldSnapshot, 355 world: WorldSnapshot,
357 params: req::TextDocumentPositionParams, 356 params: req::GotoTypeDefinitionParams,
358) -> Result<Option<req::GotoTypeDefinitionResponse>> { 357) -> Result<Option<req::GotoTypeDefinitionResponse>> {
359 let _p = profile("handle_goto_type_definition"); 358 let _p = profile("handle_goto_type_definition");
360 let position = params.try_conv_with(&world)?; 359 let position = params.text_document_position_params.try_conv_with(&world)?;
361 let nav_info = match world.analysis().goto_type_definition(position)? { 360 let nav_info = match world.analysis().goto_type_definition(position)? {
362 None => return Ok(None), 361 None => return Ok(None),
363 Some(it) => it, 362 Some(it) => it,
@@ -401,11 +400,7 @@ pub fn handle_runnables(
401 range: Default::default(), 400 range: Default::default(),
402 label: format!("cargo {} -p {}", cmd, spec.package), 401 label: format!("cargo {} -p {}", cmd, spec.package),
403 bin: "cargo".to_string(), 402 bin: "cargo".to_string(),
404 args: { 403 args: vec![cmd.to_string(), "--package".to_string(), spec.package.clone()],
405 let mut args = vec![cmd.to_string()];
406 spec.clone().push_to(&mut args);
407 args
408 },
409 extra_args: Vec::new(), 404 extra_args: Vec::new(),
410 env: FxHashMap::default(), 405 env: FxHashMap::default(),
411 cwd: workspace_root.map(|root| root.to_owned()), 406 cwd: workspace_root.map(|root| root.to_owned()),
@@ -487,10 +482,10 @@ pub fn handle_folding_range(
487 482
488pub fn handle_signature_help( 483pub fn handle_signature_help(
489 world: WorldSnapshot, 484 world: WorldSnapshot,
490 params: req::TextDocumentPositionParams, 485 params: req::SignatureHelpParams,
491) -> Result<Option<req::SignatureHelp>> { 486) -> Result<Option<req::SignatureHelp>> {
492 let _p = profile("handle_signature_help"); 487 let _p = profile("handle_signature_help");
493 let position = params.try_conv_with(&world)?; 488 let position = params.text_document_position_params.try_conv_with(&world)?;
494 if let Some(call_info) = world.analysis().call_info(position)? { 489 if let Some(call_info) = world.analysis().call_info(position)? {
495 let concise = !world.config.call_info_full; 490 let concise = !world.config.call_info_full;
496 let mut active_parameter = call_info.active_parameter.map(|it| it as i64); 491 let mut active_parameter = call_info.active_parameter.map(|it| it as i64);
@@ -509,12 +504,9 @@ pub fn handle_signature_help(
509 } 504 }
510} 505}
511 506
512pub fn handle_hover( 507pub fn handle_hover(world: WorldSnapshot, params: req::HoverParams) -> Result<Option<Hover>> {
513 world: WorldSnapshot,
514 params: req::TextDocumentPositionParams,
515) -> Result<Option<Hover>> {
516 let _p = profile("handle_hover"); 508 let _p = profile("handle_hover");
517 let position = params.try_conv_with(&world)?; 509 let position = params.text_document_position_params.try_conv_with(&world)?;
518 let info = match world.analysis().hover(position)? { 510 let info = match world.analysis().hover(position)? {
519 None => return Ok(None), 511 None => return Ok(None),
520 Some(info) => info, 512 Some(info) => info,
@@ -705,15 +697,9 @@ fn create_single_code_action(assist: Assist, world: &WorldSnapshot) -> Result<Co
705 arguments: Some(vec![arg]), 697 arguments: Some(vec![arg]),
706 }; 698 };
707 699
708 let kind = match assist.id {
709 AssistId("introduce_variable") => Some("refactor.extract.variable".to_string()),
710 AssistId("add_custom_impl") => Some("refactor.rewrite.add_custom_impl".to_string()),
711 _ => None,
712 };
713
714 Ok(CodeAction { 700 Ok(CodeAction {
715 title, 701 title,
716 kind, 702 kind: Some(String::new()),
717 diagnostics: None, 703 diagnostics: None,
718 edit: None, 704 edit: None,
719 command: Some(command), 705 command: Some(command),
@@ -815,6 +801,23 @@ pub fn handle_code_action(
815 } 801 }
816 } 802 }
817 803
804 // If the client only supports commands then filter the list
805 // and remove and actions that depend on edits.
806 if !world.config.client_caps.code_action_literals {
807 // FIXME: use drain_filter once it hits stable.
808 res = res
809 .into_iter()
810 .filter_map(|it| match it {
811 cmd @ lsp_types::CodeActionOrCommand::Command(_) => Some(cmd),
812 lsp_types::CodeActionOrCommand::CodeAction(action) => match action.command {
813 Some(cmd) if action.edit.is_none() => {
814 Some(lsp_types::CodeActionOrCommand::Command(cmd))
815 }
816 _ => None,
817 },
818 })
819 .collect();
820 }
818 Ok(Some(res)) 821 Ok(Some(res))
819} 822}
820 823
@@ -878,8 +881,14 @@ pub fn handle_code_lens(
878 .map(|it| { 881 .map(|it| {
879 let range = it.node_range.conv_with(&line_index); 882 let range = it.node_range.conv_with(&line_index);
880 let pos = range.start; 883 let pos = range.start;
881 let lens_params = 884 let lens_params = req::GotoImplementationParams {
882 req::TextDocumentPositionParams::new(params.text_document.clone(), pos); 885 text_document_position_params: req::TextDocumentPositionParams::new(
886 params.text_document.clone(),
887 pos,
888 ),
889 work_done_progress_params: Default::default(),
890 partial_result_params: Default::default(),
891 };
883 CodeLens { 892 CodeLens {
884 range, 893 range,
885 command: None, 894 command: None,
@@ -894,7 +903,7 @@ pub fn handle_code_lens(
894#[derive(Debug, Serialize, Deserialize)] 903#[derive(Debug, Serialize, Deserialize)]
895#[serde(rename_all = "camelCase")] 904#[serde(rename_all = "camelCase")]
896enum CodeLensResolveData { 905enum CodeLensResolveData {
897 Impls(req::TextDocumentPositionParams), 906 Impls(req::GotoImplementationParams),
898} 907}
899 908
900pub fn handle_code_lens_resolve(world: WorldSnapshot, code_lens: CodeLens) -> Result<CodeLens> { 909pub fn handle_code_lens_resolve(world: WorldSnapshot, code_lens: CodeLens) -> Result<CodeLens> {
@@ -927,7 +936,7 @@ pub fn handle_code_lens_resolve(world: WorldSnapshot, code_lens: CodeLens) -> Re
927 title, 936 title,
928 command: "rust-analyzer.showReferences".into(), 937 command: "rust-analyzer.showReferences".into(),
929 arguments: Some(vec![ 938 arguments: Some(vec![
930 to_value(&lens_params.text_document.uri).unwrap(), 939 to_value(&lens_params.text_document_position_params.text_document.uri).unwrap(),
931 to_value(code_lens.range.start).unwrap(), 940 to_value(code_lens.range.start).unwrap(),
932 to_value(locations).unwrap(), 941 to_value(locations).unwrap(),
933 ]), 942 ]),
@@ -944,16 +953,16 @@ pub fn handle_code_lens_resolve(world: WorldSnapshot, code_lens: CodeLens) -> Re
944 953
945pub fn handle_document_highlight( 954pub fn handle_document_highlight(
946 world: WorldSnapshot, 955 world: WorldSnapshot,
947 params: req::TextDocumentPositionParams, 956 params: req::DocumentHighlightParams,
948) -> Result<Option<Vec<DocumentHighlight>>> { 957) -> Result<Option<Vec<DocumentHighlight>>> {
949 let _p = profile("handle_document_highlight"); 958 let _p = profile("handle_document_highlight");
950 let file_id = params.text_document.try_conv_with(&world)?; 959 let file_id = params.text_document_position_params.text_document.try_conv_with(&world)?;
951 let line_index = world.analysis().file_line_index(file_id)?; 960 let line_index = world.analysis().file_line_index(file_id)?;
952 961
953 let refs = match world 962 let refs = match world.analysis().find_all_refs(
954 .analysis() 963 params.text_document_position_params.try_conv_with(&world)?,
955 .find_all_refs(params.try_conv_with(&world)?, Some(SearchScope::single_file(file_id)))? 964 Some(SearchScope::single_file(file_id)),
956 { 965 )? {
957 None => return Ok(None), 966 None => return Ok(None),
958 Some(refs) => refs, 967 Some(refs) => refs,
959 }; 968 };
diff --git a/crates/rust-analyzer/src/req.rs b/crates/rust-analyzer/src/req.rs
index ae3448892..0dae6bad4 100644
--- a/crates/rust-analyzer/src/req.rs
+++ b/crates/rust-analyzer/src/req.rs
@@ -8,14 +8,15 @@ pub use lsp_types::{
8 notification::*, request::*, ApplyWorkspaceEditParams, CodeActionParams, CodeLens, 8 notification::*, request::*, ApplyWorkspaceEditParams, CodeActionParams, CodeLens,
9 CodeLensParams, CompletionParams, CompletionResponse, ConfigurationItem, ConfigurationParams, 9 CodeLensParams, CompletionParams, CompletionResponse, ConfigurationItem, ConfigurationParams,
10 DiagnosticTag, DidChangeConfigurationParams, DidChangeWatchedFilesParams, 10 DiagnosticTag, DidChangeConfigurationParams, DidChangeWatchedFilesParams,
11 DidChangeWatchedFilesRegistrationOptions, DocumentOnTypeFormattingParams, DocumentSymbolParams, 11 DidChangeWatchedFilesRegistrationOptions, DocumentHighlightParams,
12 DocumentSymbolResponse, FileSystemWatcher, Hover, InitializeResult, MessageType, 12 DocumentOnTypeFormattingParams, DocumentSymbolParams, DocumentSymbolResponse,
13 PartialResultParams, ProgressParams, ProgressParamsValue, ProgressToken, 13 FileSystemWatcher, GotoDefinitionParams, GotoDefinitionResponse, Hover, HoverParams,
14 PublishDiagnosticsParams, ReferenceParams, Registration, RegistrationParams, SelectionRange, 14 InitializeResult, MessageType, PartialResultParams, ProgressParams, ProgressParamsValue,
15 SelectionRangeParams, SemanticTokensParams, SemanticTokensRangeParams, 15 ProgressToken, PublishDiagnosticsParams, ReferenceParams, Registration, RegistrationParams,
16 SelectionRange, SelectionRangeParams, SemanticTokensParams, SemanticTokensRangeParams,
16 SemanticTokensRangeResult, SemanticTokensResult, ServerCapabilities, ShowMessageParams, 17 SemanticTokensRangeResult, SemanticTokensResult, ServerCapabilities, ShowMessageParams,
17 SignatureHelp, SymbolKind, TextDocumentEdit, TextDocumentPositionParams, TextEdit, 18 SignatureHelp, SignatureHelpParams, SymbolKind, TextDocumentEdit, TextDocumentPositionParams,
18 WorkDoneProgressParams, WorkspaceEdit, WorkspaceSymbolParams, 19 TextEdit, WorkDoneProgressParams, WorkspaceEdit, WorkspaceSymbolParams,
19}; 20};
20use std::path::PathBuf; 21use std::path::PathBuf;
21 22
diff --git a/crates/rust-analyzer/src/semantic_tokens.rs b/crates/rust-analyzer/src/semantic_tokens.rs
index 71f4f58a3..2dc5cb119 100644
--- a/crates/rust-analyzer/src/semantic_tokens.rs
+++ b/crates/rust-analyzer/src/semantic_tokens.rs
@@ -4,64 +4,69 @@ use std::ops;
4 4
5use lsp_types::{Range, SemanticToken, SemanticTokenModifier, SemanticTokenType, SemanticTokens}; 5use lsp_types::{Range, SemanticToken, SemanticTokenModifier, SemanticTokenType, SemanticTokens};
6 6
7pub(crate) const ATTRIBUTE: SemanticTokenType = SemanticTokenType::new("attribute"); 7macro_rules! define_semantic_token_types {
8pub(crate) const BUILTIN_TYPE: SemanticTokenType = SemanticTokenType::new("builtinType"); 8 ($(($ident:ident, $string:literal)),*$(,)?) => {
9pub(crate) const ENUM_MEMBER: SemanticTokenType = SemanticTokenType::new("enumMember"); 9 $(pub(crate) const $ident: SemanticTokenType = SemanticTokenType::new($string);)*
10pub(crate) const LIFETIME: SemanticTokenType = SemanticTokenType::new("lifetime"); 10
11pub(crate) const TYPE_ALIAS: SemanticTokenType = SemanticTokenType::new("typeAlias"); 11 pub(crate) const SUPPORTED_TYPES: &[SemanticTokenType] = &[
12pub(crate) const UNION: SemanticTokenType = SemanticTokenType::new("union"); 12 SemanticTokenType::COMMENT,
13pub(crate) const UNRESOLVED_REFERENCE: SemanticTokenType = 13 SemanticTokenType::KEYWORD,
14 SemanticTokenType::new("unresolvedReference"); 14 SemanticTokenType::STRING,
15pub(crate) const FORMAT_SPECIFIER: SemanticTokenType = SemanticTokenType::new("formatSpecifier"); 15 SemanticTokenType::NUMBER,
16 16 SemanticTokenType::REGEXP,
17pub(crate) const CONSTANT: SemanticTokenModifier = SemanticTokenModifier::new("constant"); 17 SemanticTokenType::OPERATOR,
18pub(crate) const CONTROL_FLOW: SemanticTokenModifier = SemanticTokenModifier::new("controlFlow"); 18 SemanticTokenType::NAMESPACE,
19pub(crate) const MUTABLE: SemanticTokenModifier = SemanticTokenModifier::new("mutable"); 19 SemanticTokenType::TYPE,
20pub(crate) const UNSAFE: SemanticTokenModifier = SemanticTokenModifier::new("unsafe"); 20 SemanticTokenType::STRUCT,
21 21 SemanticTokenType::CLASS,
22pub(crate) const SUPPORTED_TYPES: &[SemanticTokenType] = &[ 22 SemanticTokenType::INTERFACE,
23 SemanticTokenType::COMMENT, 23 SemanticTokenType::ENUM,
24 SemanticTokenType::KEYWORD, 24 SemanticTokenType::TYPE_PARAMETER,
25 SemanticTokenType::STRING, 25 SemanticTokenType::FUNCTION,
26 SemanticTokenType::NUMBER, 26 SemanticTokenType::MEMBER,
27 SemanticTokenType::REGEXP, 27 SemanticTokenType::PROPERTY,
28 SemanticTokenType::OPERATOR, 28 SemanticTokenType::MACRO,
29 SemanticTokenType::NAMESPACE, 29 SemanticTokenType::VARIABLE,
30 SemanticTokenType::TYPE, 30 SemanticTokenType::PARAMETER,
31 SemanticTokenType::STRUCT, 31 SemanticTokenType::LABEL,
32 SemanticTokenType::CLASS, 32 $($ident),*
33 SemanticTokenType::INTERFACE, 33 ];
34 SemanticTokenType::ENUM, 34 };
35 SemanticTokenType::TYPE_PARAMETER, 35}
36 SemanticTokenType::FUNCTION, 36
37 SemanticTokenType::MEMBER, 37define_semantic_token_types![
38 SemanticTokenType::PROPERTY, 38 (ATTRIBUTE, "attribute"),
39 SemanticTokenType::MACRO, 39 (BUILTIN_TYPE, "builtinType"),
40 SemanticTokenType::VARIABLE, 40 (ENUM_MEMBER, "enumMember"),
41 SemanticTokenType::PARAMETER, 41 (LIFETIME, "lifetime"),
42 SemanticTokenType::LABEL, 42 (TYPE_ALIAS, "typeAlias"),
43 ATTRIBUTE, 43 (UNION, "union"),
44 BUILTIN_TYPE, 44 (UNRESOLVED_REFERENCE, "unresolvedReference"),
45 ENUM_MEMBER, 45 (FORMAT_SPECIFIER, "formatSpecifier"),
46 LIFETIME,
47 TYPE_ALIAS,
48 UNION,
49 UNRESOLVED_REFERENCE,
50 FORMAT_SPECIFIER,
51]; 46];
52 47
53pub(crate) const SUPPORTED_MODIFIERS: &[SemanticTokenModifier] = &[ 48macro_rules! define_semantic_token_modifiers {
54 SemanticTokenModifier::DOCUMENTATION, 49 ($(($ident:ident, $string:literal)),*$(,)?) => {
55 SemanticTokenModifier::DECLARATION, 50 $(pub(crate) const $ident: SemanticTokenModifier = SemanticTokenModifier::new($string);)*
56 SemanticTokenModifier::DEFINITION, 51
57 SemanticTokenModifier::STATIC, 52 pub(crate) const SUPPORTED_MODIFIERS: &[SemanticTokenModifier] = &[
58 SemanticTokenModifier::ABSTRACT, 53 SemanticTokenModifier::DOCUMENTATION,
59 SemanticTokenModifier::DEPRECATED, 54 SemanticTokenModifier::DECLARATION,
60 SemanticTokenModifier::READONLY, 55 SemanticTokenModifier::DEFINITION,
61 CONSTANT, 56 SemanticTokenModifier::STATIC,
62 MUTABLE, 57 SemanticTokenModifier::ABSTRACT,
63 UNSAFE, 58 SemanticTokenModifier::DEPRECATED,
64 CONTROL_FLOW, 59 SemanticTokenModifier::READONLY,
60 $($ident),*
61 ];
62 };
63}
64
65define_semantic_token_modifiers![
66 (CONSTANT, "constant"),
67 (CONTROL_FLOW, "controlFlow"),
68 (MUTABLE, "mutable"),
69 (UNSAFE, "unsafe"),
65]; 70];
66 71
67#[derive(Default)] 72#[derive(Default)]
diff --git a/crates/rust-analyzer/tests/heavy_tests/main.rs b/crates/rust-analyzer/tests/heavy_tests/main.rs
index f6245ddd4..a218da76d 100644
--- a/crates/rust-analyzer/tests/heavy_tests/main.rs
+++ b/crates/rust-analyzer/tests/heavy_tests/main.rs
@@ -4,8 +4,8 @@ use std::{collections::HashMap, path::PathBuf, time::Instant};
4 4
5use lsp_types::{ 5use lsp_types::{
6 CodeActionContext, DidOpenTextDocumentParams, DocumentFormattingParams, FormattingOptions, 6 CodeActionContext, DidOpenTextDocumentParams, DocumentFormattingParams, FormattingOptions,
7 PartialResultParams, Position, Range, TextDocumentItem, TextDocumentPositionParams, 7 GotoDefinitionParams, HoverParams, PartialResultParams, Position, Range, TextDocumentItem,
8 WorkDoneProgressParams, 8 TextDocumentPositionParams, WorkDoneProgressParams,
9}; 9};
10use rust_analyzer::req::{ 10use rust_analyzer::req::{
11 CodeActionParams, CodeActionRequest, Completion, CompletionParams, DidOpenTextDocument, 11 CodeActionParams, CodeActionRequest, Completion, CompletionParams, DidOpenTextDocument,
@@ -149,7 +149,7 @@ fn main() {}
149 "cwd": server.path().join("foo") 149 "cwd": server.path().join("foo")
150 }, 150 },
151 { 151 {
152 "args": [ "check", "--package", "foo", "--test", "spam" ], 152 "args": [ "check", "--package", "foo" ],
153 "extraArgs": [], 153 "extraArgs": [],
154 "bin": "cargo", 154 "bin": "cargo",
155 "env": {}, 155 "env": {},
@@ -161,7 +161,7 @@ fn main() {}
161 "cwd": server.path().join("foo") 161 "cwd": server.path().join("foo")
162 }, 162 },
163 { 163 {
164 "args": [ "test", "--package", "foo", "--test", "spam" ], 164 "args": [ "test", "--package", "foo" ],
165 "extraArgs": [], 165 "extraArgs": [],
166 "bin": "cargo", 166 "bin": "cargo",
167 "env": {}, 167 "env": {},
@@ -610,10 +610,14 @@ fn main() { message(); }
610 }) 610 })
611 .server(); 611 .server();
612 server.wait_until_workspace_is_loaded(); 612 server.wait_until_workspace_is_loaded();
613 let res = server.send_request::<GotoDefinition>(TextDocumentPositionParams::new( 613 let res = server.send_request::<GotoDefinition>(GotoDefinitionParams {
614 server.doc_id("src/main.rs"), 614 text_document_position_params: TextDocumentPositionParams::new(
615 Position::new(2, 15), 615 server.doc_id("src/main.rs"),
616 )); 616 Position::new(2, 15),
617 ),
618 work_done_progress_params: Default::default(),
619 partial_result_params: Default::default(),
620 });
617 assert!(format!("{}", res).contains("hello.rs")); 621 assert!(format!("{}", res).contains("hello.rs"));
618} 622}
619 623
@@ -692,10 +696,13 @@ pub fn foo(_input: TokenStream) -> TokenStream {
692 .root("bar") 696 .root("bar")
693 .server(); 697 .server();
694 server.wait_until_workspace_is_loaded(); 698 server.wait_until_workspace_is_loaded();
695 let res = server.send_request::<HoverRequest>(TextDocumentPositionParams::new( 699 let res = server.send_request::<HoverRequest>(HoverParams {
696 server.doc_id("foo/src/main.rs"), 700 text_document_position_params: TextDocumentPositionParams::new(
697 Position::new(7, 9), 701 server.doc_id("foo/src/main.rs"),
698 )); 702 Position::new(7, 9),
703 ),
704 work_done_progress_params: Default::default(),
705 });
699 706
700 let value = res.get("contents").unwrap().get("value").unwrap().to_string(); 707 let value = res.get("contents").unwrap().get("value").unwrap().to_string();
701 assert_eq!(value, r#""```rust\nfoo::Bar\nfn bar()\n```""#) 708 assert_eq!(value, r#""```rust\nfoo::Bar\nfn bar()\n```""#)
diff --git a/crates/rust-analyzer/tests/heavy_tests/support.rs b/crates/rust-analyzer/tests/heavy_tests/support.rs
index e4fe3411a..8d47ee4f6 100644
--- a/crates/rust-analyzer/tests/heavy_tests/support.rs
+++ b/crates/rust-analyzer/tests/heavy_tests/support.rs
@@ -77,7 +77,11 @@ impl<'a> Project<'a> {
77 let roots = self.roots.into_iter().map(|root| tmp_dir.path().join(root)).collect(); 77 let roots = self.roots.into_iter().map(|root| tmp_dir.path().join(root)).collect();
78 78
79 let mut config = Config { 79 let mut config = Config {
80 client_caps: ClientCapsConfig { location_link: true, ..Default::default() }, 80 client_caps: ClientCapsConfig {
81 location_link: true,
82 code_action_literals: true,
83 ..Default::default()
84 },
81 with_sysroot: self.with_sysroot, 85 with_sysroot: self.with_sysroot,
82 ..Config::default() 86 ..Config::default()
83 }; 87 };
diff --git a/docs/dev/architecture.md b/docs/dev/architecture.md
index 3a337c574..cee916c09 100644
--- a/docs/dev/architecture.md
+++ b/docs/dev/architecture.md
@@ -46,7 +46,7 @@ can be quickly updated for small modifications.
46 46
47Some of the components of this repository are generated through automatic 47Some of the components of this repository are generated through automatic
48processes. `cargo xtask codegen` runs all generation tasks. Generated code is 48processes. `cargo xtask codegen` runs all generation tasks. Generated code is
49commited to the git repository. 49committed to the git repository.
50 50
51In particular, `cargo xtask codegen` generates: 51In particular, `cargo xtask codegen` generates:
52 52
@@ -114,7 +114,7 @@ is responsible for guessing a HIR for a particular source position.
114Underneath, HIR works on top of salsa, using a `HirDatabase` trait. 114Underneath, HIR works on top of salsa, using a `HirDatabase` trait.
115 115
116`ra_hir_xxx` crates have a strong ECS flavor, in that they work with raw ids and 116`ra_hir_xxx` crates have a strong ECS flavor, in that they work with raw ids and
117directly query the databse. 117directly query the database.
118 118
119The top-level `ra_hir` façade crate wraps ids into a more OO-flavored API. 119The top-level `ra_hir` façade crate wraps ids into a more OO-flavored API.
120 120
diff --git a/docs/dev/guide.md b/docs/dev/guide.md
index abbe4c154..c3252f1f6 100644
--- a/docs/dev/guide.md
+++ b/docs/dev/guide.md
@@ -26,7 +26,7 @@ properties hold:
26 26
27## IDE API 27## IDE API
28 28
29To see the bigger picture of how the IDE features works, let's take a look at the [`AnalysisHost`] and 29To see the bigger picture of how the IDE features work, let's take a look at the [`AnalysisHost`] and
30[`Analysis`] pair of types. `AnalysisHost` has three methods: 30[`Analysis`] pair of types. `AnalysisHost` has three methods:
31 31
32* `default()` for creating an empty analysis instance 32* `default()` for creating an empty analysis instance
@@ -131,7 +131,7 @@ mapping between `SourceRoot` IDs (which are assigned by the client) and actual
131analyzer. 131analyzer.
132 132
133Note that `mod`, `#[path]` and `include!()` can only reference files from the 133Note that `mod`, `#[path]` and `include!()` can only reference files from the
134same source root. It is of course is possible to explicitly add extra files to 134same source root. It is of course possible to explicitly add extra files to
135the source root, even `/dev/random`. 135the source root, even `/dev/random`.
136 136
137## Language Server Protocol 137## Language Server Protocol
@@ -192,7 +192,7 @@ task will be canceled as soon as the main loop calls `apply_change` on the
192[`schedule`]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop.rs#L426-L455 192[`schedule`]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop.rs#L426-L455
193[The task]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop/handlers.rs#L205-L223 193[The task]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop/handlers.rs#L205-L223
194 194
195This concludes the overview of the analyzer's programing *interface*. Next, lets 195This concludes the overview of the analyzer's programing *interface*. Next, let's
196dig into the implementation! 196dig into the implementation!
197 197
198## Salsa 198## Salsa
@@ -480,7 +480,7 @@ throughout the analyzer:
480## Source Map pattern 480## Source Map pattern
481 481
482Due to an obscure edge case in completion, IDE needs to know the syntax node of 482Due to an obscure edge case in completion, IDE needs to know the syntax node of
483an use statement which imported the given completion candidate. We can't just 483a use statement which imported the given completion candidate. We can't just
484store the syntax node as a part of name resolution: this will break 484store the syntax node as a part of name resolution: this will break
485incrementality, due to the fact that syntax changes after every file 485incrementality, due to the fact that syntax changes after every file
486modification. 486modification.
diff --git a/docs/dev/syntax.md b/docs/dev/syntax.md
index 4dd1de659..33973ffec 100644
--- a/docs/dev/syntax.md
+++ b/docs/dev/syntax.md
@@ -35,7 +35,7 @@ The syntax tree consists of three layers:
35* AST 35* AST
36 36
37Of these, only GreenNodes store the actual data, the other two layers are (non-trivial) views into green tree. 37Of these, only GreenNodes store the actual data, the other two layers are (non-trivial) views into green tree.
38Red-green terminology comes from Roslyn ([link](https://docs.microsoft.com/en-ie/archive/blogs/ericlippert/persistence-facades-and-roslyns-red-green-trees)) and gives the name to the `rowan` library. Green and syntax nodes are defined in rowan, ast is defined in rust-analyzer. 38Red-green terminology comes from Roslyn ([link](https://ericlippert.com/2012/06/08/red-green-trees/)) and gives the name to the `rowan` library. Green and syntax nodes are defined in rowan, ast is defined in rust-analyzer.
39 39
40Syntax trees are a semi-transient data structure. 40Syntax trees are a semi-transient data structure.
41In general, frontend does not keep syntax trees for all files in memory. 41In general, frontend does not keep syntax trees for all files in memory.
diff --git a/docs/user/assists.md b/docs/user/assists.md
index 6c6943622..ee515949e 100644
--- a/docs/user/assists.md
+++ b/docs/user/assists.md
@@ -175,7 +175,9 @@ trait Trait<T> {
175} 175}
176 176
177impl Trait<u32> for () { 177impl Trait<u32> for () {
178 fn foo(&self) -> u32 { todo!() } 178 fn foo(&self) -> u32 {
179 todo!()
180 }
179 181
180} 182}
181``` 183```
@@ -695,3 +697,21 @@ use std::┃collections::HashMap;
695// AFTER 697// AFTER
696use std::{collections::HashMap}; 698use std::{collections::HashMap};
697``` 699```
700
701## `unwrap_block`
702
703This assist removes if...else, for, while and loop control statements to just keep the body.
704
705```rust
706// BEFORE
707fn foo() {
708 if true {┃
709 println!("foo");
710 }
711}
712
713// AFTER
714fn foo() {
715 println!("foo");
716}
717```
diff --git a/docs/user/features.md b/docs/user/features.md
index 56d2969fd..b9a365fc1 100644
--- a/docs/user/features.md
+++ b/docs/user/features.md
@@ -140,8 +140,8 @@ space or `;` depending on the return type of the function.
140When completing a function call, `()` are automatically inserted. If a function 140When completing a function call, `()` are automatically inserted. If a function
141takes arguments, the cursor is positioned inside the parenthesis. 141takes arguments, the cursor is positioned inside the parenthesis.
142 142
143There are postifx completions, which can be triggerd by typing something like 143There are postfix completions, which can be triggered by typing something like
144`foo().if`. The word after `.` determines postifx completion. Possible variants are: 144`foo().if`. The word after `.` determines postfix completion. Possible variants are:
145 145
146- `expr.if` -> `if expr {}` 146- `expr.if` -> `if expr {}`
147- `expr.match` -> `match expr {}` 147- `expr.match` -> `match expr {}`
diff --git a/docs/user/readme.adoc b/docs/user/readme.adoc
index 76d065d35..b1af72ce6 100644
--- a/docs/user/readme.adoc
+++ b/docs/user/readme.adoc
@@ -111,7 +111,7 @@ Here are some useful self-diagnostic commands:
111=== rust-analyzer Language Server Binary 111=== rust-analyzer Language Server Binary
112 112
113Other editors generally require the `rust-analyzer` binary to be in `$PATH`. 113Other editors generally require the `rust-analyzer` binary to be in `$PATH`.
114You can download the pre-built binary from the https://github.com/rust-analyzer/rust-analyzer/releases[releases] page. Typically, you then need to rename the binary for your platform, e.g. `rust-analyzer-mac` if you're on Mac OS, to `rust-analzyer` and make it executable in addition to moving it into a directory in your `$PATH`. 114You can download the pre-built binary from the https://github.com/rust-analyzer/rust-analyzer/releases[releases] page. Typically, you then need to rename the binary for your platform, e.g. `rust-analyzer-mac` if you're on Mac OS, to `rust-analyzer` and make it executable in addition to moving it into a directory in your `$PATH`.
115 115
116On Linux to install the `rust-analyzer` binary into `~/.local/bin`, this commands could be used 116On Linux to install the `rust-analyzer` binary into `~/.local/bin`, this commands could be used
117 117
@@ -169,13 +169,15 @@ The are several LSP client implementations for vim:
169 169
1701. Install coc.nvim by following the instructions at 1701. Install coc.nvim by following the instructions at
171 https://github.com/neoclide/coc.nvim[coc.nvim] 171 https://github.com/neoclide/coc.nvim[coc.nvim]
172 (nodejs required) 172 (Node.js required)
1732. Run `:CocInstall coc-rust-analyzer` to install 1732. Run `:CocInstall coc-rust-analyzer` to install
174 https://github.com/fannheyward/coc-rust-analyzer[coc-rust-analyzer], 174 https://github.com/fannheyward/coc-rust-analyzer[coc-rust-analyzer],
175 this extension implements _most_ of the features supported in the VSCode extension: 175 this extension implements _most_ of the features supported in the VSCode extension:
176 * automatically install and upgrade stable/nightly releases
176 * same configurations as VSCode extension, `rust-analyzer.serverPath`, `rust-analyzer.cargo.features` etc. 177 * same configurations as VSCode extension, `rust-analyzer.serverPath`, `rust-analyzer.cargo.features` etc.
177 * same commands too, `rust-analyzer.analyzerStatus`, `rust-analyzer.ssr` etc. 178 * same commands too, `rust-analyzer.analyzerStatus`, `rust-analyzer.ssr` etc.
178 * highlighting and inlay_hints are not implemented yet 179 * inlay hints for method chaining support, _Neovim Only_
180 * semantic highlighting is not implemented yet
179 181
180==== LanguageClient-neovim 182==== LanguageClient-neovim
181 183
@@ -195,11 +197,11 @@ let g:LanguageClient_serverCommands = {
195==== YouCompleteMe 197==== YouCompleteMe
196 198
1971. Install YouCompleteMe by following the instructions 1991. Install YouCompleteMe by following the instructions
198 https://ycm-core.github.io/YouCompleteMe/#rust-semantic-completion[here] 200 https://github.com/ycm-core/lsp-examples#rust-rust-analyzer[here]
199 201
2002. Configure by adding this to your vim/neovim config file (replacing the existing Rust-specific line if it exists): 2022. Configure by adding this to your vim/neovim config file (replacing the existing Rust-specific line if it exists):
201+ 203+
202[source,vim] 204[source,vim]
203---- 205----
204let g:ycm_language_server = 206let g:ycm_language_server =
205\ [ 207\ [
@@ -212,6 +214,21 @@ let g:ycm_language_server =
212\ ] 214\ ]
213---- 215----
214 216
217==== ALE
218
219To add the LSP server to https://github.com/dense-analysis/ale[ale]:
220
221[source,vim]
222----
223call ale#linter#Define('rust', {
224\ 'name': 'rust-analyzer',
225\ 'lsp': 'stdio',
226\ 'executable': 'rust-analyzer',
227\ 'command': '%e',
228\ 'project_root': '.',
229\})
230----
231
215==== nvim-lsp 232==== nvim-lsp
216 233
217NeoVim 0.5 (not yet released) has built-in language server support. 234NeoVim 0.5 (not yet released) has built-in language server support.
@@ -229,12 +246,21 @@ You also need the `LSP` package. To install it:
229 * Type `Install Package Control`, press enter 246 * Type `Install Package Control`, press enter
2302. In the command palette, run `Package control: Install package`, and in the list that pops up, type `LSP` and press enter. 2472. In the command palette, run `Package control: Install package`, and in the list that pops up, type `LSP` and press enter.
231 248
232Finally, with your Rust project open, in the command palette, run `LSP: Enable Language Server In Project` or `LSP: Enable Language Server Globally`, then select `rust-analyzer` in the list that pops up to enable the rust-analyzer LSP. The latter means that rust-analzyer is enabled by default in Rust projects. 249Finally, with your Rust project open, in the command palette, run `LSP: Enable Language Server In Project` or `LSP: Enable Language Server Globally`, then select `rust-analyzer` in the list that pops up to enable the rust-analyzer LSP. The latter means that rust-analyzer is enabled by default in Rust projects.
233 250
234If it worked, you should see "rust-analzyer, Line X, Column Y" on the left side of the bottom bar, and after waiting a bit, functionality like tooltips on hovering over variables should become available. 251If it worked, you should see "rust-analyzer, Line X, Column Y" on the left side of the bottom bar, and after waiting a bit, functionality like tooltips on hovering over variables should become available.
235 252
236If you get an error saying `No such file or directory: 'rust-analyzer'`, see the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>> section on installing the language server binary. 253If you get an error saying `No such file or directory: 'rust-analyzer'`, see the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>> section on installing the language server binary.
237 254
255=== Gnome Builder
256
257Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>.
258
259Gnome Builder currently has support for RLS, and there's no way to configure the language server executable. A future version might support `rust-analyzer` out of the box.
260
2611. Rename, symlink or copy the `rust-analyzer` binary to `rls` and place it somewhere Builder can find (in `PATH`, or under `~/.cargo/bin`).
2622. Enable the Rust Builder plugin.
263
238== Usage 264== Usage
239 265
240See https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/features.md[features.md]. 266See https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/features.md[features.md].
diff --git a/editors/code/package.json b/editors/code/package.json
index b8aaa07d8..7ef727b9d 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -27,6 +27,7 @@
27 "scripts": { 27 "scripts": {
28 "vscode:prepublish": "tsc && rollup -c", 28 "vscode:prepublish": "tsc && rollup -c",
29 "package": "vsce package -o rust-analyzer.vsix", 29 "package": "vsce package -o rust-analyzer.vsix",
30 "build": "tsc",
30 "watch": "tsc --watch", 31 "watch": "tsc --watch",
31 "lint": "tsfmt --verify && eslint -c .eslintrc.js --ext ts ./src", 32 "lint": "tsfmt --verify && eslint -c .eslintrc.js --ext ts ./src",
32 "fix": " tsfmt -r && eslint -c .eslintrc.js --ext ts ./src --fix" 33 "fix": " tsfmt -r && eslint -c .eslintrc.js --ext ts ./src --fix"
@@ -204,11 +205,6 @@
204 "default": [], 205 "default": [],
205 "description": "Paths to exclude from analysis." 206 "description": "Paths to exclude from analysis."
206 }, 207 },
207 "rust-analyzer.notifications.workspaceLoaded": {
208 "type": "boolean",
209 "default": true,
210 "markdownDescription": "Whether to show `workspace loaded` message."
211 },
212 "rust-analyzer.notifications.cargoTomlNotFound": { 208 "rust-analyzer.notifications.cargoTomlNotFound": {
213 "type": "boolean", 209 "type": "boolean",
214 "default": true, 210 "default": true,
@@ -388,6 +384,28 @@
388 "description": "Enable Proc macro support, cargo.loadOutDirsFromCheck must be enabled.", 384 "description": "Enable Proc macro support, cargo.loadOutDirsFromCheck must be enabled.",
389 "type": "boolean", 385 "type": "boolean",
390 "default": false 386 "default": false
387 },
388 "rust-analyzer.debug.engine": {
389 "type": "string",
390 "enum": [
391 "auto",
392 "vadimcn.vscode-lldb",
393 "ms-vscode.cpptools"
394 ],
395 "default": "auto",
396 "description": "Preffered debug engine.",
397 "markdownEnumDescriptions": [
398 "First try to use [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb), if it's not installed try to use [MS C++ tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools).",
399 "Use [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)",
400 "Use [MS C++ tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)"
401 ]
402 },
403 "rust-analyzer.debug.sourceFileMap": {
404 "type": "object",
405 "description": "Optional source file mappings passed to the debug engine.",
406 "default": {
407 "/rustc/<id>": "${env:USERPROFILE}/.rustup/toolchains/<toolchain-id>/lib/rustlib/src/rust"
408 }
391 } 409 }
392 } 410 }
393 }, 411 },
diff --git a/editors/code/src/cargo.ts b/editors/code/src/cargo.ts
new file mode 100644
index 000000000..a328ba9bd
--- /dev/null
+++ b/editors/code/src/cargo.ts
@@ -0,0 +1,106 @@
1import * as cp from 'child_process';
2import * as readline from 'readline';
3import { OutputChannel } from 'vscode';
4
5interface CompilationArtifact {
6 fileName: string;
7 name: string;
8 kind: string;
9 isTest: boolean;
10}
11
12export class Cargo {
13 rootFolder: string;
14 env?: Record<string, string>;
15 output: OutputChannel;
16
17 public constructor(cargoTomlFolder: string, output: OutputChannel, env: Record<string, string> | undefined = undefined) {
18 this.rootFolder = cargoTomlFolder;
19 this.output = output;
20 this.env = env;
21 }
22
23 public async artifactsFromArgs(cargoArgs: string[]): Promise<CompilationArtifact[]> {
24 const artifacts: CompilationArtifact[] = [];
25
26 try {
27 await this.runCargo(cargoArgs,
28 message => {
29 if (message.reason === 'compiler-artifact' && message.executable) {
30 const isBinary = message.target.crate_types.includes('bin');
31 const isBuildScript = message.target.kind.includes('custom-build');
32 if ((isBinary && !isBuildScript) || message.profile.test) {
33 artifacts.push({
34 fileName: message.executable,
35 name: message.target.name,
36 kind: message.target.kind[0],
37 isTest: message.profile.test
38 });
39 }
40 }
41 else if (message.reason === 'compiler-message') {
42 this.output.append(message.message.rendered);
43 }
44 },
45 stderr => {
46 this.output.append(stderr);
47 }
48 );
49 }
50 catch (err) {
51 this.output.show(true);
52 throw new Error(`Cargo invocation has failed: ${err}`);
53 }
54
55 return artifacts;
56 }
57
58 public async executableFromArgs(args: string[]): Promise<string> {
59 const cargoArgs = [...args]; // to remain args unchanged
60 cargoArgs.push("--message-format=json");
61
62 const artifacts = await this.artifactsFromArgs(cargoArgs);
63
64 if (artifacts.length === 0) {
65 throw new Error('No compilation artifacts');
66 } else if (artifacts.length > 1) {
67 throw new Error('Multiple compilation artifacts are not supported.');
68 }
69
70 return artifacts[0].fileName;
71 }
72
73 runCargo(
74 cargoArgs: string[],
75 onStdoutJson: (obj: any) => void,
76 onStderrString: (data: string) => void
77 ): Promise<number> {
78 return new Promise<number>((resolve, reject) => {
79 const cargo = cp.spawn('cargo', cargoArgs, {
80 stdio: ['ignore', 'pipe', 'pipe'],
81 cwd: this.rootFolder,
82 env: this.env,
83 });
84
85 cargo.on('error', err => {
86 reject(new Error(`could not launch cargo: ${err}`));
87 });
88 cargo.stderr.on('data', chunk => {
89 onStderrString(chunk.toString());
90 });
91
92 const rl = readline.createInterface({ input: cargo.stdout });
93 rl.on('line', line => {
94 const message = JSON.parse(line);
95 onStdoutJson(message);
96 });
97
98 cargo.on('exit', (exitCode, _) => {
99 if (exitCode === 0)
100 resolve(exitCode);
101 else
102 reject(new Error(`exit code: ${exitCode}.`));
103 });
104 });
105 }
106} \ No newline at end of file
diff --git a/editors/code/src/commands/runnables.ts b/editors/code/src/commands/runnables.ts
index 2635a1440..d77e8188c 100644
--- a/editors/code/src/commands/runnables.ts
+++ b/editors/code/src/commands/runnables.ts
@@ -1,8 +1,10 @@
1import * as vscode from 'vscode'; 1import * as vscode from 'vscode';
2import * as lc from 'vscode-languageclient'; 2import * as lc from 'vscode-languageclient';
3import * as ra from '../rust-analyzer-api'; 3import * as ra from '../rust-analyzer-api';
4import * as os from "os";
4 5
5import { Ctx, Cmd } from '../ctx'; 6import { Ctx, Cmd } from '../ctx';
7import { Cargo } from '../cargo';
6 8
7export function run(ctx: Ctx): Cmd { 9export function run(ctx: Ctx): Cmd {
8 let prevRunnable: RunnableQuickPick | undefined; 10 let prevRunnable: RunnableQuickPick | undefined;
@@ -62,25 +64,69 @@ export function runSingle(ctx: Ctx): Cmd {
62 }; 64 };
63} 65}
64 66
67function getLldbDebugConfig(config: ra.Runnable, sourceFileMap: Record<string, string>): vscode.DebugConfiguration {
68 return {
69 type: "lldb",
70 request: "launch",
71 name: config.label,
72 cargo: {
73 args: config.args,
74 },
75 args: config.extraArgs,
76 cwd: config.cwd,
77 sourceMap: sourceFileMap
78 };
79}
80
81const debugOutput = vscode.window.createOutputChannel("Debug");
82
83async function getCppvsDebugConfig(config: ra.Runnable, sourceFileMap: Record<string, string>): Promise<vscode.DebugConfiguration> {
84 debugOutput.clear();
85
86 const cargo = new Cargo(config.cwd || '.', debugOutput);
87 const executable = await cargo.executableFromArgs(config.args);
88
89 // if we are here, there were no compilation errors.
90 return {
91 type: (os.platform() === "win32") ? "cppvsdbg" : 'cppdbg',
92 request: "launch",
93 name: config.label,
94 program: executable,
95 args: config.extraArgs,
96 cwd: config.cwd,
97 sourceFileMap: sourceFileMap,
98 };
99}
100
65export function debugSingle(ctx: Ctx): Cmd { 101export function debugSingle(ctx: Ctx): Cmd {
66 return async (config: ra.Runnable) => { 102 return async (config: ra.Runnable) => {
67 const editor = ctx.activeRustEditor; 103 const editor = ctx.activeRustEditor;
68 if (!editor) return; 104 if (!editor) return;
69 if (!vscode.extensions.getExtension("vadimcn.vscode-lldb")) { 105
70 vscode.window.showErrorMessage("Install `vadimcn.vscode-lldb` extension for debugging"); 106 const lldbId = "vadimcn.vscode-lldb";
107 const cpptoolsId = "ms-vscode.cpptools";
108
109 const debugEngineId = ctx.config.debug.engine;
110 let debugEngine = null;
111 if (debugEngineId === "auto") {
112 debugEngine = vscode.extensions.getExtension(lldbId);
113 if (!debugEngine) {
114 debugEngine = vscode.extensions.getExtension(cpptoolsId);
115 }
116 }
117 else {
118 debugEngine = vscode.extensions.getExtension(debugEngineId);
119 }
120
121 if (!debugEngine) {
122 vscode.window.showErrorMessage(`Install [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=${lldbId})`
123 + ` or [MS C++ tools](https://marketplace.visualstudio.com/items?itemName=${cpptoolsId}) extension for debugging.`);
71 return; 124 return;
72 } 125 }
73 126
74 const debugConfig = { 127 const debugConfig = lldbId === debugEngine.id
75 type: "lldb", 128 ? getLldbDebugConfig(config, ctx.config.debug.sourceFileMap)
76 request: "launch", 129 : await getCppvsDebugConfig(config, ctx.config.debug.sourceFileMap);
77 name: config.label,
78 cargo: {
79 args: config.args,
80 },
81 args: config.extraArgs,
82 cwd: config.cwd
83 };
84 130
85 return vscode.debug.startDebugging(undefined, debugConfig); 131 return vscode.debug.startDebugging(undefined, debugConfig);
86 }; 132 };
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index 3b2eec8ba..110e54180 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -92,7 +92,6 @@ export class Config {
92 get askBeforeDownload() { return this.get<boolean>("updates.askBeforeDownload"); } 92 get askBeforeDownload() { return this.get<boolean>("updates.askBeforeDownload"); }
93 get traceExtension() { return this.get<boolean>("trace.extension"); } 93 get traceExtension() { return this.get<boolean>("trace.extension"); }
94 94
95
96 get inlayHints() { 95 get inlayHints() {
97 return { 96 return {
98 typeHints: this.get<boolean>("inlayHints.typeHints"), 97 typeHints: this.get<boolean>("inlayHints.typeHints"),
@@ -107,4 +106,12 @@ export class Config {
107 command: this.get<string>("checkOnSave.command"), 106 command: this.get<string>("checkOnSave.command"),
108 }; 107 };
109 } 108 }
109
110 get debug() {
111 return {
112 engine: this.get<string>("debug.engine"),
113 sourceFileMap: this.get<Record<string, string>>("debug.sourceFileMap"),
114 };
115 }
116
110} 117}
diff --git a/xtask/src/ast_src.rs b/xtask/src/ast_src.rs
index 9c02f7c6f..028f7cbe1 100644
--- a/xtask/src/ast_src.rs
+++ b/xtask/src/ast_src.rs
@@ -162,7 +162,7 @@ pub(crate) const KINDS_SRC: KindsSrc = KindsSrc {
162 "RECORD_LIT", 162 "RECORD_LIT",
163 "RECORD_FIELD_LIST", 163 "RECORD_FIELD_LIST",
164 "RECORD_FIELD", 164 "RECORD_FIELD",
165 "TRY_BLOCK_EXPR", 165 "EFFECT_EXPR",
166 "BOX_EXPR", 166 "BOX_EXPR",
167 // postfix 167 // postfix
168 "CALL_EXPR", 168 "CALL_EXPR",
@@ -177,7 +177,6 @@ pub(crate) const KINDS_SRC: KindsSrc = KindsSrc {
177 "PREFIX_EXPR", 177 "PREFIX_EXPR",
178 "RANGE_EXPR", // just weird 178 "RANGE_EXPR", // just weird
179 "BIN_EXPR", 179 "BIN_EXPR",
180 "BLOCK",
181 "EXTERN_BLOCK", 180 "EXTERN_BLOCK",
182 "EXTERN_ITEM_LIST", 181 "EXTERN_ITEM_LIST",
183 "ENUM_VARIANT", 182 "ENUM_VARIANT",
@@ -440,7 +439,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
440 } 439 }
441 struct IfExpr: AttrsOwner { T![if], Condition } 440 struct IfExpr: AttrsOwner { T![if], Condition }
442 struct LoopExpr: AttrsOwner, LoopBodyOwner { T![loop] } 441 struct LoopExpr: AttrsOwner, LoopBodyOwner { T![loop] }
443 struct TryBlockExpr: AttrsOwner { T![try], body: BlockExpr } 442 struct EffectExpr: AttrsOwner { Label, T![try], T![unsafe], T![async], BlockExpr }
444 struct ForExpr: AttrsOwner, LoopBodyOwner { 443 struct ForExpr: AttrsOwner, LoopBodyOwner {
445 T![for], 444 T![for],
446 Pat, 445 Pat,
@@ -451,7 +450,9 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
451 struct ContinueExpr: AttrsOwner { T![continue], T![lifetime] } 450 struct ContinueExpr: AttrsOwner { T![continue], T![lifetime] }
452 struct BreakExpr: AttrsOwner { T![break], T![lifetime], Expr } 451 struct BreakExpr: AttrsOwner { T![break], T![lifetime], Expr }
453 struct Label { T![lifetime] } 452 struct Label { T![lifetime] }
454 struct BlockExpr: AttrsOwner { Label, T![unsafe], Block } 453 struct BlockExpr: AttrsOwner, ModuleItemOwner {
454 T!['{'], statements: [Stmt], Expr, T!['}'],
455 }
455 struct ReturnExpr: AttrsOwner { Expr } 456 struct ReturnExpr: AttrsOwner { Expr }
456 struct CallExpr: ArgListOwner { Expr } 457 struct CallExpr: ArgListOwner { Expr }
457 struct MethodCallExpr: AttrsOwner, ArgListOwner { 458 struct MethodCallExpr: AttrsOwner, ArgListOwner {
@@ -460,7 +461,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
460 struct IndexExpr: AttrsOwner { T!['['], T![']'] } 461 struct IndexExpr: AttrsOwner { T!['['], T![']'] }
461 struct FieldExpr: AttrsOwner { Expr, T![.], NameRef } 462 struct FieldExpr: AttrsOwner { Expr, T![.], NameRef }
462 struct AwaitExpr: AttrsOwner { Expr, T![.], T![await] } 463 struct AwaitExpr: AttrsOwner { Expr, T![.], T![await] }
463 struct TryExpr: AttrsOwner { T![try], Expr } 464 struct TryExpr: AttrsOwner { Expr, T![?] }
464 struct CastExpr: AttrsOwner { Expr, T![as], TypeRef } 465 struct CastExpr: AttrsOwner { Expr, T![as], TypeRef }
465 struct RefExpr: AttrsOwner { T![&], T![raw], T![mut], Expr } 466 struct RefExpr: AttrsOwner { T![&], T![raw], T![mut], Expr }
466 struct PrefixExpr: AttrsOwner { /*PrefixOp,*/ Expr } 467 struct PrefixExpr: AttrsOwner { /*PrefixOp,*/ Expr }
@@ -556,12 +557,6 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
556 T![;], 557 T![;],
557 } 558 }
558 struct Condition { T![let], Pat, T![=], Expr } 559 struct Condition { T![let], Pat, T![=], Expr }
559 struct Block: AttrsOwner, ModuleItemOwner {
560 T!['{'],
561 statements: [Stmt],
562 Expr,
563 T!['}'],
564 }
565 struct ParamList { 560 struct ParamList {
566 T!['('], 561 T!['('],
567 SelfParam, 562 SelfParam,
@@ -595,7 +590,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
595 qualifier: Path, 590 qualifier: Path,
596 } 591 }
597 struct PathSegment { 592 struct PathSegment {
598 T![::], T![<], NameRef, TypeArgList, ParamList, RetType, PathType, T![>] 593 T![::], T![crate], T![self], T![super], T![<], NameRef, TypeArgList, ParamList, RetType, PathType, T![>]
599 } 594 }
600 struct TypeArgList { 595 struct TypeArgList {
601 T![::], 596 T![::],
@@ -722,7 +717,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
722 FieldExpr, 717 FieldExpr,
723 AwaitExpr, 718 AwaitExpr,
724 TryExpr, 719 TryExpr,
725 TryBlockExpr, 720 EffectExpr,
726 CastExpr, 721 CastExpr,
727 RefExpr, 722 RefExpr,
728 PrefixExpr, 723 PrefixExpr,
diff --git a/xtask/src/codegen/gen_syntax.rs b/xtask/src/codegen/gen_syntax.rs
index e9dc09552..8028575c5 100644
--- a/xtask/src/codegen/gen_syntax.rs
+++ b/xtask/src/codegen/gen_syntax.rs
@@ -432,6 +432,7 @@ impl Field<'_> {
432 ":" => "colon", 432 ":" => "colon",
433 "::" => "coloncolon", 433 "::" => "coloncolon",
434 "#" => "pound", 434 "#" => "pound",
435 "?" => "question_mark",
435 _ => name, 436 _ => name,
436 }; 437 };
437 format_ident!("{}_token", name) 438 format_ident!("{}_token", name)
diff --git a/xtask/src/dist.rs b/xtask/src/dist.rs
index a56eeef8d..aef68089e 100644
--- a/xtask/src/dist.rs
+++ b/xtask/src/dist.rs
@@ -50,21 +50,19 @@ fn dist_server(nightly: bool) -> Result<()> {
50 if cfg!(target_os = "linux") { 50 if cfg!(target_os = "linux") {
51 std::env::set_var("CC", "clang"); 51 std::env::set_var("CC", "clang");
52 run!( 52 run!(
53 "cargo build --manifest-path ./crates/rust-analyzer/Cargo.toml --bin rust-analyzer --release 53 "cargo build --manifest-path ./crates/rust-analyzer/Cargo.toml --bin rust-analyzer --release"
54 --target x86_64-unknown-linux-musl
55 "
56 // We'd want to add, but that requires setting the right linker somehow 54 // We'd want to add, but that requires setting the right linker somehow
57 // --features=jemalloc 55 // --features=jemalloc
58 )?; 56 )?;
59 if !nightly { 57 if !nightly {
60 run!("strip ./target/x86_64-unknown-linux-musl/release/rust-analyzer")?; 58 run!("strip ./target/release/rust-analyzer")?;
61 } 59 }
62 } else { 60 } else {
63 run!("cargo build --manifest-path ./crates/rust-analyzer/Cargo.toml --bin rust-analyzer --release")?; 61 run!("cargo build --manifest-path ./crates/rust-analyzer/Cargo.toml --bin rust-analyzer --release")?;
64 } 62 }
65 63
66 let (src, dst) = if cfg!(target_os = "linux") { 64 let (src, dst) = if cfg!(target_os = "linux") {
67 ("./target/x86_64-unknown-linux-musl/release/rust-analyzer", "./dist/rust-analyzer-linux") 65 ("./target/release/rust-analyzer", "./dist/rust-analyzer-linux")
68 } else if cfg!(target_os = "windows") { 66 } else if cfg!(target_os = "windows") {
69 ("./target/release/rust-analyzer.exe", "./dist/rust-analyzer-windows.exe") 67 ("./target/release/rust-analyzer.exe", "./dist/rust-analyzer-windows.exe")
70 } else if cfg!(target_os = "macos") { 68 } else if cfg!(target_os = "macos") {
diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs
index ec824a518..2b7a461e5 100644
--- a/xtask/src/lib.rs
+++ b/xtask/src/lib.rs
@@ -10,23 +10,19 @@ pub mod pre_commit;
10pub mod codegen; 10pub mod codegen;
11mod ast_src; 11mod ast_src;
12 12
13use anyhow::Context;
14use std::{ 13use std::{
15 env, 14 env,
16 io::Write,
17 path::{Path, PathBuf}, 15 path::{Path, PathBuf},
18 process::{Command, Stdio},
19}; 16};
17
20use walkdir::{DirEntry, WalkDir}; 18use walkdir::{DirEntry, WalkDir};
21 19
22use crate::{ 20use crate::{
23 codegen::Mode, 21 codegen::Mode,
24 not_bash::{date_iso, fs2, pushd, rm_rf, run}, 22 not_bash::{date_iso, fs2, pushd, pushenv, rm_rf, run},
25}; 23};
26 24
27pub use anyhow::Result; 25pub use anyhow::{bail, Context as _, Result};
28
29const TOOLCHAIN: &str = "stable";
30 26
31pub fn project_root() -> PathBuf { 27pub fn project_root() -> PathBuf {
32 Path::new( 28 Path::new(
@@ -55,54 +51,44 @@ pub fn rust_files(path: &Path) -> impl Iterator<Item = PathBuf> {
55 51
56pub fn run_rustfmt(mode: Mode) -> Result<()> { 52pub fn run_rustfmt(mode: Mode) -> Result<()> {
57 let _dir = pushd(project_root()); 53 let _dir = pushd(project_root());
54 let _e = pushenv("RUSTUP_TOOLCHAIN", "stable");
58 ensure_rustfmt()?; 55 ensure_rustfmt()?;
59 56 match mode {
60 let check = if mode == Mode::Verify { "--check" } else { "" }; 57 Mode::Overwrite => run!("cargo fmt"),
61 run!("rustup run {} -- cargo fmt -- {}", TOOLCHAIN, check)?; 58 Mode::Verify => run!("cargo fmt -- --check"),
59 }?;
62 Ok(()) 60 Ok(())
63} 61}
64 62
65fn reformat(text: impl std::fmt::Display) -> Result<String> { 63fn reformat(text: impl std::fmt::Display) -> Result<String> {
64 let _e = pushenv("RUSTUP_TOOLCHAIN", "stable");
66 ensure_rustfmt()?; 65 ensure_rustfmt()?;
67 let mut rustfmt = Command::new("rustup") 66 let stdout = run!(
68 .args(&["run", TOOLCHAIN, "--", "rustfmt", "--config-path"]) 67 "rustfmt --config-path {} --config fn_single_line=true", project_root().join("rustfmt.toml").display();
69 .arg(project_root().join("rustfmt.toml")) 68 <text.to_string().as_bytes()
70 .args(&["--config", "fn_single_line=true"]) 69 )?;
71 .stdin(Stdio::piped())
72 .stdout(Stdio::piped())
73 .spawn()?;
74 write!(rustfmt.stdin.take().unwrap(), "{}", text)?;
75 let output = rustfmt.wait_with_output()?;
76 let stdout = String::from_utf8(output.stdout)?;
77 let preamble = "Generated file, do not edit by hand, see `xtask/src/codegen`"; 70 let preamble = "Generated file, do not edit by hand, see `xtask/src/codegen`";
78 Ok(format!("//! {}\n\n{}", preamble, stdout)) 71 Ok(format!("//! {}\n\n{}\n", preamble, stdout))
79} 72}
80 73
81fn ensure_rustfmt() -> Result<()> { 74fn ensure_rustfmt() -> Result<()> {
82 match Command::new("rustup") 75 let out = run!("rustfmt --version")?;
83 .args(&["run", TOOLCHAIN, "--", "cargo", "fmt", "--version"]) 76 if !out.contains("stable") {
84 .stderr(Stdio::null()) 77 bail!(
85 .stdout(Stdio::null()) 78 "Failed to run rustfmt from toolchain 'stable'. \
86 .status() 79 Please run `rustup component add rustfmt --toolchain stable` to install it.",
87 { 80 )
88 Ok(status) if status.success() => return Ok(()), 81 }
89 _ => (),
90 };
91 run!("rustup toolchain install {}", TOOLCHAIN)?;
92 run!("rustup component add rustfmt --toolchain {}", TOOLCHAIN)?;
93 Ok(()) 82 Ok(())
94} 83}
95 84
96pub fn run_clippy() -> Result<()> { 85pub fn run_clippy() -> Result<()> {
97 match Command::new("rustup") 86 if run!("cargo clippy --version").is_err() {
98 .args(&["run", TOOLCHAIN, "--", "cargo", "clippy", "--version"]) 87 bail!(
99 .stderr(Stdio::null()) 88 "Failed run cargo clippy. \
100 .stdout(Stdio::null()) 89 Please run `rustup component add clippy` to install it.",
101 .status() 90 )
102 { 91 }
103 Ok(status) if status.success() => (),
104 _ => install_clippy().context("install clippy")?,
105 };
106 92
107 let allowed_lints = [ 93 let allowed_lints = [
108 "clippy::collapsible_if", 94 "clippy::collapsible_if",
@@ -110,27 +96,24 @@ pub fn run_clippy() -> Result<()> {
110 "clippy::nonminimal_bool", 96 "clippy::nonminimal_bool",
111 "clippy::redundant_pattern_matching", 97 "clippy::redundant_pattern_matching",
112 ]; 98 ];
113 run!( 99 run!("cargo clippy --all-features --all-targets -- -A {}", allowed_lints.join(" -A "))?;
114 "rustup run {} -- cargo clippy --all-features --all-targets -- -A {}",
115 TOOLCHAIN,
116 allowed_lints.join(" -A ")
117 )?;
118 Ok(())
119}
120
121fn install_clippy() -> Result<()> {
122 run!("rustup toolchain install {}", TOOLCHAIN)?;
123 run!("rustup component add clippy --toolchain {}", TOOLCHAIN)?;
124 Ok(()) 100 Ok(())
125} 101}
126 102
127pub fn run_fuzzer() -> Result<()> { 103pub fn run_fuzzer() -> Result<()> {
128 let _d = pushd("./crates/ra_syntax"); 104 let _d = pushd("./crates/ra_syntax");
105 let _e = pushenv("RUSTUP_TOOLCHAIN", "nightly");
129 if run!("cargo fuzz --help").is_err() { 106 if run!("cargo fuzz --help").is_err() {
130 run!("cargo install cargo-fuzz")?; 107 run!("cargo install cargo-fuzz")?;
131 }; 108 };
132 109
133 run!("rustup run nightly -- cargo fuzz run parser")?; 110 // Expecting nightly rustc
111 let out = run!("rustc --version")?;
112 if !out.contains("nightly") {
113 bail!("fuzz tests require nightly rustc")
114 }
115
116 run!("cargo fuzz run parser")?;
134 Ok(()) 117 Ok(())
135} 118}
136 119
diff --git a/xtask/src/not_bash.rs b/xtask/src/not_bash.rs
index ef1699934..a6431e586 100644
--- a/xtask/src/not_bash.rs
+++ b/xtask/src/not_bash.rs
@@ -3,6 +3,8 @@
3use std::{ 3use std::{
4 cell::RefCell, 4 cell::RefCell,
5 env, 5 env,
6 ffi::OsString,
7 io::Write,
6 path::{Path, PathBuf}, 8 path::{Path, PathBuf},
7 process::{Command, Stdio}, 9 process::{Command, Stdio},
8}; 10};
@@ -57,7 +59,10 @@ macro_rules! _run {
57 run!($($expr),*; echo = true) 59 run!($($expr),*; echo = true)
58 }; 60 };
59 ($($expr:expr),* ; echo = $echo:expr) => { 61 ($($expr:expr),* ; echo = $echo:expr) => {
60 $crate::not_bash::run_process(format!($($expr),*), $echo) 62 $crate::not_bash::run_process(format!($($expr),*), $echo, None)
63 };
64 ($($expr:expr),* ; <$stdin:expr) => {
65 $crate::not_bash::run_process(format!($($expr),*), false, Some($stdin))
61 }; 66 };
62} 67}
63pub(crate) use _run as run; 68pub(crate) use _run as run;
@@ -77,6 +82,21 @@ impl Drop for Pushd {
77 } 82 }
78} 83}
79 84
85pub struct Pushenv {
86 _p: (),
87}
88
89pub fn pushenv(var: &str, value: &str) -> Pushenv {
90 Env::with(|env| env.pushenv(var.into(), value.into()));
91 Pushenv { _p: () }
92}
93
94impl Drop for Pushenv {
95 fn drop(&mut self) {
96 Env::with(|env| env.popenv())
97 }
98}
99
80pub fn rm_rf(path: impl AsRef<Path>) -> Result<()> { 100pub fn rm_rf(path: impl AsRef<Path>) -> Result<()> {
81 let path = path.as_ref(); 101 let path = path.as_ref();
82 if !path.exists() { 102 if !path.exists() {
@@ -90,15 +110,15 @@ pub fn rm_rf(path: impl AsRef<Path>) -> Result<()> {
90} 110}
91 111
92#[doc(hidden)] 112#[doc(hidden)]
93pub fn run_process(cmd: String, echo: bool) -> Result<String> { 113pub fn run_process(cmd: String, echo: bool, stdin: Option<&[u8]>) -> Result<String> {
94 run_process_inner(&cmd, echo).with_context(|| format!("process `{}` failed", cmd)) 114 run_process_inner(&cmd, echo, stdin).with_context(|| format!("process `{}` failed", cmd))
95} 115}
96 116
97pub fn date_iso() -> Result<String> { 117pub fn date_iso() -> Result<String> {
98 run!("date --iso --utc") 118 run!("date --iso --utc")
99} 119}
100 120
101fn run_process_inner(cmd: &str, echo: bool) -> Result<String> { 121fn run_process_inner(cmd: &str, echo: bool, stdin: Option<&[u8]>) -> Result<String> {
102 let mut args = shelx(cmd); 122 let mut args = shelx(cmd);
103 let binary = args.remove(0); 123 let binary = args.remove(0);
104 let current_dir = Env::with(|it| it.cwd().to_path_buf()); 124 let current_dir = Env::with(|it| it.cwd().to_path_buf());
@@ -107,12 +127,17 @@ fn run_process_inner(cmd: &str, echo: bool) -> Result<String> {
107 println!("> {}", cmd) 127 println!("> {}", cmd)
108 } 128 }
109 129
110 let output = Command::new(binary) 130 let mut command = Command::new(binary);
111 .args(args) 131 command.args(args).current_dir(current_dir).stderr(Stdio::inherit());
112 .current_dir(current_dir) 132 let output = match stdin {
113 .stdin(Stdio::null()) 133 None => command.stdin(Stdio::null()).output(),
114 .stderr(Stdio::inherit()) 134 Some(stdin) => {
115 .output()?; 135 command.stdin(Stdio::piped()).stdout(Stdio::piped());
136 let mut process = command.spawn()?;
137 process.stdin.take().unwrap().write_all(stdin)?;
138 process.wait_with_output()
139 }
140 }?;
116 let stdout = String::from_utf8(output.stdout)?; 141 let stdout = String::from_utf8(output.stdout)?;
117 142
118 if echo { 143 if echo {
@@ -133,13 +158,15 @@ fn shelx(cmd: &str) -> Vec<String> {
133 158
134struct Env { 159struct Env {
135 pushd_stack: Vec<PathBuf>, 160 pushd_stack: Vec<PathBuf>,
161 pushenv_stack: Vec<(OsString, Option<OsString>)>,
136} 162}
137 163
138impl Env { 164impl Env {
139 fn with<F: FnOnce(&mut Env) -> T, T>(f: F) -> T { 165 fn with<F: FnOnce(&mut Env) -> T, T>(f: F) -> T {
140 thread_local! { 166 thread_local! {
141 static ENV: RefCell<Env> = RefCell::new(Env { 167 static ENV: RefCell<Env> = RefCell::new(Env {
142 pushd_stack: vec![env::current_dir().unwrap()] 168 pushd_stack: vec![env::current_dir().unwrap()],
169 pushenv_stack: vec![],
143 }); 170 });
144 } 171 }
145 ENV.with(|it| f(&mut *it.borrow_mut())) 172 ENV.with(|it| f(&mut *it.borrow_mut()))
@@ -154,6 +181,17 @@ impl Env {
154 self.pushd_stack.pop().unwrap(); 181 self.pushd_stack.pop().unwrap();
155 env::set_current_dir(self.cwd()).unwrap(); 182 env::set_current_dir(self.cwd()).unwrap();
156 } 183 }
184 fn pushenv(&mut self, var: OsString, value: OsString) {
185 self.pushenv_stack.push((var.clone(), env::var_os(&var)));
186 env::set_var(var, value)
187 }
188 fn popenv(&mut self) {
189 let (var, value) = self.pushenv_stack.pop().unwrap();
190 match value {
191 None => env::remove_var(var),
192 Some(value) => env::set_var(var, value),
193 }
194 }
157 fn cwd(&self) -> &Path { 195 fn cwd(&self) -> &Path {
158 self.pushd_stack.last().unwrap() 196 self.pushd_stack.last().unwrap()
159 } 197 }