//! Completion tests for pattern position.
use expect_test::{expect, Expect};
-use crate::tests::{completion_list, BASE_ITEMS_FIXTURE};
+use crate::tests::{check_edit, completion_list, BASE_ITEMS_FIXTURE};
fn check_empty(ra_fixture: &str, expect: Expect) {
let actual = completion_list(ra_fixture);
expect.assert_eq(&actual)
}
+#[test]
+fn wildcard() {
+ check(
+ r#"
+fn quux() {
+ let _$0
+}
+"#,
+ expect![""],
+ );
+}
+
#[test]
fn ident_rebind_pat() {
check_empty(
}
"#,
expect![[r#"
- kw ref
kw mut
+ kw ref
"#]],
);
}
}
"#,
expect![[r#"
- kw ref
- kw mut
+ ct CONST
en Enum
- bn Record Record { field$1 }$0
+ ma makro!(…) macro_rules! makro
+ md module
st Record
- bn Tuple Tuple($1)$0
st Tuple
- md module
st Unit
- ma makro!(…) macro_rules! makro
- bn TupleV TupleV($1)$0
ev TupleV
- ct CONST
+ bn Record {…} Record { field$1 }$0
+ bn Tuple(…) Tuple($1)$0
+ bn TupleV(…) TupleV($1)$0
+ kw mut
+ kw ref
"#]],
);
}
}
"#,
expect![[r#"
- kw ref
- kw mut
- bn Record Record { field$1 }$0
+ en SingleVariantEnum
+ ma makro!(…) macro_rules! makro
+ md module
st Record
- bn Tuple Tuple($1)$0
st Tuple
- ev Variant
- md module
- en SingleVariantEnum
st Unit
- ma makro!(…) macro_rules! makro
+ ev Variant
+ bn Record {…} Record { field$1 }$0
+ bn Tuple(…) Tuple($1)$0
+ bn Variant Variant$0
+ kw mut
+ kw ref
"#]],
);
}
}
"#,
expect![[r#"
- kw ref
- kw mut
- bn Record Record { field$1 }: Record$0
+ ma makro!(…) macro_rules! makro
+ md module
st Record
- bn Tuple Tuple($1): Tuple$0
st Tuple
- md module
st Unit
- ma makro!(…) macro_rules! makro
+ bn Record {…} Record { field$1 }: Record$0
+ bn Tuple(…) Tuple($1): Tuple$0
+ kw mut
+ kw ref
"#]],
);
check(
}
"#,
expect![[r#"
- kw ref
- kw mut
- bn Record Record { field$1 }$0
+ ma makro!(…) macro_rules! makro
+ md module
st Record
- bn Tuple Tuple($1)$0
st Tuple
- md module
st Unit
- ma makro!(…) macro_rules! makro
+ bn Record {…} Record { field$1 }$0
+ bn Tuple(…) Tuple($1)$0
+ kw mut
+ kw ref
"#]],
);
}
}
"#,
expect![[r#"
- kw ref
- kw mut
ma m!(…) macro_rules! m
+ kw mut
+ kw ref
"#]],
);
}
}
"#,
expect![[r#"
- kw ref
- kw mut
en E
ma m!(…) macro_rules! m
+ bn E::X E::X$0
+ kw mut
+ kw ref
"#]],
);
}
}
"#,
expect![[r#"
- kw ref
- kw mut
- bn Record Record { field$1, .. }$0
+ md foo
+ st Invisible
st Record
- bn Tuple Tuple($1, ..)$0
st Tuple
- st Invisible
- md foo
+ bn Record {…} Record { field$1, .. }$0
+ bn Tuple(…) Tuple($1, ..)$0
+ kw mut
+ kw ref
"#]],
)
}
}
"#,
expect![[r#"
- kw ref
- kw mut
- bn Self Self($1)$0
sp Self
- bn Foo Foo($1)$0
st Foo
+ bn Foo(…) Foo($1)$0
+ bn Self(…) Self($1)$0
+ kw mut
+ kw ref
"#]],
)
}
}
"#,
expect![[r#"
- ev TupleV(…) TupleV(u32)
- ev RecordV {…} RecordV { field: u32 }
- ev UnitV UnitV
ct ASSOC_CONST const ASSOC_CONST: ()
+ bn RecordV {…} RecordV { field$1 }$0
+ bn TupleV(…) TupleV($1)$0
+ bn UnitV UnitV$0
"#]],
);
}
fn outer(Foo { bar: $0 }: Foo) {}
"#,
expect![[r#"
- kw ref
- kw mut
- bn Foo Foo { bar$1 }$0
- st Foo
- bn Bar Bar($1)$0
st Bar
+ st Foo
+ bn Bar(…) Bar($1)$0
+ bn Foo {…} Foo { bar$1 }$0
+ kw mut
+ kw ref
"#]],
)
}
struct Bar(u32);
fn outer(Foo { bar$0 }: Foo) {}
"#,
- expect![[r#""#]],
+ expect![[r#"
+ kw mut
+ kw ref
+ "#]],
)
}
fn foo($0) {}
"#,
expect![[r#"
- kw ref
- kw mut
- bn Foo Foo { bar$1 }: Foo$0
- st Foo
- bn Bar Bar($1): Bar$0
st Bar
+ st Foo
+ bn Bar(…) Bar($1): Bar$0
+ bn Foo {…} Foo { bar$1 }: Foo$0
+ kw mut
+ kw ref
"#]],
)
}
}
"#,
expect![[r#"
- kw ref
- kw mut
- bn Foo Foo { bar$1 }$0
- st Foo
- bn Bar Bar($1)$0
st Bar
+ st Foo
+ bn Bar(…) Bar($1)$0
+ bn Foo {…} Foo { bar$1 }$0
+ kw mut
+ kw ref
"#]],
)
}
}
"#,
expect![[r#"
- kw self::
- kw super::
+ st Bar
kw crate::
+ kw self::
"#]],
);
check_empty(
r#"
struct Foo { bar: u32 }
fn foo() {
- match Foo { bar: 0 } {
+ match (Foo { bar: 0 }) {
F$0 { bar } => {}
}
}
"#,
expect![[r#"
- kw return
- kw self
- kw super
- kw crate
st Foo
- fn foo() fn()
- bt u32
+ kw crate::
+ kw self::
"#]],
);
check_empty(
}
"#,
expect![[r#"
- ev TupleVariant(…) TupleVariant
+ bn TupleVariant TupleVariant
"#]],
);
check_empty(
}
"#,
expect![[r#"
- ev RecordVariant {…} RecordVariant
+ bn RecordVariant RecordVariant
+ "#]],
+ );
+}
+
+#[test]
+fn completes_enum_variant_pat() {
+ cov_mark::check!(enum_variant_pattern_path);
+ check_edit(
+ "RecordVariant{}",
+ r#"
+enum Enum {
+ RecordVariant { field: u32 }
+}
+fn foo() {
+ match (Enum::RecordVariant { field: 0 }) {
+ Enum::RecordV$0
+ }
+}
+"#,
+ r#"
+enum Enum {
+ RecordVariant { field: u32 }
+}
+fn foo() {
+ match (Enum::RecordVariant { field: 0 }) {
+ Enum::RecordVariant { field$1 }$0
+ }
+}
+"#,
+ );
+}
+
+#[test]
+fn completes_enum_variant_pat_escape() {
+ cov_mark::check!(enum_variant_pattern_path);
+ check_empty(
+ r#"
+enum Enum {
+ A,
+ B { r#type: i32 },
+ r#type,
+ r#struct { r#type: i32 },
+}
+fn foo() {
+ match (Enum::A) {
+ $0
+ }
+}
+"#,
+ expect![[r#"
+ en Enum
+ bn Enum::A Enum::A$0
+ bn Enum::B {…} Enum::B { r#type$1 }$0
+ bn Enum::struct {…} Enum::r#struct { r#type$1 }$0
+ bn Enum::type Enum::r#type$0
+ kw mut
+ kw ref
+ "#]],
+ );
+
+ check_empty(
+ r#"
+enum Enum {
+ A,
+ B { r#type: i32 },
+ r#type,
+ r#struct { r#type: i32 },
+}
+fn foo() {
+ match (Enum::A) {
+ Enum::$0
+ }
+}
+"#,
+ expect![[r#"
+ bn A A$0
+ bn B {…} B { r#type$1 }$0
+ bn struct {…} r#struct { r#type$1 }$0
+ bn type r#type$0
"#]],
);
}
"#]],
);
}
+
+#[test]
+fn in_method_param() {
+ check_empty(
+ r#"
+struct Ty(u8);
+
+impl Ty {
+ fn foo($0)
+}
+"#,
+ expect![[r#"
+ sp Self
+ st Ty
+ bn &mut self
+ bn &self
+ bn Self(…) Self($1): Self$0
+ bn Ty(…) Ty($1): Ty$0
+ bn mut self
+ bn self
+ kw mut
+ kw ref
+ "#]],
+ );
+ check_empty(
+ r#"
+struct Ty(u8);
+
+impl Ty {
+ fn foo(s$0)
+}
+"#,
+ expect![[r#"
+ sp Self
+ st Ty
+ bn &mut self
+ bn &self
+ bn Self(…) Self($1): Self$0
+ bn Ty(…) Ty($1): Ty$0
+ bn mut self
+ bn self
+ kw mut
+ kw ref
+ "#]],
+ );
+ check_empty(
+ r#"
+struct Ty(u8);
+
+impl Ty {
+ fn foo(s$0, foo: u8)
+}
+"#,
+ expect![[r#"
+ sp Self
+ st Ty
+ bn &mut self
+ bn &self
+ bn Self(…) Self($1): Self$0
+ bn Ty(…) Ty($1): Ty$0
+ bn mut self
+ bn self
+ kw mut
+ kw ref
+ "#]],
+ );
+ check_empty(
+ r#"
+struct Ty(u8);
+
+impl Ty {
+ fn foo(foo: u8, b$0)
+}
+"#,
+ expect![[r#"
+ sp Self
+ st Ty
+ bn Self(…) Self($1): Self$0
+ bn Ty(…) Ty($1): Ty$0
+ kw mut
+ kw ref
+ "#]],
+ );
+}