| #![warn(clippy::temporary_assignment)] | |
| #![allow(clippy::needless_lifetimes)] | |
| use std::ops::{Deref, DerefMut}; | |
| struct TupleStruct(i32); | |
| struct Struct { | |
| field: i32, | |
| } | |
| struct MultiStruct { | |
| structure: Struct, | |
| } | |
| struct Wrapper<'a> { | |
| inner: &'a mut Struct, | |
| } | |
| impl<'a> Deref for Wrapper<'a> { | |
| type Target = Struct; | |
| fn deref(&self) -> &Struct { | |
| self.inner | |
| } | |
| } | |
| impl<'a> DerefMut for Wrapper<'a> { | |
| fn deref_mut(&mut self) -> &mut Struct { | |
| self.inner | |
| } | |
| } | |
| struct ArrayStruct { | |
| array: [i32; 1], | |
| } | |
| const A: TupleStruct = TupleStruct(1); | |
| const B: Struct = Struct { field: 1 }; | |
| const C: MultiStruct = MultiStruct { | |
| structure: Struct { field: 1 }, | |
| }; | |
| const D: ArrayStruct = ArrayStruct { array: [1] }; | |
| fn main() { | |
| let mut s = Struct { field: 0 }; | |
| let mut t = (0, 0); | |
| Struct { field: 0 }.field = 1; | |
| //~^ temporary_assignment | |
| MultiStruct { | |
| //~^ temporary_assignment | |
| structure: Struct { field: 0 }, | |
| } | |
| .structure | |
| .field = 1; | |
| ArrayStruct { array: [0] }.array[0] = 1; | |
| //~^ temporary_assignment | |
| (0, 0).0 = 1; | |
| //~^ temporary_assignment | |
| // no error | |
| s.field = 1; | |
| t.0 = 1; | |
| Wrapper { inner: &mut s }.field = 1; | |
| let mut a_mut = TupleStruct(1); | |
| a_mut.0 = 2; | |
| let mut b_mut = Struct { field: 1 }; | |
| b_mut.field = 2; | |
| let mut c_mut = MultiStruct { | |
| structure: Struct { field: 1 }, | |
| }; | |
| c_mut.structure.field = 2; | |
| let mut d_mut = ArrayStruct { array: [1] }; | |
| d_mut.array[0] = 2; | |
| } |