at Hash
at PartialEq
at PartialEq, Eq
- at PartialEq, Eq, PartialOrd, Ord
at PartialEq, PartialOrd
+ at PartialEq, Eq, PartialOrd, Ord
"#]],
);
}
at Clone, Copy
at Debug
at Default
- at Eq
- at Eq, PartialOrd, Ord
at Hash
+ at Eq
at PartialOrd
+ at Eq, PartialOrd, Ord
"#]],
)
}
expect![[r#"
at allow(…)
at automatically_derived
- at cfg(…)
at cfg_attr(…)
+ at cfg(…)
at cold
at deny(…)
at deprecated = "…"
at derive(…)
- at doc = "…"
at export_name = "…"
+ at doc = "…"
at forbid(…)
at ignore = "…"
at inline(…)
expect![[r#"
at allow(…)
at automatically_derived
- at cfg(…)
at cfg_attr(…)
+ at cfg(…)
at cold
at crate_name = ""
at deny(…)
at deprecated = "…"
at derive(…)
- at doc = "…"
at export_name = "…"
+ at doc = "…"
at feature(…)
at forbid(…)
at global_allocator
at macro_export
at macro_use
at must_use = "…"
- at no_implicit_prelude
at no_link
+ at no_implicit_prelude
at no_main
at no_mangle
at no_std
fn foo(s: S) { s.<|> }
"#,
expect![[r#"
- me bar() fn bar(&self)
fd foo u32
+ me bar() fn bar(&self)
"#]],
);
}
}
"#,
expect![[r#"
- me foo() fn foo(self)
fd the_field (u32,)
+ me foo() fn foo(self)
"#]],
)
}
}
"#,
expect![[r#"
- me foo() fn foo(&self)
fd the_field (u32, i32)
+ me foo() fn foo(&self)
"#]],
)
}
fn foo(a: inner::A) { a.<|> }
"#,
expect![[r#"
- fd crate_field u32
fd pub_field u32
+ fd crate_field u32
fd super_field u32
"#]],
);
check(
r"m<|>",
expect![[r#"
- kw const
- kw enum
- kw extern
kw fn
+ kw use
kw impl
- kw mod
- kw pub
- kw pub(crate)
- kw static
- kw struct
kw trait
- kw type
+ kw enum
+ kw struct
kw union
+ kw mod
+ kw const
+ kw type
+ kw static
+ kw extern
kw unsafe
- kw use
+ kw pub(crate)
+ kw pub
"#]],
);
}
check(
r"fn quux() { <|> }",
expect![[r#"
- kw const
- kw extern
kw fn
+ kw use
+ kw impl
+ kw trait
+ kw match
+ kw while
+ kw loop
kw if
kw if let
- kw impl
kw let
- kw loop
- kw match
kw mod
- kw return
- kw static
- kw trait
+ kw const
kw type
+ kw static
+ kw extern
kw unsafe
- kw use
- kw while
+ kw return
"#]],
);
}
check(
r"fn quux() { if true { <|> } }",
expect![[r#"
- kw const
- kw extern
kw fn
+ kw use
+ kw impl
+ kw trait
+ kw match
+ kw while
+ kw loop
kw if
kw if let
- kw impl
kw let
- kw loop
- kw match
kw mod
- kw return
- kw static
- kw trait
+ kw const
kw type
+ kw static
+ kw extern
kw unsafe
- kw use
- kw while
+ kw return
"#]],
);
}
check(
r#"fn quux() { if true { () } <|> }"#,
expect![[r#"
- kw const
- kw else
- kw else if
- kw extern
kw fn
+ kw use
+ kw impl
+ kw trait
+ kw match
+ kw while
+ kw loop
kw if
kw if let
- kw impl
kw let
- kw loop
- kw match
+ kw else
+ kw else if
kw mod
- kw return
- kw static
- kw trait
+ kw const
kw type
+ kw static
+ kw extern
kw unsafe
- kw use
- kw while
+ kw return
"#]],
);
check_edit(
}
"#,
expect![[r#"
+ kw match
+ kw while
+ kw loop
kw if
kw if let
- kw loop
- kw match
- kw return
kw unsafe
- kw while
+ kw return
"#]],
);
}
check(
r"trait My { <|> }",
expect![[r#"
- kw const
kw fn
+ kw const
kw type
kw unsafe
"#]],
check(
r"impl My { <|> }",
expect![[r#"
- kw const
kw fn
- kw pub
- kw pub(crate)
+ kw const
kw type
kw unsafe
+ kw pub(crate)
+ kw pub
"#]],
);
}
check(
r"fn my() { loop { <|> } }",
expect![[r#"
- kw break
- kw const
- kw continue
- kw extern
kw fn
+ kw use
+ kw impl
+ kw trait
+ kw match
+ kw while
+ kw loop
kw if
kw if let
- kw impl
kw let
- kw loop
- kw match
kw mod
- kw return
- kw static
- kw trait
+ kw const
kw type
+ kw static
+ kw extern
kw unsafe
- kw use
- kw while
+ kw continue
+ kw break
+ kw return
"#]],
);
}
r"unsafe <|>",
expect![[r#"
kw fn
- kw impl
kw trait
+ kw impl
"#]],
);
}
r"fn my_fn() { unsafe <|> }",
expect![[r#"
kw fn
- kw impl
kw trait
+ kw impl
"#]],
);
}
check(
r#"fn main() { let _ = <|> }"#,
expect![[r#"
+ kw match
+ kw while
+ kw loop
kw if
kw if let
- kw loop
- kw match
kw return
- kw while
"#]],
)
}
}
"#,
expect![[r#"
- kw pub
kw pub(crate)
+ kw pub
"#]],
)
}
}
"#,
expect![[r#"
+ kw match
+ kw while
+ kw loop
kw if
kw if let
- kw loop
- kw match
kw return
- kw while
"#]],
);
}
fn ignored_bar() {}
"#,
expect![[r#"
- md bar;
md foo;
+ md bar;
"#]],
);
}
fn ignored_bar() {}
"#,
expect![[r#"
- md bar;
md foo;
+ md bar;
"#]],
);
}
}
"#,
expect![[r#"
- st Bar
en E
- ev X ()
ct Z
+ st Bar
+ ev X ()
md m
"#]],
);
}
"#,
expect![[r#"
- sn box Box::new(expr)
- sn call function(expr)
- sn dbg dbg!(expr)
- sn dbgr dbg!(&expr)
sn if if expr {}
- sn let let
- sn letm let mut
- sn match match expr {}
+ sn while while expr {}
sn not !expr
- sn ok Ok(expr)
sn ref &expr
sn refm &mut expr
+ sn match match expr {}
+ sn box Box::new(expr)
+ sn ok Ok(expr)
sn some Some(expr)
- sn while while expr {}
+ sn dbg dbg!(expr)
+ sn dbgr dbg!(&expr)
+ sn call function(expr)
+ sn let let
+ sn letm let mut
"#]],
);
}
}
"#,
expect![[r#"
- sn box Box::new(expr)
- sn call function(expr)
- sn dbg dbg!(expr)
- sn dbgr dbg!(&expr)
sn if if expr {}
- sn match match expr {}
+ sn while while expr {}
sn not !expr
- sn ok Ok(expr)
sn ref &expr
sn refm &mut expr
+ sn match match expr {}
+ sn box Box::new(expr)
+ sn ok Ok(expr)
sn some Some(expr)
- sn while while expr {}
+ sn dbg dbg!(expr)
+ sn dbgr dbg!(&expr)
+ sn call function(expr)
"#]],
);
}
}
"#,
expect![[r#"
+ sn ref &expr
+ sn refm &mut expr
+ sn match match expr {}
sn box Box::new(expr)
- sn call function(expr)
+ sn ok Ok(expr)
+ sn some Some(expr)
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
+ sn call function(expr)
sn let let
sn letm let mut
- sn match match expr {}
- sn ok Ok(expr)
- sn ref &expr
- sn refm &mut expr
- sn some Some(expr)
"#]],
)
}
}
"#,
expect![[r#"
- sn box Box::new(expr)
- sn call function(expr)
- sn dbg dbg!(expr)
- sn dbgr dbg!(&expr)
sn if if expr {}
- sn let let
- sn letm let mut
- sn match match expr {}
+ sn while while expr {}
sn not !expr
- sn ok Ok(expr)
sn ref &expr
sn refm &mut expr
+ sn match match expr {}
+ sn box Box::new(expr)
+ sn ok Ok(expr)
sn some Some(expr)
- sn while while expr {}
+ sn dbg dbg!(expr)
+ sn dbgr dbg!(&expr)
+ sn call function(expr)
+ sn let let
+ sn letm let mut
"#]],
);
}
check_builtin(
r#"fn main() { let _: <|> = 92; }"#,
expect![[r#"
+ bt u32
bt bool
- bt char
+ bt u8
+ bt isize
+ bt u16
+ bt u64
+ bt u128
bt f32
- bt f64
bt i128
bt i16
- bt i32
+ bt str
bt i64
+ bt char
+ bt f64
+ bt i32
bt i8
- bt isize
- bt str
- bt u128
- bt u16
- bt u32
- bt u64
- bt u8
bt usize
"#]],
);
use crate::Sp<|>
"#,
expect![[r#"
- st Spam
md foo
+ st Spam
"#]],
);
}
use crate::{Sp<|>};
"#,
expect![[r#"
- st Spam
md foo
+ st Spam
"#]],
);
}
fn foo() { let _ = E::<|> }
"#,
expect![[r#"
- ev Bar(…) (i32)
ev Foo ()
+ ev Bar(…) (i32)
"#]],
);
}
fn foo() { let _ = S::<|> }
"#,
expect![[r#"
- ct C const C: i32 = 42;
- ta T type T = i32;
fn a() fn a()
me b(…) fn b(&self)
+ ct C const C: i32 = 42;
+ ta T type T = i32;
"#]],
);
}
fn foo() { let _ = S::<|> }
"#,
expect![[r#"
+ fn public_method() pub(crate) fn public_method()
ct PUBLIC_CONST pub(crate) const PUBLIC_CONST: u32 = 1;
ta PublicType pub(crate) type PublicType = u32;
- fn public_method() pub(crate) fn public_method()
"#]],
);
}
fn foo<T: Sub>() { T::<|> }
"#,
expect![[r#"
- ct C2 const C2: ();
- ct CONST const CONST: u8;
ta SubTy type SubTy;
ta Ty type Ty;
- fn func() fn func()
- me method(…) fn method(&self)
+ ct C2 const C2: ();
fn subfunc() fn subfunc()
me submethod(…) fn submethod(&self)
+ ct CONST const CONST: u8;
+ fn func() fn func()
+ me method(…) fn method(&self)
"#]],
);
}
}
"#,
expect![[r#"
- ct C2 const C2: () = ();
- ct CONST const CONST: u8 = 0;
ta SubTy type SubTy;
ta Ty type Ty;
+ ct CONST const CONST: u8 = 0;
fn func() fn func()
me method(…) fn method(&self)
+ ct C2 const C2: () = ();
fn subfunc() fn subfunc()
me submethod(…) fn submethod(&self)
"#]],
fn main() { T::<|>; }
"#,
expect![[r#"
- fn bar() fn bar()
fn foo() fn foo()
+ fn bar() fn bar()
"#]],
);
}
fn main() { let _ = crate::<|> }
"#,
expect![[r##"
+ fn main() fn main()
ma foo!(…) #[macro_export]
macro_rules! foo
- fn main() fn main()
"##]],
);
}
}
"#,
expect![[r#"
- ct A
md b
+ ct A
"#]],
);
}
"#,
expect![[r#"
ct RIGHT_CONST
- st RightType
fn right_fn() fn wrong_fn()
+ st RightType
"#]],
);
fn foo() {}
"#,
expect![[r#"
- fn foo() fn foo()
fn main() fn main()
+ fn foo() fn foo()
"#]],
);
}
}
"#,
expect![[r#"
- fn foo(…) fn foo(a: i32, b: i32)
fn main() fn main()
+ fn foo(…) fn foo(a: i32, b: i32)
"#]],
);
}
check_snippet(
test_code,
expect![[r#"
- fd ..Default::default()
sn pd
sn ppd
+ fd ..Default::default()
"#]],
);
}
}
"#,
expect![[r#"
- fd bar ()
fd foo u32
+ fd bar ()
"#]],
);
}
}
"#,
expect![[r#"
- sn macro_rules
- sn tfn (Test function)
sn tmod (Test module)
+ sn tfn (Test function)
+ sn macro_rules
"#]],
)
}
t<|>
}
"#,
- expect![["
-ct const TEST_CONST: u16 = \n\
-fn fn test()
-ta type TestType = \n\
- "]],
+ expect![[r#"
+ ta type TestType =
+ ct const TEST_CONST: u16 =
+ fn fn test()
+ "#]],
);
}
}
"#,
expect![[r#"
- fn quux(…) fn quux(x: i32)
- bn x i32
bn y i32
+ bn x i32
+ fn quux(…) fn quux(x: i32)
"#]],
);
}
}
"#,
expect![[r#"
- bn a
bn b i32
+ bn a
fn quux() fn quux()
"#]],
);
}
"#,
expect![[r#"
- fn quux() fn quux()
bn x
+ fn quux() fn quux()
"#]],
);
}
check(
r#"struct S<T> { x: <|>}"#,
expect![[r#"
- st S<…>
tp Self
tp T
+ st S<…>
"#]],
);
}
fn quux() { <|> }
"#,
expect![[r#"
- en E
st S
fn quux() fn quux()
+ en E
"#]],
);
}
}
"#,
expect![[r#"
- st Bar
fn quux() fn quux()
+ st Bar
"#]],
);
}
check(
r#"impl S { fn foo(&self) { <|> } }"#,
expect![[r#"
- tp Self
bn self &{unknown}
+ tp Self
"#]],
);
}
mod prelude { struct Option; }
"#,
expect![[r#"
- st Option
fn foo() fn foo()
md std
+ st Option
"#]],
);
}
mod prelude { struct String; }
"#,
expect![[r#"
- st String
- md core
fn foo() fn foo()
md std
+ md core
+ st String
"#]],
);
}
fn main() { let v = <|> }
"#,
expect![[r##"
- ma bar!(…) macro_rules! bar
+ md m1
ma baz!(…) #[macro_export]
macro_rules! baz
- ma foo!(…) macro_rules! foo
- md m1
- md m2
fn main() fn main()
+ md m2
+ ma bar!(…) macro_rules! bar
+ ma foo!(…) macro_rules! foo
"##]],
);
}
fn foo() { <|> }
"#,
expect![[r#"
- ma foo!(…) macro_rules! foo
fn foo() fn foo()
+ ma foo!(…) macro_rules! foo
"#]],
);
}
fn main() { let x: <|> }
"#,
expect![[r#"
- ma foo!(…) macro_rules! foo
fn main() fn main()
+ ma foo!(…) macro_rules! foo
"#]],
);
}
fn main() { <|> }
"#,
expect![[r#"
- ma foo!(…) macro_rules! foo
fn main() fn main()
+ ma foo!(…) macro_rules! foo
"#]],
);
}
}
"#,
expect![[r#"
- ma m!(…) macro_rules! m
- fn quux(…) fn quux(x: i32)
- bn x i32
bn y i32
+ bn x i32
+ fn quux(…) fn quux(x: i32)
+ ma m!(…) macro_rules! m
"#]],
);
}
}
",
expect![[r#"
- ma m!(…) macro_rules! m
- fn quux(…) fn quux(x: i32)
- bn x i32
bn y i32
+ bn x i32
+ fn quux(…) fn quux(x: i32)
+ ma m!(…) macro_rules! m
"#]],
);
}
}
"#,
expect![[r#"
- ma m!(…) macro_rules! m
- fn quux(…) fn quux(x: i32)
- bn x i32
bn y i32
+ bn x i32
+ fn quux(…) fn quux(x: i32)
+ ma m!(…) macro_rules! m
"#]],
);
}
fn main() { <|> }
"#,
expect![[r#"
- ?? Quux
fn main() fn main()
+ ?? Quux
"#]],
);
}
}
"#,
expect![[r#"
- en Foo
ev Foo::Bar ()
ev Foo::Baz ()
ev Foo::Quux ()
+ en Foo
"#]],
)
}
}
"#,
expect![[r#"
- en Foo
ev Foo::Bar ()
ev Foo::Baz ()
ev Foo::Quux ()
+ en Foo
"#]],
)
}
fn main() { let foo: Foo = Q<|> }
"#,
expect![[r#"
- en Foo
ev Foo::Bar ()
ev Foo::Baz ()
ev Foo::Quux ()
+ en Foo
fn main() fn main()
"#]],
)
fn f() -> m::E { V<|> }
"#,
expect![[r#"
- fn f() fn f() -> m::E
- md m
ev m::E::V ()
+ md m
+ fn f() fn f() -> m::E
"#]],
)
}
impl My<|>
"#,
expect![[r#"
- st MyStruct
- tt MyTrait
tp Self
+ tt MyTrait
+ st MyStruct
"#]],
)
}
}
"#,
expect![[r#"
- st FirstStruct
+ fn main() fn main()
st SecondStruct
+ st FirstStruct
md dep
st dep::some_module::ThirdStruct
st dep::some_module::AfterThirdStruct
st dep::some_module::ThiiiiiirdStruct
- fn main() fn main()
"#]],
);
}
code: &str,
kind: CompletionKind,
) -> String {
- let mut kind_completions: Vec<CompletionItem> =
+ let kind_completions: Vec<CompletionItem> =
get_all_items(config, code).into_iter().filter(|c| c.completion_kind == kind).collect();
- kind_completions.sort_by_key(|c| c.label().to_owned());
let label_width = kind_completions
.iter()
.map(|it| monospace_width(it.label()))