mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 21:05:02 +00:00
Add test for dyn Fn Output
This commit is contained in:
parent
436dcd9656
commit
f07338bae2
1 changed files with 68 additions and 0 deletions
|
@ -3043,3 +3043,71 @@ fn infer_box_fn_arg() {
|
||||||
"###
|
"###
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn infer_dyn_fn_output() {
|
||||||
|
assert_snapshot!(
|
||||||
|
infer(
|
||||||
|
r#"
|
||||||
|
//- /lib.rs deps:std
|
||||||
|
|
||||||
|
#[lang = "fn_once"]
|
||||||
|
pub trait FnOnce<Args> {
|
||||||
|
type Output;
|
||||||
|
|
||||||
|
extern "rust-call" fn call_once(self, args: Args) -> Self::Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[lang = "fn"]
|
||||||
|
pub trait Fn<Args>:FnOnce<Args> {
|
||||||
|
extern "rust-call" fn call(&self, args: Args) -> Self::Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[lang = "deref"]
|
||||||
|
pub trait Deref {
|
||||||
|
type Target: ?Sized;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[lang = "owned_box"]
|
||||||
|
pub struct Box<T: ?Sized> {
|
||||||
|
inner: *mut T,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: ?Sized> Deref for Box<T> {
|
||||||
|
type Target = T;
|
||||||
|
|
||||||
|
fn deref(&self) -> &T {
|
||||||
|
&self.inner
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn foo() {
|
||||||
|
let f: Box<dyn Fn() -> i32> = box(|| 5);
|
||||||
|
let x = f();
|
||||||
|
}
|
||||||
|
"#
|
||||||
|
),
|
||||||
|
@r###"
|
||||||
|
182..186 'self': Self
|
||||||
|
188..192 'args': Args
|
||||||
|
349..353 'self': &Self
|
||||||
|
355..359 'args': Args
|
||||||
|
523..527 'self': &Self
|
||||||
|
789..793 'self': &Box<T>
|
||||||
|
801..852 '{ ... }': &T
|
||||||
|
823..834 '&self.inner': &*mut T
|
||||||
|
824..828 'self': &Box<T>
|
||||||
|
824..834 'self.inner': *mut T
|
||||||
|
889..990 '{ ... }': ()
|
||||||
|
911..912 'f': Box<dyn Fn<(), Output = i32>>
|
||||||
|
937..946 'box(|| 5)': Box<|| -> i32>
|
||||||
|
941..945 '|| 5': || -> i32
|
||||||
|
944..945 '5': i32
|
||||||
|
968..969 'x': i32
|
||||||
|
972..973 'f': Box<dyn Fn<(), Output = i32>>
|
||||||
|
972..975 'f()': i32
|
||||||
|
"###
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue