mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Suggest removing Box::new
This commit is contained in:
committed by
Jack Huey
parent
af00ff2ce6
commit
d66fb4910f
@@ -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"
|
||||
|
||||
@@ -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`.
|
||||
Reference in New Issue
Block a user