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() {
55 fn ident_ref_mut_pat() {
56 // FIXME mut is already here, don't complete it again
91 // FIXME mut is already here, don't complete it again
115 bn Record Record { field$1 }$0
121 ma makro!(…) #[macro_export] macro_rules! makro
122 bn TupleV TupleV($1)$0
133 enum SingleVariantEnum {
136 use SingleVariantEnum::Variant;
143 bn Record Record { field$1 }$0
150 ma makro!(…) #[macro_export] macro_rules! makro
164 bn Record Record { field$1 }: Record$0
166 bn Tuple Tuple($1): Tuple$0
169 ma makro!(…) #[macro_export] macro_rules! makro
179 bn Record Record { field$1 }$0
184 ma makro!(…) #[macro_export] macro_rules! makro
190 fn only_fn_like_macros() {
193 macro_rules! m { ($e:expr) => { $e } }
195 #[rustc_builtin_macro]
204 ma m!(…) macro_rules! m
210 fn in_simple_macro_call() {
213 macro_rules! m { ($e:expr) => { $e } }
217 m!(match E::X { a$0 })
224 ma m!(…) macro_rules! m
230 fn omits_private_fields_pat() {
234 pub struct Record { pub field: i32, _field: i32 }
235 pub struct Tuple(pub u32, u32);
236 pub struct Invisible(u32, u32);
246 bn Record Record { field$1, .. }$0
248 bn Tuple Tuple($1, ..)$0
257 fn completes_self_pats() {
280 fn enum_qualified() {
281 // FIXME: Don't show functions, they aren't patterns
286 const ASSOC_CONST: () = ();
290 if let Enum::$0 = unknown {}
295 ev RecordV {field: u32}
297 ct ASSOC_CONST const ASSOC_CONST: ();
299 ta AssocType type AssocType;
305 fn completes_in_record_field_pat() {
308 struct Foo { bar: Bar }
310 fn outer(Foo { bar: $0 }: Foo) {}
314 bn Foo Foo { bar$1 }$0
323 fn skips_in_record_field_pat_name() {
326 struct Foo { bar: Bar }
328 fn outer(Foo { bar$0 }: Foo) {}
335 fn completes_in_fn_param() {
338 struct Foo { bar: Bar }
344 bn Foo Foo { bar$1 }: Foo$0
346 bn Bar Bar($1): Bar$0
353 fn completes_in_closure_param() {
356 struct Foo { bar: Bar }
364 bn Foo Foo { bar$1 }$0