-// Copyright 2012-2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
//! Some lints that are only useful in the compiler or crates that use compiler internals, such as
//! Clippy.
-use errors::Applicability;
-use hir::{Expr, ExprKind, PatKind, Path, QPath, Ty, TyKind};
-use lint::{
+use crate::hir::{Expr, ExprKind, PatKind, Path, QPath, Ty, TyKind};
+use crate::lint::{
EarlyContext, EarlyLintPass, LateContext, LateLintPass, LintArray, LintContext, LintPass,
};
+use errors::Applicability;
use rustc_data_structures::fx::FxHashMap;
use syntax::ast::Ident;
fn get_lints(&self) -> LintArray {
lint_array!(DEFAULT_HASH_TYPES)
}
+
+ fn name(&self) -> &'static str {
+ "DefaultHashTypes"
+ }
}
impl EarlyLintPass for DefaultHashTypes {
replace, ident_string
);
let mut db = cx.struct_span_lint(DEFAULT_HASH_TYPES, ident.span, &msg);
- db.span_suggestion_with_applicability(
+ db.span_suggestion(
ident.span,
"use",
replace.to_string(),
fn get_lints(&self) -> LintArray {
lint_array!(USAGE_OF_TY_TYKIND)
}
+
+ fn name(&self) -> &'static str {
+ "TyKindUsage"
+ }
}
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for TyKindUsage {
path.span,
"usage of `ty::TyKind::<kind>`",
)
- .span_suggestion_with_applicability(
+ .span_suggestion(
path.span,
"try using ty::<kind> directly",
"ty".to_string(),
Applicability::MaybeIncorrect, // ty maybe needs an import
- ).emit();
+ )
+ .emit();
}
}
}
warning: Prefer FxHashMap over HashMap, it has better performance
- --> $DIR/default_hash_types.rs:18:24
+ --> $DIR/default_hash_types.rs:8:24
|
LL | use std::collections::{HashMap, HashSet};
| ^^^^^^^ help: use: `FxHashMap`
= note: a `use rustc_data_structures::fx::FxHashMap` may be necessary
warning: Prefer FxHashSet over HashSet, it has better performance
- --> $DIR/default_hash_types.rs:18:33
+ --> $DIR/default_hash_types.rs:8:33
|
LL | use std::collections::{HashMap, HashSet};
| ^^^^^^^ help: use: `FxHashSet`
= note: a `use rustc_data_structures::fx::FxHashSet` may be necessary
error: Prefer FxHashMap over HashMap, it has better performance
- --> $DIR/default_hash_types.rs:24:15
+ --> $DIR/default_hash_types.rs:14:15
|
LL | let _map: HashMap<String, String> = HashMap::default();
| ^^^^^^^ help: use: `FxHashMap`
|
note: lint level defined here
- --> $DIR/default_hash_types.rs:22:8
+ --> $DIR/default_hash_types.rs:12:8
|
LL | #[deny(default_hash_types)]
| ^^^^^^^^^^^^^^^^^^
= note: a `use rustc_data_structures::fx::FxHashMap` may be necessary
error: Prefer FxHashMap over HashMap, it has better performance
- --> $DIR/default_hash_types.rs:24:41
+ --> $DIR/default_hash_types.rs:14:41
|
LL | let _map: HashMap<String, String> = HashMap::default();
| ^^^^^^^ help: use: `FxHashMap`
= note: a `use rustc_data_structures::fx::FxHashMap` may be necessary
error: Prefer FxHashSet over HashSet, it has better performance
- --> $DIR/default_hash_types.rs:27:15
+ --> $DIR/default_hash_types.rs:17:15
|
LL | let _set: HashSet<String> = HashSet::default();
| ^^^^^^^ help: use: `FxHashSet`
= note: a `use rustc_data_structures::fx::FxHashSet` may be necessary
error: Prefer FxHashSet over HashSet, it has better performance
- --> $DIR/default_hash_types.rs:27:33
+ --> $DIR/default_hash_types.rs:17:33
|
LL | let _set: HashSet<String> = HashSet::default();
| ^^^^^^^ help: use: `FxHashSet`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:21:15
+ --> $DIR/ty_tykind_usage.rs:11:15
|
LL | let sty = TyKind::Bool; //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
|
note: lint level defined here
- --> $DIR/ty_tykind_usage.rs:19:8
+ --> $DIR/ty_tykind_usage.rs:9:8
|
LL | #[deny(usage_of_ty_tykind)]
| ^^^^^^^^^^^^^^^^^^
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:24:9
+ --> $DIR/ty_tykind_usage.rs:14:9
|
LL | TyKind::Bool => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:25:9
+ --> $DIR/ty_tykind_usage.rs:15:9
|
LL | TyKind::Char => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:26:9
+ --> $DIR/ty_tykind_usage.rs:16:9
|
LL | TyKind::Int(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:27:9
+ --> $DIR/ty_tykind_usage.rs:17:9
|
LL | TyKind::Uint(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:28:9
+ --> $DIR/ty_tykind_usage.rs:18:9
|
LL | TyKind::Float(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:29:9
+ --> $DIR/ty_tykind_usage.rs:19:9
|
LL | TyKind::Adt(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:30:9
+ --> $DIR/ty_tykind_usage.rs:20:9
|
LL | TyKind::Foreign(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:31:9
+ --> $DIR/ty_tykind_usage.rs:21:9
|
LL | TyKind::Str => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:32:9
+ --> $DIR/ty_tykind_usage.rs:22:9
|
LL | TyKind::Array(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:33:9
+ --> $DIR/ty_tykind_usage.rs:23:9
|
LL | TyKind::Slice(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:34:9
+ --> $DIR/ty_tykind_usage.rs:24:9
|
LL | TyKind::RawPtr(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:35:9
+ --> $DIR/ty_tykind_usage.rs:25:9
|
LL | TyKind::Ref(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:36:9
+ --> $DIR/ty_tykind_usage.rs:26:9
|
LL | TyKind::FnDef(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:37:9
+ --> $DIR/ty_tykind_usage.rs:27:9
|
LL | TyKind::FnPtr(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:38:9
+ --> $DIR/ty_tykind_usage.rs:28:9
|
LL | TyKind::Dynamic(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:39:9
+ --> $DIR/ty_tykind_usage.rs:29:9
|
LL | TyKind::Closure(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:40:9
+ --> $DIR/ty_tykind_usage.rs:30:9
|
LL | TyKind::Generator(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:41:9
+ --> $DIR/ty_tykind_usage.rs:31:9
|
LL | TyKind::GeneratorWitness(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:42:9
+ --> $DIR/ty_tykind_usage.rs:32:9
|
LL | TyKind::Never => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:43:9
+ --> $DIR/ty_tykind_usage.rs:33:9
|
LL | TyKind::Tuple(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:44:9
+ --> $DIR/ty_tykind_usage.rs:34:9
|
LL | TyKind::Projection(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:45:9
+ --> $DIR/ty_tykind_usage.rs:35:9
|
LL | TyKind::UnnormalizedProjection(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:46:9
+ --> $DIR/ty_tykind_usage.rs:36:9
|
LL | TyKind::Opaque(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:47:9
+ --> $DIR/ty_tykind_usage.rs:37:9
|
LL | TyKind::Param(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:48:9
+ --> $DIR/ty_tykind_usage.rs:38:9
|
LL | TyKind::Bound(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:49:9
+ --> $DIR/ty_tykind_usage.rs:39:9
|
LL | TyKind::Placeholder(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:50:9
+ --> $DIR/ty_tykind_usage.rs:40:9
|
LL | TyKind::Infer(..) => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:51:9
+ --> $DIR/ty_tykind_usage.rs:41:9
|
LL | TyKind::Error => (), //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind::<kind>`
- --> $DIR/ty_tykind_usage.rs:56:12
+ --> $DIR/ty_tykind_usage.rs:46:12
|
LL | if let TyKind::Int(int_ty) = sty {} //~ ERROR usage of `ty::TyKind::<kind>`
| ^^^^^^ help: try using ty::<kind> directly: `ty`
error: usage of `ty::TyKind`
- --> $DIR/ty_tykind_usage.rs:58:24
+ --> $DIR/ty_tykind_usage.rs:48:24
|
LL | fn ty_kind(ty_bad: TyKind<'_>, ty_good: Ty<'_>) {} //~ ERROR usage of `ty::TyKind`
| ^^^^^^^^^^