]> git.lizzy.rs Git - rust.git/blob - tests/ui/dereference.rs
Global rework + fix imports
[rust.git] / tests / ui / dereference.rs
1 #![allow(unused_variables, clippy::many_single_char_names, clippy::clone_double_ref)]
2 #![warn(clippy::explicit_deref_method)]
3
4 use std::ops::{Deref, DerefMut};
5
6 fn main() {
7     let a: &mut String = &mut String::from("foo");
8
9     // these should require linting
10     let b: &str = a.deref();
11
12     let b: &mut str = a.deref_mut();
13
14     let b: String = a.deref().clone();
15
16     let b: usize = a.deref_mut().len();
17
18     let b: &usize = &a.deref().len();
19
20     // only first deref should get linted here
21     let b: &str = a.deref().deref();
22
23     // both derefs should get linted here
24     let b: String = format!("{}, {}", a.deref(), a.deref());
25
26     // these should not require linting
27
28     let b: &str = &*a;
29
30     let b: &mut str = &mut *a;
31
32     macro_rules! expr_deref {
33         ($body:expr) => {
34             $body.deref()
35         };
36     }
37     let b: &str = expr_deref!(a);
38 }