1 //! Completion tests for pattern position.
2 use expect_test::{expect, Expect};
4 use crate::tests::{check_edit, completion_list, BASE_ITEMS_FIXTURE};
6 fn check_empty(ra_fixture: &str, expect: Expect) {
7 let actual = completion_list(ra_fixture);
8 expect.assert_eq(&actual)
11 fn check(ra_fixture: &str, expect: Expect) {
12 let actual = completion_list(&format!("{}\n{}", BASE_ITEMS_FIXTURE, ra_fixture));
13 expect.assert_eq(&actual)
29 fn ident_rebind_pat() {
68 fn ident_ref_mut_pat() {
130 ma makro!(…) macro_rules! makro
136 bn Record {…} Record { field$1 }$0
137 bn Tuple(…) Tuple($1)$0
138 bn TupleV(…) TupleV($1)$0
149 enum SingleVariantEnum {
152 use SingleVariantEnum::Variant;
159 ma makro!(…) macro_rules! makro
165 bn Record {…} Record { field$1 }$0
166 bn Tuple(…) Tuple($1)$0
181 ma makro!(…) macro_rules! makro
186 bn Record {…} Record { field$1 }: Record$0
187 bn Tuple(…) Tuple($1): Tuple$0
198 ma makro!(…) macro_rules! makro
203 bn Record {…} Record { field$1 }$0
204 bn Tuple(…) Tuple($1)$0
212 fn only_fn_like_macros() {
215 macro_rules! m { ($e:expr) => { $e } }
217 #[rustc_builtin_macro]
225 ma m!(…) macro_rules! m
233 fn in_simple_macro_call() {
236 macro_rules! m { ($e:expr) => { $e } }
240 m!(match E::X { a$0 })
245 ma m!(…) macro_rules! m
253 fn omits_private_fields_pat() {
257 pub struct Record { pub field: i32, _field: i32 }
258 pub struct Tuple(pub u32, u32);
259 pub struct Invisible(u32, u32);
272 bn Record {…} Record { field$1, .. }$0
273 bn Tuple(…) Tuple($1, ..)$0
281 fn completes_self_pats() {
297 bn Self(…) Self($1)$0
305 fn enum_qualified() {
310 const ASSOC_CONST: () = ();
314 if let Enum::$0 = unknown {}
318 ct ASSOC_CONST const ASSOC_CONST: ()
319 bn RecordV {…} RecordV { field$1 }$0
320 bn TupleV(…) TupleV($1)$0
326 fn completes_in_record_field_pat() {
329 struct Foo { bar: Bar }
331 fn outer(Foo { bar: $0 }: Foo) {}
337 bn Foo {…} Foo { bar$1 }$0
345 fn skips_in_record_field_pat_name() {
348 struct Foo { bar: Bar }
350 fn outer(Foo { bar$0 }: Foo) {}
360 fn completes_in_fn_param() {
363 struct Foo { bar: Bar }
370 bn Bar(…) Bar($1): Bar$0
371 bn Foo {…} Foo { bar$1 }: Foo$0
379 fn completes_in_closure_param() {
382 struct Foo { bar: Bar }
392 bn Foo {…} Foo { bar$1 }$0
400 fn completes_no_delims_if_existing() {
419 struct Foo { bar: u32 }
421 match (Foo { bar: 0 }) {
439 match Enum::TupleVariant(0) {
445 bn TupleVariant(…) TupleVariant($1)$0
451 RecordVariant { field: u32 }
454 match (Enum::RecordVariant { field: 0 }) {
455 Enum::RecordV$0 { field } => {}
460 bn RecordVariant {…} RecordVariant { field$1 }$0
466 fn completes_enum_variant_pat() {
467 cov_mark::check!(enum_variant_pattern_path);
472 RecordVariant { field: u32 }
475 match (Enum::RecordVariant { field: 0 }) {
482 RecordVariant { field: u32 }
485 match (Enum::RecordVariant { field: 0 }) {
486 Enum::RecordVariant { field$1 }$0
494 fn completes_associated_const() {
497 #[derive(PartialEq, Eq)]
501 const ABC: Self = Self(0);
512 ct ABC const ABC: Self
521 pub const A: i32 = 123;
522 pub const B: i32 = 456;
533 ct A pub const A: i32
534 ct B pub const B: i32
546 pub const C: i32 = 123;
547 pub const D: i32 = 456;
558 ct C pub const C: i32
559 ct D pub const D: i32
567 pub const MIN: Self = 0;
577 ct MIN pub const MIN: Self