Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Internal lints #58701

Closed
wants to merge 8 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix rebase fallout
flip1995 committed Feb 24, 2019

Verified

This commit was signed with the committer’s verified signature.
flip1995 Philipp Krones
commit 1c0a67c27f8a8e16be0abb4a09a12834e2934e2f
4 changes: 2 additions & 2 deletions src/librustc/hir/def_id.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use ty::{self, TyCtxt};
use hir::map::definitions::FIRST_FREE_HIGH_DEF_INDEX;
use crate::ty::{self, TyCtxt};
use crate::hir::map::definitions::FIRST_FREE_HIGH_DEF_INDEX;
use rustc_data_structures::indexed_vec::Idx;
use serialize;
use std::fmt;
31 changes: 15 additions & 16 deletions src/librustc/lint/internal.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,11 @@
// 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;

@@ -42,6 +32,10 @@ impl LintPass for DefaultHashTypes {
fn get_lints(&self) -> LintArray {
lint_array!(DEFAULT_HASH_TYPES)
}

fn name(&self) -> &'static str {
"DefaultHashTypes"
}
}

impl EarlyLintPass for DefaultHashTypes {
@@ -53,7 +47,7 @@ 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(),
@@ -80,6 +74,10 @@ impl LintPass for TyKindUsage {
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 {
@@ -124,12 +122,13 @@ 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();
}
}
}
2 changes: 1 addition & 1 deletion src/librustc_lint/lib.rs
Original file line number Diff line number Diff line change
@@ -408,7 +408,7 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
}

pub fn register_internals(store: &mut lint::LintStore, sess: Option<&Session>) {
store.register_early_pass(sess, false, box DefaultHashTypes::new());
store.register_early_pass(sess, false, false, box DefaultHashTypes::new());
store.register_late_pass(sess, false, box TyKindUsage);
store.register_group(
sess,
10 changes: 0 additions & 10 deletions src/test/ui-fulldeps/internal-lints/default_hash_types.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,3 @@
// Copyright 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.

// compile-flags: -Z internal-lints

#![feature(rustc_private)]
14 changes: 7 additions & 7 deletions src/test/ui-fulldeps/internal-lints/default_hash_types.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
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`
@@ -8,44 +8,44 @@ LL | use std::collections::{HashMap, HashSet};
= 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`
10 changes: 0 additions & 10 deletions src/test/ui-fulldeps/internal-lints/ty_tykind_usage.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,3 @@
// Copyright 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.

// compile-flags: -Z internal-lints

#![feature(rustc_private)]
64 changes: 32 additions & 32 deletions src/test/ui-fulldeps/internal-lints/ty_tykind_usage.stderr
Original file line number Diff line number Diff line change
@@ -1,191 +1,191 @@
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`
| ^^^^^^^^^^
10 changes: 0 additions & 10 deletions src/test/ui-fulldeps/internal-lints/without_compile_flag.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,3 @@
// Copyright 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.

// compile-pass

#![allow(unused)]
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
warning: unknown lint: `default_hash_types`
--> $DIR/without_compile_flag.rs:17:8
--> $DIR/without_compile_flag.rs:7:8
|
LL | #[deny(default_hash_types)] //~ WARNING unknown lint: `default_hash_types`
| ^^^^^^^^^^^^^^^^^^