Auto merge of #58866 - kennytm:rollup, r=kennytm
Rollup of 14 pull requests Successful merges: - #58730 (Have all methods of Filter and FilterMap use internal iteration) - #58780 (ManuallyDrop != MaybeUninit) - #58782 (Replace `s` with `self` in docs for str methods taking self.) - #58785 (allow specifying attributes for tool lints) - #58802 (Ensure `record_layout_for_printing()` is inlined.) - #58821 (Fixed a syntax error in the pin docs) - #58830 (tidy: deny(rust_2018_idioms)) - #58832 (Revert switching to GCP on AppVeyor) - #58833 (tools/rustbook: deny(rust_2018_idioms)) - #58835 (tools/remote-test-{client,server}: deny(rust_2018_idioms)) - #58838 (Fix typo in Vec#resize_with documentation) - #58842 (Forbid duplicating Cargo as a dependency) - #58852 (Update toolchain to build NetBSD release) - #58865 (Fix C-variadic function printing)
This commit is contained in:
commit
f565cdd614
20 changed files with 125 additions and 101 deletions
|
@ -5,11 +5,6 @@ environment:
|
|||
# server goes down presumably. See #43333 for more info
|
||||
CARGO_HTTP_CHECK_REVOKE: false
|
||||
|
||||
# Execute the builds on GCE instead of Hyper-V. Those builders have a 3-4
|
||||
# minute startup overhead, but AppVeyor support recommended this as a
|
||||
# possible solution for #58160 (spurious 259 exit codes)
|
||||
appveyor_build_worker_cloud: gce
|
||||
|
||||
matrix:
|
||||
# 32/64 bit MSVC tests
|
||||
- MSYS_BITS: 64
|
||||
|
|
|
@ -3,23 +3,8 @@ FROM ubuntu:16.04
|
|||
COPY scripts/cross-apt-packages.sh /scripts/
|
||||
RUN sh /scripts/cross-apt-packages.sh
|
||||
|
||||
# Ubuntu 16.04 (this container) ships with make 4, but something in the
|
||||
# toolchains we build below chokes on that, so go back to make 3
|
||||
COPY scripts/make3.sh /scripts/
|
||||
RUN sh /scripts/make3.sh
|
||||
|
||||
COPY scripts/crosstool-ng.sh /scripts/
|
||||
RUN sh /scripts/crosstool-ng.sh
|
||||
|
||||
COPY scripts/rustbuild-setup.sh /scripts/
|
||||
RUN sh /scripts/rustbuild-setup.sh
|
||||
USER rustbuild
|
||||
WORKDIR /tmp
|
||||
|
||||
COPY dist-x86_64-netbsd/build-netbsd-toolchain.sh /tmp/
|
||||
RUN ./build-netbsd-toolchain.sh
|
||||
|
||||
USER root
|
||||
RUN /tmp/build-netbsd-toolchain.sh
|
||||
|
||||
COPY scripts/sccache.sh /scripts/
|
||||
RUN sh /scripts/sccache.sh
|
||||
|
@ -33,6 +18,5 @@ ENV \
|
|||
|
||||
ENV HOSTS=x86_64-unknown-netbsd
|
||||
|
||||
ENV RUST_CONFIGURE_ARGS --enable-extended --disable-docs \
|
||||
--set llvm.allow-old-toolchain
|
||||
ENV RUST_CONFIGURE_ARGS --enable-extended --disable-docs
|
||||
ENV SCRIPT python2.7 ../x.py dist --host $HOSTS --target $HOSTS
|
||||
|
|
|
@ -28,15 +28,15 @@ mkdir -p /x-tools/x86_64-unknown-netbsd/sysroot
|
|||
URL=https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror
|
||||
|
||||
# Originally from ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-$BSD/source/sets/*.tgz
|
||||
curl $URL/2017-03-17-netbsd-src.tgz | tar xzf -
|
||||
curl $URL/2017-03-17-netbsd-gnusrc.tgz | tar xzf -
|
||||
curl $URL/2017-03-17-netbsd-sharesrc.tgz | tar xzf -
|
||||
curl $URL/2017-03-17-netbsd-syssrc.tgz | tar xzf -
|
||||
curl $URL/2018-03-01-netbsd-src.tgz | tar xzf -
|
||||
curl $URL/2018-03-01-netbsd-gnusrc.tgz | tar xzf -
|
||||
curl $URL/2018-03-01-netbsd-sharesrc.tgz | tar xzf -
|
||||
curl $URL/2018-03-01-netbsd-syssrc.tgz | tar xzf -
|
||||
|
||||
# Originally from ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-$BSD/amd64/binary/sets/*.tgz
|
||||
curl $URL/2017-03-17-netbsd-base.tgz | \
|
||||
curl $URL/2018-03-01-netbsd-base.tgz | \
|
||||
tar xzf - -C /x-tools/x86_64-unknown-netbsd/sysroot ./usr/include ./usr/lib ./lib
|
||||
curl $URL/2017-03-17-netbsd-comp.tgz | \
|
||||
curl $URL/2018-03-01-netbsd-comp.tgz | \
|
||||
tar xzf - -C /x-tools/x86_64-unknown-netbsd/sysroot ./usr/include ./usr/lib
|
||||
|
||||
cd usr/src
|
||||
|
|
|
@ -1260,7 +1260,7 @@ impl<T> Vec<T> {
|
|||
/// This method uses a closure to create new values on every push. If
|
||||
/// you'd rather [`Clone`] a given value, use [`resize`]. If you want
|
||||
/// to use the [`Default`] trait to generate values, you can pass
|
||||
/// [`Default::default()`] as the second argument..
|
||||
/// [`Default::default()`] as the second argument.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
|
|
|
@ -185,13 +185,13 @@ bench_sums! {
|
|||
bench_sums! {
|
||||
bench_filter_sum,
|
||||
bench_filter_ref_sum,
|
||||
(0i64..1000000).filter(|x| x % 2 == 0)
|
||||
(0i64..1000000).filter(|x| x % 3 == 0)
|
||||
}
|
||||
|
||||
bench_sums! {
|
||||
bench_filter_chain_sum,
|
||||
bench_filter_chain_ref_sum,
|
||||
(0i64..1000000).chain(0..1000000).filter(|x| x % 2 == 0)
|
||||
(0i64..1000000).chain(0..1000000).filter(|x| x % 3 == 0)
|
||||
}
|
||||
|
||||
bench_sums! {
|
||||
|
@ -306,3 +306,31 @@ fn bench_skip_then_zip(b: &mut Bencher) {
|
|||
assert_eq!(s, 2009900);
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_filter_count(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
(0i64..1000000).map(black_box).filter(|x| x % 3 == 0).count()
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_filter_ref_count(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
(0i64..1000000).map(black_box).by_ref().filter(|x| x % 3 == 0).count()
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_filter_chain_count(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
(0i64..1000000).chain(0..1000000).map(black_box).filter(|x| x % 3 == 0).count()
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_filter_chain_ref_count(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
(0i64..1000000).chain(0..1000000).map(black_box).by_ref().filter(|x| x % 3 == 0).count()
|
||||
})
|
||||
}
|
||||
|
|
|
@ -681,12 +681,7 @@ impl<I: Iterator, P> Iterator for Filter<I, P> where P: FnMut(&I::Item) -> bool
|
|||
|
||||
#[inline]
|
||||
fn next(&mut self) -> Option<I::Item> {
|
||||
for x in &mut self.iter {
|
||||
if (self.predicate)(&x) {
|
||||
return Some(x);
|
||||
}
|
||||
}
|
||||
None
|
||||
self.try_for_each(Err).err()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
@ -707,12 +702,9 @@ impl<I: Iterator, P> Iterator for Filter<I, P> where P: FnMut(&I::Item) -> bool
|
|||
// Using the branchless version will also simplify the LLVM byte code, thus
|
||||
// leaving more budget for LLVM optimizations.
|
||||
#[inline]
|
||||
fn count(mut self) -> usize {
|
||||
let mut count = 0;
|
||||
for x in &mut self.iter {
|
||||
count += (self.predicate)(&x) as usize;
|
||||
}
|
||||
count
|
||||
fn count(self) -> usize {
|
||||
let mut predicate = self.predicate;
|
||||
self.iter.map(|x| predicate(&x) as usize).sum()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
@ -746,12 +738,7 @@ impl<I: DoubleEndedIterator, P> DoubleEndedIterator for Filter<I, P>
|
|||
{
|
||||
#[inline]
|
||||
fn next_back(&mut self) -> Option<I::Item> {
|
||||
for x in self.iter.by_ref().rev() {
|
||||
if (self.predicate)(&x) {
|
||||
return Some(x);
|
||||
}
|
||||
}
|
||||
None
|
||||
self.try_rfold((), |_, x| Err(x)).err()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
@ -820,12 +807,7 @@ impl<B, I: Iterator, F> Iterator for FilterMap<I, F>
|
|||
|
||||
#[inline]
|
||||
fn next(&mut self) -> Option<B> {
|
||||
for x in self.iter.by_ref() {
|
||||
if let Some(y) = (self.f)(x) {
|
||||
return Some(y);
|
||||
}
|
||||
}
|
||||
None
|
||||
self.try_for_each(Err).err()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
@ -863,12 +845,7 @@ impl<B, I: DoubleEndedIterator, F> DoubleEndedIterator for FilterMap<I, F>
|
|||
{
|
||||
#[inline]
|
||||
fn next_back(&mut self) -> Option<B> {
|
||||
for x in self.iter.by_ref().rev() {
|
||||
if let Some(y) = (self.f)(x) {
|
||||
return Some(y);
|
||||
}
|
||||
}
|
||||
None
|
||||
self.try_rfold((), |_, x| Err(x)).err()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
|
|
@ -900,10 +900,16 @@ pub fn discriminant<T>(v: &T) -> Discriminant<T> {
|
|||
}
|
||||
}
|
||||
|
||||
// FIXME: Reference `MaybeUninit` from these docs, once that is stable.
|
||||
/// A wrapper to inhibit compiler from automatically calling `T`’s destructor.
|
||||
///
|
||||
/// This wrapper is 0-cost.
|
||||
///
|
||||
/// `ManuallyDrop<T>` is subject to the same layout optimizations as `T`.
|
||||
/// As a consequence, it has *no effect* on the assumptions that the compiler makes
|
||||
/// about all values being initialized at their type. In particular, initializing
|
||||
/// a `ManuallyDrop<&mut T>` with [`mem::zeroed`] is undefined behavior.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// This wrapper helps with explicitly documenting the drop order dependencies between fields of
|
||||
|
@ -935,6 +941,8 @@ pub fn discriminant<T>(v: &T) -> Discriminant<T> {
|
|||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// [`mem::zeroed`]: fn.zeroed.html
|
||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
||||
#[lang = "manually_drop"]
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||
|
|
|
@ -215,7 +215,7 @@
|
|||
//! had a method `fn get_pin_mut(self: Pin<&mut Self>) -> Pin<&mut T>`.
|
||||
//! Then we could do the following:
|
||||
//! ```compile_fail
|
||||
//! fn exploit_ref_cell<T>(rc: Pin<&mut RefCell<T>) {
|
||||
//! fn exploit_ref_cell<T>(rc: Pin<&mut RefCell<T>>) {
|
||||
//! { let p = rc.as_mut().get_pin_mut(); } // Here we get pinned access to the `T`.
|
||||
//! let rc_shr: &RefCell<T> = rc.into_ref().get_ref();
|
||||
//! let b = rc_shr.borrow_mut();
|
||||
|
|
|
@ -3965,7 +3965,7 @@ impl str {
|
|||
me.make_ascii_lowercase()
|
||||
}
|
||||
|
||||
/// Return an iterator that escapes each char in `s` with [`char::escape_debug`].
|
||||
/// Return an iterator that escapes each char in `self` with [`char::escape_debug`].
|
||||
///
|
||||
/// Note: only extended grapheme codepoints that begin the string will be
|
||||
/// escaped.
|
||||
|
@ -4013,7 +4013,7 @@ impl str {
|
|||
}
|
||||
}
|
||||
|
||||
/// Return an iterator that escapes each char in `s` with [`char::escape_default`].
|
||||
/// Return an iterator that escapes each char in `self` with [`char::escape_default`].
|
||||
///
|
||||
/// [`char::escape_default`]: ../std/primitive.char.html#method.escape_default
|
||||
///
|
||||
|
@ -4051,7 +4051,7 @@ impl str {
|
|||
EscapeDefault { inner: self.chars().flat_map(CharEscapeDefault) }
|
||||
}
|
||||
|
||||
/// Return an iterator that escapes each char in `s` with [`char::escape_unicode`].
|
||||
/// Return an iterator that escapes each char in `self` with [`char::escape_unicode`].
|
||||
///
|
||||
/// [`char::escape_unicode`]: ../std/primitive.char.html#method.escape_unicode
|
||||
///
|
||||
|
|
|
@ -132,14 +132,22 @@ macro_rules! declare_lint {
|
|||
|
||||
#[macro_export]
|
||||
macro_rules! declare_tool_lint {
|
||||
($vis: vis $tool: ident ::$NAME: ident, $Level: ident, $desc: expr) => (
|
||||
declare_tool_lint!{$vis $tool::$NAME, $Level, $desc, false}
|
||||
(
|
||||
$(#[$attr:meta])* $vis:vis $tool:ident ::$NAME:ident, $Level: ident, $desc: expr
|
||||
) => (
|
||||
declare_tool_lint!{$(#[$attr])* $vis $tool::$NAME, $Level, $desc, false}
|
||||
);
|
||||
($vis: vis $tool: ident ::$NAME: ident, $Level: ident, $desc: expr,
|
||||
report_in_external_macro: $rep: expr) => (
|
||||
declare_tool_lint!{$vis $tool::$NAME, $Level, $desc, $rep}
|
||||
(
|
||||
$(#[$attr:meta])* $vis:vis $tool:ident ::$NAME:ident, $Level:ident, $desc:expr,
|
||||
report_in_external_macro: $rep:expr
|
||||
) => (
|
||||
declare_tool_lint!{$(#[$attr])* $vis $tool::$NAME, $Level, $desc, $rep}
|
||||
);
|
||||
($vis: vis $tool: ident ::$NAME: ident, $Level: ident, $desc: expr, $external: expr) => (
|
||||
(
|
||||
$(#[$attr:meta])* $vis:vis $tool:ident ::$NAME:ident, $Level:ident, $desc:expr,
|
||||
$external:expr
|
||||
) => (
|
||||
$(#[$attr])*
|
||||
$vis static $NAME: &$crate::lint::Lint = &$crate::lint::Lint {
|
||||
name: &concat!(stringify!($tool), "::", stringify!($NAME)),
|
||||
default_level: $crate::lint::$Level,
|
||||
|
|
|
@ -1176,14 +1176,20 @@ impl<'a, 'tcx> LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> {
|
|||
|
||||
/// This is invoked by the `layout_raw` query to record the final
|
||||
/// layout of each type.
|
||||
#[inline]
|
||||
#[inline(always)]
|
||||
fn record_layout_for_printing(&self, layout: TyLayout<'tcx>) {
|
||||
// If we are running with `-Zprint-type-sizes`, record layouts for
|
||||
// dumping later. Ignore layouts that are done with non-empty
|
||||
// environments or non-monomorphic layouts, as the user only wants
|
||||
// to see the stuff resulting from the final codegen session.
|
||||
// If we are running with `-Zprint-type-sizes`, maybe record layouts
|
||||
// for dumping later.
|
||||
if self.tcx.sess.opts.debugging_opts.print_type_sizes {
|
||||
self.record_layout_for_printing_outlined(layout)
|
||||
}
|
||||
}
|
||||
|
||||
fn record_layout_for_printing_outlined(&self, layout: TyLayout<'tcx>) {
|
||||
// Ignore layouts that are done with non-empty environments or
|
||||
// non-monomorphic layouts, as the user only wants to see the stuff
|
||||
// resulting from the final codegen session.
|
||||
if
|
||||
!self.tcx.sess.opts.debugging_opts.print_type_sizes ||
|
||||
layout.ty.has_param_types() ||
|
||||
layout.ty.has_self_ty() ||
|
||||
!self.param_env.caller_bounds.is_empty()
|
||||
|
@ -1191,10 +1197,6 @@ impl<'a, 'tcx> LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> {
|
|||
return;
|
||||
}
|
||||
|
||||
self.record_layout_for_printing_outlined(layout)
|
||||
}
|
||||
|
||||
fn record_layout_for_printing_outlined(&self, layout: TyLayout<'tcx>) {
|
||||
// (delay format until we actually need it)
|
||||
let record = |kind, packed, opt_discr_size, variants| {
|
||||
let type_desc = format!("{:?}", layout.ty);
|
||||
|
|
|
@ -2814,9 +2814,6 @@ impl<'a> State<'a> {
|
|||
-> io::Result<()> {
|
||||
self.popen()?;
|
||||
self.commasep(Inconsistent, &decl.inputs, |s, arg| s.print_arg(arg, false))?;
|
||||
if decl.c_variadic {
|
||||
self.s.word(", ...")?;
|
||||
}
|
||||
self.pclose()?;
|
||||
|
||||
self.print_fn_output(decl)
|
||||
|
|
15
src/test/pretty/fn-variadic.rs
Normal file
15
src/test/pretty/fn-variadic.rs
Normal file
|
@ -0,0 +1,15 @@
|
|||
// Check that `fn foo(x: i32, ...)` does not print as `fn foo(x: i32, ..., ...)`.
|
||||
// See issue #58853.
|
||||
|
||||
// pp-exact
|
||||
#![feature(c_variadic)]
|
||||
|
||||
extern "C" {
|
||||
pub fn foo(x: i32, ...);
|
||||
}
|
||||
|
||||
pub unsafe extern "C" fn bar(_: i32, mut ap: ...) -> usize {
|
||||
ap.arg::<usize>()
|
||||
}
|
||||
|
||||
fn main() { }
|
|
@ -13,7 +13,11 @@ use rustc::lint::{EarlyContext, LintContext, LintPass, EarlyLintPass,
|
|||
use rustc_plugin::Registry;
|
||||
use syntax::ast;
|
||||
declare_tool_lint!(pub clippy::TEST_LINT, Warn, "Warn about stuff");
|
||||
declare_tool_lint!(pub clippy::TEST_GROUP, Warn, "Warn about other stuff");
|
||||
declare_tool_lint!(
|
||||
/// Some docs
|
||||
pub clippy::TEST_GROUP,
|
||||
Warn, "Warn about other stuff"
|
||||
);
|
||||
|
||||
struct Pass;
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#![deny(rust_2018_idioms)]
|
||||
|
||||
/// This is a small client program intended to pair with `remote-test-server` in
|
||||
/// this repository. This client connects to the server over TCP and is used to
|
||||
/// push artifacts and run tests on the server instead of locally.
|
||||
|
@ -15,7 +17,7 @@ use std::process::{Command, Stdio};
|
|||
use std::thread;
|
||||
use std::time::Duration;
|
||||
|
||||
const REMOTE_ADDR_ENV: &'static str = "TEST_DEVICE_ADDR";
|
||||
const REMOTE_ADDR_ENV: &str = "TEST_DEVICE_ADDR";
|
||||
|
||||
macro_rules! t {
|
||||
($e:expr) => (match $e {
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#![deny(rust_2018_idioms)]
|
||||
|
||||
/// This is a small server which is intended to run inside of an emulator or
|
||||
/// on a remote test device. This server pairs with the `remote-test-client`
|
||||
/// program in this repository. The `remote-test-client` connects to this
|
||||
|
@ -120,7 +122,7 @@ struct RemoveOnDrop<'a> {
|
|||
inner: &'a Path,
|
||||
}
|
||||
|
||||
impl<'a> Drop for RemoveOnDrop<'a> {
|
||||
impl Drop for RemoveOnDrop<'_> {
|
||||
fn drop(&mut self) {
|
||||
t!(fs::remove_dir_all(self.inner));
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
//
|
||||
#![deny(rust_2018_idioms)]
|
||||
|
||||
use clap::{crate_version};
|
||||
|
||||
use std::env;
|
||||
|
@ -68,7 +69,7 @@ fn main() {
|
|||
}
|
||||
|
||||
// Build command implementation
|
||||
pub fn build_1(args: &ArgMatches) -> Result1<()> {
|
||||
pub fn build_1(args: &ArgMatches<'_>) -> Result1<()> {
|
||||
let book_dir = get_book_dir(args);
|
||||
let mut book = MDBook1::load(&book_dir)?;
|
||||
|
||||
|
@ -85,7 +86,7 @@ pub fn build_1(args: &ArgMatches) -> Result1<()> {
|
|||
}
|
||||
|
||||
// Build command implementation
|
||||
pub fn build_2(args: &ArgMatches) -> Result2<()> {
|
||||
pub fn build_2(args: &ArgMatches<'_>) -> Result2<()> {
|
||||
let book_dir = get_book_dir(args);
|
||||
let mut book = MDBook2::load(&book_dir)?;
|
||||
|
||||
|
@ -101,7 +102,7 @@ pub fn build_2(args: &ArgMatches) -> Result2<()> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn get_book_dir(args: &ArgMatches) -> PathBuf {
|
||||
fn get_book_dir(args: &ArgMatches<'_>) -> PathBuf {
|
||||
if let Some(dir) = args.value_of("dir") {
|
||||
// Check if path is relative from current dir, or absolute...
|
||||
let p = Path::new(dir);
|
||||
|
|
|
@ -49,13 +49,13 @@ const EXCEPTIONS: &[&str] = &[
|
|||
];
|
||||
|
||||
/// Which crates to check against the whitelist?
|
||||
const WHITELIST_CRATES: &[CrateVersion] = &[
|
||||
const WHITELIST_CRATES: &[CrateVersion<'_>] = &[
|
||||
CrateVersion("rustc", "0.0.0"),
|
||||
CrateVersion("rustc_codegen_llvm", "0.0.0"),
|
||||
];
|
||||
|
||||
/// Whitelist of crates rustc is allowed to depend on. Avoid adding to the list if possible.
|
||||
const WHITELIST: &[Crate] = &[
|
||||
const WHITELIST: &[Crate<'_>] = &[
|
||||
Crate("adler32"),
|
||||
Crate("aho-corasick"),
|
||||
Crate("arrayvec"),
|
||||
|
@ -183,7 +183,7 @@ struct Crate<'a>(&'a str); // (name)
|
|||
#[derive(Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Debug, Hash)]
|
||||
struct CrateVersion<'a>(&'a str, &'a str); // (name, version)
|
||||
|
||||
impl<'a> Crate<'a> {
|
||||
impl Crate<'_> {
|
||||
pub fn id_str(&self) -> String {
|
||||
format!("{} ", self.0)
|
||||
}
|
||||
|
@ -330,10 +330,10 @@ fn get_deps(path: &Path, cargo: &Path) -> Resolve {
|
|||
|
||||
/// Checks the dependencies of the given crate from the given cargo metadata to see if they are on
|
||||
/// the whitelist. Returns a list of illegal dependencies.
|
||||
fn check_crate_whitelist<'a, 'b>(
|
||||
whitelist: &'a HashSet<Crate>,
|
||||
fn check_crate_whitelist<'a>(
|
||||
whitelist: &'a HashSet<Crate<'_>>,
|
||||
resolve: &'a Resolve,
|
||||
visited: &'b mut BTreeSet<CrateVersion<'a>>,
|
||||
visited: &mut BTreeSet<CrateVersion<'a>>,
|
||||
krate: CrateVersion<'a>,
|
||||
must_be_on_whitelist: bool,
|
||||
) -> BTreeSet<Crate<'a>> {
|
||||
|
@ -378,7 +378,7 @@ fn check_crate_duplicate(resolve: &Resolve, bad: &mut bool) {
|
|||
// to accidentally sneak into our dependency graph, in order to ensure we keep our CI times
|
||||
// under control.
|
||||
|
||||
// "cargo", // FIXME(#53005)
|
||||
"cargo",
|
||||
"rustc-ap-syntax",
|
||||
];
|
||||
let mut name_to_id: HashMap<_, Vec<_>> = HashMap::new();
|
||||
|
|
|
@ -22,7 +22,7 @@ pub enum Status {
|
|||
}
|
||||
|
||||
impl fmt::Display for Status {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
let as_str = match *self {
|
||||
Status::Stable => "stable",
|
||||
Status::Unstable => "unstable",
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
//! This library contains the tidy lints and exposes it
|
||||
//! to be used by tools.
|
||||
|
||||
extern crate serde;
|
||||
#![deny(rust_2018_idioms)]
|
||||
|
||||
extern crate serde_json;
|
||||
#[macro_use]
|
||||
extern crate serde_derive;
|
||||
|
|
Loading…
Reference in a new issue