Tweak CheckLintNameResult::Tool
.
It has a clumsy type, with repeated `&'a [LintId]`, and sometimes requires an empty string that isn't used in the `Err`+`None` case. This commit splits it into two variants.
This commit is contained in:
parent
d070e89230
commit
32c8a12854
2 changed files with 46 additions and 53 deletions
|
@ -127,12 +127,16 @@ pub enum CheckLintNameResult<'a> {
|
|||
Renamed(String),
|
||||
/// The lint has been removed due to the given reason.
|
||||
Removed(String),
|
||||
/// The lint is from a tool. If the Option is None, then either
|
||||
/// the lint does not exist in the tool or the code was not
|
||||
/// compiled with the tool and therefore the lint was never
|
||||
/// added to the `LintStore`. Otherwise the `LintId` will be
|
||||
/// returned as if it where a rustc lint.
|
||||
Tool(Result<&'a [LintId], (Option<&'a [LintId]>, String)>),
|
||||
|
||||
/// The lint is from a tool. The `LintId` will be returned as if it were a
|
||||
/// rustc lint. The `Option<String>` indicates if the lint has been
|
||||
/// renamed.
|
||||
Tool(&'a [LintId], Option<String>),
|
||||
|
||||
/// The lint is from a tool. Either the lint does not exist in the tool or
|
||||
/// the code was not compiled with the tool and therefore the lint was
|
||||
/// never added to the `LintStore`.
|
||||
MissingTool,
|
||||
}
|
||||
|
||||
impl LintStore {
|
||||
|
@ -385,14 +389,14 @@ impl LintStore {
|
|||
} else {
|
||||
// 2. The tool isn't currently running, so no lints will be registered.
|
||||
// To avoid giving a false positive, ignore all unknown lints.
|
||||
CheckLintNameResult::Tool(Err((None, String::new())))
|
||||
CheckLintNameResult::MissingTool
|
||||
};
|
||||
}
|
||||
Some(LintGroup { lint_ids, .. }) => {
|
||||
return CheckLintNameResult::Tool(Ok(lint_ids));
|
||||
return CheckLintNameResult::Tool(lint_ids, None);
|
||||
}
|
||||
},
|
||||
Some(Id(id)) => return CheckLintNameResult::Tool(Ok(slice::from_ref(id))),
|
||||
Some(Id(id)) => return CheckLintNameResult::Tool(slice::from_ref(id), None),
|
||||
// If the lint was registered as removed or renamed by the lint tool, we don't need
|
||||
// to treat tool_lints and rustc lints different and can use the code below.
|
||||
_ => {}
|
||||
|
@ -412,7 +416,7 @@ impl LintStore {
|
|||
return if *silent {
|
||||
CheckLintNameResult::Ok(lint_ids)
|
||||
} else {
|
||||
CheckLintNameResult::Tool(Err((Some(lint_ids), (*name).to_string())))
|
||||
CheckLintNameResult::Tool(lint_ids, Some((*name).to_string()))
|
||||
};
|
||||
}
|
||||
CheckLintNameResult::Ok(lint_ids)
|
||||
|
@ -473,18 +477,17 @@ impl LintStore {
|
|||
// 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)))
|
||||
if *silent {
|
||||
CheckLintNameResult::Tool(lint_ids, Some(complete_name))
|
||||
} else {
|
||||
CheckLintNameResult::Tool(Err((Some(lint_ids), (*name).to_string())))
|
||||
};
|
||||
CheckLintNameResult::Tool(lint_ids, Some((*name).to_string()))
|
||||
}
|
||||
} else {
|
||||
CheckLintNameResult::Tool(lint_ids, Some(complete_name))
|
||||
}
|
||||
CheckLintNameResult::Tool(Err((Some(lint_ids), complete_name)))
|
||||
}
|
||||
},
|
||||
Some(Id(id)) => {
|
||||
CheckLintNameResult::Tool(Err((Some(slice::from_ref(id)), complete_name)))
|
||||
}
|
||||
Some(Id(id)) => CheckLintNameResult::Tool(slice::from_ref(id), Some(complete_name)),
|
||||
Some(other) => {
|
||||
debug!("got renamed lint {:?}", other);
|
||||
CheckLintNameResult::NoLint(None)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue