1 #![warn(clippy::new_ret_no_self)]
22 // should not trigger the lint
23 pub fn new() -> impl R<Item = Self> {
35 // should not trigger the lint
36 pub fn new(_: String) -> impl R<Item = Self> {
48 // should trigger the lint
49 pub fn new(_: String) -> impl R<Item = u32> {
62 // should not trigger the lint
63 pub fn new(_: String) -> impl Q<Item = u32, Item2 = Self> {
71 // should not trigger lint
72 pub fn new() -> Self {
80 // should trigger lint
89 // should trigger lint
90 pub fn new(_: String) -> u32 {
95 struct TupleReturnerOk;
97 impl TupleReturnerOk {
98 // should not trigger lint
99 pub fn new() -> (Self, u32) {
104 struct TupleReturnerOk2;
106 impl TupleReturnerOk2 {
107 // should not trigger lint (it doesn't matter which element in the tuple is Self)
108 pub fn new() -> (u32, Self) {
113 struct TupleReturnerOk3;
115 impl TupleReturnerOk3 {
116 // should not trigger lint (tuple can contain multiple Self)
117 pub fn new() -> (Self, Self) {
122 struct TupleReturnerBad;
124 impl TupleReturnerBad {
125 // should trigger lint
126 pub fn new() -> (u32, u32) {
131 struct MutPointerReturnerOk;
133 impl MutPointerReturnerOk {
134 // should not trigger lint
135 pub fn new() -> *mut Self {
140 struct ConstPointerReturnerOk2;
142 impl ConstPointerReturnerOk2 {
143 // should not trigger lint
144 pub fn new() -> *const Self {
149 struct MutPointerReturnerBad;
151 impl MutPointerReturnerBad {
152 // should trigger lint
153 pub fn new() -> *mut V {
158 struct GenericReturnerOk;
160 impl GenericReturnerOk {
161 // should not trigger lint
162 pub fn new() -> Option<Self> {
167 struct GenericReturnerBad;
169 impl GenericReturnerBad {
170 // should trigger lint
171 pub fn new() -> Option<u32> {
176 struct NestedReturnerOk;
178 impl NestedReturnerOk {
179 // should not trigger lint
180 pub fn new() -> (Option<Self>, u32) {
185 struct NestedReturnerOk2;
187 impl NestedReturnerOk2 {
188 // should not trigger lint
189 pub fn new() -> ((Self, u32), u32) {
194 struct NestedReturnerOk3;
196 impl NestedReturnerOk3 {
197 // should not trigger lint
198 pub fn new() -> Option<(Self, u32)> {
203 struct WithLifetime<'a> {
207 impl<'a> WithLifetime<'a> {
208 // should not trigger the lint, because the lifetimes are different
209 pub fn new<'b: 'a>(s: &'b str) -> WithLifetime<'b> {
217 pub trait TraitRetSelf {
218 // should not trigger lint
223 // should trigger lint as we are in trait definition
226 pub struct StructRet;
227 impl TraitRet for StructRet {
228 // should not trigger lint as we are in the impl block
234 pub trait TraitRet2 {
235 // should trigger lint
236 fn new(_: String) -> String;
239 trait TupleReturnerOk {
240 // should not trigger lint
241 fn new() -> (Self, u32)
249 trait TupleReturnerOk2 {
250 // should not trigger lint (it doesn't matter which element in the tuple is Self)
251 fn new() -> (u32, Self)
259 trait TupleReturnerOk3 {
260 // should not trigger lint (tuple can contain multiple Self)
261 fn new() -> (Self, Self)
269 trait TupleReturnerBad {
270 // should trigger lint
271 fn new() -> (u32, u32) {
276 trait MutPointerReturnerOk {
277 // should not trigger lint
278 fn new() -> *mut Self
286 trait ConstPointerReturnerOk2 {
287 // should not trigger lint
288 fn new() -> *const Self
296 trait MutPointerReturnerBad {
297 // should trigger lint
303 trait GenericReturnerOk {
304 // should not trigger lint
305 fn new() -> Option<Self>
313 trait NestedReturnerOk {
314 // should not trigger lint
315 fn new() -> (Option<Self>, u32)
323 trait NestedReturnerOk2 {
324 // should not trigger lint
325 fn new() -> ((Self, u32), u32)
333 trait NestedReturnerOk3 {
334 // should not trigger lint
335 fn new() -> Option<(Self, u32)>
345 struct RetOtherSelf<T>(T);
346 struct RetOtherSelfWrapper<T>(T);
348 impl RetOtherSelf<T> {
349 fn new(t: T) -> RetOtherSelf<RetOtherSelfWrapper<T>> {
350 RetOtherSelf(RetOtherSelfWrapper(t))