File tree Expand file tree Collapse file tree 2 files changed +108
-0
lines changed Expand file tree Collapse file tree 2 files changed +108
-0
lines changed Original file line number Diff line number Diff line change @@ -156,3 +156,57 @@ fn main() {
156
156
let _z = y.map(RcWeak::clone);
157
157
}
158
158
}
159
+
160
+ // Ensures that it doesn't suggest `cloned` on `Arc` types.
161
+ fn issue_12612() {
162
+ use std::sync::Arc;
163
+
164
+ struct S2(Arc<String>);
165
+ struct S1(Option<S2>);
166
+
167
+ impl S1 {
168
+ fn v2(&self) -> Option<Arc<String>> {
169
+ self.v1().map(|v1| Arc::clone(&v1.0))
170
+ }
171
+
172
+ fn v3(&self) -> Option<Arc<String>> {
173
+ self.v1().map(|v1| {
174
+ let x = &v1.0;
175
+ Arc::clone(x)
176
+ })
177
+ }
178
+
179
+ fn v1(&self) -> Option<&S2> {
180
+ match &self.0 {
181
+ None => None,
182
+ Some(v) => Some(v),
183
+ }
184
+ }
185
+ }
186
+
187
+ struct D2(String);
188
+ struct D1(Option<D2>);
189
+
190
+ impl D1 {
191
+ fn v2(&self) -> Option<String> {
192
+ self.v1().map(|v1| String::clone(&v1.0))
193
+ }
194
+
195
+ fn v3(&self) -> Option<String> {
196
+ self.v1().map(|v1| {
197
+ let x = &v1.0;
198
+ String::clone(x)
199
+ })
200
+ }
201
+
202
+ fn v1(&self) -> Option<&D2> {
203
+ match &self.0 {
204
+ None => None,
205
+ Some(v) => Some(v),
206
+ }
207
+ }
208
+ }
209
+
210
+ let x = Some(Arc::new(String::new()));
211
+ let y = x.map(|a| Arc::clone(&a));
212
+ }
Original file line number Diff line number Diff line change @@ -156,3 +156,57 @@ fn main() {
156
156
let _z = y. map ( RcWeak :: clone) ;
157
157
}
158
158
}
159
+
160
+ // Ensures that it doesn't suggest `cloned` on `Arc` types.
161
+ fn issue_12612 ( ) {
162
+ use std:: sync:: Arc ;
163
+
164
+ struct S2 ( Arc < String > ) ;
165
+ struct S1 ( Option < S2 > ) ;
166
+
167
+ impl S1 {
168
+ fn v2 ( & self ) -> Option < Arc < String > > {
169
+ self . v1 ( ) . map ( |v1| Arc :: clone ( & v1. 0 ) )
170
+ }
171
+
172
+ fn v3 ( & self ) -> Option < Arc < String > > {
173
+ self . v1 ( ) . map ( |v1| {
174
+ let x = & v1. 0 ;
175
+ Arc :: clone ( x)
176
+ } )
177
+ }
178
+
179
+ fn v1 ( & self ) -> Option < & S2 > {
180
+ match & self . 0 {
181
+ None => None ,
182
+ Some ( v) => Some ( v) ,
183
+ }
184
+ }
185
+ }
186
+
187
+ struct D2 ( String ) ;
188
+ struct D1 ( Option < D2 > ) ;
189
+
190
+ impl D1 {
191
+ fn v2 ( & self ) -> Option < String > {
192
+ self . v1 ( ) . map ( |v1| String :: clone ( & v1. 0 ) )
193
+ }
194
+
195
+ fn v3 ( & self ) -> Option < String > {
196
+ self . v1 ( ) . map ( |v1| {
197
+ let x = & v1. 0 ;
198
+ String :: clone ( x)
199
+ } )
200
+ }
201
+
202
+ fn v1 ( & self ) -> Option < & D2 > {
203
+ match & self . 0 {
204
+ None => None ,
205
+ Some ( v) => Some ( v) ,
206
+ }
207
+ }
208
+ }
209
+
210
+ let x = Some ( Arc :: new ( String :: new ( ) ) ) ;
211
+ let y = x. map ( |a| Arc :: clone ( & a) ) ;
212
+ }
You can’t perform that action at this time.
0 commit comments