mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-02 15:32:06 +00:00
Rollup merge of #109154 - chenyukang:yukang/fix-109152, r=compiler-errors
Fix MappingToUnit to support no span of arg_ty Fixes #109152
This commit is contained in:
commit
19d575851a
@ -56,6 +56,7 @@ impl<'tcx> LateLintPass<'tcx> for MapUnitFn {
|
||||
return;
|
||||
}
|
||||
let arg_ty = cx.typeck_results().expr_ty(&args[0]);
|
||||
let default_span = args[0].span;
|
||||
if let ty::FnDef(id, _) = arg_ty.kind() {
|
||||
let fn_ty = cx.tcx.fn_sig(id).skip_binder();
|
||||
let ret_ty = fn_ty.output().skip_binder();
|
||||
@ -64,7 +65,10 @@ impl<'tcx> LateLintPass<'tcx> for MapUnitFn {
|
||||
MAP_UNIT_FN,
|
||||
span,
|
||||
MappingToUnit {
|
||||
function_label: cx.tcx.span_of_impl(*id).unwrap(),
|
||||
function_label: cx
|
||||
.tcx
|
||||
.span_of_impl(*id)
|
||||
.unwrap_or(default_span),
|
||||
argument_label: args[0].span,
|
||||
map_label: arg_ty.default_span(cx.tcx),
|
||||
suggestion: path.ident.span,
|
||||
@ -80,7 +84,10 @@ impl<'tcx> LateLintPass<'tcx> for MapUnitFn {
|
||||
MAP_UNIT_FN,
|
||||
span,
|
||||
MappingToUnit {
|
||||
function_label: cx.tcx.span_of_impl(*id).unwrap(),
|
||||
function_label: cx
|
||||
.tcx
|
||||
.span_of_impl(*id)
|
||||
.unwrap_or(default_span),
|
||||
argument_label: args[0].span,
|
||||
map_label: arg_ty.default_span(cx.tcx),
|
||||
suggestion: path.ident.span,
|
||||
|
7
tests/ui/lint/issue-109152.rs
Normal file
7
tests/ui/lint/issue-109152.rs
Normal file
@ -0,0 +1,7 @@
|
||||
#![deny(map_unit_fn)]
|
||||
|
||||
#![crate_type = "lib"]
|
||||
fn _y() {
|
||||
vec![42].iter().map(drop);
|
||||
//~^ ERROR `Iterator::map` call that discard the iterator's values
|
||||
}
|
23
tests/ui/lint/issue-109152.stderr
Normal file
23
tests/ui/lint/issue-109152.stderr
Normal file
@ -0,0 +1,23 @@
|
||||
error: `Iterator::map` call that discard the iterator's values
|
||||
--> $DIR/issue-109152.rs:5:21
|
||||
|
|
||||
LL | vec![42].iter().map(drop);
|
||||
| ^^^^----^
|
||||
| | |
|
||||
| | this function returns `()`, which is likely not what you wanted
|
||||
| | called `Iterator::map` with callable that returns `()`
|
||||
| after this call to map, the resulting iterator is `impl Iterator<Item = ()>`, which means the only information carried by the iterator is the number of items
|
||||
|
|
||||
= note: `Iterator::map`, like many of the methods on `Iterator`, gets executed lazily, meaning that its effects won't be visible until it is iterated
|
||||
note: the lint level is defined here
|
||||
--> $DIR/issue-109152.rs:1:9
|
||||
|
|
||||
LL | #![deny(map_unit_fn)]
|
||||
| ^^^^^^^^^^^
|
||||
help: you might have meant to use `Iterator::for_each`
|
||||
|
|
||||
LL | vec![42].iter().for_each(drop);
|
||||
| ~~~~~~~~
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
Reference in New Issue
Block a user