Auto merge of #6389 - giraffate:sync-from-rust, r=llogiq
Rustup changelog: none
This commit is contained in:
commit
7a7399076a
@ -22,20 +22,7 @@ pub fn run(update_mode: UpdateMode) {
|
|||||||
|
|
||||||
let usable_lint_count = round_to_fifty(usable_lints.len());
|
let usable_lint_count = round_to_fifty(usable_lints.len());
|
||||||
|
|
||||||
let mut file_change = replace_region_in_file(
|
let mut file_change = false;
|
||||||
Path::new("src/lintlist/mod.rs"),
|
|
||||||
"begin lint list",
|
|
||||||
"end lint list",
|
|
||||||
false,
|
|
||||||
update_mode == UpdateMode::Change,
|
|
||||||
|| {
|
|
||||||
format!("vec!{:#?}", sorted_usable_lints)
|
|
||||||
.lines()
|
|
||||||
.map(ToString::to_string)
|
|
||||||
.collect::<Vec<_>>()
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.changed;
|
|
||||||
|
|
||||||
file_change |= replace_region_in_file(
|
file_change |= replace_region_in_file(
|
||||||
Path::new("README.md"),
|
Path::new("README.md"),
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
span_lint_and_sugg, span_lint_and_then, without_block_comments,
|
span_lint_and_sugg, span_lint_and_then, without_block_comments,
|
||||||
};
|
};
|
||||||
use if_chain::if_chain;
|
use if_chain::if_chain;
|
||||||
use rustc_ast::util::lev_distance::find_best_match_for_name;
|
|
||||||
use rustc_ast::{AttrKind, AttrStyle, Attribute, Lit, LitKind, MetaItemKind, NestedMetaItem};
|
use rustc_ast::{AttrKind, AttrStyle, Attribute, Lit, LitKind, MetaItemKind, NestedMetaItem};
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir::{
|
use rustc_hir::{
|
||||||
@ -15,6 +14,7 @@
|
|||||||
use rustc_middle::lint::in_external_macro;
|
use rustc_middle::lint::in_external_macro;
|
||||||
use rustc_middle::ty;
|
use rustc_middle::ty;
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
|
use rustc_span::lev_distance::find_best_match_for_name;
|
||||||
use rustc_span::source_map::Span;
|
use rustc_span::source_map::Span;
|
||||||
use rustc_span::sym;
|
use rustc_span::sym;
|
||||||
use rustc_span::symbol::{Symbol, SymbolStr};
|
use rustc_span::symbol::{Symbol, SymbolStr};
|
||||||
@ -427,7 +427,7 @@ fn check_clippy_lint_names(cx: &LateContext<'_>, ident: &str, items: &[NestedMet
|
|||||||
.map(|l| Symbol::intern(&l.name_lower()))
|
.map(|l| Symbol::intern(&l.name_lower()))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
let sugg = find_best_match_for_name(
|
let sugg = find_best_match_for_name(
|
||||||
symbols.iter(),
|
&symbols,
|
||||||
Symbol::intern(&format!("clippy::{}", name_lower)),
|
Symbol::intern(&format!("clippy::{}", name_lower)),
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
|
121
src/driver.rs
121
src/driver.rs
@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
// FIXME: switch to something more ergonomic here, once available.
|
// FIXME: switch to something more ergonomic here, once available.
|
||||||
// (Currently there is no way to opt into sysroot crates without `extern crate`.)
|
// (Currently there is no way to opt into sysroot crates without `extern crate`.)
|
||||||
extern crate rustc_data_structures;
|
|
||||||
extern crate rustc_driver;
|
extern crate rustc_driver;
|
||||||
extern crate rustc_errors;
|
extern crate rustc_errors;
|
||||||
extern crate rustc_interface;
|
extern crate rustc_interface;
|
||||||
@ -26,8 +25,6 @@
|
|||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::process::{exit, Command};
|
use std::process::{exit, Command};
|
||||||
|
|
||||||
mod lintlist;
|
|
||||||
|
|
||||||
/// If a command-line option matches `find_arg`, then apply the predicate `pred` on its value. If
|
/// If a command-line option matches `find_arg`, then apply the predicate `pred` on its value. If
|
||||||
/// true, then return it. The parameter is assumed to be either `--arg=value` or `--arg value`.
|
/// true, then return it. The parameter is assumed to be either `--arg=value` or `--arg value`.
|
||||||
fn arg_value<'a, T: Deref<Target = str>>(
|
fn arg_value<'a, T: Deref<Target = str>>(
|
||||||
@ -92,113 +89,6 @@ fn config(&mut self, config: &mut interface::Config) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::find_map, clippy::filter_map)]
|
|
||||||
fn describe_lints() {
|
|
||||||
use lintlist::{Level, Lint, ALL_LINTS, LINT_LEVELS};
|
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
|
||||||
|
|
||||||
println!(
|
|
||||||
"
|
|
||||||
Available lint options:
|
|
||||||
-W <foo> Warn about <foo>
|
|
||||||
-A <foo> Allow <foo>
|
|
||||||
-D <foo> Deny <foo>
|
|
||||||
-F <foo> Forbid <foo> (deny <foo> and all attempts to override)
|
|
||||||
|
|
||||||
"
|
|
||||||
);
|
|
||||||
|
|
||||||
let lint_level = |lint: &Lint| {
|
|
||||||
LINT_LEVELS
|
|
||||||
.iter()
|
|
||||||
.find(|level_mapping| level_mapping.0 == lint.group)
|
|
||||||
.map(|(_, level)| match level {
|
|
||||||
Level::Allow => "allow",
|
|
||||||
Level::Warn => "warn",
|
|
||||||
Level::Deny => "deny",
|
|
||||||
})
|
|
||||||
.unwrap()
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut lints: Vec<_> = ALL_LINTS.iter().collect();
|
|
||||||
// The sort doesn't case-fold but it's doubtful we care.
|
|
||||||
lints.sort_by_cached_key(|x: &&Lint| (lint_level(x), x.name));
|
|
||||||
|
|
||||||
let max_lint_name_len = lints
|
|
||||||
.iter()
|
|
||||||
.map(|lint| lint.name.len())
|
|
||||||
.map(|len| len + "clippy::".len())
|
|
||||||
.max()
|
|
||||||
.unwrap_or(0);
|
|
||||||
|
|
||||||
let padded = |x: &str| {
|
|
||||||
let mut s = " ".repeat(max_lint_name_len - x.chars().count());
|
|
||||||
s.push_str(x);
|
|
||||||
s
|
|
||||||
};
|
|
||||||
|
|
||||||
let scoped = |x: &str| format!("clippy::{}", x);
|
|
||||||
|
|
||||||
let lint_groups: FxHashSet<_> = lints.iter().map(|lint| lint.group).collect();
|
|
||||||
|
|
||||||
println!("Lint checks provided by clippy:\n");
|
|
||||||
println!(" {} {:7.7} meaning", padded("name"), "default");
|
|
||||||
println!(" {} {:7.7} -------", padded("----"), "-------");
|
|
||||||
|
|
||||||
let print_lints = |lints: &[&Lint]| {
|
|
||||||
for lint in lints {
|
|
||||||
let name = lint.name.replace("_", "-");
|
|
||||||
println!(
|
|
||||||
" {} {:7.7} {}",
|
|
||||||
padded(&scoped(&name)),
|
|
||||||
lint_level(lint),
|
|
||||||
lint.desc
|
|
||||||
);
|
|
||||||
}
|
|
||||||
println!("\n");
|
|
||||||
};
|
|
||||||
|
|
||||||
print_lints(&lints);
|
|
||||||
|
|
||||||
let max_group_name_len = std::cmp::max(
|
|
||||||
"clippy::all".len(),
|
|
||||||
lint_groups
|
|
||||||
.iter()
|
|
||||||
.map(|group| group.len())
|
|
||||||
.map(|len| len + "clippy::".len())
|
|
||||||
.max()
|
|
||||||
.unwrap_or(0),
|
|
||||||
);
|
|
||||||
|
|
||||||
let padded_group = |x: &str| {
|
|
||||||
let mut s = " ".repeat(max_group_name_len - x.chars().count());
|
|
||||||
s.push_str(x);
|
|
||||||
s
|
|
||||||
};
|
|
||||||
|
|
||||||
println!("Lint groups provided by clippy:\n");
|
|
||||||
println!(" {} sub-lints", padded_group("name"));
|
|
||||||
println!(" {} ---------", padded_group("----"));
|
|
||||||
println!(" {} the set of all clippy lints", padded_group("clippy::all"));
|
|
||||||
|
|
||||||
let print_lint_groups = || {
|
|
||||||
for group in lint_groups {
|
|
||||||
let name = group.to_lowercase().replace("_", "-");
|
|
||||||
let desc = lints
|
|
||||||
.iter()
|
|
||||||
.filter(|&lint| lint.group == group)
|
|
||||||
.map(|lint| lint.name)
|
|
||||||
.map(|name| name.replace("_", "-"))
|
|
||||||
.collect::<Vec<String>>()
|
|
||||||
.join(", ");
|
|
||||||
println!(" {} {}", padded_group(&scoped(&name)), desc);
|
|
||||||
}
|
|
||||||
println!("\n");
|
|
||||||
};
|
|
||||||
|
|
||||||
print_lint_groups();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn display_help() {
|
fn display_help() {
|
||||||
println!(
|
println!(
|
||||||
"\
|
"\
|
||||||
@ -379,17 +269,6 @@ pub fn main() {
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
let should_describe_lints = || {
|
|
||||||
let args: Vec<_> = env::args().collect();
|
|
||||||
args.windows(2)
|
|
||||||
.any(|args| args[1] == "help" && matches!(args[0].as_str(), "-W" | "-A" | "-D" | "-F"))
|
|
||||||
};
|
|
||||||
|
|
||||||
if !wrapper_mode && should_describe_lints() {
|
|
||||||
describe_lints();
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// this conditional check for the --sysroot flag is there so users can call
|
// this conditional check for the --sysroot flag is there so users can call
|
||||||
// `clippy_driver` directly
|
// `clippy_driver` directly
|
||||||
// without having to pass --sysroot or anything
|
// without having to pass --sysroot or anything
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
/// Lint data parsed from the Clippy source code.
|
|
||||||
#[derive(Clone, PartialEq, Debug)]
|
|
||||||
pub struct Lint {
|
|
||||||
pub name: &'static str,
|
|
||||||
pub group: &'static str,
|
|
||||||
pub desc: &'static str,
|
|
||||||
pub deprecation: Option<&'static str>,
|
|
||||||
pub module: &'static str,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(PartialOrd, PartialEq, Ord, Eq)]
|
|
||||||
pub enum Level {
|
|
||||||
Allow,
|
|
||||||
Warn,
|
|
||||||
Deny,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub const LINT_LEVELS: [(&str, Level); 8] = [
|
|
||||||
("correctness", Level::Deny),
|
|
||||||
("style", Level::Warn),
|
|
||||||
("complexity", Level::Warn),
|
|
||||||
("perf", Level::Warn),
|
|
||||||
("restriction", Level::Allow),
|
|
||||||
("pedantic", Level::Allow),
|
|
||||||
("nursery", Level::Allow),
|
|
||||||
("cargo", Level::Allow),
|
|
||||||
];
|
|
2956
src/lintlist/mod.rs
2956
src/lintlist/mod.rs
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user