Merge branch 'master' into unnecessary_filter_map
This commit is contained in:
commit
c2ee9c29ab
11 changed files with 51 additions and 249 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -15,7 +15,7 @@ out
|
||||||
*.exe
|
*.exe
|
||||||
|
|
||||||
# Generated by Cargo
|
# Generated by Cargo
|
||||||
Cargo.lock
|
*Cargo.lock
|
||||||
/target
|
/target
|
||||||
/clippy_lints/target
|
/clippy_lints/target
|
||||||
/clippy_workspace_tests/target
|
/clippy_workspace_tests/target
|
||||||
|
|
224
clippy_dev/Cargo.lock
generated
224
clippy_dev/Cargo.lock
generated
|
@ -1,224 +0,0 @@
|
||||||
[[package]]
|
|
||||||
name = "aho-corasick"
|
|
||||||
version = "0.6.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ansi_term"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "atty"
|
|
||||||
version = "0.2.11"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bitflags"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap"
|
|
||||||
version = "2.32.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clippy_dev"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"regex 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "either"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "itertools"
|
|
||||||
version = "0.7.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lazy_static"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libc"
|
|
||||||
version = "0.2.43"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "memchr"
|
|
||||||
version = "2.0.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "redox_syscall"
|
|
||||||
version = "0.1.40"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "redox_termios"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "regex"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"utf8-ranges 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "regex-syntax"
|
|
||||||
version = "0.6.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "strsim"
|
|
||||||
version = "0.7.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "termion"
|
|
||||||
version = "1.5.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "textwrap"
|
|
||||||
version = "0.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "thread_local"
|
|
||||||
version = "0.3.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ucd-util"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "unicode-width"
|
|
||||||
version = "0.1.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "utf8-ranges"
|
|
||||||
version = "1.0.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "vec_map"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "version_check"
|
|
||||||
version = "0.1.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi"
|
|
||||||
version = "0.3.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi-i686-pc-windows-gnu"
|
|
||||||
version = "0.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi-x86_64-pc-windows-gnu"
|
|
||||||
version = "0.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[metadata]
|
|
||||||
"checksum aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "68f56c7353e5a9547cbd76ed90f7bb5ffc3ba09d4ea9bd1d8c06c8b1142eeb5a"
|
|
||||||
"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
|
|
||||||
"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
|
|
||||||
"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
|
|
||||||
"checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e"
|
|
||||||
"checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
|
|
||||||
"checksum itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)" = "f58856976b776fedd95533137617a02fb25719f40e7d9b01c7043cd65474f450"
|
|
||||||
"checksum lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca488b89a5657b0a2ecd45b95609b3e848cf1755da332a0da46e2b2b1cb371a7"
|
|
||||||
"checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d"
|
|
||||||
"checksum memchr 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a3b4142ab8738a78c51896f704f83c11df047ff1bda9a92a661aa6361552d93d"
|
|
||||||
"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1"
|
|
||||||
"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
|
|
||||||
"checksum regex 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "67d0301b0c6804eca7e3c275119d0b01ff3b7ab9258a65709e608a66312a1025"
|
|
||||||
"checksum regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "747ba3b235651f6e2f67dfa8bcdcd073ddb7c243cb21c442fc12395dfcac212d"
|
|
||||||
"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
|
|
||||||
"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
|
|
||||||
"checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6"
|
|
||||||
"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
|
|
||||||
"checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d"
|
|
||||||
"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
|
|
||||||
"checksum utf8-ranges 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd70f467df6810094968e2fce0ee1bd0e87157aceb026a8c083bcf5e25b9efe4"
|
|
||||||
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
|
|
||||||
"checksum version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7716c242968ee87e5542f8021178248f267f295a5c4803beae8b8b7fd9bc6051"
|
|
||||||
"checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd"
|
|
||||||
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
|
||||||
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
|
|
@ -35,8 +35,8 @@ pub struct Lint {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Lint {
|
impl Lint {
|
||||||
pub fn new(name: &str, group: &str, desc: &str, deprecation: Option<&str>, module: &str) -> Lint {
|
pub fn new(name: &str, group: &str, desc: &str, deprecation: Option<&str>, module: &str) -> Self {
|
||||||
Lint {
|
Self {
|
||||||
name: name.to_lowercase(),
|
name: name.to_lowercase(),
|
||||||
group: group.to_string(),
|
group: group.to_string(),
|
||||||
desc: NL_ESCAPE_RE.replace(&desc.replace("\\\"", "\""), "").to_string(),
|
desc: NL_ESCAPE_RE.replace(&desc.replace("\\\"", "\""), "").to_string(),
|
||||||
|
@ -46,12 +46,12 @@ impl Lint {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns all non-deprecated lints
|
/// Returns all non-deprecated lints
|
||||||
pub fn active_lints(lints: &[Lint]) -> impl Iterator<Item=&Lint> {
|
pub fn active_lints(lints: &[Self]) -> impl Iterator<Item=&Self> {
|
||||||
lints.iter().filter(|l| l.deprecation.is_none())
|
lints.iter().filter(|l| l.deprecation.is_none())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the lints in a HashMap, grouped by the different lint groups
|
/// Returns the lints in a HashMap, grouped by the different lint groups
|
||||||
pub fn by_lint_group(lints: &[Lint]) -> HashMap<String, Vec<Lint>> {
|
pub fn by_lint_group(lints: &[Self]) -> HashMap<String, Vec<Self>> {
|
||||||
lints.iter().map(|lint| (lint.group.to_string(), lint.clone())).into_group_map()
|
lints.iter().map(|lint| (lint.group.to_string(), lint.clone())).into_group_map()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,11 +123,11 @@ impl Constant {
|
||||||
(&Constant::Tuple(ref l), &Constant::Tuple(ref r)) | (&Constant::Vec(ref l), &Constant::Vec(ref r)) => l
|
(&Constant::Tuple(ref l), &Constant::Tuple(ref r)) | (&Constant::Vec(ref l), &Constant::Vec(ref r)) => l
|
||||||
.iter()
|
.iter()
|
||||||
.zip(r.iter())
|
.zip(r.iter())
|
||||||
.map(|(li, ri)| Constant::partial_cmp(tcx, cmp_type, li, ri))
|
.map(|(li, ri)| Self::partial_cmp(tcx, cmp_type, li, ri))
|
||||||
.find(|r| r.map_or(true, |o| o != Ordering::Equal))
|
.find(|r| r.map_or(true, |o| o != Ordering::Equal))
|
||||||
.unwrap_or_else(|| Some(l.len().cmp(&r.len()))),
|
.unwrap_or_else(|| Some(l.len().cmp(&r.len()))),
|
||||||
(&Constant::Repeat(ref lv, ref ls), &Constant::Repeat(ref rv, ref rs)) => {
|
(&Constant::Repeat(ref lv, ref ls), &Constant::Repeat(ref rv, ref rs)) => {
|
||||||
match Constant::partial_cmp(tcx, cmp_type, lv, rv) {
|
match Self::partial_cmp(tcx, cmp_type, lv, rv) {
|
||||||
Some(Equal) => Some(ls.cmp(rs)),
|
Some(Equal) => Some(ls.cmp(rs)),
|
||||||
x => x,
|
x => x,
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,9 +46,8 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for DurationSubsec {
|
||||||
if let Some((Constant::Int(divisor), _)) = constant(cx, cx.tables, right);
|
if let Some((Constant::Int(divisor), _)) = constant(cx, cx.tables, right);
|
||||||
then {
|
then {
|
||||||
let suggested_fn = match (method_path.ident.as_str().as_ref(), divisor) {
|
let suggested_fn = match (method_path.ident.as_str().as_ref(), divisor) {
|
||||||
("subsec_micros", 1_000) => "subsec_millis",
|
("subsec_micros", 1_000) | ("subsec_nanos", 1_000_000) => "subsec_millis",
|
||||||
("subsec_nanos", 1_000) => "subsec_micros",
|
("subsec_nanos", 1_000) => "subsec_micros",
|
||||||
("subsec_nanos", 1_000_000) => "subsec_millis",
|
|
||||||
_ => return,
|
_ => return,
|
||||||
};
|
};
|
||||||
span_lint_and_sugg(
|
span_lint_and_sugg(
|
||||||
|
|
|
@ -46,7 +46,7 @@ pub struct Pass {
|
||||||
|
|
||||||
impl Default for Pass {
|
impl Default for Pass {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Pass { impls: FxHashMap::default() }
|
Self { impls: FxHashMap::default() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1452,22 +1452,33 @@ fn lint_get_unwrap(cx: &LateContext<'_, '_>, expr: &hir::Expr, get_args: &[hir::
|
||||||
// Note: we don't want to lint `get_mut().unwrap` for HashMap or BTreeMap,
|
// Note: we don't want to lint `get_mut().unwrap` for HashMap or BTreeMap,
|
||||||
// because they do not implement `IndexMut`
|
// because they do not implement `IndexMut`
|
||||||
let expr_ty = cx.tables.expr_ty(&get_args[0]);
|
let expr_ty = cx.tables.expr_ty(&get_args[0]);
|
||||||
|
let get_args_str = if get_args.len() > 1 {
|
||||||
|
snippet(cx, get_args[1].span, "_")
|
||||||
|
} else {
|
||||||
|
return; // not linting on a .get().unwrap() chain or variant
|
||||||
|
};
|
||||||
|
let needs_ref;
|
||||||
let caller_type = if derefs_to_slice(cx, &get_args[0], expr_ty).is_some() {
|
let caller_type = if derefs_to_slice(cx, &get_args[0], expr_ty).is_some() {
|
||||||
|
needs_ref = get_args_str.parse::<usize>().is_ok();
|
||||||
"slice"
|
"slice"
|
||||||
} else if match_type(cx, expr_ty, &paths::VEC) {
|
} else if match_type(cx, expr_ty, &paths::VEC) {
|
||||||
|
needs_ref = get_args_str.parse::<usize>().is_ok();
|
||||||
"Vec"
|
"Vec"
|
||||||
} else if match_type(cx, expr_ty, &paths::VEC_DEQUE) {
|
} else if match_type(cx, expr_ty, &paths::VEC_DEQUE) {
|
||||||
|
needs_ref = get_args_str.parse::<usize>().is_ok();
|
||||||
"VecDeque"
|
"VecDeque"
|
||||||
} else if !is_mut && match_type(cx, expr_ty, &paths::HASHMAP) {
|
} else if !is_mut && match_type(cx, expr_ty, &paths::HASHMAP) {
|
||||||
|
needs_ref = true;
|
||||||
"HashMap"
|
"HashMap"
|
||||||
} else if !is_mut && match_type(cx, expr_ty, &paths::BTREEMAP) {
|
} else if !is_mut && match_type(cx, expr_ty, &paths::BTREEMAP) {
|
||||||
|
needs_ref = true;
|
||||||
"BTreeMap"
|
"BTreeMap"
|
||||||
} else {
|
} else {
|
||||||
return; // caller is not a type that we want to lint
|
return; // caller is not a type that we want to lint
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut_str = if is_mut { "_mut" } else { "" };
|
let mut_str = if is_mut { "_mut" } else { "" };
|
||||||
let borrow_str = if is_mut { "&mut " } else { "&" };
|
let borrow_str = if !needs_ref { "" } else if is_mut { "&mut " } else { "&" };
|
||||||
span_lint_and_sugg(
|
span_lint_and_sugg(
|
||||||
cx,
|
cx,
|
||||||
GET_UNWRAP,
|
GET_UNWRAP,
|
||||||
|
@ -1482,7 +1493,7 @@ fn lint_get_unwrap(cx: &LateContext<'_, '_>, expr: &hir::Expr, get_args: &[hir::
|
||||||
"{}{}[{}]",
|
"{}{}[{}]",
|
||||||
borrow_str,
|
borrow_str,
|
||||||
snippet(cx, get_args[0].span, "_"),
|
snippet(cx, get_args[0].span, "_"),
|
||||||
snippet(cx, get_args[1].span, "_")
|
get_args_str
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,18 +41,17 @@ impl LintPass for Pass {
|
||||||
|
|
||||||
impl EarlyLintPass for Pass {
|
impl EarlyLintPass for Pass {
|
||||||
fn check_crate(&mut self, cx: &EarlyContext<'_>, krate: &Crate) {
|
fn check_crate(&mut self, cx: &EarlyContext<'_>, krate: &Crate) {
|
||||||
let metadata = match cargo_metadata::metadata_deps(None, true) {
|
let metadata = if let Ok(metadata) = cargo_metadata::metadata_deps(None, true) {
|
||||||
Ok(metadata) => metadata,
|
metadata
|
||||||
Err(_) => {
|
} else {
|
||||||
span_lint(
|
span_lint(
|
||||||
cx,
|
cx,
|
||||||
MULTIPLE_CRATE_VERSIONS,
|
MULTIPLE_CRATE_VERSIONS,
|
||||||
krate.span,
|
krate.span,
|
||||||
"could not read cargo metadata"
|
"could not read cargo metadata"
|
||||||
);
|
);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut packages = metadata.packages;
|
let mut packages = metadata.packages;
|
||||||
|
|
|
@ -148,7 +148,7 @@ define_Conf! {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Conf {
|
impl Default for Conf {
|
||||||
fn default() -> Conf {
|
fn default() -> Self {
|
||||||
toml::from_str("").expect("we never error on empty config files")
|
toml::from_str("").expect("we never error on empty config files")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,4 +43,9 @@ fn main() {
|
||||||
*some_btreemap.get_mut(&1).unwrap() = 'b';
|
*some_btreemap.get_mut(&1).unwrap() = 'b';
|
||||||
*false_positive.get_mut(0).unwrap() = 1;
|
*false_positive.get_mut(0).unwrap() = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{ // Test `get().unwrap().foo()` and `get_mut().unwrap().bar()`
|
||||||
|
let _ = some_vec.get(0..1).unwrap().to_vec();
|
||||||
|
let _ = some_vec.get_mut(0..1).unwrap().to_vec();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,5 +60,17 @@ error: called `.get_mut().unwrap()` on a VecDeque. Using `[]` is more clear and
|
||||||
40 | *some_vecdeque.get_mut(0).unwrap() = 1;
|
40 | *some_vecdeque.get_mut(0).unwrap() = 1;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&mut some_vecdeque[0]`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&mut some_vecdeque[0]`
|
||||||
|
|
||||||
error: aborting due to 10 previous errors
|
error: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
||||||
|
--> $DIR/get_unwrap.rs:48:17
|
||||||
|
|
|
||||||
|
48 | let _ = some_vec.get(0..1).unwrap().to_vec();
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `some_vec[0..1]`
|
||||||
|
|
||||||
|
error: called `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
||||||
|
--> $DIR/get_unwrap.rs:49:17
|
||||||
|
|
|
||||||
|
49 | let _ = some_vec.get_mut(0..1).unwrap().to_vec();
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `some_vec[0..1]`
|
||||||
|
|
||||||
|
error: aborting due to 12 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue