Rollup merge of #120132 - oli-obk:helpful_tidy, r=Mark-Simulacrum
Teach tidy about line/col information for malformed features This makes it significantly easier to find the specific feature, since you can now just click it in the command line of your IDE
This commit is contained in:
commit
836bc69bd1
@ -15,7 +15,7 @@
|
||||
use std::fmt;
|
||||
use std::fs;
|
||||
use std::num::NonZeroU32;
|
||||
use std::path::Path;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
use regex::Regex;
|
||||
|
||||
@ -52,6 +52,8 @@ pub struct Feature {
|
||||
pub since: Option<Version>,
|
||||
pub has_gate_test: bool,
|
||||
pub tracking_issue: Option<NonZeroU32>,
|
||||
pub file: PathBuf,
|
||||
pub line: usize,
|
||||
}
|
||||
impl Feature {
|
||||
fn tracking_issue_display(&self) -> impl fmt::Display {
|
||||
@ -184,23 +186,25 @@ pub fn check(
|
||||
.chain(lib_features.iter().map(|feat| (feat, "lib")));
|
||||
for ((feature_name, feature), kind) in all_features_iter {
|
||||
let since = if let Some(since) = feature.since { since } else { continue };
|
||||
let file = feature.file.display();
|
||||
let line = feature.line;
|
||||
if since > version && since != Version::CurrentPlaceholder {
|
||||
tidy_error!(
|
||||
bad,
|
||||
"The stabilization version {since} of {kind} feature `{feature_name}` is newer than the current {version}"
|
||||
"{file}:{line}: The stabilization version {since} of {kind} feature `{feature_name}` is newer than the current {version}"
|
||||
);
|
||||
}
|
||||
if channel == "nightly" && since == version {
|
||||
tidy_error!(
|
||||
bad,
|
||||
"The stabilization version {since} of {kind} feature `{feature_name}` is written out but should be {}",
|
||||
"{file}:{line}: The stabilization version {since} of {kind} feature `{feature_name}` is written out but should be {}",
|
||||
version::VERSION_PLACEHOLDER
|
||||
);
|
||||
}
|
||||
if channel != "nightly" && since == Version::CurrentPlaceholder {
|
||||
tidy_error!(
|
||||
bad,
|
||||
"The placeholder use of {kind} feature `{feature_name}` is not allowed on the {channel} channel",
|
||||
"{file}:{line}: The placeholder use of {kind} feature `{feature_name}` is not allowed on the {channel} channel",
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -433,7 +437,14 @@ fn collect_lang_features_in(features: &mut Features, base: &Path, file: &str, ba
|
||||
);
|
||||
}
|
||||
Entry::Vacant(e) => {
|
||||
e.insert(Feature { level, since, has_gate_test: false, tracking_issue });
|
||||
e.insert(Feature {
|
||||
level,
|
||||
since,
|
||||
has_gate_test: false,
|
||||
tracking_issue,
|
||||
file: path.to_path_buf(),
|
||||
line: line_number,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -559,6 +570,8 @@ macro_rules! err {
|
||||
since: None,
|
||||
has_gate_test: false,
|
||||
tracking_issue: find_attr_val(line, "issue").and_then(handle_issue_none),
|
||||
file: file.to_path_buf(),
|
||||
line: i + 1,
|
||||
};
|
||||
mf(Ok((feature_name, feature)), file, i + 1);
|
||||
continue;
|
||||
@ -588,7 +601,14 @@ macro_rules! err {
|
||||
};
|
||||
let tracking_issue = find_attr_val(line, "issue").and_then(handle_issue_none);
|
||||
|
||||
let feature = Feature { level, since, has_gate_test: false, tracking_issue };
|
||||
let feature = Feature {
|
||||
level,
|
||||
since,
|
||||
has_gate_test: false,
|
||||
tracking_issue,
|
||||
file: file.to_path_buf(),
|
||||
line: i + 1,
|
||||
};
|
||||
if line.contains(']') {
|
||||
mf(Ok((feature_name, feature)), file, i + 1);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user