Suggest removing Box::new

This commit is contained in:
Cameron Steffen
2025-09-05 21:35:58 -05:00
committed by Jack Huey
parent af00ff2ce6
commit d66fb4910f
4 changed files with 49 additions and 3 deletions
@@ -2955,6 +2955,28 @@ pub(crate) fn suggest_deref_or_ref(
)
{
let deref_kind = if checked_ty.is_box() {
// detect Box::new(..)
if let ExprKind::Call(box_new, [_]) = expr.kind
&& let ExprKind::Path(qpath) = &box_new.kind
&& let Res::Def(DefKind::AssocFn, fn_id) =
self.typeck_results.borrow().qpath_res(qpath, box_new.hir_id)
&& let Some(impl_id) = self.tcx.inherent_impl_of_assoc(fn_id)
&& self.tcx.type_of(impl_id).skip_binder().is_box()
&& self.tcx.item_name(fn_id) == sym::new
{
let l_paren = self.tcx.sess.source_map().next_point(box_new.span);
let r_paren = self.tcx.sess.source_map().end_point(expr.span);
return Some((
vec![
(box_new.span.to(l_paren), String::new()),
(r_paren, String::new()),
],
"consider removing the Box".to_string(),
Applicability::MachineApplicable,
false,
false,
));
}
"unboxing the value"
} else if checked_ty.is_ref() {
"dereferencing the borrow"
+4 -3
View File
@@ -6,10 +6,11 @@ LL | let _: &i32 = & { Box::new(1i32) };
|
= note: expected type `i32`
found struct `Box<i32>`
help: consider unboxing the value
help: consider removing the Box
|
LL - let _: &i32 = & { Box::new(1i32) };
LL + let _: &i32 = & { 1i32 };
|
LL | let _: &i32 = & { *Box::new(1i32) };
| +
error: aborting due to 1 previous error
@@ -0,0 +1,4 @@
fn main() {
let _: String = Box::new(String::new());
//~^ ERROR mismatched types
}
@@ -0,0 +1,19 @@
error[E0308]: mismatched types
--> $DIR/coerce-box-new-to-unboxed.rs:2:21
|
LL | let _: String = Box::new(String::new());
| ------ ^^^^^^^^^^^^^^^^^^^^^^^ expected `String`, found `Box<String>`
| |
| expected due to this
|
= note: expected struct `String`
found struct `Box<String>`
help: consider removing the Box
|
LL - let _: String = Box::new(String::new());
LL + let _: String = String::new();
|
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0308`.