mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 13:13:34 +00:00
Merge remote-tracking branch 'origin/master' into laurent_master
This commit is contained in:
commit
561d47f338
15 changed files with 216 additions and 83 deletions
|
@ -1,6 +1,9 @@
|
||||||
# Change Log
|
# Change Log
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## 0.0.170
|
||||||
|
* Rustup to *rustc 1.23.0-nightly (d6b06c63a 2017-11-09)*
|
||||||
|
|
||||||
## 0.0.169
|
## 0.0.169
|
||||||
* Rustup to *rustc 1.23.0-nightly (3b82e4c74 2017-11-05)*
|
* Rustup to *rustc 1.23.0-nightly (3b82e4c74 2017-11-05)*
|
||||||
* New lints: [`just_underscores_and_digits`], [`result_map_unwrap_or_else`], [`transmute_bytes_to_str`]
|
* New lints: [`just_underscores_and_digits`], [`result_map_unwrap_or_else`], [`transmute_bytes_to_str`]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "clippy"
|
name = "clippy"
|
||||||
version = "0.0.169"
|
version = "0.0.170"
|
||||||
authors = [
|
authors = [
|
||||||
"Manish Goregaokar <manishsmail@gmail.com>",
|
"Manish Goregaokar <manishsmail@gmail.com>",
|
||||||
"Andre Bogus <bogusandre@gmail.com>",
|
"Andre Bogus <bogusandre@gmail.com>",
|
||||||
|
@ -37,12 +37,12 @@ path = "src/driver.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
# begin automatic update
|
# begin automatic update
|
||||||
clippy_lints = { version = "0.0.169", path = "clippy_lints" }
|
clippy_lints = { version = "0.0.170", path = "clippy_lints" }
|
||||||
# end automatic update
|
# end automatic update
|
||||||
cargo_metadata = "0.2"
|
cargo_metadata = "0.2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
compiletest_rs = "0.2.7"
|
compiletest_rs = "0.3"
|
||||||
duct = "0.8.2"
|
duct = "0.8.2"
|
||||||
lazy_static = "0.2"
|
lazy_static = "0.2"
|
||||||
regex = "0.2"
|
regex = "0.2"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
[package]
|
[package]
|
||||||
name = "clippy_lints"
|
name = "clippy_lints"
|
||||||
# begin automatic update
|
# begin automatic update
|
||||||
version = "0.0.169"
|
version = "0.0.170"
|
||||||
# end automatic update
|
# end automatic update
|
||||||
authors = [
|
authors = [
|
||||||
"Manish Goregaokar <manishsmail@gmail.com>",
|
"Manish Goregaokar <manishsmail@gmail.com>",
|
||||||
|
|
|
@ -952,16 +952,17 @@ fn check_for_loop_range<'a, 'tcx>(
|
||||||
let mut visitor = VarVisitor {
|
let mut visitor = VarVisitor {
|
||||||
cx: cx,
|
cx: cx,
|
||||||
var: canonical_id,
|
var: canonical_id,
|
||||||
indexed: HashMap::new(),
|
indexed_mut: HashSet::new(),
|
||||||
|
indexed_indirectly: HashMap::new(),
|
||||||
indexed_directly: HashMap::new(),
|
indexed_directly: HashMap::new(),
|
||||||
referenced: HashSet::new(),
|
referenced: HashSet::new(),
|
||||||
nonindex: false,
|
nonindex: false,
|
||||||
|
prefer_mutable: false,
|
||||||
};
|
};
|
||||||
walk_expr(&mut visitor, body);
|
walk_expr(&mut visitor, body);
|
||||||
|
|
||||||
// linting condition: we only indexed one variable, and indexed it directly
|
// linting condition: we only indexed one variable, and indexed it directly
|
||||||
// (`indexed_directly` is subset of `indexed`)
|
if visitor.indexed_indirectly.is_empty() && visitor.indexed_directly.len() == 1 {
|
||||||
if visitor.indexed.len() == 1 && visitor.indexed_directly.len() == 1 {
|
|
||||||
let (indexed, indexed_extent) = visitor
|
let (indexed, indexed_extent) = visitor
|
||||||
.indexed_directly
|
.indexed_directly
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -1009,6 +1010,12 @@ fn check_for_loop_range<'a, 'tcx>(
|
||||||
"".to_owned()
|
"".to_owned()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let (ref_mut, method) = if visitor.indexed_mut.contains(&indexed) {
|
||||||
|
("mut ", "iter_mut")
|
||||||
|
} else {
|
||||||
|
("", "iter")
|
||||||
|
};
|
||||||
|
|
||||||
if visitor.nonindex {
|
if visitor.nonindex {
|
||||||
span_lint_and_then(
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
|
@ -1021,16 +1028,16 @@ fn check_for_loop_range<'a, 'tcx>(
|
||||||
"consider using an iterator".to_string(),
|
"consider using an iterator".to_string(),
|
||||||
vec![
|
vec![
|
||||||
(pat.span, format!("({}, <item>)", ident.node)),
|
(pat.span, format!("({}, <item>)", ident.node)),
|
||||||
(arg.span, format!("{}.iter().enumerate(){}{}", indexed, take, skip)),
|
(arg.span, format!("{}.{}().enumerate(){}{}", indexed, method, take, skip)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
let repl = if starts_at_zero && take.is_empty() {
|
let repl = if starts_at_zero && take.is_empty() {
|
||||||
format!("&{}", indexed)
|
format!("&{}{}", ref_mut, indexed)
|
||||||
} else {
|
} else {
|
||||||
format!("{}.iter(){}{}", indexed, take, skip)
|
format!("{}.{}(){}{}", indexed, method, take, skip)
|
||||||
};
|
};
|
||||||
|
|
||||||
span_lint_and_then(
|
span_lint_and_then(
|
||||||
|
@ -1537,8 +1544,10 @@ struct VarVisitor<'a, 'tcx: 'a> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
/// var name to look for as index
|
/// var name to look for as index
|
||||||
var: ast::NodeId,
|
var: ast::NodeId,
|
||||||
/// indexed variables, the extend is `None` for global
|
/// indexed variables that are used mutably
|
||||||
indexed: HashMap<Name, Option<region::Scope>>,
|
indexed_mut: HashSet<Name>,
|
||||||
|
/// indirectly indexed variables (`v[(i + 4) % N]`), the extend is `None` for global
|
||||||
|
indexed_indirectly: HashMap<Name, Option<region::Scope>>,
|
||||||
/// subset of `indexed` of vars that are indexed directly: `v[i]`
|
/// subset of `indexed` of vars that are indexed directly: `v[i]`
|
||||||
/// this will not contain cases like `v[calc_index(i)]` or `v[(i + 4) % N]`
|
/// this will not contain cases like `v[calc_index(i)]` or `v[(i + 4) % N]`
|
||||||
indexed_directly: HashMap<Name, Option<region::Scope>>,
|
indexed_directly: HashMap<Name, Option<region::Scope>>,
|
||||||
|
@ -1548,20 +1557,21 @@ struct VarVisitor<'a, 'tcx: 'a> {
|
||||||
/// has the loop variable been used in expressions other than the index of
|
/// has the loop variable been used in expressions other than the index of
|
||||||
/// an index op?
|
/// an index op?
|
||||||
nonindex: bool,
|
nonindex: bool,
|
||||||
|
/// Whether we are inside the `$` in `&mut $` or `$ = foo` or `$.bar`, where bar
|
||||||
|
/// takes `&mut self`
|
||||||
|
prefer_mutable: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> VarVisitor<'a, 'tcx> {
|
||||||
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
fn check(&mut self, idx: &'tcx Expr, seqexpr: &'tcx Expr, expr: &'tcx Expr) -> bool {
|
||||||
if_chain! {
|
if_chain! {
|
||||||
// an index op
|
|
||||||
if let ExprIndex(ref seqexpr, ref idx) = expr.node;
|
|
||||||
// the indexed container is referenced by a name
|
// the indexed container is referenced by a name
|
||||||
if let ExprPath(ref seqpath) = seqexpr.node;
|
if let ExprPath(ref seqpath) = seqexpr.node;
|
||||||
if let QPath::Resolved(None, ref seqvar) = *seqpath;
|
if let QPath::Resolved(None, ref seqvar) = *seqpath;
|
||||||
if seqvar.segments.len() == 1;
|
if seqvar.segments.len() == 1;
|
||||||
then {
|
then {
|
||||||
let index_used_directly = same_var(self.cx, idx, self.var);
|
let index_used_directly = same_var(self.cx, idx, self.var);
|
||||||
let index_used = index_used_directly || {
|
let indexed_indirectly = {
|
||||||
let mut used_visitor = LocalUsedVisitor {
|
let mut used_visitor = LocalUsedVisitor {
|
||||||
cx: self.cx,
|
cx: self.cx,
|
||||||
local: self.var,
|
local: self.var,
|
||||||
|
@ -1571,7 +1581,10 @@ impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
|
||||||
used_visitor.used
|
used_visitor.used
|
||||||
};
|
};
|
||||||
|
|
||||||
if index_used {
|
if indexed_indirectly || index_used_directly {
|
||||||
|
if self.prefer_mutable {
|
||||||
|
self.indexed_mut.insert(seqvar.segments[0].name);
|
||||||
|
}
|
||||||
let def = self.cx.tables.qpath_def(seqpath, seqexpr.hir_id);
|
let def = self.cx.tables.qpath_def(seqpath, seqexpr.hir_id);
|
||||||
match def {
|
match def {
|
||||||
Def::Local(node_id) | Def::Upvar(node_id, ..) => {
|
Def::Local(node_id) | Def::Upvar(node_id, ..) => {
|
||||||
|
@ -1580,24 +1593,48 @@ impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
|
||||||
let parent_id = self.cx.tcx.hir.get_parent(expr.id);
|
let parent_id = self.cx.tcx.hir.get_parent(expr.id);
|
||||||
let parent_def_id = self.cx.tcx.hir.local_def_id(parent_id);
|
let parent_def_id = self.cx.tcx.hir.local_def_id(parent_id);
|
||||||
let extent = self.cx.tcx.region_scope_tree(parent_def_id).var_scope(hir_id.local_id);
|
let extent = self.cx.tcx.region_scope_tree(parent_def_id).var_scope(hir_id.local_id);
|
||||||
self.indexed.insert(seqvar.segments[0].name, Some(extent));
|
if indexed_indirectly {
|
||||||
|
self.indexed_indirectly.insert(seqvar.segments[0].name, Some(extent));
|
||||||
|
}
|
||||||
if index_used_directly {
|
if index_used_directly {
|
||||||
self.indexed_directly.insert(seqvar.segments[0].name, Some(extent));
|
self.indexed_directly.insert(seqvar.segments[0].name, Some(extent));
|
||||||
}
|
}
|
||||||
return; // no need to walk further *on the variable*
|
return false; // no need to walk further *on the variable*
|
||||||
}
|
}
|
||||||
Def::Static(..) | Def::Const(..) => {
|
Def::Static(..) | Def::Const(..) => {
|
||||||
self.indexed.insert(seqvar.segments[0].name, None);
|
if indexed_indirectly {
|
||||||
|
self.indexed_indirectly.insert(seqvar.segments[0].name, None);
|
||||||
|
}
|
||||||
if index_used_directly {
|
if index_used_directly {
|
||||||
self.indexed_directly.insert(seqvar.segments[0].name, None);
|
self.indexed_directly.insert(seqvar.segments[0].name, None);
|
||||||
}
|
}
|
||||||
return; // no need to walk further *on the variable*
|
return false; // no need to walk further *on the variable*
|
||||||
}
|
}
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
|
||||||
|
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
||||||
|
if_chain! {
|
||||||
|
// a range index op
|
||||||
|
if let ExprMethodCall(ref meth, _, ref args) = expr.node;
|
||||||
|
if meth.name == "index" || meth.name == "index_mut";
|
||||||
|
if !self.check(&args[1], &args[0], expr);
|
||||||
|
then { return }
|
||||||
|
}
|
||||||
|
|
||||||
|
if_chain! {
|
||||||
|
// an index op
|
||||||
|
if let ExprIndex(ref seqexpr, ref idx) = expr.node;
|
||||||
|
if !self.check(idx, seqexpr, expr);
|
||||||
|
then { return }
|
||||||
|
}
|
||||||
|
|
||||||
if_chain! {
|
if_chain! {
|
||||||
// directly using a variable
|
// directly using a variable
|
||||||
|
@ -1615,8 +1652,47 @@ impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let old = self.prefer_mutable;
|
||||||
walk_expr(self, expr);
|
match expr.node {
|
||||||
|
ExprAssignOp(_, ref lhs, ref rhs) |
|
||||||
|
ExprAssign(ref lhs, ref rhs) => {
|
||||||
|
self.prefer_mutable = true;
|
||||||
|
self.visit_expr(lhs);
|
||||||
|
self.prefer_mutable = false;
|
||||||
|
self.visit_expr(rhs);
|
||||||
|
},
|
||||||
|
ExprAddrOf(mutbl, ref expr) => {
|
||||||
|
if mutbl == MutMutable {
|
||||||
|
self.prefer_mutable = true;
|
||||||
|
}
|
||||||
|
self.visit_expr(expr);
|
||||||
|
},
|
||||||
|
ExprCall(ref f, ref args) => {
|
||||||
|
for (ty, expr) in self.cx.tables.expr_ty(f).fn_sig(self.cx.tcx).inputs().skip_binder().iter().zip(args) {
|
||||||
|
self.prefer_mutable = false;
|
||||||
|
if let ty::TyRef(_, mutbl) = ty.sty {
|
||||||
|
if mutbl.mutbl == MutMutable {
|
||||||
|
self.prefer_mutable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.visit_expr(expr);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ExprMethodCall(_, _, ref args) => {
|
||||||
|
let def_id = self.cx.tables.type_dependent_defs()[expr.hir_id].def_id();
|
||||||
|
for (ty, expr) in self.cx.tcx.fn_sig(def_id).inputs().skip_binder().iter().zip(args) {
|
||||||
|
self.prefer_mutable = false;
|
||||||
|
if let ty::TyRef(_, mutbl) = ty.sty {
|
||||||
|
if mutbl.mutbl == MutMutable {
|
||||||
|
self.prefer_mutable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.visit_expr(expr);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => walk_expr(self, expr),
|
||||||
|
}
|
||||||
|
self.prefer_mutable = old;
|
||||||
}
|
}
|
||||||
fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> {
|
fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> {
|
||||||
NestedVisitorMap::None
|
NestedVisitorMap::None
|
||||||
|
|
|
@ -888,9 +888,8 @@ fn lint_or_fun_call(cx: &LateContext, expr: &hir::Expr, name: &str, args: &[hir:
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't lint for constant values
|
// don't lint for constant values
|
||||||
// FIXME: can we `expect` here instead of match?
|
|
||||||
let owner_def = cx.tcx.hir.get_parent_did(arg.id);
|
let owner_def = cx.tcx.hir.get_parent_did(arg.id);
|
||||||
let promotable = cx.tcx.rvalue_promotable_map(owner_def)[&arg.hir_id.local_id];
|
let promotable = cx.tcx.rvalue_promotable_map(owner_def).contains(&arg.hir_id.local_id);
|
||||||
if promotable {
|
if promotable {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -620,14 +620,18 @@ where
|
||||||
I: IntoIterator<Item = (Span, String)>,
|
I: IntoIterator<Item = (Span, String)>,
|
||||||
{
|
{
|
||||||
let sugg = rustc_errors::CodeSuggestion {
|
let sugg = rustc_errors::CodeSuggestion {
|
||||||
substitution_parts: sugg.into_iter()
|
substitutions: vec![
|
||||||
.map(|(span, sub)| {
|
rustc_errors::Substitution {
|
||||||
rustc_errors::Substitution {
|
parts: sugg.into_iter()
|
||||||
span: span,
|
.map(|(span, snippet)| {
|
||||||
substitutions: vec![sub],
|
rustc_errors::SubstitutionPart {
|
||||||
}
|
snippet,
|
||||||
})
|
span,
|
||||||
.collect(),
|
}
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
}
|
||||||
|
],
|
||||||
msg: help_msg,
|
msg: help_msg,
|
||||||
show_code_when_inline: true,
|
show_code_when_inline: true,
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,7 +22,11 @@ fn run_mode(dir: &'static str, mode: &'static str) {
|
||||||
}
|
}
|
||||||
|
|
||||||
config.mode = cfg_mode;
|
config.mode = cfg_mode;
|
||||||
config.build_base = PathBuf::from("target/debug/test_build_base");
|
config.build_base = {
|
||||||
|
let mut path = std::env::current_dir().unwrap();
|
||||||
|
path.push("target/debug/test_build_base");
|
||||||
|
path
|
||||||
|
};
|
||||||
config.src_base = PathBuf::from(format!("tests/{}", dir));
|
config.src_base = PathBuf::from(format!("tests/{}", dir));
|
||||||
config.rustc_path = clippy_driver_path();
|
config.rustc_path = clippy_driver_path();
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,3 @@
|
||||||
error: function is never used: `temporary_cstring`
|
|
||||||
--> $DIR/cstring.rs:4:1
|
|
||||||
|
|
|
||||||
4 | fn temporary_cstring() {
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: `-D dead-code` implied by `-D warnings`
|
|
||||||
|
|
||||||
error: you are getting the inner pointer of a temporary `CString`
|
error: you are getting the inner pointer of a temporary `CString`
|
||||||
--> $DIR/cstring.rs:7:5
|
--> $DIR/cstring.rs:7:5
|
||||||
|
|
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ error: the loop variable `i` is only used to index `vec`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
86 | for <item> in &vec {
|
86 | for <item> in &vec {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is only used to index `vec`.
|
error: the loop variable `i` is only used to index `vec`.
|
||||||
--> $DIR/for_loop.rs:95:5
|
--> $DIR/for_loop.rs:95:5
|
||||||
|
@ -95,7 +95,7 @@ error: the loop variable `i` is only used to index `vec`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
95 | for <item> in &vec {
|
95 | for <item> in &vec {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `j` is only used to index `STATIC`.
|
error: the loop variable `j` is only used to index `STATIC`.
|
||||||
--> $DIR/for_loop.rs:100:5
|
--> $DIR/for_loop.rs:100:5
|
||||||
|
@ -108,7 +108,7 @@ error: the loop variable `j` is only used to index `STATIC`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
100 | for <item> in STATIC.iter().take(4) {
|
100 | for <item> in STATIC.iter().take(4) {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `j` is only used to index `CONST`.
|
error: the loop variable `j` is only used to index `CONST`.
|
||||||
--> $DIR/for_loop.rs:104:5
|
--> $DIR/for_loop.rs:104:5
|
||||||
|
@ -121,7 +121,7 @@ error: the loop variable `j` is only used to index `CONST`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
104 | for <item> in CONST.iter().take(4) {
|
104 | for <item> in CONST.iter().take(4) {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is used to index `vec`
|
error: the loop variable `i` is used to index `vec`
|
||||||
--> $DIR/for_loop.rs:108:5
|
--> $DIR/for_loop.rs:108:5
|
||||||
|
@ -134,7 +134,7 @@ error: the loop variable `i` is used to index `vec`
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
108 | for (i, <item>) in vec.iter().enumerate() {
|
108 | for (i, <item>) in vec.iter().enumerate() {
|
||||||
| ^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is only used to index `vec2`.
|
error: the loop variable `i` is only used to index `vec2`.
|
||||||
--> $DIR/for_loop.rs:116:5
|
--> $DIR/for_loop.rs:116:5
|
||||||
|
@ -147,7 +147,7 @@ error: the loop variable `i` is only used to index `vec2`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
116 | for <item> in vec2.iter().take(vec.len()) {
|
116 | for <item> in vec2.iter().take(vec.len()) {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is only used to index `vec`.
|
error: the loop variable `i` is only used to index `vec`.
|
||||||
--> $DIR/for_loop.rs:120:5
|
--> $DIR/for_loop.rs:120:5
|
||||||
|
@ -160,7 +160,7 @@ error: the loop variable `i` is only used to index `vec`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
120 | for <item> in vec.iter().skip(5) {
|
120 | for <item> in vec.iter().skip(5) {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is only used to index `vec`.
|
error: the loop variable `i` is only used to index `vec`.
|
||||||
--> $DIR/for_loop.rs:124:5
|
--> $DIR/for_loop.rs:124:5
|
||||||
|
@ -173,7 +173,7 @@ error: the loop variable `i` is only used to index `vec`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
124 | for <item> in vec.iter().take(MAX_LEN) {
|
124 | for <item> in vec.iter().take(MAX_LEN) {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is only used to index `vec`.
|
error: the loop variable `i` is only used to index `vec`.
|
||||||
--> $DIR/for_loop.rs:128:5
|
--> $DIR/for_loop.rs:128:5
|
||||||
|
@ -186,7 +186,7 @@ error: the loop variable `i` is only used to index `vec`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
128 | for <item> in vec.iter().take(MAX_LEN + 1) {
|
128 | for <item> in vec.iter().take(MAX_LEN + 1) {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is only used to index `vec`.
|
error: the loop variable `i` is only used to index `vec`.
|
||||||
--> $DIR/for_loop.rs:132:5
|
--> $DIR/for_loop.rs:132:5
|
||||||
|
@ -199,7 +199,7 @@ error: the loop variable `i` is only used to index `vec`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
132 | for <item> in vec.iter().take(10).skip(5) {
|
132 | for <item> in vec.iter().take(10).skip(5) {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is only used to index `vec`.
|
error: the loop variable `i` is only used to index `vec`.
|
||||||
--> $DIR/for_loop.rs:136:5
|
--> $DIR/for_loop.rs:136:5
|
||||||
|
@ -212,7 +212,7 @@ error: the loop variable `i` is only used to index `vec`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
136 | for <item> in vec.iter().take(10 + 1).skip(5) {
|
136 | for <item> in vec.iter().take(10 + 1).skip(5) {
|
||||||
| ^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is used to index `vec`
|
error: the loop variable `i` is used to index `vec`
|
||||||
--> $DIR/for_loop.rs:140:5
|
--> $DIR/for_loop.rs:140:5
|
||||||
|
@ -225,7 +225,7 @@ error: the loop variable `i` is used to index `vec`
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
140 | for (i, <item>) in vec.iter().enumerate().skip(5) {
|
140 | for (i, <item>) in vec.iter().enumerate().skip(5) {
|
||||||
| ^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: the loop variable `i` is used to index `vec`
|
error: the loop variable `i` is used to index `vec`
|
||||||
--> $DIR/for_loop.rs:144:5
|
--> $DIR/for_loop.rs:144:5
|
||||||
|
@ -238,7 +238,7 @@ error: the loop variable `i` is used to index `vec`
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
144 | for (i, <item>) in vec.iter().enumerate().take(10).skip(5) {
|
144 | for (i, <item>) in vec.iter().enumerate().take(10).skip(5) {
|
||||||
| ^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: this range is empty so this for loop will never run
|
error: this range is empty so this for loop will never run
|
||||||
--> $DIR/for_loop.rs:148:5
|
--> $DIR/for_loop.rs:148:5
|
||||||
|
@ -448,7 +448,7 @@ error: you seem to want to iterate on a map's values
|
||||||
help: use the corresponding method
|
help: use the corresponding method
|
||||||
|
|
|
|
||||||
385 | for v in m.values() {
|
385 | for v in m.values() {
|
||||||
| ^
|
|
|
||||||
|
|
||||||
error: you seem to want to iterate on a map's values
|
error: you seem to want to iterate on a map's values
|
||||||
--> $DIR/for_loop.rs:390:5
|
--> $DIR/for_loop.rs:390:5
|
||||||
|
@ -464,7 +464,7 @@ error: you seem to want to iterate on a map's values
|
||||||
help: use the corresponding method
|
help: use the corresponding method
|
||||||
|
|
|
|
||||||
390 | for v in (*m).values() {
|
390 | for v in (*m).values() {
|
||||||
| ^
|
|
|
||||||
|
|
||||||
error: you seem to want to iterate on a map's values
|
error: you seem to want to iterate on a map's values
|
||||||
--> $DIR/for_loop.rs:398:5
|
--> $DIR/for_loop.rs:398:5
|
||||||
|
@ -477,7 +477,7 @@ error: you seem to want to iterate on a map's values
|
||||||
help: use the corresponding method
|
help: use the corresponding method
|
||||||
|
|
|
|
||||||
398 | for v in m.values_mut() {
|
398 | for v in m.values_mut() {
|
||||||
| ^
|
|
|
||||||
|
|
||||||
error: you seem to want to iterate on a map's values
|
error: you seem to want to iterate on a map's values
|
||||||
--> $DIR/for_loop.rs:403:5
|
--> $DIR/for_loop.rs:403:5
|
||||||
|
@ -490,7 +490,7 @@ error: you seem to want to iterate on a map's values
|
||||||
help: use the corresponding method
|
help: use the corresponding method
|
||||||
|
|
|
|
||||||
403 | for v in (*m).values_mut() {
|
403 | for v in (*m).values_mut() {
|
||||||
| ^
|
|
|
||||||
|
|
||||||
error: you seem to want to iterate on a map's keys
|
error: you seem to want to iterate on a map's keys
|
||||||
--> $DIR/for_loop.rs:409:5
|
--> $DIR/for_loop.rs:409:5
|
||||||
|
@ -503,7 +503,7 @@ error: you seem to want to iterate on a map's keys
|
||||||
help: use the corresponding method
|
help: use the corresponding method
|
||||||
|
|
|
|
||||||
409 | for k in rm.keys() {
|
409 | for k in rm.keys() {
|
||||||
| ^
|
|
|
||||||
|
|
||||||
error: it looks like you're manually copying between slices
|
error: it looks like you're manually copying between slices
|
||||||
--> $DIR/for_loop.rs:462:5
|
--> $DIR/for_loop.rs:462:5
|
||||||
|
|
|
@ -8,11 +8,11 @@ error: impl for `HashMap` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
11 | impl<K: Hash + Eq, V, S: ::std::hash::BuildHasher + Default> Foo<i8> for HashMap<K, V, S> {
|
11 | impl<K: Hash + Eq, V, S: ::std::hash::BuildHasher + Default> Foo<i8> for HashMap<K, V, S> {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
help: ...and use generic constructor
|
help: ...and use generic constructor
|
||||||
|
|
|
|
||||||
17 | (HashMap::default(), HashMap::with_capacity_and_hasher(10, Default::default()))
|
17 | (HashMap::default(), HashMap::with_capacity_and_hasher(10, Default::default()))
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: impl for `HashMap` should be generalized over different hashers
|
error: impl for `HashMap` should be generalized over different hashers
|
||||||
--> $DIR/implicit_hasher.rs:20:36
|
--> $DIR/implicit_hasher.rs:20:36
|
||||||
|
@ -23,11 +23,11 @@ error: impl for `HashMap` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
20 | impl<K: Hash + Eq, V, S: ::std::hash::BuildHasher + Default> Foo<i8> for (HashMap<K, V, S>,) {
|
20 | impl<K: Hash + Eq, V, S: ::std::hash::BuildHasher + Default> Foo<i8> for (HashMap<K, V, S>,) {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
help: ...and use generic constructor
|
help: ...and use generic constructor
|
||||||
|
|
|
|
||||||
22 | ((HashMap::default(),), (HashMap::with_capacity_and_hasher(10, Default::default()),))
|
22 | ((HashMap::default(),), (HashMap::with_capacity_and_hasher(10, Default::default()),))
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: impl for `HashMap` should be generalized over different hashers
|
error: impl for `HashMap` should be generalized over different hashers
|
||||||
--> $DIR/implicit_hasher.rs:25:19
|
--> $DIR/implicit_hasher.rs:25:19
|
||||||
|
@ -38,11 +38,11 @@ error: impl for `HashMap` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
25 | impl<S: ::std::hash::BuildHasher + Default> Foo<i16> for HashMap<String, String, S> {
|
25 | impl<S: ::std::hash::BuildHasher + Default> Foo<i16> for HashMap<String, String, S> {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
help: ...and use generic constructor
|
help: ...and use generic constructor
|
||||||
|
|
|
|
||||||
27 | (HashMap::default(), HashMap::with_capacity_and_hasher(10, Default::default()))
|
27 | (HashMap::default(), HashMap::with_capacity_and_hasher(10, Default::default()))
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: impl for `HashSet` should be generalized over different hashers
|
error: impl for `HashSet` should be generalized over different hashers
|
||||||
--> $DIR/implicit_hasher.rs:43:32
|
--> $DIR/implicit_hasher.rs:43:32
|
||||||
|
@ -53,11 +53,11 @@ error: impl for `HashSet` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
43 | impl<T: Hash + Eq, S: ::std::hash::BuildHasher + Default> Foo<i8> for HashSet<T, S> {
|
43 | impl<T: Hash + Eq, S: ::std::hash::BuildHasher + Default> Foo<i8> for HashSet<T, S> {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
help: ...and use generic constructor
|
help: ...and use generic constructor
|
||||||
|
|
|
|
||||||
45 | (HashSet::default(), HashSet::with_capacity_and_hasher(10, Default::default()))
|
45 | (HashSet::default(), HashSet::with_capacity_and_hasher(10, Default::default()))
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: impl for `HashSet` should be generalized over different hashers
|
error: impl for `HashSet` should be generalized over different hashers
|
||||||
--> $DIR/implicit_hasher.rs:48:19
|
--> $DIR/implicit_hasher.rs:48:19
|
||||||
|
@ -68,11 +68,11 @@ error: impl for `HashSet` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
48 | impl<S: ::std::hash::BuildHasher + Default> Foo<i16> for HashSet<String, S> {
|
48 | impl<S: ::std::hash::BuildHasher + Default> Foo<i16> for HashSet<String, S> {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
help: ...and use generic constructor
|
help: ...and use generic constructor
|
||||||
|
|
|
|
||||||
50 | (HashSet::default(), HashSet::with_capacity_and_hasher(10, Default::default()))
|
50 | (HashSet::default(), HashSet::with_capacity_and_hasher(10, Default::default()))
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: parameter of type `HashMap` should be generalized over different hashers
|
error: parameter of type `HashMap` should be generalized over different hashers
|
||||||
--> $DIR/implicit_hasher.rs:65:23
|
--> $DIR/implicit_hasher.rs:65:23
|
||||||
|
@ -83,7 +83,7 @@ error: parameter of type `HashMap` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
65 | pub fn foo<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32, S>, _set: &mut HashSet<i32>) {
|
65 | pub fn foo<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32, S>, _set: &mut HashSet<i32>) {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: parameter of type `HashSet` should be generalized over different hashers
|
error: parameter of type `HashSet` should be generalized over different hashers
|
||||||
--> $DIR/implicit_hasher.rs:65:53
|
--> $DIR/implicit_hasher.rs:65:53
|
||||||
|
@ -94,7 +94,7 @@ error: parameter of type `HashSet` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
65 | pub fn foo<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32>, _set: &mut HashSet<i32, S>) {
|
65 | pub fn foo<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32>, _set: &mut HashSet<i32, S>) {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: impl for `HashMap` should be generalized over different hashers
|
error: impl for `HashMap` should be generalized over different hashers
|
||||||
--> $DIR/implicit_hasher.rs:70:43
|
--> $DIR/implicit_hasher.rs:70:43
|
||||||
|
@ -108,11 +108,11 @@ error: impl for `HashMap` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
70 | impl<K: Hash + Eq, V, S: ::std::hash::BuildHasher + Default> Foo<u8> for HashMap<K, V, S> {
|
70 | impl<K: Hash + Eq, V, S: ::std::hash::BuildHasher + Default> Foo<u8> for HashMap<K, V, S> {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
help: ...and use generic constructor
|
help: ...and use generic constructor
|
||||||
|
|
|
|
||||||
72 | (HashMap::default(), HashMap::with_capacity_and_hasher(10, Default::default()))
|
72 | (HashMap::default(), HashMap::with_capacity_and_hasher(10, Default::default()))
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: parameter of type `HashMap` should be generalized over different hashers
|
error: parameter of type `HashMap` should be generalized over different hashers
|
||||||
--> $DIR/implicit_hasher.rs:78:33
|
--> $DIR/implicit_hasher.rs:78:33
|
||||||
|
@ -126,7 +126,7 @@ error: parameter of type `HashMap` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
78 | pub fn $name<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32, S>, _set: &mut HashSet<i32>) {
|
78 | pub fn $name<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32, S>, _set: &mut HashSet<i32>) {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: parameter of type `HashSet` should be generalized over different hashers
|
error: parameter of type `HashSet` should be generalized over different hashers
|
||||||
--> $DIR/implicit_hasher.rs:78:63
|
--> $DIR/implicit_hasher.rs:78:63
|
||||||
|
@ -140,5 +140,5 @@ error: parameter of type `HashSet` should be generalized over different hashers
|
||||||
help: consider adding a type parameter
|
help: consider adding a type parameter
|
||||||
|
|
|
|
||||||
78 | pub fn $name<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32>, _set: &mut HashSet<i32, S>) {
|
78 | pub fn $name<S: ::std::hash::BuildHasher>(_map: &mut HashMap<i32, i32>, _set: &mut HashSet<i32, S>) {
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,7 @@ error: you don't need to add `&` to all patterns
|
||||||
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
||||||
|
|
|
|
||||||
138 | match *v { .. }
|
138 | match *v { .. }
|
||||||
| ^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: you don't need to add `&` to all patterns
|
error: you don't need to add `&` to all patterns
|
||||||
--> $DIR/matches.rs:148:5
|
--> $DIR/matches.rs:148:5
|
||||||
|
@ -147,7 +147,7 @@ error: you don't need to add `&` to all patterns
|
||||||
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
||||||
|
|
|
|
||||||
148 | match *tup { .. }
|
148 | match *tup { .. }
|
||||||
| ^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: you don't need to add `&` to both the expression and the patterns
|
error: you don't need to add `&` to both the expression and the patterns
|
||||||
--> $DIR/matches.rs:154:5
|
--> $DIR/matches.rs:154:5
|
||||||
|
@ -169,7 +169,7 @@ error: you don't need to add `&` to all patterns
|
||||||
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
||||||
|
|
|
|
||||||
165 | if let .. = *a { .. }
|
165 | if let .. = *a { .. }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: you don't need to add `&` to both the expression and the patterns
|
error: you don't need to add `&` to both the expression and the patterns
|
||||||
--> $DIR/matches.rs:170:5
|
--> $DIR/matches.rs:170:5
|
||||||
|
|
|
@ -24,4 +24,32 @@ fn main() {
|
||||||
for i in 3..10 {
|
for i in 3..10 {
|
||||||
println!("{}", ns[calc_idx(i) % 4]);
|
println!("{}", ns[calc_idx(i) % 4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut ms = vec![1, 2, 3, 4, 5, 6];
|
||||||
|
for i in 0..ms.len() {
|
||||||
|
ms[i] *= 2;
|
||||||
|
}
|
||||||
|
assert_eq!(ms, vec![2, 4, 6, 8, 10, 12]);
|
||||||
|
|
||||||
|
let mut ms = vec![1, 2, 3, 4, 5, 6];
|
||||||
|
for i in 0..ms.len() {
|
||||||
|
let x = &mut ms[i];
|
||||||
|
*x *= 2;
|
||||||
|
}
|
||||||
|
assert_eq!(ms, vec![2, 4, 6, 8, 10, 12]);
|
||||||
|
|
||||||
|
let g = vec![1, 2, 3, 4, 5, 6];
|
||||||
|
let glen = g.len();
|
||||||
|
for i in 0..glen {
|
||||||
|
let x: u32 = g[i+1..].iter().sum();
|
||||||
|
println!("{}", g[i] + x);
|
||||||
|
}
|
||||||
|
assert_eq!(g, vec![20, 18, 15, 11, 6, 0]);
|
||||||
|
|
||||||
|
let mut g = vec![1, 2, 3, 4, 5, 6];
|
||||||
|
let glen = g.len();
|
||||||
|
for i in 0..glen {
|
||||||
|
g[i] = g[i+1..].iter().sum();
|
||||||
|
}
|
||||||
|
assert_eq!(g, vec![20, 18, 15, 11, 6, 0]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,5 +10,32 @@ error: the loop variable `i` is only used to index `ns`.
|
||||||
help: consider using an iterator
|
help: consider using an iterator
|
||||||
|
|
|
|
||||||
8 | for <item> in ns.iter().take(10).skip(3) {
|
8 | for <item> in ns.iter().take(10).skip(3) {
|
||||||
|
|
|
||||||
|
|
||||||
|
error: the loop variable `i` is only used to index `ms`.
|
||||||
|
--> $DIR/needless_range_loop.rs:29:5
|
||||||
|
|
|
||||||
|
29 | / for i in 0..ms.len() {
|
||||||
|
30 | | ms[i] *= 2;
|
||||||
|
31 | | }
|
||||||
|
| |_____^
|
||||||
|
|
|
||||||
|
help: consider using an iterator
|
||||||
|
|
|
||||||
|
29 | for <item> in &mut ms {
|
||||||
|
| ^^^^^^
|
||||||
|
|
||||||
|
error: the loop variable `i` is only used to index `ms`.
|
||||||
|
--> $DIR/needless_range_loop.rs:35:5
|
||||||
|
|
|
||||||
|
35 | / for i in 0..ms.len() {
|
||||||
|
36 | | let x = &mut ms[i];
|
||||||
|
37 | | *x *= 2;
|
||||||
|
38 | | }
|
||||||
|
| |_____^
|
||||||
|
|
|
||||||
|
help: consider using an iterator
|
||||||
|
|
|
||||||
|
35 | for <item> in &mut ms {
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
|
|
|
@ -8,5 +8,5 @@ error: needlessly taken reference of both operands
|
||||||
help: use the values directly
|
help: use the values directly
|
||||||
|
|
|
|
||||||
13 | let foo = 5 - 6;
|
13 | let foo = 5 - 6;
|
||||||
| ^
|
|
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ help: change `x.clone()` to
|
||||||
help: change `x.clone()` to
|
help: change `x.clone()` to
|
||||||
|
|
|
|
||||||
46 | x.to_owned()
|
46 | x.to_owned()
|
||||||
| ^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: writing `&String` instead of `&str` involves a new object where a slice will do.
|
error: writing `&String` instead of `&str` involves a new object where a slice will do.
|
||||||
--> $DIR/ptr_arg.rs:49:18
|
--> $DIR/ptr_arg.rs:49:18
|
||||||
|
@ -58,7 +58,7 @@ help: change `x.clone()` to
|
||||||
help: change `x.clone()` to
|
help: change `x.clone()` to
|
||||||
|
|
|
|
||||||
56 | x.to_string()
|
56 | x.to_string()
|
||||||
| ^^^^^^^^^^^^^
|
|
|
||||||
|
|
||||||
error: writing `&String` instead of `&str` involves a new object where a slice will do.
|
error: writing `&String` instead of `&str` involves a new object where a slice will do.
|
||||||
--> $DIR/ptr_arg.rs:59:44
|
--> $DIR/ptr_arg.rs:59:44
|
||||||
|
|
Loading…
Reference in a new issue