Auto merge of #54251 - varkor:silence-bad_style, r=Manishearth
Make `bad_style` a silent alias for `nonstandard_style` Now only `nonstandard_style` is suggested in `rustc -W help`, but `bad_style` will not produce a warning. Closes #41646. r? @Manishearth
This commit is contained in:
commit
8a7048b72b
@ -67,10 +67,8 @@ pub struct LintStore {
|
||||
/// Lints indexed by name.
|
||||
by_name: FxHashMap<String, TargetLint>,
|
||||
|
||||
/// Map of registered lint groups to what lints they expand to. The first
|
||||
/// bool is true if the lint group was added by a plugin. The optional string
|
||||
/// is used to store the new names of deprecated lint group names.
|
||||
lint_groups: FxHashMap<&'static str, (Vec<LintId>, bool, Option<&'static str>)>,
|
||||
/// Map of registered lint groups to what lints they expand to.
|
||||
lint_groups: FxHashMap<&'static str, LintGroup>,
|
||||
|
||||
/// Extra info for future incompatibility lints, describing the
|
||||
/// issue or RFC that caused the incompatibility.
|
||||
@ -127,6 +125,18 @@ pub enum FindLintError {
|
||||
Removed,
|
||||
}
|
||||
|
||||
struct LintAlias {
|
||||
name: &'static str,
|
||||
/// Whether deprecation warnings should be suppressed for this alias.
|
||||
silent: bool,
|
||||
}
|
||||
|
||||
struct LintGroup {
|
||||
lint_ids: Vec<LintId>,
|
||||
from_plugin: bool,
|
||||
depr: Option<LintAlias>,
|
||||
}
|
||||
|
||||
pub enum CheckLintNameResult<'a> {
|
||||
Ok(&'a [LintId]),
|
||||
/// Lint doesn't exist
|
||||
@ -160,9 +170,15 @@ impl LintStore {
|
||||
}
|
||||
|
||||
pub fn get_lint_groups<'t>(&'t self) -> Vec<(&'static str, Vec<LintId>, bool)> {
|
||||
self.lint_groups.iter().map(|(k, v)| (*k,
|
||||
v.0.clone(),
|
||||
v.1)).collect()
|
||||
self.lint_groups.iter()
|
||||
.filter(|(_, LintGroup { depr, .. })| {
|
||||
// Don't display deprecated lint groups.
|
||||
depr.is_none()
|
||||
})
|
||||
.map(|(k, LintGroup { lint_ids, from_plugin, .. })| {
|
||||
(*k, lint_ids.clone(), *from_plugin)
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub fn register_early_pass(&mut self,
|
||||
@ -245,6 +261,18 @@ impl LintStore {
|
||||
self.future_incompatible.get(&id)
|
||||
}
|
||||
|
||||
pub fn register_group_alias(
|
||||
&mut self,
|
||||
lint_name: &'static str,
|
||||
alias: &'static str,
|
||||
) {
|
||||
self.lint_groups.insert(alias, LintGroup {
|
||||
lint_ids: vec![],
|
||||
from_plugin: false,
|
||||
depr: Some(LintAlias { name: lint_name, silent: true }),
|
||||
});
|
||||
}
|
||||
|
||||
pub fn register_group(
|
||||
&mut self,
|
||||
sess: Option<&Session>,
|
||||
@ -255,11 +283,18 @@ impl LintStore {
|
||||
) {
|
||||
let new = self
|
||||
.lint_groups
|
||||
.insert(name, (to, from_plugin, None))
|
||||
.insert(name, LintGroup {
|
||||
lint_ids: to,
|
||||
from_plugin,
|
||||
depr: None,
|
||||
})
|
||||
.is_none();
|
||||
if let Some(deprecated) = deprecated_name {
|
||||
self.lint_groups
|
||||
.insert(deprecated, (vec![], from_plugin, Some(name)));
|
||||
self.lint_groups.insert(deprecated, LintGroup {
|
||||
lint_ids: vec![],
|
||||
from_plugin,
|
||||
depr: Some(LintAlias { name, silent: false }),
|
||||
});
|
||||
}
|
||||
|
||||
if !new {
|
||||
@ -288,7 +323,7 @@ impl LintStore {
|
||||
self.by_name.insert(name.into(), Removed(reason.into()));
|
||||
}
|
||||
|
||||
pub fn find_lints(&self, lint_name: &str) -> Result<Vec<LintId>, FindLintError> {
|
||||
pub fn find_lints(&self, mut lint_name: &str) -> Result<Vec<LintId>, FindLintError> {
|
||||
match self.by_name.get(lint_name) {
|
||||
Some(&Id(lint_id)) => Ok(vec![lint_id]),
|
||||
Some(&Renamed(_, lint_id)) => {
|
||||
@ -298,9 +333,17 @@ impl LintStore {
|
||||
Err(FindLintError::Removed)
|
||||
},
|
||||
None => {
|
||||
match self.lint_groups.get(lint_name) {
|
||||
Some(v) => Ok(v.0.clone()),
|
||||
None => Err(FindLintError::Removed)
|
||||
loop {
|
||||
return match self.lint_groups.get(lint_name) {
|
||||
Some(LintGroup {lint_ids, depr, .. }) => {
|
||||
if let Some(LintAlias { name, .. }) = depr {
|
||||
lint_name = name;
|
||||
continue;
|
||||
}
|
||||
Ok(lint_ids.clone())
|
||||
}
|
||||
None => Err(FindLintError::Removed)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -366,7 +409,9 @@ impl LintStore {
|
||||
match self.by_name.get(&complete_name) {
|
||||
None => match self.lint_groups.get(&*complete_name) {
|
||||
None => return CheckLintNameResult::Tool(Err((None, String::new()))),
|
||||
Some(ids) => return CheckLintNameResult::Tool(Ok(&ids.0)),
|
||||
Some(LintGroup { lint_ids, .. }) => {
|
||||
return CheckLintNameResult::Tool(Ok(&lint_ids));
|
||||
}
|
||||
},
|
||||
Some(&Id(ref id)) => return CheckLintNameResult::Tool(Ok(slice::from_ref(id))),
|
||||
// If the lint was registered as removed or renamed by the lint tool, we don't need
|
||||
@ -390,16 +435,20 @@ impl LintStore {
|
||||
// If neither the lint, nor the lint group exists check if there is a `clippy::`
|
||||
// variant of this lint
|
||||
None => self.check_tool_name_for_backwards_compat(&complete_name, "clippy"),
|
||||
Some(ids) => {
|
||||
Some(LintGroup { lint_ids, depr, .. }) => {
|
||||
// Check if the lint group name is deprecated
|
||||
if let Some(new_name) = ids.2 {
|
||||
let lint_ids = self.lint_groups.get(new_name).unwrap();
|
||||
return CheckLintNameResult::Tool(Err((
|
||||
Some(&lint_ids.0),
|
||||
new_name.to_string(),
|
||||
)));
|
||||
if let Some(LintAlias { name, silent }) = depr {
|
||||
let LintGroup { lint_ids, .. } = self.lint_groups.get(name).unwrap();
|
||||
return if *silent {
|
||||
CheckLintNameResult::Ok(&lint_ids)
|
||||
} else {
|
||||
CheckLintNameResult::Tool(Err((
|
||||
Some(&lint_ids),
|
||||
name.to_string(),
|
||||
)))
|
||||
};
|
||||
}
|
||||
CheckLintNameResult::Ok(&ids.0)
|
||||
CheckLintNameResult::Ok(&lint_ids)
|
||||
}
|
||||
},
|
||||
Some(&Id(ref id)) => CheckLintNameResult::Ok(slice::from_ref(id)),
|
||||
@ -416,16 +465,20 @@ impl LintStore {
|
||||
None => match self.lint_groups.get(&*complete_name) {
|
||||
// Now we are sure, that this lint exists nowhere
|
||||
None => CheckLintNameResult::NoLint,
|
||||
Some(ids) => {
|
||||
// Reaching this would be weird, but lets cover this case anyway
|
||||
if let Some(new_name) = ids.2 {
|
||||
let lint_ids = self.lint_groups.get(new_name).unwrap();
|
||||
return CheckLintNameResult::Tool(Err((
|
||||
Some(&lint_ids.0),
|
||||
new_name.to_string(),
|
||||
)));
|
||||
Some(LintGroup { lint_ids, depr, .. }) => {
|
||||
// Reaching this would be weird, but let's cover this case anyway
|
||||
if let Some(LintAlias { name, silent }) = depr {
|
||||
let LintGroup { lint_ids, .. } = self.lint_groups.get(name).unwrap();
|
||||
return if *silent {
|
||||
CheckLintNameResult::Tool(Err((Some(&lint_ids), complete_name)))
|
||||
} else {
|
||||
CheckLintNameResult::Tool(Err((
|
||||
Some(&lint_ids),
|
||||
name.to_string(),
|
||||
)))
|
||||
};
|
||||
}
|
||||
CheckLintNameResult::Tool(Err((Some(&ids.0), complete_name)))
|
||||
CheckLintNameResult::Tool(Err((Some(&lint_ids), complete_name)))
|
||||
}
|
||||
},
|
||||
Some(&Id(ref id)) => {
|
||||
|
@ -84,30 +84,30 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
|
||||
($sess:ident, $($name:ident),*,) => (
|
||||
{$(
|
||||
store.register_early_pass($sess, false, box $name);
|
||||
)*}
|
||||
)
|
||||
)*}
|
||||
)
|
||||
}
|
||||
|
||||
macro_rules! add_pre_expansion_builtin {
|
||||
($sess:ident, $($name:ident),*,) => (
|
||||
{$(
|
||||
store.register_pre_expansion_pass($sess, box $name);
|
||||
)*}
|
||||
)
|
||||
)*}
|
||||
)
|
||||
}
|
||||
|
||||
macro_rules! add_early_builtin_with_new {
|
||||
($sess:ident, $($name:ident),*,) => (
|
||||
{$(
|
||||
store.register_early_pass($sess, false, box $name::new());
|
||||
)*}
|
||||
)
|
||||
)*}
|
||||
)
|
||||
}
|
||||
|
||||
macro_rules! add_lint_group {
|
||||
($sess:ident, $name:expr, $($lint:ident),*) => (
|
||||
store.register_group($sess, false, $name, None, vec![$(LintId::of($lint)),*]);
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
add_pre_expansion_builtin!(sess,
|
||||
@ -162,12 +162,6 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
|
||||
|
||||
store.register_late_pass(sess, false, box BuiltinCombinedLateLintPass::new());
|
||||
|
||||
add_lint_group!(sess,
|
||||
"bad_style",
|
||||
NON_CAMEL_CASE_TYPES,
|
||||
NON_SNAKE_CASE,
|
||||
NON_UPPER_CASE_GLOBALS);
|
||||
|
||||
add_lint_group!(sess,
|
||||
"nonstandard_style",
|
||||
NON_CAMEL_CASE_TYPES,
|
||||
@ -357,6 +351,8 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
|
||||
store.register_removed("unsigned_negation", "replaced by negate_unsigned feature gate");
|
||||
store.register_removed("negate_unsigned", "cast a signed value instead");
|
||||
store.register_removed("raw_pointer_derive", "using derive with raw pointers is ok");
|
||||
// Register lint group aliases
|
||||
store.register_group_alias("nonstandard_style", "bad_style");
|
||||
// This was renamed to raw_pointer_derive, which was then removed,
|
||||
// so it is also considered removed
|
||||
store.register_removed("raw_pointer_deriving", "using derive with raw pointers is ok");
|
||||
|
Loading…
x
Reference in New Issue
Block a user