1 //! Completion tests for pattern position.
2 use expect_test::{expect, Expect};
4 use crate::tests::{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)
17 fn ident_rebind_pat() {
56 fn ident_ref_mut_pat() {
118 ma makro!(…) macro_rules! makro
124 bn Record Record { field$1 }$0
126 bn TupleV TupleV($1)$0
137 enum SingleVariantEnum {
140 use SingleVariantEnum::Variant;
147 ma makro!(…) macro_rules! makro
153 bn Record Record { field$1 }$0
169 ma makro!(…) macro_rules! makro
174 bn Record Record { field$1 }: Record$0
175 bn Tuple Tuple($1): Tuple$0
186 ma makro!(…) macro_rules! makro
191 bn Record Record { field$1 }$0
200 fn only_fn_like_macros() {
203 macro_rules! m { ($e:expr) => { $e } }
205 #[rustc_builtin_macro]
213 ma m!(…) macro_rules! m
221 fn in_simple_macro_call() {
224 macro_rules! m { ($e:expr) => { $e } }
228 m!(match E::X { a$0 })
233 ma m!(…) macro_rules! m
241 fn omits_private_fields_pat() {
245 pub struct Record { pub field: i32, _field: i32 }
246 pub struct Tuple(pub u32, u32);
247 pub struct Invisible(u32, u32);
260 bn Record Record { field$1, .. }$0
261 bn Tuple Tuple($1, ..)$0
269 fn completes_self_pats() {
293 fn enum_qualified() {
298 const ASSOC_CONST: () = ();
302 if let Enum::$0 = unknown {}
306 ct ASSOC_CONST const ASSOC_CONST: ()
307 ev RecordV {…} RecordV { field: u32 }
308 ev TupleV(…) TupleV(u32)
315 fn completes_in_record_field_pat() {
318 struct Foo { bar: Bar }
320 fn outer(Foo { bar: $0 }: Foo) {}
326 bn Foo Foo { bar$1 }$0
334 fn skips_in_record_field_pat_name() {
337 struct Foo { bar: Bar }
339 fn outer(Foo { bar$0 }: Foo) {}
346 fn completes_in_fn_param() {
349 struct Foo { bar: Bar }
356 bn Bar Bar($1): Bar$0
357 bn Foo Foo { bar$1 }: Foo$0
365 fn completes_in_closure_param() {
368 struct Foo { bar: Bar }
378 bn Foo Foo { bar$1 }$0
386 fn completes_no_delims_if_existing() {
404 struct Foo { bar: u32 }
406 match Foo { bar: 0 } {
427 match Enum::TupleVariant(0) {
433 ev TupleVariant(…) TupleVariant
439 RecordVariant { field: u32 }
442 match (Enum::RecordVariant { field: 0 }) {
443 Enum::RecordV$0 { field } => {}
448 ev RecordVariant {…} RecordVariant
454 fn completes_associated_const() {
457 #[derive(PartialEq, Eq)]
461 const ABC: Self = Self(0);
472 ct ABC const ABC: Self
481 pub const A: i32 = 123;
482 pub const B: i32 = 456;
493 ct A pub const A: i32
494 ct B pub const B: i32
506 pub const C: i32 = 123;
507 pub const D: i32 = 456;
518 ct C pub const C: i32
519 ct D pub const D: i32
527 pub const MIN: Self = 0;
537 ct MIN pub const MIN: Self