mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-15 17:28:07 +00:00
Auto merge of #5608 - flip1995:rustup, r=phansch
Rustup with git subtree The commits from the last rustup #5587, are again included in this rustup, since I rebased the rustup. Lesson learned: never rebase, only merge when working with git subtree. changelog: none
This commit is contained in:
commit
440a46dd20
3 changed files with 117 additions and 135 deletions
|
@ -40,15 +40,12 @@ use rustc_hir::{
|
|||
use rustc_infer::infer::TyCtxtInferExt;
|
||||
use rustc_lint::{LateContext, Level, Lint, LintContext};
|
||||
use rustc_middle::hir::map::Map;
|
||||
use rustc_middle::traits;
|
||||
use rustc_middle::ty::{self, layout::IntegerExt, subst::GenericArg, Binder, Ty, TyCtxt, TypeFoldable};
|
||||
use rustc_span::hygiene::{ExpnKind, MacroKind};
|
||||
use rustc_span::source_map::original_sp;
|
||||
use rustc_span::symbol::{self, kw, Symbol};
|
||||
use rustc_span::{BytePos, Pos, Span, DUMMY_SP};
|
||||
use rustc_target::abi::Integer;
|
||||
use rustc_trait_selection::traits::predicate_for_trait_def;
|
||||
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt;
|
||||
use rustc_trait_selection::traits::query::normalize::AtExt;
|
||||
use smallvec::SmallVec;
|
||||
|
||||
|
@ -326,19 +323,8 @@ pub fn implements_trait<'a, 'tcx>(
|
|||
trait_id: DefId,
|
||||
ty_params: &[GenericArg<'tcx>],
|
||||
) -> bool {
|
||||
let ty = cx.tcx.erase_regions(&ty);
|
||||
let obligation = predicate_for_trait_def(
|
||||
cx.tcx,
|
||||
cx.param_env,
|
||||
traits::ObligationCause::dummy(),
|
||||
trait_id,
|
||||
0,
|
||||
ty,
|
||||
ty_params,
|
||||
);
|
||||
cx.tcx
|
||||
.infer_ctxt()
|
||||
.enter(|infcx| infcx.predicate_must_hold_modulo_regions(&obligation))
|
||||
let ty_params = cx.tcx.mk_substs(ty_params.iter());
|
||||
cx.tcx.type_implements_trait((trait_id, ty, ty_params, cx.param_env))
|
||||
}
|
||||
|
||||
/// Gets the `hir::TraitRef` of the trait the given method is implemented for.
|
||||
|
|
|
@ -483,8 +483,8 @@ fn check_newlines(fmtstr: &StrLit) -> bool {
|
|||
};
|
||||
|
||||
match fmtstr.style {
|
||||
StrStyle::Cooked => unescape::unescape_str(contents, &mut cb),
|
||||
StrStyle::Raw(_) => unescape::unescape_raw_str(contents, &mut cb),
|
||||
StrStyle::Cooked => unescape::unescape_literal(contents, unescape::Mode::Str, &mut cb),
|
||||
StrStyle::Raw(_) => unescape::unescape_literal(contents, unescape::Mode::RawStr, &mut cb),
|
||||
}
|
||||
|
||||
should_lint
|
||||
|
|
230
src/driver.rs
230
src/driver.rs
|
@ -295,123 +295,119 @@ fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<Pat
|
|||
pub fn main() {
|
||||
rustc_driver::init_rustc_env_logger();
|
||||
lazy_static::initialize(&ICE_HOOK);
|
||||
exit(
|
||||
rustc_driver::catch_fatal_errors(move || {
|
||||
let mut orig_args: Vec<String> = env::args().collect();
|
||||
exit(rustc_driver::catch_with_exit_code(move || {
|
||||
let mut orig_args: Vec<String> = env::args().collect();
|
||||
|
||||
if orig_args.iter().any(|a| a == "--version" || a == "-V") {
|
||||
let version_info = rustc_tools_util::get_version_info!();
|
||||
println!("{}", version_info);
|
||||
exit(0);
|
||||
if orig_args.iter().any(|a| a == "--version" || a == "-V") {
|
||||
let version_info = rustc_tools_util::get_version_info!();
|
||||
println!("{}", version_info);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// Get the sysroot, looking from most specific to this invocation to the least:
|
||||
// - command line
|
||||
// - runtime environment
|
||||
// - SYSROOT
|
||||
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
|
||||
// - sysroot from rustc in the path
|
||||
// - compile-time environment
|
||||
// - SYSROOT
|
||||
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
|
||||
let sys_root_arg = arg_value(&orig_args, "--sysroot", |_| true);
|
||||
let have_sys_root_arg = sys_root_arg.is_some();
|
||||
let sys_root = sys_root_arg
|
||||
.map(PathBuf::from)
|
||||
.or_else(|| std::env::var("SYSROOT").ok().map(PathBuf::from))
|
||||
.or_else(|| {
|
||||
let home = std::env::var("RUSTUP_HOME")
|
||||
.or_else(|_| std::env::var("MULTIRUST_HOME"))
|
||||
.ok();
|
||||
let toolchain = std::env::var("RUSTUP_TOOLCHAIN")
|
||||
.or_else(|_| std::env::var("MULTIRUST_TOOLCHAIN"))
|
||||
.ok();
|
||||
toolchain_path(home, toolchain)
|
||||
})
|
||||
.or_else(|| {
|
||||
Command::new("rustc")
|
||||
.arg("--print")
|
||||
.arg("sysroot")
|
||||
.output()
|
||||
.ok()
|
||||
.and_then(|out| String::from_utf8(out.stdout).ok())
|
||||
.map(|s| PathBuf::from(s.trim()))
|
||||
})
|
||||
.or_else(|| option_env!("SYSROOT").map(PathBuf::from))
|
||||
.or_else(|| {
|
||||
let home = option_env!("RUSTUP_HOME")
|
||||
.or(option_env!("MULTIRUST_HOME"))
|
||||
.map(ToString::to_string);
|
||||
let toolchain = option_env!("RUSTUP_TOOLCHAIN")
|
||||
.or(option_env!("MULTIRUST_TOOLCHAIN"))
|
||||
.map(ToString::to_string);
|
||||
toolchain_path(home, toolchain)
|
||||
})
|
||||
.map(|pb| pb.to_string_lossy().to_string())
|
||||
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust");
|
||||
|
||||
// Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
|
||||
// We're invoking the compiler programmatically, so we ignore this/
|
||||
let wrapper_mode = orig_args.get(1).map(Path::new).and_then(Path::file_stem) == Some("rustc".as_ref());
|
||||
|
||||
if wrapper_mode {
|
||||
// we still want to be able to invoke it normally though
|
||||
orig_args.remove(1);
|
||||
}
|
||||
|
||||
if !wrapper_mode && (orig_args.iter().any(|a| a == "--help" || a == "-h") || orig_args.len() == 1) {
|
||||
display_help();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
let should_describe_lints = || {
|
||||
let args: Vec<_> = env::args().collect();
|
||||
args.windows(2).any(|args| {
|
||||
args[1] == "help"
|
||||
&& match args[0].as_str() {
|
||||
"-W" | "-A" | "-D" | "-F" => true,
|
||||
_ => false,
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
if !wrapper_mode && should_describe_lints() {
|
||||
describe_lints();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// this conditional check for the --sysroot flag is there so users can call
|
||||
// `clippy_driver` directly
|
||||
// without having to pass --sysroot or anything
|
||||
let mut args: Vec<String> = orig_args.clone();
|
||||
if !have_sys_root_arg {
|
||||
args.extend(vec!["--sysroot".into(), sys_root]);
|
||||
};
|
||||
|
||||
// this check ensures that dependencies are built but not linted and the final
|
||||
// crate is linted but not built
|
||||
let clippy_enabled = env::var("CLIPPY_TESTS").map_or(false, |val| val == "true")
|
||||
|| arg_value(&orig_args, "--cap-lints", |val| val == "allow").is_none();
|
||||
|
||||
if clippy_enabled {
|
||||
args.extend(vec!["--cfg".into(), r#"feature="cargo-clippy""#.into()]);
|
||||
if let Ok(extra_args) = env::var("CLIPPY_ARGS") {
|
||||
args.extend(extra_args.split("__CLIPPY_HACKERY__").filter_map(|s| {
|
||||
if s.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(s.to_string())
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
// Get the sysroot, looking from most specific to this invocation to the least:
|
||||
// - command line
|
||||
// - runtime environment
|
||||
// - SYSROOT
|
||||
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
|
||||
// - sysroot from rustc in the path
|
||||
// - compile-time environment
|
||||
// - SYSROOT
|
||||
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
|
||||
let sys_root_arg = arg_value(&orig_args, "--sysroot", |_| true);
|
||||
let have_sys_root_arg = sys_root_arg.is_some();
|
||||
let sys_root = sys_root_arg
|
||||
.map(PathBuf::from)
|
||||
.or_else(|| std::env::var("SYSROOT").ok().map(PathBuf::from))
|
||||
.or_else(|| {
|
||||
let home = std::env::var("RUSTUP_HOME")
|
||||
.or_else(|_| std::env::var("MULTIRUST_HOME"))
|
||||
.ok();
|
||||
let toolchain = std::env::var("RUSTUP_TOOLCHAIN")
|
||||
.or_else(|_| std::env::var("MULTIRUST_TOOLCHAIN"))
|
||||
.ok();
|
||||
toolchain_path(home, toolchain)
|
||||
})
|
||||
.or_else(|| {
|
||||
Command::new("rustc")
|
||||
.arg("--print")
|
||||
.arg("sysroot")
|
||||
.output()
|
||||
.ok()
|
||||
.and_then(|out| String::from_utf8(out.stdout).ok())
|
||||
.map(|s| PathBuf::from(s.trim()))
|
||||
})
|
||||
.or_else(|| option_env!("SYSROOT").map(PathBuf::from))
|
||||
.or_else(|| {
|
||||
let home = option_env!("RUSTUP_HOME")
|
||||
.or(option_env!("MULTIRUST_HOME"))
|
||||
.map(ToString::to_string);
|
||||
let toolchain = option_env!("RUSTUP_TOOLCHAIN")
|
||||
.or(option_env!("MULTIRUST_TOOLCHAIN"))
|
||||
.map(ToString::to_string);
|
||||
toolchain_path(home, toolchain)
|
||||
})
|
||||
.map(|pb| pb.to_string_lossy().to_string())
|
||||
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust");
|
||||
|
||||
// Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
|
||||
// We're invoking the compiler programmatically, so we ignore this/
|
||||
let wrapper_mode = orig_args.get(1).map(Path::new).and_then(Path::file_stem) == Some("rustc".as_ref());
|
||||
|
||||
if wrapper_mode {
|
||||
// we still want to be able to invoke it normally though
|
||||
orig_args.remove(1);
|
||||
}
|
||||
|
||||
if !wrapper_mode && (orig_args.iter().any(|a| a == "--help" || a == "-h") || orig_args.len() == 1) {
|
||||
display_help();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
let should_describe_lints = || {
|
||||
let args: Vec<_> = env::args().collect();
|
||||
args.windows(2).any(|args| {
|
||||
args[1] == "help"
|
||||
&& match args[0].as_str() {
|
||||
"-W" | "-A" | "-D" | "-F" => true,
|
||||
_ => false,
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
if !wrapper_mode && should_describe_lints() {
|
||||
describe_lints();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// this conditional check for the --sysroot flag is there so users can call
|
||||
// `clippy_driver` directly
|
||||
// without having to pass --sysroot or anything
|
||||
let mut args: Vec<String> = orig_args.clone();
|
||||
if !have_sys_root_arg {
|
||||
args.extend(vec!["--sysroot".into(), sys_root]);
|
||||
};
|
||||
|
||||
// this check ensures that dependencies are built but not linted and the final
|
||||
// crate is linted but not built
|
||||
let clippy_enabled = env::var("CLIPPY_TESTS").map_or(false, |val| val == "true")
|
||||
|| arg_value(&orig_args, "--cap-lints", |val| val == "allow").is_none();
|
||||
|
||||
if clippy_enabled {
|
||||
args.extend(vec!["--cfg".into(), r#"feature="cargo-clippy""#.into()]);
|
||||
if let Ok(extra_args) = env::var("CLIPPY_ARGS") {
|
||||
args.extend(extra_args.split("__CLIPPY_HACKERY__").filter_map(|s| {
|
||||
if s.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(s.to_string())
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
let mut clippy = ClippyCallbacks;
|
||||
let mut default = DefaultCallbacks;
|
||||
let callbacks: &mut (dyn rustc_driver::Callbacks + Send) =
|
||||
if clippy_enabled { &mut clippy } else { &mut default };
|
||||
rustc_driver::run_compiler(&args, callbacks, None, None)
|
||||
})
|
||||
.and_then(|result| result)
|
||||
.is_err() as i32,
|
||||
)
|
||||
}
|
||||
let mut clippy = ClippyCallbacks;
|
||||
let mut default = DefaultCallbacks;
|
||||
let callbacks: &mut (dyn rustc_driver::Callbacks + Send) =
|
||||
if clippy_enabled { &mut clippy } else { &mut default };
|
||||
rustc_driver::run_compiler(&args, callbacks, None, None)
|
||||
}))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue