#![warn(clippy::use_self)] #![allow(clippy::type_complexity)] fn main() {} struct Basic { flag: Option>, //~^ use_self } struct BasicSelf { okay: Option>, } struct Generic<'q, T: From> { t: &'q T, flag: Option>, //~^ use_self } struct GenericSelf<'q, T: From> { t: &'q T, okay: Option>, } struct MixedLifetimes<'q, T: From + 'static> { t: &'q T, okay: Option>>, } struct ConcreteType<'q, T: From> { t: &'q T, okay: Option>>, } struct ConcreteAndGeneric<'q, T: From> { t: &'q T, flag: Option>, //~^ use_self okay: Option>>, } struct ConcreteAndGenericSelf<'q, T: From> { t: &'q T, okay_1: Option>, okay_2: Option>>, } macro_rules! recursive_struct { ($name:ident) => { struct $name { okay: Option>, } }; } recursive_struct!(X); recursive_struct!(Y); recursive_struct!(Z); struct Tree { left: Option>, //~^ use_self right: Option>, //~^ use_self } struct TreeSelf { left: Option>, right: Option>, } struct TreeMixed { left: Option>, right: Option>, //~^ use_self } struct Nested { flag: Option>>>, //~^ use_self } struct NestedSelf { okay: Option>>>, } struct Tuple(Option>); //~^ use_self struct TupleSelf(Option>); use std::cell::RefCell; use std::rc::{Rc, Weak}; struct Containers { flag: Vec>>>>>>, //~^ use_self } struct ContainersSelf { okay: Vec>>>>>>, } type Wrappers = Vec>>>>>>; struct Alias { flag: Wrappers, //~^ use_self } struct AliasSelf { okay: Wrappers, } struct Array { flag: [Option>; N], //~^ use_self } struct ArraySelf { okay: [Option>; N], } enum Enum { Nil, Cons(Box), //~^ use_self } enum EnumSelf { Nil, Cons(Box), }