From ff7922de929ef200c0573ea473938590aa0a5eb9 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Sat, 26 Nov 2022 22:09:38 -0500 Subject: [PATCH 1/4] [WIP] check dead links in rustdoc --- Cargo.lock | 514 +++++++++++++++++++++++++++++++++----- src/librustdoc/Cargo.toml | 5 + 2 files changed, 460 insertions(+), 59 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d8612b3a2561b..b29c72bff77ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -51,7 +51,7 @@ dependencies = [ "compiler_builtins", "core", "rand 0.7.3", - "rand_xorshift", + "rand_xorshift 0.2.0", ] [[package]] @@ -158,6 +158,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "autocfg" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" +dependencies = [ + "autocfg 1.1.0", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -262,6 +271,12 @@ dependencies = [ "packed_simd_2", ] +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + [[package]] name = "bytes" version = "1.0.1" @@ -274,6 +289,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81a18687293a1546b67c246452202bbbf143d239cb43494cc163da14979082da" +[[package]] +name = "cached" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c20611fb80d002056306ce7ec754bb7485caa30ac2fbe25341ef470ce3c76aa" +dependencies = [ + "once_cell", +] + [[package]] name = "camino" version = "1.0.9" @@ -377,6 +401,27 @@ dependencies = [ "winapi", ] +[[package]] +name = "cargo-deadlinks" +version = "0.8.0" +source = "git+https://github.com/jyn514/cargo-deadlinks/?branch=http-feature#6eb4eb1a6721a12e131b839e0d67686a9339e1d6" +dependencies = [ + "cached", + "env_logger 0.8.4", + "log", + "lol_html", + "num_cpus", + "once_cell", + "percent-encoding", + "pico-args", + "rayon", + "regex", + "serde", + "serde_derive", + "url", + "walkdir", +] + [[package]] name = "cargo-miri" version = "0.1.0" @@ -721,6 +766,15 @@ dependencies = [ "rustc-semver", ] +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags", +] + [[package]] name = "color-eyre" version = "0.6.2" @@ -875,7 +929,7 @@ name = "core" version = "0.0.0" dependencies = [ "rand 0.7.3", - "rand_xorshift", + "rand_xorshift 0.2.0", ] [[package]] @@ -993,6 +1047,38 @@ dependencies = [ "winapi", ] +[[package]] +name = "cssparser" +version = "0.25.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe18ca4efb9ba3716c6da66cc3d7e673bf59fa576353011f48c4cfddbdd740e" +dependencies = [ + "autocfg 0.1.8", + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.7.24", + "proc-macro2", + "procedural-masquerade", + "quote", + "smallvec 0.6.14", + "syn", +] + +[[package]] +name = "cssparser-macros" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb1c84e87c717666564ec056105052331431803d606bd45529b28547b611eef" +dependencies = [ + "phf_codegen 0.7.24", + "proc-macro2", + "procedural-masquerade", + "quote", + "syn", +] + [[package]] name = "cstr" version = "0.2.8" @@ -1154,6 +1240,21 @@ dependencies = [ "rustc-std-workspace-core", ] +[[package]] +name = "dtoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" + +[[package]] +name = "dtoa-short" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" +dependencies = [ + "dtoa", +] + [[package]] name = "dunce" version = "1.0.2" @@ -1187,6 +1288,15 @@ dependencies = [ "log", ] +[[package]] +name = "encoding_rs" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +dependencies = [ + "cfg-if 1.0.0", +] + [[package]] name = "env_logger" version = "0.7.1" @@ -1200,6 +1310,19 @@ dependencies = [ "termcolor", ] +[[package]] +name = "env_logger" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" +dependencies = [ + "atty", + "humantime 2.0.1", + "log", + "regex", + "termcolor", +] + [[package]] name = "env_logger" version = "0.9.0" @@ -1306,7 +1429,7 @@ dependencies = [ "intl_pluralrules", "rustc-hash", "self_cell", - "smallvec", + "smallvec 1.8.1", "unic-langid", ] @@ -1381,6 +1504,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674" +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "futf" version = "0.1.5" @@ -1490,6 +1619,15 @@ dependencies = [ "termcolor", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generic-array" version = "0.14.4" @@ -1850,7 +1988,7 @@ version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ - "autocfg", + "autocfg 1.1.0", "hashbrown", "rustc-rayon", "serde", @@ -1916,6 +2054,12 @@ dependencies = [ "either", ] +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + [[package]] name = "itoa" version = "1.0.2" @@ -2132,7 +2276,7 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ - "autocfg", + "autocfg 1.1.0", "scopeguard", ] @@ -2145,6 +2289,24 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "lol_html" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "169299b3b58aa5cd8ad25fd8fe984e93748046d24c80f05aaadd9022f95423ec" +dependencies = [ + "bitflags", + "cfg-if 0.1.10", + "cssparser", + "encoding_rs", + "lazy_static", + "lazycell", + "memchr", + "safemem", + "selectors", + "thiserror", +] + [[package]] name = "lzma-sys" version = "0.1.16" @@ -2175,8 +2337,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" dependencies = [ "log", - "phf", - "phf_codegen", + "phf 0.10.1", + "phf_codegen 0.10.0", "string_cache", "string_cache_codegen", "tendril", @@ -2197,6 +2359,12 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + [[package]] name = "md-5" version = "0.10.0" @@ -2245,7 +2413,7 @@ dependencies = [ "parking_lot 0.11.2", "perf-event-open-sys", "rustc-hash", - "smallvec", + "smallvec 1.8.1", ] [[package]] @@ -2273,7 +2441,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ - "autocfg", + "autocfg 1.1.0", ] [[package]] @@ -2335,7 +2503,7 @@ dependencies = [ "regex", "rustc-workspace-hack", "rustc_version", - "smallvec", + "smallvec 1.8.1", "ui_test", ] @@ -2352,6 +2520,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + [[package]] name = "nom" version = "7.1.0" @@ -2375,7 +2549,7 @@ version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" dependencies = [ - "autocfg", + "autocfg 1.1.0", "num-traits", ] @@ -2385,7 +2559,7 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" dependencies = [ - "autocfg", + "autocfg 1.1.0", ] [[package]] @@ -2474,7 +2648,7 @@ version = "0.9.72" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" dependencies = [ - "autocfg", + "autocfg 1.1.0", "cc", "libc", "openssl-src", @@ -2578,7 +2752,7 @@ dependencies = [ "instant", "libc", "redox_syscall", - "smallvec", + "smallvec 1.8.1", "winapi", ] @@ -2591,7 +2765,7 @@ dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall", - "smallvec", + "smallvec 1.8.1", "windows-sys", ] @@ -2670,13 +2844,32 @@ dependencies = [ "indexmap", ] +[[package]] +name = "phf" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" +dependencies = [ + "phf_shared 0.7.24", +] + [[package]] name = "phf" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" dependencies = [ - "phf_shared", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_codegen" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" +dependencies = [ + "phf_generator 0.7.24", + "phf_shared 0.7.24", ] [[package]] @@ -2685,8 +2878,18 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_generator" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" +dependencies = [ + "phf_shared 0.7.24", + "rand 0.6.5", ] [[package]] @@ -2695,19 +2898,34 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" dependencies = [ - "phf_shared", + "phf_shared 0.10.0", "rand 0.8.5", ] +[[package]] +name = "phf_shared" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" +dependencies = [ + "siphasher 0.2.3", +] + [[package]] name = "phf_shared" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" dependencies = [ - "siphasher", + "siphasher 0.3.3", ] +[[package]] +name = "pico-args" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b9b4df73455c861d7cbf8be42f01d3b373ed7f02e378d55fa84eafc6f638b1" + [[package]] name = "pin-project-lite" version = "0.2.8" @@ -2806,6 +3024,12 @@ dependencies = [ "std", ] +[[package]] +name = "procedural-masquerade" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1383dff4092fe903ac180e391a8d4121cc48f08ccf850614b0290c6673b69d" + [[package]] name = "profiler_builtins" version = "0.0.0" @@ -2862,6 +3086,25 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.8", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg", + "rand_xorshift 0.1.1", + "winapi", +] + [[package]] name = "rand" version = "0.7.3" @@ -2872,7 +3115,7 @@ dependencies = [ "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", - "rand_hc", + "rand_hc 0.2.0", ] [[package]] @@ -2886,6 +3129,16 @@ dependencies = [ "rand_core 0.6.2", ] +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.8", + "rand_core 0.3.1", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -2906,6 +3159,21 @@ dependencies = [ "rand_core 0.6.2", ] +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + [[package]] name = "rand_core" version = "0.5.1" @@ -2924,6 +3192,15 @@ dependencies = [ "getrandom 0.2.0", ] +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -2933,6 +3210,59 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.8", + "rand_core 0.4.2", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "rand_xorshift" version = "0.2.0" @@ -2957,7 +3287,7 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" dependencies = [ - "autocfg", + "autocfg 1.1.0", "crossbeam-deque", "either", "rayon-core", @@ -2975,6 +3305,15 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "redox_syscall" version = "0.2.10" @@ -3142,7 +3481,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a79f0b0b2609e2eacf9758013f50e7176cb4b29fd6436a747b14a5362c8727a" dependencies = [ - "autocfg", + "autocfg 1.1.0", "crossbeam-deque", "either", "rustc-rayon-core", @@ -3221,14 +3560,14 @@ name = "rustc_apfloat" version = "0.0.0" dependencies = [ "bitflags", - "smallvec", + "smallvec 1.8.1", ] [[package]] name = "rustc_arena" version = "0.0.0" dependencies = [ - "smallvec", + "smallvec 1.8.1", ] [[package]] @@ -3242,7 +3581,7 @@ dependencies = [ "rustc_macros", "rustc_serialize", "rustc_span", - "smallvec", + "smallvec 1.8.1", "thin-vec", "tracing", ] @@ -3264,7 +3603,7 @@ dependencies = [ "rustc_session", "rustc_span", "rustc_target", - "smallvec", + "smallvec 1.8.1", "thin-vec", "tracing", ] @@ -3348,7 +3687,7 @@ dependencies = [ "rustc_target", "rustc_trait_selection", "rustc_traits", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -3371,7 +3710,7 @@ dependencies = [ "rustc_session", "rustc_span", "rustc_target", - "smallvec", + "smallvec 1.8.1", "thin-vec", "tracing", ] @@ -3404,7 +3743,7 @@ dependencies = [ "rustc_span", "rustc_symbol_mangling", "rustc_target", - "smallvec", + "smallvec 1.8.1", "tempfile", "tracing", ] @@ -3441,7 +3780,7 @@ dependencies = [ "rustc_symbol_mangling", "rustc_target", "serde_json", - "smallvec", + "smallvec 1.8.1", "snap", "tempfile", "thorin-dwp", @@ -3494,7 +3833,7 @@ dependencies = [ "rustc_index", "rustc_macros", "rustc_serialize", - "smallvec", + "smallvec 1.8.1", "stable_deref_trait", "stacker", "tempfile", @@ -3602,7 +3941,7 @@ dependencies = [ "rustc_serialize", "rustc_session", "rustc_span", - "smallvec", + "smallvec 1.8.1", "thin-vec", "tracing", ] @@ -3637,7 +3976,7 @@ dependencies = [ "rustc_serialize", "rustc_span", "rustc_target", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -3665,7 +4004,7 @@ dependencies = [ "rustc_target", "rustc_trait_selection", "rustc_type_ir", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -3702,7 +4041,7 @@ dependencies = [ "rustc_target", "rustc_trait_selection", "rustc_type_ir", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -3732,7 +4071,7 @@ dependencies = [ "arrayvec", "rustc_macros", "rustc_serialize", - "smallvec", + "smallvec 1.8.1", ] [[package]] @@ -3749,7 +4088,7 @@ dependencies = [ "rustc_session", "rustc_span", "rustc_target", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -3797,7 +4136,7 @@ dependencies = [ "rustc_trait_selection", "rustc_traits", "rustc_ty_utils", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -3904,7 +4243,7 @@ dependencies = [ "rustc_span", "rustc_target", "rustc_type_ir", - "smallvec", + "smallvec 1.8.1", "snap", "tempfile", "tracing", @@ -3938,7 +4277,7 @@ dependencies = [ "rustc_span", "rustc_target", "rustc_type_ir", - "smallvec", + "smallvec 1.8.1", "thin-vec", "tracing", ] @@ -3963,7 +4302,7 @@ dependencies = [ "rustc_span", "rustc_target", "rustc_trait_selection", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -3985,7 +4324,7 @@ dependencies = [ "rustc_session", "rustc_span", "rustc_target", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -4010,7 +4349,7 @@ dependencies = [ "rustc_span", "rustc_target", "rustc_trait_selection", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -4027,7 +4366,7 @@ dependencies = [ "rustc_session", "rustc_span", "rustc_target", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -4155,7 +4494,7 @@ dependencies = [ "rustc_span", "rustc_target", "rustc_type_ir", - "smallvec", + "smallvec 1.8.1", "thin-vec", "tracing", ] @@ -4181,7 +4520,7 @@ dependencies = [ "rustc_query_system", "rustc_session", "rustc_span", - "smallvec", + "smallvec 1.8.1", "thin-vec", "tracing", ] @@ -4213,7 +4552,7 @@ version = "0.0.0" dependencies = [ "indexmap", "rustc_macros", - "smallvec", + "smallvec 1.8.1", "thin-vec", ] @@ -4234,7 +4573,7 @@ dependencies = [ "rustc_serialize", "rustc_span", "rustc_target", - "smallvec", + "smallvec 1.8.1", "tracing", "winapi", ] @@ -4332,7 +4671,7 @@ dependencies = [ "rustc_span", "rustc_target", "rustc_transmute", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -4353,7 +4692,7 @@ dependencies = [ "rustc_span", "rustc_target", "rustc_trait_selection", - "smallvec", + "smallvec 1.8.1", "tracing", ] @@ -4400,7 +4739,7 @@ dependencies = [ "rustc_index", "rustc_macros", "rustc_serialize", - "smallvec", + "smallvec 1.8.1", ] [[package]] @@ -4418,6 +4757,7 @@ version = "0.0.0" dependencies = [ "arrayvec", "askama", + "cargo-deadlinks", "expect-test", "itertools", "minifier", @@ -4428,7 +4768,7 @@ dependencies = [ "rustdoc-json-types", "serde", "serde_json", - "smallvec", + "smallvec 1.8.1", "tempfile", "thin-vec", "tracing", @@ -4520,6 +4860,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + [[package]] name = "same-file" version = "1.0.6" @@ -4574,6 +4920,25 @@ dependencies = [ "libc", ] +[[package]] +name = "selectors" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b86b100bede4f651059740afc3b6cb83458d7401cb7c1ad96d8a11e91742c86" +dependencies = [ + "bitflags", + "cssparser", + "fxhash", + "log", + "matches", + "phf 0.7.24", + "phf_codegen 0.7.24", + "precomputed-hash", + "servo_arc", + "smallvec 0.6.14", + "thin-slice", +] + [[package]] name = "self_cell" version = "0.10.2" @@ -4635,11 +5000,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" dependencies = [ "indexmap", - "itoa", + "itoa 1.0.2", "ryu", "serde", ] +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + [[package]] name = "sha-1" version = "0.10.0" @@ -4689,6 +5064,12 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e24979f63a11545f5f2c60141afe249d4f19f84581ea2138065e400941d83d3" +[[package]] +name = "siphasher" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" + [[package]] name = "siphasher" version = "0.3.3" @@ -4711,6 +5092,15 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +[[package]] +name = "smallvec" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" +dependencies = [ + "maybe-uninit", +] + [[package]] name = "smallvec" version = "1.8.1" @@ -4828,7 +5218,7 @@ dependencies = [ "lazy_static", "new_debug_unreachable", "parking_lot 0.11.2", - "phf_shared", + "phf_shared 0.10.0", "precomputed-hash", "serde", ] @@ -4839,8 +5229,8 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.10.0", + "phf_shared 0.10.0", "proc-macro2", "quote", ] @@ -4982,6 +5372,12 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + [[package]] name = "thin-vec" version = "0.2.9" @@ -5086,7 +5482,7 @@ version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50dae83881bc9b0403dd5b44ea9deed3e939856cc8722d5be37f0d6e5c6d53dd" dependencies = [ - "autocfg", + "autocfg 1.1.0", "bytes", "memchr", "pin-project-lite", @@ -5196,7 +5592,7 @@ dependencies = [ "parking_lot 0.11.2", "regex", "sharded-slab", - "smallvec", + "smallvec 1.8.1", "thread_local", "tracing", "tracing-core", diff --git a/src/librustdoc/Cargo.toml b/src/librustdoc/Cargo.toml index 1e7b4fe15b68c..9491a7a635d08 100644 --- a/src/librustdoc/Cargo.toml +++ b/src/librustdoc/Cargo.toml @@ -31,6 +31,11 @@ features = ["fmt", "env-filter", "smallvec", "parking_lot", "ansi"] [target.'cfg(windows)'.dependencies] rayon = "1.5.1" +[dependencies.cargo-deadlinks] +git = "https://github.com/jyn514/cargo-deadlinks/" +branch = "http-feature" +default-features = false + [dev-dependencies] expect-test = "1.0" From 3a242c20de506cdeb535475dd57fde456ec3f6bc Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Sat, 26 Nov 2022 22:53:31 -0500 Subject: [PATCH 2/4] check rustdoc links --- src/librustdoc/Cargo.toml | 4 +--- src/librustdoc/html/render/context.rs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/Cargo.toml b/src/librustdoc/Cargo.toml index 9491a7a635d08..626b0ce22e3c5 100644 --- a/src/librustdoc/Cargo.toml +++ b/src/librustdoc/Cargo.toml @@ -22,15 +22,13 @@ tempfile = "3" thin-vec = "0.2.9" tracing = "0.1" tracing-tree = "0.2.0" +rayon = "1.5.1" [dependencies.tracing-subscriber] version = "0.3.3" default-features = false features = ["fmt", "env-filter", "smallvec", "parking_lot", "ansi"] -[target.'cfg(windows)'.dependencies] -rayon = "1.5.1" - [dependencies.cargo-deadlinks] git = "https://github.com/jyn514/cargo-deadlinks/" branch = "http-feature" diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 73690c86f4f72..842dba5559aba 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -168,6 +168,17 @@ impl<'tcx> Context<'tcx> { "../".repeat(self.current.len()) } + fn check_dead_links(&mut self) { + use cargo_deadlinks::*; + use rayon::iter::ParallelIterator; + + let path = self.dst.canonicalize().unwrap(); + let errors: Vec<_> = unavailable_urls(&path, &CheckContext::default()).collect(); + for err in errors { + self.sess().struct_warn(&err.to_string().replace('\t', " ")).emit(); + } + } + fn render_item(&mut self, it: &clean::Item, is_module: bool) -> String { let mut title = String::new(); if !is_module { @@ -708,6 +719,8 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { // No need for it anymore. drop(shared); + self.check_dead_links(); + // Flush pending errors. Rc::get_mut(&mut self.shared).unwrap().fs.close(); let nb_errors = From 206904ca5c127c322b28416b0bb59f6494c6b51a Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Sat, 26 Nov 2022 23:19:48 -0500 Subject: [PATCH 3/4] add a `broken_html_links` lint --- src/librustdoc/html/render/context.rs | 10 +++++++++- src/librustdoc/lint.rs | 11 +++++++++++ src/test/rustdoc/broken-link.rs | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/test/rustdoc/broken-link.rs diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 842dba5559aba..726949457e3d6 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -6,6 +6,7 @@ use std::rc::Rc; use std::sync::mpsc::{channel, Receiver}; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; +use rustc_hir::HirId; use rustc_hir::def_id::{DefId, LOCAL_CRATE}; use rustc_middle::ty::TyCtxt; use rustc_session::Session; @@ -33,6 +34,7 @@ use crate::html::format::{join_with_double_colon, Buffer}; use crate::html::markdown::{self, plain_text_summary, ErrorCodes, IdMap}; use crate::html::url_parts_builder::UrlPartsBuilder; use crate::html::{layout, sources, static_files}; +use crate::lint::BROKEN_HTML_LINKS; use crate::scrape_examples::AllCallLocations; use crate::try_err; @@ -174,8 +176,14 @@ impl<'tcx> Context<'tcx> { let path = self.dst.canonicalize().unwrap(); let errors: Vec<_> = unavailable_urls(&path, &CheckContext::default()).collect(); + let tcx = self.tcx(); for err in errors { - self.sess().struct_warn(&err.to_string().replace('\t', " ")).emit(); + // self.sess().struct_warn(&err.to_string().replace('\t', " ")).emit(); + let msg = err.to_string().replace('\t', " "); + // TODO: map files back to items + let hir_id: HirId = todo!(); + let span = tcx.def_span(tcx.hir().local_def_id(hir_id)); + self.tcx().struct_span_lint_hir(BROKEN_HTML_LINKS, hir_id, span, msg, |err| err); } } diff --git a/src/librustdoc/lint.rs b/src/librustdoc/lint.rs index 3aad97bc296fb..a310b4f10b083 100644 --- a/src/librustdoc/lint.rs +++ b/src/librustdoc/lint.rs @@ -174,6 +174,17 @@ declare_rustdoc_lint! { "codeblock could not be parsed as valid Rust or is empty" } +declare_rustdoc_lint! { + /// The `broken_html_links` lint detects generated links that are broken. + /// Unlike `broken_intra_doc_links`, this also works for manual links. + /// This is a `rustdoc` only lint, see the documentation in the [rustdoc book]. + /// + /// [rustdoc book]: ../../../rustdoc/lints.html#broken_html_links + BROKEN_HTML_LINKS, + Warn, + "generated link pointed to an invalid path" +} + pub(crate) static RUSTDOC_LINTS: Lazy> = Lazy::new(|| { vec![ BROKEN_INTRA_DOC_LINKS, diff --git a/src/test/rustdoc/broken-link.rs b/src/test/rustdoc/broken-link.rs new file mode 100644 index 0000000000000..5b3b2ee2ada8d --- /dev/null +++ b/src/test/rustdoc/broken-link.rs @@ -0,0 +1 @@ +//! [broken link](./not-here.html) From 54a50feda96e4eec4c58b0bf408e0f8c44e49856 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Sun, 27 Nov 2022 17:41:08 -0500 Subject: [PATCH 4/4] give a hard error temporarily --- src/librustdoc/html/render/context.rs | 18 +++++++++--------- src/librustdoc/lib.rs | 2 +- .../{rustdoc => rustdoc-ui}/broken-link.rs | 1 + src/test/rustdoc-ui/broken-link.stderr | 5 +++++ 4 files changed, 16 insertions(+), 10 deletions(-) rename src/test/{rustdoc => rustdoc-ui}/broken-link.rs (53%) create mode 100644 src/test/rustdoc-ui/broken-link.stderr diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 726949457e3d6..47e981267b61f 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -6,7 +6,7 @@ use std::rc::Rc; use std::sync::mpsc::{channel, Receiver}; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; -use rustc_hir::HirId; +// use rustc_hir::HirId; use rustc_hir::def_id::{DefId, LOCAL_CRATE}; use rustc_middle::ty::TyCtxt; use rustc_session::Session; @@ -34,7 +34,7 @@ use crate::html::format::{join_with_double_colon, Buffer}; use crate::html::markdown::{self, plain_text_summary, ErrorCodes, IdMap}; use crate::html::url_parts_builder::UrlPartsBuilder; use crate::html::{layout, sources, static_files}; -use crate::lint::BROKEN_HTML_LINKS; +// use crate::lint::BROKEN_HTML_LINKS; use crate::scrape_examples::AllCallLocations; use crate::try_err; @@ -176,14 +176,14 @@ impl<'tcx> Context<'tcx> { let path = self.dst.canonicalize().unwrap(); let errors: Vec<_> = unavailable_urls(&path, &CheckContext::default()).collect(); - let tcx = self.tcx(); + // let tcx = self.tcx(); for err in errors { - // self.sess().struct_warn(&err.to_string().replace('\t', " ")).emit(); - let msg = err.to_string().replace('\t', " "); - // TODO: map files back to items - let hir_id: HirId = todo!(); - let span = tcx.def_span(tcx.hir().local_def_id(hir_id)); - self.tcx().struct_span_lint_hir(BROKEN_HTML_LINKS, hir_id, span, msg, |err| err); + self.sess().struct_err(&err.to_string().replace('\t', " ")).emit(); + // let msg = err.to_string().replace('\t', " "); + // // TODO: map files back to items + // let hir_id: HirId = todo!(); + // let span = tcx.def_span(tcx.hir().local_def_id(hir_id)); + // self.tcx().struct_span_lint_hir(BROKEN_HTML_LINKS, hir_id, span, msg, |err| err); } } diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 1a84ec650474d..faca88d71c581 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -689,7 +689,7 @@ fn run_renderer<'tcx, T: formats::FormatRenderer<'tcx>>( tcx: TyCtxt<'tcx>, ) -> MainResult { match formats::run_format::(krate, renderopts, cache, tcx) { - Ok(_) => Ok(()), + Ok(_) => tcx.sess.has_errors().map_or(Ok(()), Err), Err(e) => { let mut msg = tcx.sess.struct_err(&format!("couldn't generate documentation: {}", e.error)); diff --git a/src/test/rustdoc/broken-link.rs b/src/test/rustdoc-ui/broken-link.rs similarity index 53% rename from src/test/rustdoc/broken-link.rs rename to src/test/rustdoc-ui/broken-link.rs index 5b3b2ee2ada8d..2aacdbf0d1dd4 100644 --- a/src/test/rustdoc/broken-link.rs +++ b/src/test/rustdoc-ui/broken-link.rs @@ -1 +1,2 @@ +// error-pattern: invalid urls //! [broken link](./not-here.html) diff --git a/src/test/rustdoc-ui/broken-link.stderr b/src/test/rustdoc-ui/broken-link.stderr new file mode 100644 index 0000000000000..448e1dcd218e9 --- /dev/null +++ b/src/test/rustdoc-ui/broken-link.stderr @@ -0,0 +1,5 @@ +error: Found invalid urls in $TEST_BUILD_DIR/broken-link/broken_link/index.html: + Linked file at path $TEST_BUILD_DIR/broken-link/broken_link/not-here.html does not exist! + +error: aborting due to previous error +