Auto merge of #131259 - ismailarilik:handle-potential-query-instability-lint-for-librustdoc, r=notriddle
Handle `librustdoc` cases of `rustc::potential_query_instability` lint This PR removes `#![allow(rustc::potential_query_instability)]` line from [`src/librustdoc/lib.rs`](https://github.com/rust-lang/rust/blob/master/src/librustdoc/lib.rs#L23) and converts `FxHash{Map,Set}` types into `FxIndex{Map,Set}` to suppress lint errors. A somewhat tracking issue: https://github.com/rust-lang/rust/issues/84447 r? `@compiler-errors`
This commit is contained in:
commit
373971abe4
@ -6,7 +6,7 @@
|
|||||||
};
|
};
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_ast::util::comments::beautify_doc_string;
|
use rustc_ast::util::comments::beautify_doc_string;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxIndexMap;
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use rustc_span::def_id::DefId;
|
use rustc_span::def_id::DefId;
|
||||||
use rustc_span::symbol::{Symbol, kw, sym};
|
use rustc_span::symbol::{Symbol, kw, sym};
|
||||||
@ -235,8 +235,8 @@ fn span_for_value(attr: &ast::Attribute) -> Span {
|
|||||||
/// early and late doc link resolution regardless of their position.
|
/// early and late doc link resolution regardless of their position.
|
||||||
pub fn prepare_to_doc_link_resolution(
|
pub fn prepare_to_doc_link_resolution(
|
||||||
doc_fragments: &[DocFragment],
|
doc_fragments: &[DocFragment],
|
||||||
) -> FxHashMap<Option<DefId>, String> {
|
) -> FxIndexMap<Option<DefId>, String> {
|
||||||
let mut res = FxHashMap::default();
|
let mut res = FxIndexMap::default();
|
||||||
for fragment in doc_fragments {
|
for fragment in doc_fragments {
|
||||||
let out_str = res.entry(fragment.item_id).or_default();
|
let out_str = res.entry(fragment.item_id).or_default();
|
||||||
add_doc_fragment(out_str, fragment);
|
add_doc_fragment(out_str, fragment);
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_attr::{ConstStability, Deprecation, Stability, StableSince};
|
use rustc_attr::{ConstStability, Deprecation, Stability, StableSince};
|
||||||
use rustc_const_eval::const_eval::is_unstable_const_fn;
|
use rustc_const_eval::const_eval::is_unstable_const_fn;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet};
|
||||||
use rustc_hir::def::{CtorKind, DefKind, Res};
|
use rustc_hir::def::{CtorKind, DefKind, Res};
|
||||||
use rustc_hir::def_id::{CrateNum, DefId, LOCAL_CRATE, LocalDefId};
|
use rustc_hir::def_id::{CrateNum, DefId, LOCAL_CRATE, LocalDefId};
|
||||||
use rustc_hir::lang_items::LangItem;
|
use rustc_hir::lang_items::LangItem;
|
||||||
@ -114,7 +114,7 @@ fn from(id: DefId) -> Self {
|
|||||||
pub(crate) struct Crate {
|
pub(crate) struct Crate {
|
||||||
pub(crate) module: Item,
|
pub(crate) module: Item,
|
||||||
/// Only here so that they can be filtered through the rustdoc passes.
|
/// Only here so that they can be filtered through the rustdoc passes.
|
||||||
pub(crate) external_traits: Box<FxHashMap<DefId, Trait>>,
|
pub(crate) external_traits: Box<FxIndexMap<DefId, Trait>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Crate {
|
impl Crate {
|
||||||
@ -1223,7 +1223,7 @@ pub(crate) fn opt_doc_value(&self) -> Option<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_doc_aliases(&self) -> Box<[Symbol]> {
|
pub(crate) fn get_doc_aliases(&self) -> Box<[Symbol]> {
|
||||||
let mut aliases = FxHashSet::default();
|
let mut aliases = FxIndexSet::default();
|
||||||
|
|
||||||
for attr in self.other_attrs.lists(sym::doc).filter(|a| a.has_name(sym::alias)) {
|
for attr in self.other_attrs.lists(sym::doc).filter(|a| a.has_name(sym::alias)) {
|
||||||
if let Some(values) = attr.meta_item_list() {
|
if let Some(values) = attr.meta_item_list() {
|
||||||
@ -1759,7 +1759,7 @@ pub(crate) enum PrimitiveType {
|
|||||||
Never,
|
Never,
|
||||||
}
|
}
|
||||||
|
|
||||||
type SimplifiedTypes = FxHashMap<PrimitiveType, ArrayVec<SimplifiedType, 3>>;
|
type SimplifiedTypes = FxIndexMap<PrimitiveType, ArrayVec<SimplifiedType, 3>>;
|
||||||
impl PrimitiveType {
|
impl PrimitiveType {
|
||||||
pub(crate) fn from_hir(prim: hir::PrimTy) -> PrimitiveType {
|
pub(crate) fn from_hir(prim: hir::PrimTy) -> PrimitiveType {
|
||||||
use ast::{FloatTy, IntTy, UintTy};
|
use ast::{FloatTy, IntTy, UintTy};
|
||||||
@ -1927,10 +1927,10 @@ pub(crate) fn as_sym(&self) -> Symbol {
|
|||||||
/// In particular, if a crate depends on both `std` and another crate that also defines
|
/// In particular, if a crate depends on both `std` and another crate that also defines
|
||||||
/// `rustc_doc_primitive`, then it's entirely random whether `std` or the other crate is picked.
|
/// `rustc_doc_primitive`, then it's entirely random whether `std` or the other crate is picked.
|
||||||
/// (no_std crates are usually fine unless multiple dependencies define a primitive.)
|
/// (no_std crates are usually fine unless multiple dependencies define a primitive.)
|
||||||
pub(crate) fn primitive_locations(tcx: TyCtxt<'_>) -> &FxHashMap<PrimitiveType, DefId> {
|
pub(crate) fn primitive_locations(tcx: TyCtxt<'_>) -> &FxIndexMap<PrimitiveType, DefId> {
|
||||||
static PRIMITIVE_LOCATIONS: OnceCell<FxHashMap<PrimitiveType, DefId>> = OnceCell::new();
|
static PRIMITIVE_LOCATIONS: OnceCell<FxIndexMap<PrimitiveType, DefId>> = OnceCell::new();
|
||||||
PRIMITIVE_LOCATIONS.get_or_init(|| {
|
PRIMITIVE_LOCATIONS.get_or_init(|| {
|
||||||
let mut primitive_locations = FxHashMap::default();
|
let mut primitive_locations = FxIndexMap::default();
|
||||||
// NOTE: technically this misses crates that are only passed with `--extern` and not loaded when checking the crate.
|
// NOTE: technically this misses crates that are only passed with `--extern` and not loaded when checking the crate.
|
||||||
// This is a degenerate case that I don't plan to support.
|
// This is a degenerate case that I don't plan to support.
|
||||||
for &crate_num in tcx.crates(()) {
|
for &crate_num in tcx.crates(()) {
|
||||||
@ -2460,7 +2460,7 @@ pub(crate) struct Impl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Impl {
|
impl Impl {
|
||||||
pub(crate) fn provided_trait_methods(&self, tcx: TyCtxt<'_>) -> FxHashSet<Symbol> {
|
pub(crate) fn provided_trait_methods(&self, tcx: TyCtxt<'_>) -> FxIndexSet<Symbol> {
|
||||||
self.trait_
|
self.trait_
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map(|t| t.def_id())
|
.map(|t| t.def_id())
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::{fmt, io};
|
use std::{fmt, io};
|
||||||
|
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxIndexMap;
|
||||||
use rustc_errors::DiagCtxtHandle;
|
use rustc_errors::DiagCtxtHandle;
|
||||||
use rustc_session::config::{
|
use rustc_session::config::{
|
||||||
self, CodegenOptions, CrateType, ErrorOutputType, Externs, Input, JsonUnusedExterns,
|
self, CodegenOptions, CrateType, ErrorOutputType, Externs, Input, JsonUnusedExterns,
|
||||||
@ -249,7 +249,7 @@ pub(crate) struct RenderOptions {
|
|||||||
pub(crate) extern_html_root_takes_precedence: bool,
|
pub(crate) extern_html_root_takes_precedence: bool,
|
||||||
/// A map of the default settings (values are as for DOM storage API). Keys should lack the
|
/// A map of the default settings (values are as for DOM storage API). Keys should lack the
|
||||||
/// `rustdoc-` prefix.
|
/// `rustdoc-` prefix.
|
||||||
pub(crate) default_settings: FxHashMap<String, String>,
|
pub(crate) default_settings: FxIndexMap<String, String>,
|
||||||
/// If present, suffix added to CSS/JavaScript files when referencing them in generated pages.
|
/// If present, suffix added to CSS/JavaScript files when referencing them in generated pages.
|
||||||
pub(crate) resource_suffix: String,
|
pub(crate) resource_suffix: String,
|
||||||
/// Whether to create an index page in the root of the output directory. If this is true but
|
/// Whether to create an index page in the root of the output directory. If this is true but
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
use std::sync::{Arc, LazyLock};
|
use std::sync::{Arc, LazyLock};
|
||||||
use std::{io, mem};
|
use std::{io, mem};
|
||||||
|
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
|
||||||
use rustc_data_structures::sync::Lrc;
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_data_structures::unord::UnordSet;
|
use rustc_data_structures::unord::UnordSet;
|
||||||
use rustc_errors::codes::*;
|
use rustc_errors::codes::*;
|
||||||
@ -39,7 +39,7 @@ pub(crate) struct DocContext<'tcx> {
|
|||||||
/// Most of this logic is copied from rustc_lint::late.
|
/// Most of this logic is copied from rustc_lint::late.
|
||||||
pub(crate) param_env: ParamEnv<'tcx>,
|
pub(crate) param_env: ParamEnv<'tcx>,
|
||||||
/// Later on moved through `clean::Crate` into `cache`
|
/// Later on moved through `clean::Crate` into `cache`
|
||||||
pub(crate) external_traits: FxHashMap<DefId, clean::Trait>,
|
pub(crate) external_traits: FxIndexMap<DefId, clean::Trait>,
|
||||||
/// Used while populating `external_traits` to ensure we don't process the same trait twice at
|
/// Used while populating `external_traits` to ensure we don't process the same trait twice at
|
||||||
/// the same time.
|
/// the same time.
|
||||||
pub(crate) active_extern_traits: DefIdSet,
|
pub(crate) active_extern_traits: DefIdSet,
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
pub(crate) use make::DocTestBuilder;
|
pub(crate) use make::DocTestBuilder;
|
||||||
pub(crate) use markdown::test as test_markdown;
|
pub(crate) use markdown::test as test_markdown;
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxIndexMap, FxIndexSet};
|
||||||
use rustc_errors::{ColorConfig, DiagCtxtHandle, ErrorGuaranteed, FatalError};
|
use rustc_errors::{ColorConfig, DiagCtxtHandle, ErrorGuaranteed, FatalError};
|
||||||
use rustc_hir::CRATE_HIR_ID;
|
use rustc_hir::CRATE_HIR_ID;
|
||||||
use rustc_hir::def_id::LOCAL_CRATE;
|
use rustc_hir::def_id::LOCAL_CRATE;
|
||||||
@ -213,12 +213,13 @@ pub(crate) fn run(
|
|||||||
let unused_extern_reports: Vec<_> =
|
let unused_extern_reports: Vec<_> =
|
||||||
std::mem::take(&mut unused_extern_reports.lock().unwrap());
|
std::mem::take(&mut unused_extern_reports.lock().unwrap());
|
||||||
if unused_extern_reports.len() == compiling_test_count {
|
if unused_extern_reports.len() == compiling_test_count {
|
||||||
let extern_names = externs.iter().map(|(name, _)| name).collect::<FxHashSet<&String>>();
|
let extern_names =
|
||||||
|
externs.iter().map(|(name, _)| name).collect::<FxIndexSet<&String>>();
|
||||||
let mut unused_extern_names = unused_extern_reports
|
let mut unused_extern_names = unused_extern_reports
|
||||||
.iter()
|
.iter()
|
||||||
.map(|uexts| uexts.unused_extern_names.iter().collect::<FxHashSet<&String>>())
|
.map(|uexts| uexts.unused_extern_names.iter().collect::<FxIndexSet<&String>>())
|
||||||
.fold(extern_names, |uextsa, uextsb| {
|
.fold(extern_names, |uextsa, uextsb| {
|
||||||
uextsa.intersection(&uextsb).copied().collect::<FxHashSet<&String>>()
|
uextsa.intersection(&uextsb).copied().collect::<FxIndexSet<&String>>()
|
||||||
})
|
})
|
||||||
.iter()
|
.iter()
|
||||||
.map(|v| (*v).clone())
|
.map(|v| (*v).clone())
|
||||||
@ -253,7 +254,7 @@ pub(crate) fn run_tests(
|
|||||||
rustdoc_options: &Arc<RustdocOptions>,
|
rustdoc_options: &Arc<RustdocOptions>,
|
||||||
unused_extern_reports: &Arc<Mutex<Vec<UnusedExterns>>>,
|
unused_extern_reports: &Arc<Mutex<Vec<UnusedExterns>>>,
|
||||||
mut standalone_tests: Vec<test::TestDescAndFn>,
|
mut standalone_tests: Vec<test::TestDescAndFn>,
|
||||||
mergeable_tests: FxHashMap<Edition, Vec<(DocTestBuilder, ScrapedDocTest)>>,
|
mergeable_tests: FxIndexMap<Edition, Vec<(DocTestBuilder, ScrapedDocTest)>>,
|
||||||
) {
|
) {
|
||||||
let mut test_args = Vec::with_capacity(rustdoc_options.test_args.len() + 1);
|
let mut test_args = Vec::with_capacity(rustdoc_options.test_args.len() + 1);
|
||||||
test_args.insert(0, "rustdoctest".to_string());
|
test_args.insert(0, "rustdoctest".to_string());
|
||||||
@ -775,7 +776,7 @@ fn visit_header(&mut self, _name: &str, _level: u32) {}
|
|||||||
|
|
||||||
struct CreateRunnableDocTests {
|
struct CreateRunnableDocTests {
|
||||||
standalone_tests: Vec<test::TestDescAndFn>,
|
standalone_tests: Vec<test::TestDescAndFn>,
|
||||||
mergeable_tests: FxHashMap<Edition, Vec<(DocTestBuilder, ScrapedDocTest)>>,
|
mergeable_tests: FxIndexMap<Edition, Vec<(DocTestBuilder, ScrapedDocTest)>>,
|
||||||
|
|
||||||
rustdoc_options: Arc<RustdocOptions>,
|
rustdoc_options: Arc<RustdocOptions>,
|
||||||
opts: GlobalTestOptions,
|
opts: GlobalTestOptions,
|
||||||
@ -790,7 +791,7 @@ fn new(rustdoc_options: RustdocOptions, opts: GlobalTestOptions) -> CreateRunnab
|
|||||||
let can_merge_doctests = rustdoc_options.edition >= Edition::Edition2024;
|
let can_merge_doctests = rustdoc_options.edition >= Edition::Edition2024;
|
||||||
CreateRunnableDocTests {
|
CreateRunnableDocTests {
|
||||||
standalone_tests: Vec::new(),
|
standalone_tests: Vec::new(),
|
||||||
mergeable_tests: FxHashMap::default(),
|
mergeable_tests: FxIndexMap::default(),
|
||||||
rustdoc_options: Arc::new(rustdoc_options),
|
rustdoc_options: Arc::new(rustdoc_options),
|
||||||
opts,
|
opts,
|
||||||
visited_tests: FxHashMap::default(),
|
visited_tests: FxHashMap::default(),
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
|
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxIndexSet;
|
||||||
use rustc_span::edition::Edition;
|
use rustc_span::edition::Edition;
|
||||||
|
|
||||||
use crate::doctest::{
|
use crate::doctest::{
|
||||||
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/// Convenient type to merge compatible doctests into one.
|
/// Convenient type to merge compatible doctests into one.
|
||||||
pub(crate) struct DocTestRunner {
|
pub(crate) struct DocTestRunner {
|
||||||
crate_attrs: FxHashSet<String>,
|
crate_attrs: FxIndexSet<String>,
|
||||||
ids: String,
|
ids: String,
|
||||||
output: String,
|
output: String,
|
||||||
supports_color: bool,
|
supports_color: bool,
|
||||||
@ -21,7 +21,7 @@ pub(crate) struct DocTestRunner {
|
|||||||
impl DocTestRunner {
|
impl DocTestRunner {
|
||||||
pub(crate) fn new() -> Self {
|
pub(crate) fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
crate_attrs: FxHashSet::default(),
|
crate_attrs: FxIndexSet::default(),
|
||||||
ids: String::new(),
|
ids: String::new(),
|
||||||
output: String::new(),
|
output: String::new(),
|
||||||
supports_color: true,
|
supports_color: true,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap, FxIndexSet};
|
||||||
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, DefIdSet};
|
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, DefIdSet};
|
||||||
use rustc_middle::ty::{self, TyCtxt};
|
use rustc_middle::ty::{self, TyCtxt};
|
||||||
use rustc_span::Symbol;
|
use rustc_span::Symbol;
|
||||||
@ -42,7 +42,7 @@ pub(crate) struct Cache {
|
|||||||
/// URLs when a type is being linked to. External paths are not located in
|
/// URLs when a type is being linked to. External paths are not located in
|
||||||
/// this map because the `External` type itself has all the information
|
/// this map because the `External` type itself has all the information
|
||||||
/// necessary.
|
/// necessary.
|
||||||
pub(crate) paths: FxHashMap<DefId, (Vec<Symbol>, ItemType)>,
|
pub(crate) paths: FxIndexMap<DefId, (Vec<Symbol>, ItemType)>,
|
||||||
|
|
||||||
/// Similar to `paths`, but only holds external paths. This is only used for
|
/// Similar to `paths`, but only holds external paths. This is only used for
|
||||||
/// generating explicit hyperlinks to other crates.
|
/// generating explicit hyperlinks to other crates.
|
||||||
@ -64,18 +64,18 @@ pub(crate) struct Cache {
|
|||||||
/// Implementations of a crate should inherit the documentation of the
|
/// Implementations of a crate should inherit the documentation of the
|
||||||
/// parent trait if no extra documentation is specified, and default methods
|
/// parent trait if no extra documentation is specified, and default methods
|
||||||
/// should show up in documentation about trait implementations.
|
/// should show up in documentation about trait implementations.
|
||||||
pub(crate) traits: FxHashMap<DefId, clean::Trait>,
|
pub(crate) traits: FxIndexMap<DefId, clean::Trait>,
|
||||||
|
|
||||||
/// When rendering traits, it's often useful to be able to list all
|
/// When rendering traits, it's often useful to be able to list all
|
||||||
/// implementors of the trait, and this mapping is exactly, that: a mapping
|
/// implementors of the trait, and this mapping is exactly, that: a mapping
|
||||||
/// of trait ids to the list of known implementors of the trait
|
/// of trait ids to the list of known implementors of the trait
|
||||||
pub(crate) implementors: FxHashMap<DefId, Vec<Impl>>,
|
pub(crate) implementors: FxIndexMap<DefId, Vec<Impl>>,
|
||||||
|
|
||||||
/// Cache of where external crate documentation can be found.
|
/// Cache of where external crate documentation can be found.
|
||||||
pub(crate) extern_locations: FxHashMap<CrateNum, ExternalLocation>,
|
pub(crate) extern_locations: FxIndexMap<CrateNum, ExternalLocation>,
|
||||||
|
|
||||||
/// Cache of where documentation for primitives can be found.
|
/// Cache of where documentation for primitives can be found.
|
||||||
pub(crate) primitive_locations: FxHashMap<clean::PrimitiveType, DefId>,
|
pub(crate) primitive_locations: FxIndexMap<clean::PrimitiveType, DefId>,
|
||||||
|
|
||||||
// Note that external items for which `doc(hidden)` applies to are shown as
|
// Note that external items for which `doc(hidden)` applies to are shown as
|
||||||
// non-reachable while local items aren't. This is because we're reusing
|
// non-reachable while local items aren't. This is because we're reusing
|
||||||
@ -118,7 +118,7 @@ pub(crate) struct Cache {
|
|||||||
// crawl. In order to prevent crashes when looking for notable traits or
|
// crawl. In order to prevent crashes when looking for notable traits or
|
||||||
// when gathering trait documentation on a type, hold impls here while
|
// when gathering trait documentation on a type, hold impls here while
|
||||||
// folding and add them to the cache later on if we find the trait.
|
// folding and add them to the cache later on if we find the trait.
|
||||||
orphan_trait_impls: Vec<(DefId, FxHashSet<DefId>, Impl)>,
|
orphan_trait_impls: Vec<(DefId, FxIndexSet<DefId>, Impl)>,
|
||||||
|
|
||||||
/// All intra-doc links resolved so far.
|
/// All intra-doc links resolved so far.
|
||||||
///
|
///
|
||||||
@ -376,7 +376,7 @@ fn is_from_private_dep(tcx: TyCtxt<'_>, cache: &Cache, def_id: DefId) -> bool {
|
|||||||
// Figure out the id of this impl. This may map to a
|
// Figure out the id of this impl. This may map to a
|
||||||
// primitive rather than always to a struct/enum.
|
// primitive rather than always to a struct/enum.
|
||||||
// Note: matching twice to restrict the lifetime of the `i` borrow.
|
// Note: matching twice to restrict the lifetime of the `i` borrow.
|
||||||
let mut dids = FxHashSet::default();
|
let mut dids = FxIndexSet::default();
|
||||||
match i.for_ {
|
match i.for_ {
|
||||||
clean::Type::Path { ref path }
|
clean::Type::Path { ref path }
|
||||||
| clean::BorrowedRef { type_: box clean::Type::Path { ref path }, .. } => {
|
| clean::BorrowedRef { type_: box clean::Type::Path { ref path }, .. } => {
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
use std::collections::VecDeque;
|
use std::collections::VecDeque;
|
||||||
use std::fmt::{Display, Write};
|
use std::fmt::{Display, Write};
|
||||||
|
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxIndexMap;
|
||||||
use rustc_lexer::{Cursor, LiteralKind, TokenKind};
|
use rustc_lexer::{Cursor, LiteralKind, TokenKind};
|
||||||
use rustc_span::edition::Edition;
|
use rustc_span::edition::Edition;
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::Symbol;
|
||||||
@ -34,7 +34,7 @@ pub(crate) struct HrefContext<'a, 'tcx> {
|
|||||||
/// Decorations are represented as a map from CSS class to vector of character ranges.
|
/// Decorations are represented as a map from CSS class to vector of character ranges.
|
||||||
/// Each range will be wrapped in a span with that class.
|
/// Each range will be wrapped in a span with that class.
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub(crate) struct DecorationInfo(pub(crate) FxHashMap<&'static str, Vec<(u32, u32)>>);
|
pub(crate) struct DecorationInfo(pub(crate) FxIndexMap<&'static str, Vec<(u32, u32)>>);
|
||||||
|
|
||||||
#[derive(Eq, PartialEq, Clone, Copy)]
|
#[derive(Eq, PartialEq, Clone, Copy)]
|
||||||
pub(crate) enum Tooltip {
|
pub(crate) enum Tooltip {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use expect_test::expect_file;
|
use expect_test::expect_file;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxIndexMap;
|
||||||
use rustc_span::create_default_session_globals_then;
|
use rustc_span::create_default_session_globals_then;
|
||||||
|
|
||||||
use super::{DecorationInfo, write_code};
|
use super::{DecorationInfo, write_code};
|
||||||
@ -73,7 +73,7 @@ fn test_decorations() {
|
|||||||
let y = 2;
|
let y = 2;
|
||||||
let z = 3;
|
let z = 3;
|
||||||
let a = 4;";
|
let a = 4;";
|
||||||
let mut decorations = FxHashMap::default();
|
let mut decorations = FxIndexMap::default();
|
||||||
decorations.insert("example", vec![(0, 10), (11, 21)]);
|
decorations.insert("example", vec![(0, 10), (11, 21)]);
|
||||||
decorations.insert("example2", vec![(22, 32)]);
|
decorations.insert("example2", vec![(22, 32)]);
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use rinja::Template;
|
use rinja::Template;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxIndexMap;
|
||||||
|
|
||||||
use super::static_files::{STATIC_FILES, StaticFiles};
|
use super::static_files::{STATIC_FILES, StaticFiles};
|
||||||
use crate::externalfiles::ExternalHtml;
|
use crate::externalfiles::ExternalHtml;
|
||||||
@ -13,7 +13,7 @@ pub(crate) struct Layout {
|
|||||||
pub(crate) logo: String,
|
pub(crate) logo: String,
|
||||||
pub(crate) favicon: String,
|
pub(crate) favicon: String,
|
||||||
pub(crate) external_html: ExternalHtml,
|
pub(crate) external_html: ExternalHtml,
|
||||||
pub(crate) default_settings: FxHashMap<String, String>,
|
pub(crate) default_settings: FxIndexMap<String, String>,
|
||||||
pub(crate) krate: String,
|
pub(crate) krate: String,
|
||||||
pub(crate) krate_version: String,
|
pub(crate) krate_version: String,
|
||||||
/// The given user css file which allow to customize the generated
|
/// The given user css file which allow to customize the generated
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
BrokenLink, BrokenLinkCallback, CodeBlockKind, CowStr, Event, LinkType, OffsetIter, Options,
|
BrokenLink, BrokenLinkCallback, CodeBlockKind, CowStr, Event, LinkType, OffsetIter, Options,
|
||||||
Parser, Tag, TagEnd, html,
|
Parser, Tag, TagEnd, html,
|
||||||
};
|
};
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
|
||||||
use rustc_errors::{Diag, DiagMessage};
|
use rustc_errors::{Diag, DiagMessage};
|
||||||
use rustc_hir::def_id::LocalDefId;
|
use rustc_hir::def_id::LocalDefId;
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
@ -651,12 +651,12 @@ fn next(&mut self) -> Option<Self::Item> {
|
|||||||
/// references.
|
/// references.
|
||||||
struct Footnotes<'a, I> {
|
struct Footnotes<'a, I> {
|
||||||
inner: I,
|
inner: I,
|
||||||
footnotes: FxHashMap<String, (Vec<Event<'a>>, u16)>,
|
footnotes: FxIndexMap<String, (Vec<Event<'a>>, u16)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, I> Footnotes<'a, I> {
|
impl<'a, I> Footnotes<'a, I> {
|
||||||
fn new(iter: I) -> Self {
|
fn new(iter: I) -> Self {
|
||||||
Footnotes { inner: iter, footnotes: FxHashMap::default() }
|
Footnotes { inner: iter, footnotes: FxIndexMap::default() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_entry(&mut self, key: &str) -> &mut (Vec<Event<'a>>, u16) {
|
fn get_entry(&mut self, key: &str) -> &mut (Vec<Event<'a>>, u16) {
|
||||||
@ -694,7 +694,7 @@ fn next(&mut self) -> Option<Self::Item> {
|
|||||||
Some(e) => return Some(e),
|
Some(e) => return Some(e),
|
||||||
None => {
|
None => {
|
||||||
if !self.footnotes.is_empty() {
|
if !self.footnotes.is_empty() {
|
||||||
let mut v: Vec<_> = self.footnotes.drain().map(|(_, x)| x).collect();
|
let mut v: Vec<_> = self.footnotes.drain(..).map(|(_, x)| x).collect();
|
||||||
v.sort_by(|a, b| a.1.cmp(&b.1));
|
v.sort_by(|a, b| a.1.cmp(&b.1));
|
||||||
let mut ret = String::from("<div class=\"footnotes\"><hr><ol>");
|
let mut ret = String::from("<div class=\"footnotes\"><hr><ol>");
|
||||||
for (mut content, id) in v {
|
for (mut content, id) in v {
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
use std::sync::mpsc::{Receiver, channel};
|
use std::sync::mpsc::{Receiver, channel};
|
||||||
|
|
||||||
use rinja::Template;
|
use rinja::Template;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap, FxIndexSet};
|
||||||
use rustc_hir::def_id::{DefIdMap, LOCAL_CRATE};
|
use rustc_hir::def_id::{DefIdMap, LOCAL_CRATE};
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
@ -69,16 +69,16 @@ pub(crate) struct Context<'tcx> {
|
|||||||
/// `true`.
|
/// `true`.
|
||||||
pub(crate) include_sources: bool,
|
pub(crate) include_sources: bool,
|
||||||
/// Collection of all types with notable traits referenced in the current module.
|
/// Collection of all types with notable traits referenced in the current module.
|
||||||
pub(crate) types_with_notable_traits: FxHashSet<clean::Type>,
|
pub(crate) types_with_notable_traits: FxIndexSet<clean::Type>,
|
||||||
/// Field used during rendering, to know if we're inside an inlined item.
|
/// Field used during rendering, to know if we're inside an inlined item.
|
||||||
pub(crate) is_inside_inlined_module: bool,
|
pub(crate) is_inside_inlined_module: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
// `Context` is cloned a lot, so we don't want the size to grow unexpectedly.
|
// `Context` is cloned a lot, so we don't want the size to grow unexpectedly.
|
||||||
#[cfg(all(not(windows), target_pointer_width = "64"))]
|
#[cfg(all(not(windows), target_pointer_width = "64"))]
|
||||||
rustc_data_structures::static_assert_size!(Context<'_>, 160);
|
rustc_data_structures::static_assert_size!(Context<'_>, 184);
|
||||||
#[cfg(all(windows, target_pointer_width = "64"))]
|
#[cfg(all(windows, target_pointer_width = "64"))]
|
||||||
rustc_data_structures::static_assert_size!(Context<'_>, 168);
|
rustc_data_structures::static_assert_size!(Context<'_>, 192);
|
||||||
|
|
||||||
/// Shared mutable state used in [`Context`] and elsewhere.
|
/// Shared mutable state used in [`Context`] and elsewhere.
|
||||||
pub(crate) struct SharedContext<'tcx> {
|
pub(crate) struct SharedContext<'tcx> {
|
||||||
@ -90,7 +90,7 @@ pub(crate) struct SharedContext<'tcx> {
|
|||||||
/// creation of the context (contains info like the favicon and added html).
|
/// creation of the context (contains info like the favicon and added html).
|
||||||
pub(crate) layout: layout::Layout,
|
pub(crate) layout: layout::Layout,
|
||||||
/// The local file sources we've emitted and their respective url-paths.
|
/// The local file sources we've emitted and their respective url-paths.
|
||||||
pub(crate) local_sources: FxHashMap<PathBuf, String>,
|
pub(crate) local_sources: FxIndexMap<PathBuf, String>,
|
||||||
/// Show the memory layout of types in the docs.
|
/// Show the memory layout of types in the docs.
|
||||||
pub(super) show_type_layout: bool,
|
pub(super) show_type_layout: bool,
|
||||||
/// The base-URL of the issue tracker for when an item has been tagged with
|
/// The base-URL of the issue tracker for when an item has been tagged with
|
||||||
@ -567,7 +567,7 @@ fn init(
|
|||||||
deref_id_map: Default::default(),
|
deref_id_map: Default::default(),
|
||||||
shared: Rc::new(scx),
|
shared: Rc::new(scx),
|
||||||
include_sources,
|
include_sources,
|
||||||
types_with_notable_traits: FxHashSet::default(),
|
types_with_notable_traits: FxIndexSet::default(),
|
||||||
is_inside_inlined_module: false,
|
is_inside_inlined_module: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -591,7 +591,7 @@ fn make_child_renderer(&self) -> Self {
|
|||||||
id_map: IdMap::new(),
|
id_map: IdMap::new(),
|
||||||
shared: Rc::clone(&self.shared),
|
shared: Rc::clone(&self.shared),
|
||||||
include_sources: self.include_sources,
|
include_sources: self.include_sources,
|
||||||
types_with_notable_traits: FxHashSet::default(),
|
types_with_notable_traits: FxIndexSet::default(),
|
||||||
is_inside_inlined_module: self.is_inside_inlined_module,
|
is_inside_inlined_module: self.is_inside_inlined_module,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
use rinja::Template;
|
use rinja::Template;
|
||||||
use rustc_attr::{ConstStability, DeprecatedSince, Deprecation, StabilityLevel, StableSince};
|
use rustc_attr::{ConstStability, DeprecatedSince, Deprecation, StabilityLevel, StableSince};
|
||||||
use rustc_data_structures::captures::Captures;
|
use rustc_data_structures::captures::Captures;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet};
|
||||||
use rustc_hir::Mutability;
|
use rustc_hir::Mutability;
|
||||||
use rustc_hir::def_id::{DefId, DefIdSet};
|
use rustc_hir::def_id::{DefId, DefIdSet};
|
||||||
use rustc_middle::ty::print::PrintTraitRefExt;
|
use rustc_middle::ty::print::PrintTraitRefExt;
|
||||||
@ -328,24 +328,24 @@ fn cmp(&self, other: &ItemEntry) -> ::std::cmp::Ordering {
|
|||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct AllTypes {
|
struct AllTypes {
|
||||||
structs: FxHashSet<ItemEntry>,
|
structs: FxIndexSet<ItemEntry>,
|
||||||
enums: FxHashSet<ItemEntry>,
|
enums: FxIndexSet<ItemEntry>,
|
||||||
unions: FxHashSet<ItemEntry>,
|
unions: FxIndexSet<ItemEntry>,
|
||||||
primitives: FxHashSet<ItemEntry>,
|
primitives: FxIndexSet<ItemEntry>,
|
||||||
traits: FxHashSet<ItemEntry>,
|
traits: FxIndexSet<ItemEntry>,
|
||||||
macros: FxHashSet<ItemEntry>,
|
macros: FxIndexSet<ItemEntry>,
|
||||||
functions: FxHashSet<ItemEntry>,
|
functions: FxIndexSet<ItemEntry>,
|
||||||
type_aliases: FxHashSet<ItemEntry>,
|
type_aliases: FxIndexSet<ItemEntry>,
|
||||||
statics: FxHashSet<ItemEntry>,
|
statics: FxIndexSet<ItemEntry>,
|
||||||
constants: FxHashSet<ItemEntry>,
|
constants: FxIndexSet<ItemEntry>,
|
||||||
attribute_macros: FxHashSet<ItemEntry>,
|
attribute_macros: FxIndexSet<ItemEntry>,
|
||||||
derive_macros: FxHashSet<ItemEntry>,
|
derive_macros: FxIndexSet<ItemEntry>,
|
||||||
trait_aliases: FxHashSet<ItemEntry>,
|
trait_aliases: FxIndexSet<ItemEntry>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AllTypes {
|
impl AllTypes {
|
||||||
fn new() -> AllTypes {
|
fn new() -> AllTypes {
|
||||||
let new_set = |cap| FxHashSet::with_capacity_and_hasher(cap, Default::default());
|
let new_set = |cap| FxIndexSet::with_capacity_and_hasher(cap, Default::default());
|
||||||
AllTypes {
|
AllTypes {
|
||||||
structs: new_set(100),
|
structs: new_set(100),
|
||||||
enums: new_set(100),
|
enums: new_set(100),
|
||||||
@ -437,7 +437,7 @@ fn item_sections(&self) -> FxHashSet<ItemSection> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn print(self, f: &mut Buffer) {
|
fn print(self, f: &mut Buffer) {
|
||||||
fn print_entries(f: &mut Buffer, e: &FxHashSet<ItemEntry>, kind: ItemSection) {
|
fn print_entries(f: &mut Buffer, e: &FxIndexSet<ItemEntry>, kind: ItemSection) {
|
||||||
if !e.is_empty() {
|
if !e.is_empty() {
|
||||||
let mut e: Vec<&ItemEntry> = e.iter().collect();
|
let mut e: Vec<&ItemEntry> = e.iter().collect();
|
||||||
e.sort();
|
e.sort();
|
||||||
@ -1151,7 +1151,7 @@ fn render_attributes_in_code(w: &mut impl fmt::Write, it: &clean::Item, cx: &Con
|
|||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
enum AssocItemLink<'a> {
|
enum AssocItemLink<'a> {
|
||||||
Anchor(Option<&'a str>),
|
Anchor(Option<&'a str>),
|
||||||
GotoSource(ItemId, &'a FxHashSet<Symbol>),
|
GotoSource(ItemId, &'a FxIndexSet<Symbol>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> AssocItemLink<'a> {
|
impl<'a> AssocItemLink<'a> {
|
||||||
@ -1494,7 +1494,7 @@ fn notable_traits_decl(ty: &clean::Type, cx: &Context<'_>) -> (String, String) {
|
|||||||
for it in &impl_.items {
|
for it in &impl_.items {
|
||||||
if let clean::AssocTypeItem(ref tydef, ref _bounds) = it.kind {
|
if let clean::AssocTypeItem(ref tydef, ref _bounds) = it.kind {
|
||||||
out.push_str("<div class=\"where\"> ");
|
out.push_str("<div class=\"where\"> ");
|
||||||
let empty_set = FxHashSet::default();
|
let empty_set = FxIndexSet::default();
|
||||||
let src_link = AssocItemLink::GotoSource(trait_did.into(), &empty_set);
|
let src_link = AssocItemLink::GotoSource(trait_did.into(), &empty_set);
|
||||||
assoc_type(
|
assoc_type(
|
||||||
&mut out,
|
&mut out,
|
||||||
@ -2526,7 +2526,7 @@ fn render_call_locations<W: fmt::Write>(mut w: W, cx: &mut Context<'_>, item: &c
|
|||||||
})()
|
})()
|
||||||
.unwrap_or(DUMMY_SP);
|
.unwrap_or(DUMMY_SP);
|
||||||
|
|
||||||
let mut decoration_info = FxHashMap::default();
|
let mut decoration_info = FxIndexMap::default();
|
||||||
decoration_info.insert("highlight focus", vec![byte_ranges.remove(0)]);
|
decoration_info.insert("highlight focus", vec![byte_ranges.remove(0)]);
|
||||||
decoration_info.insert("highlight", byte_ranges);
|
decoration_info.insert("highlight", byte_ranges);
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use rinja::Template;
|
use rinja::Template;
|
||||||
use rustc_data_structures::captures::Captures;
|
use rustc_data_structures::captures::Captures;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxIndexSet};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::CtorKind;
|
use rustc_hir::def::CtorKind;
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
@ -932,7 +932,7 @@ fn trait_item(w: &mut Buffer, cx: &mut Context<'_>, m: &clean::Item, t: &clean::
|
|||||||
|
|
||||||
let cloned_shared = Rc::clone(&cx.shared);
|
let cloned_shared = Rc::clone(&cx.shared);
|
||||||
let cache = &cloned_shared.cache;
|
let cache = &cloned_shared.cache;
|
||||||
let mut extern_crates = FxHashSet::default();
|
let mut extern_crates = FxIndexSet::default();
|
||||||
|
|
||||||
if !t.is_object_safe(cx.tcx()) {
|
if !t.is_object_safe(cx.tcx()) {
|
||||||
write_section_heading(
|
write_section_heading(
|
||||||
|
@ -774,7 +774,7 @@ pub(crate) fn get_function_type_for_search<'tcx>(
|
|||||||
fn get_index_type(
|
fn get_index_type(
|
||||||
clean_type: &clean::Type,
|
clean_type: &clean::Type,
|
||||||
generics: Vec<RenderType>,
|
generics: Vec<RenderType>,
|
||||||
rgen: &mut FxHashMap<SimplifiedParam, (isize, Vec<RenderType>)>,
|
rgen: &mut FxIndexMap<SimplifiedParam, (isize, Vec<RenderType>)>,
|
||||||
) -> RenderType {
|
) -> RenderType {
|
||||||
RenderType {
|
RenderType {
|
||||||
id: get_index_type_id(clean_type, rgen),
|
id: get_index_type_id(clean_type, rgen),
|
||||||
@ -785,7 +785,7 @@ fn get_index_type(
|
|||||||
|
|
||||||
fn get_index_type_id(
|
fn get_index_type_id(
|
||||||
clean_type: &clean::Type,
|
clean_type: &clean::Type,
|
||||||
rgen: &mut FxHashMap<SimplifiedParam, (isize, Vec<RenderType>)>,
|
rgen: &mut FxIndexMap<SimplifiedParam, (isize, Vec<RenderType>)>,
|
||||||
) -> Option<RenderTypeId> {
|
) -> Option<RenderTypeId> {
|
||||||
use rustc_hir::def::{DefKind, Res};
|
use rustc_hir::def::{DefKind, Res};
|
||||||
match *clean_type {
|
match *clean_type {
|
||||||
@ -854,7 +854,7 @@ fn simplify_fn_type<'a, 'tcx>(
|
|||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
recurse: usize,
|
recurse: usize,
|
||||||
res: &mut Vec<RenderType>,
|
res: &mut Vec<RenderType>,
|
||||||
rgen: &mut FxHashMap<SimplifiedParam, (isize, Vec<RenderType>)>,
|
rgen: &mut FxIndexMap<SimplifiedParam, (isize, Vec<RenderType>)>,
|
||||||
is_return: bool,
|
is_return: bool,
|
||||||
cache: &Cache,
|
cache: &Cache,
|
||||||
) {
|
) {
|
||||||
@ -1198,7 +1198,7 @@ fn simplify_fn_constraint<'a, 'tcx>(
|
|||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
recurse: usize,
|
recurse: usize,
|
||||||
res: &mut Vec<(RenderTypeId, Vec<RenderType>)>,
|
res: &mut Vec<(RenderTypeId, Vec<RenderType>)>,
|
||||||
rgen: &mut FxHashMap<SimplifiedParam, (isize, Vec<RenderType>)>,
|
rgen: &mut FxIndexMap<SimplifiedParam, (isize, Vec<RenderType>)>,
|
||||||
is_return: bool,
|
is_return: bool,
|
||||||
cache: &Cache,
|
cache: &Cache,
|
||||||
) {
|
) {
|
||||||
@ -1285,7 +1285,7 @@ fn get_fn_inputs_and_outputs<'tcx>(
|
|||||||
) -> (Vec<RenderType>, Vec<RenderType>, Vec<Vec<RenderType>>) {
|
) -> (Vec<RenderType>, Vec<RenderType>, Vec<Vec<RenderType>>) {
|
||||||
let decl = &func.decl;
|
let decl = &func.decl;
|
||||||
|
|
||||||
let mut rgen: FxHashMap<SimplifiedParam, (isize, Vec<RenderType>)> = Default::default();
|
let mut rgen: FxIndexMap<SimplifiedParam, (isize, Vec<RenderType>)> = Default::default();
|
||||||
|
|
||||||
let combined_generics;
|
let combined_generics;
|
||||||
let (self_, generics) = if let Some((impl_self, impl_generics)) = impl_or_trait_generics {
|
let (self_, generics) = if let Some((impl_self, impl_generics)) = impl_or_trait_generics {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
|
||||||
use rustc_hir::def::{DefKind, Res};
|
use rustc_hir::def::{DefKind, Res};
|
||||||
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
|
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
|
||||||
use rustc_hir::intravisit::{self, Visitor};
|
use rustc_hir::intravisit::{self, Visitor};
|
||||||
@ -44,7 +44,7 @@ pub(crate) fn collect_spans_and_sources(
|
|||||||
src_root: &Path,
|
src_root: &Path,
|
||||||
include_sources: bool,
|
include_sources: bool,
|
||||||
generate_link_to_definition: bool,
|
generate_link_to_definition: bool,
|
||||||
) -> (FxHashMap<PathBuf, String>, FxHashMap<Span, LinkFromSrc>) {
|
) -> (FxIndexMap<PathBuf, String>, FxHashMap<Span, LinkFromSrc>) {
|
||||||
let mut visitor = SpanMapVisitor { tcx, matches: FxHashMap::default() };
|
let mut visitor = SpanMapVisitor { tcx, matches: FxHashMap::default() };
|
||||||
|
|
||||||
if include_sources {
|
if include_sources {
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use rustc_data_structures::flock;
|
use rustc_data_structures::flock;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet};
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use rustc_middle::ty::fast_reject::DeepRejectCtxt;
|
use rustc_middle::ty::fast_reject::DeepRejectCtxt;
|
||||||
use rustc_span::Symbol;
|
use rustc_span::Symbol;
|
||||||
@ -505,8 +505,8 @@ fn get(cx: &Context<'_>, crate_name: &OrderedJson) -> Result<PartsAndLocations<S
|
|||||||
struct Hierarchy {
|
struct Hierarchy {
|
||||||
parent: Weak<Self>,
|
parent: Weak<Self>,
|
||||||
elem: OsString,
|
elem: OsString,
|
||||||
children: RefCell<FxHashMap<OsString, Rc<Self>>>,
|
children: RefCell<FxIndexMap<OsString, Rc<Self>>>,
|
||||||
elems: RefCell<FxHashSet<OsString>>,
|
elems: RefCell<FxIndexSet<OsString>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Hierarchy {
|
impl Hierarchy {
|
||||||
@ -961,8 +961,8 @@ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|||||||
fn get_path_parts<T: CciPart>(
|
fn get_path_parts<T: CciPart>(
|
||||||
dst: &Path,
|
dst: &Path,
|
||||||
crates_info: &[CrateInfo],
|
crates_info: &[CrateInfo],
|
||||||
) -> FxHashMap<PathBuf, Vec<String>> {
|
) -> FxIndexMap<PathBuf, Vec<String>> {
|
||||||
let mut templates: FxHashMap<PathBuf, Vec<String>> = FxHashMap::default();
|
let mut templates: FxIndexMap<PathBuf, Vec<String>> = FxIndexMap::default();
|
||||||
crates_info
|
crates_info
|
||||||
.iter()
|
.iter()
|
||||||
.map(|crate_info| T::from_crate_info(crate_info).parts.iter())
|
.map(|crate_info| T::from_crate_info(crate_info).parts.iter())
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
use std::{fmt, fs};
|
use std::{fmt, fs};
|
||||||
|
|
||||||
use rinja::Template;
|
use rinja::Template;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
|
||||||
use rustc_hir::def_id::LOCAL_CRATE;
|
use rustc_hir::def_id::LOCAL_CRATE;
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
@ -39,15 +39,15 @@ pub(crate) fn collect_local_sources<'tcx>(
|
|||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
src_root: &Path,
|
src_root: &Path,
|
||||||
krate: &clean::Crate,
|
krate: &clean::Crate,
|
||||||
) -> FxHashMap<PathBuf, String> {
|
) -> FxIndexMap<PathBuf, String> {
|
||||||
let mut lsc = LocalSourcesCollector { tcx, local_sources: FxHashMap::default(), src_root };
|
let mut lsc = LocalSourcesCollector { tcx, local_sources: FxIndexMap::default(), src_root };
|
||||||
lsc.visit_crate(krate);
|
lsc.visit_crate(krate);
|
||||||
lsc.local_sources
|
lsc.local_sources
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LocalSourcesCollector<'a, 'tcx> {
|
struct LocalSourcesCollector<'a, 'tcx> {
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
local_sources: FxHashMap<PathBuf, String>,
|
local_sources: FxIndexMap<PathBuf, String>,
|
||||||
src_root: &'a Path,
|
src_root: &'a Path,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
#![warn(rustc::internal)]
|
#![warn(rustc::internal)]
|
||||||
#![allow(clippy::collapsible_if, clippy::collapsible_else_if)]
|
#![allow(clippy::collapsible_if, clippy::collapsible_else_if)]
|
||||||
#![allow(rustc::diagnostic_outside_of_impl)]
|
#![allow(rustc::diagnostic_outside_of_impl)]
|
||||||
#![allow(rustc::potential_query_instability)]
|
|
||||||
#![allow(rustc::untranslatable_diagnostic)]
|
#![allow(rustc::untranslatable_diagnostic)]
|
||||||
|
|
||||||
extern crate thin_vec;
|
extern crate thin_vec;
|
||||||
@ -99,7 +98,7 @@
|
|||||||
/// Commas between elements are required (even if the expression is a block).
|
/// Commas between elements are required (even if the expression is a block).
|
||||||
macro_rules! map {
|
macro_rules! map {
|
||||||
($( $key: expr => $val: expr ),* $(,)*) => {{
|
($( $key: expr => $val: expr ),* $(,)*) => {{
|
||||||
let mut map = ::rustc_data_structures::fx::FxHashMap::default();
|
let mut map = ::rustc_data_structures::fx::FxIndexMap::default();
|
||||||
$( map.insert($key, $val); )*
|
$( map.insert($key, $val); )*
|
||||||
map
|
map
|
||||||
}}
|
}}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
use pulldown_cmark::LinkType;
|
use pulldown_cmark::LinkType;
|
||||||
use rustc_ast::util::comments::may_have_doc_links;
|
use rustc_ast::util::comments::may_have_doc_links;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexSet};
|
||||||
use rustc_data_structures::intern::Interned;
|
use rustc_data_structures::intern::Interned;
|
||||||
use rustc_errors::{Applicability, Diag, DiagMessage};
|
use rustc_errors::{Applicability, Diag, DiagMessage};
|
||||||
use rustc_hir::def::Namespace::*;
|
use rustc_hir::def::Namespace::*;
|
||||||
@ -778,9 +778,9 @@ fn trait_impls_for<'a>(
|
|||||||
cx: &mut DocContext<'a>,
|
cx: &mut DocContext<'a>,
|
||||||
ty: Ty<'a>,
|
ty: Ty<'a>,
|
||||||
module: DefId,
|
module: DefId,
|
||||||
) -> FxHashSet<(DefId, DefId)> {
|
) -> FxIndexSet<(DefId, DefId)> {
|
||||||
let tcx = cx.tcx;
|
let tcx = cx.tcx;
|
||||||
let mut impls = FxHashSet::default();
|
let mut impls = FxIndexSet::default();
|
||||||
|
|
||||||
for &trait_ in tcx.doc_link_traits_in_scope(module) {
|
for &trait_ in tcx.doc_link_traits_in_scope(module) {
|
||||||
tcx.for_each_relevant_impl(trait_, ty, |impl_| {
|
tcx.for_each_relevant_impl(trait_, ty, |impl_| {
|
||||||
|
@ -219,7 +219,7 @@ fn add_deref_target(
|
|||||||
panic!("collect-trait-impls can't run");
|
panic!("collect-trait-impls can't run");
|
||||||
};
|
};
|
||||||
|
|
||||||
krate.external_traits.extend(cx.external_traits.drain());
|
krate.external_traits.extend(cx.external_traits.drain(..));
|
||||||
|
|
||||||
krate
|
krate
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxIndexMap;
|
||||||
use rustc_errors::DiagCtxtHandle;
|
use rustc_errors::DiagCtxtHandle;
|
||||||
use rustc_hir::intravisit::{self, Visitor};
|
use rustc_hir::intravisit::{self, Visitor};
|
||||||
use rustc_hir::{self as hir};
|
use rustc_hir::{self as hir};
|
||||||
@ -102,8 +102,8 @@ pub(crate) struct CallData {
|
|||||||
pub(crate) is_bin: bool,
|
pub(crate) is_bin: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) type FnCallLocations = FxHashMap<PathBuf, CallData>;
|
pub(crate) type FnCallLocations = FxIndexMap<PathBuf, CallData>;
|
||||||
pub(crate) type AllCallLocations = FxHashMap<DefPathHash, FnCallLocations>;
|
pub(crate) type AllCallLocations = FxIndexMap<DefPathHash, FnCallLocations>;
|
||||||
|
|
||||||
/// Visitor for traversing a crate and finding instances of function calls.
|
/// Visitor for traversing a crate and finding instances of function calls.
|
||||||
struct FindCalls<'a, 'tcx> {
|
struct FindCalls<'a, 'tcx> {
|
||||||
@ -293,7 +293,7 @@ pub(crate) fn run(
|
|||||||
debug!("Scrape examples target_crates: {target_crates:?}");
|
debug!("Scrape examples target_crates: {target_crates:?}");
|
||||||
|
|
||||||
// Run call-finder on all items
|
// Run call-finder on all items
|
||||||
let mut calls = FxHashMap::default();
|
let mut calls = FxIndexMap::default();
|
||||||
let mut finder =
|
let mut finder =
|
||||||
FindCalls { calls: &mut calls, tcx, map: tcx.hir(), cx, target_crates, bin_crate };
|
FindCalls { calls: &mut calls, tcx, map: tcx.hir(), cx, target_crates, bin_crate };
|
||||||
tcx.hir().visit_all_item_likes_in_crate(&mut finder);
|
tcx.hir().visit_all_item_likes_in_crate(&mut finder);
|
||||||
@ -332,7 +332,7 @@ pub(crate) fn load_call_locations(
|
|||||||
with_examples: Vec<String>,
|
with_examples: Vec<String>,
|
||||||
dcx: DiagCtxtHandle<'_>,
|
dcx: DiagCtxtHandle<'_>,
|
||||||
) -> AllCallLocations {
|
) -> AllCallLocations {
|
||||||
let mut all_calls: AllCallLocations = FxHashMap::default();
|
let mut all_calls: AllCallLocations = FxIndexMap::default();
|
||||||
for path in with_examples {
|
for path in with_examples {
|
||||||
let bytes = match fs::read(&path) {
|
let bytes = match fs::read(&path) {
|
||||||
Ok(bytes) => bytes,
|
Ok(bytes) => bytes,
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
use std::collections::hash_map::Entry;
|
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::iter::Peekable;
|
use std::iter::Peekable;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::str::Chars;
|
use std::str::Chars;
|
||||||
|
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::{FxIndexMap, IndexEntry};
|
||||||
use rustc_errors::DiagCtxtHandle;
|
use rustc_errors::DiagCtxtHandle;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@ -12,8 +11,8 @@
|
|||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(crate) struct CssPath {
|
pub(crate) struct CssPath {
|
||||||
pub(crate) rules: FxHashMap<String, String>,
|
pub(crate) rules: FxIndexMap<String, String>,
|
||||||
pub(crate) children: FxHashMap<String, CssPath>,
|
pub(crate) children: FxIndexMap<String, CssPath>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// When encountering a `"` or a `'`, returns the whole string, including the quote characters.
|
/// When encountering a `"` or a `'`, returns the whole string, including the quote characters.
|
||||||
@ -120,10 +119,10 @@ fn parse_rules(
|
|||||||
content: &str,
|
content: &str,
|
||||||
selector: String,
|
selector: String,
|
||||||
iter: &mut Peekable<Chars<'_>>,
|
iter: &mut Peekable<Chars<'_>>,
|
||||||
paths: &mut FxHashMap<String, CssPath>,
|
paths: &mut FxIndexMap<String, CssPath>,
|
||||||
) -> Result<(), String> {
|
) -> Result<(), String> {
|
||||||
let mut rules = FxHashMap::default();
|
let mut rules = FxIndexMap::default();
|
||||||
let mut children = FxHashMap::default();
|
let mut children = FxIndexMap::default();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
// If the parent isn't a "normal" CSS selector, we only expect sub-selectors and not CSS
|
// If the parent isn't a "normal" CSS selector, we only expect sub-selectors and not CSS
|
||||||
@ -146,10 +145,10 @@ fn parse_rules(
|
|||||||
return Err(format!("Found empty value for rule `{rule}` in selector `{selector}`"));
|
return Err(format!("Found empty value for rule `{rule}` in selector `{selector}`"));
|
||||||
}
|
}
|
||||||
match rules.entry(rule) {
|
match rules.entry(rule) {
|
||||||
Entry::Occupied(mut o) => {
|
IndexEntry::Occupied(mut o) => {
|
||||||
*o.get_mut() = value;
|
*o.get_mut() = value;
|
||||||
}
|
}
|
||||||
Entry::Vacant(v) => {
|
IndexEntry::Vacant(v) => {
|
||||||
v.insert(value);
|
v.insert(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -159,7 +158,7 @@ fn parse_rules(
|
|||||||
}
|
}
|
||||||
|
|
||||||
match paths.entry(selector) {
|
match paths.entry(selector) {
|
||||||
Entry::Occupied(mut o) => {
|
IndexEntry::Occupied(mut o) => {
|
||||||
let v = o.get_mut();
|
let v = o.get_mut();
|
||||||
for (key, value) in rules.into_iter() {
|
for (key, value) in rules.into_iter() {
|
||||||
v.rules.insert(key, value);
|
v.rules.insert(key, value);
|
||||||
@ -168,7 +167,7 @@ fn parse_rules(
|
|||||||
v.children.insert(sel, child);
|
v.children.insert(sel, child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Entry::Vacant(v) => {
|
IndexEntry::Vacant(v) => {
|
||||||
v.insert(CssPath { rules, children });
|
v.insert(CssPath { rules, children });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -178,7 +177,7 @@ fn parse_rules(
|
|||||||
pub(crate) fn parse_selectors(
|
pub(crate) fn parse_selectors(
|
||||||
content: &str,
|
content: &str,
|
||||||
iter: &mut Peekable<Chars<'_>>,
|
iter: &mut Peekable<Chars<'_>>,
|
||||||
paths: &mut FxHashMap<String, CssPath>,
|
paths: &mut FxIndexMap<String, CssPath>,
|
||||||
) -> Result<(), String> {
|
) -> Result<(), String> {
|
||||||
let mut selector = String::new();
|
let mut selector = String::new();
|
||||||
|
|
||||||
@ -202,17 +201,17 @@ pub(crate) fn parse_selectors(
|
|||||||
|
|
||||||
/// The entry point to parse the CSS rules. Every time we encounter a `{`, we then parse the rules
|
/// The entry point to parse the CSS rules. Every time we encounter a `{`, we then parse the rules
|
||||||
/// inside it.
|
/// inside it.
|
||||||
pub(crate) fn load_css_paths(content: &str) -> Result<FxHashMap<String, CssPath>, String> {
|
pub(crate) fn load_css_paths(content: &str) -> Result<FxIndexMap<String, CssPath>, String> {
|
||||||
let mut iter = content.chars().peekable();
|
let mut iter = content.chars().peekable();
|
||||||
let mut paths = FxHashMap::default();
|
let mut paths = FxIndexMap::default();
|
||||||
|
|
||||||
parse_selectors(content, &mut iter, &mut paths)?;
|
parse_selectors(content, &mut iter, &mut paths)?;
|
||||||
Ok(paths)
|
Ok(paths)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_differences(
|
pub(crate) fn get_differences(
|
||||||
origin: &FxHashMap<String, CssPath>,
|
origin: &FxIndexMap<String, CssPath>,
|
||||||
against: &FxHashMap<String, CssPath>,
|
against: &FxIndexMap<String, CssPath>,
|
||||||
v: &mut Vec<String>,
|
v: &mut Vec<String>,
|
||||||
) {
|
) {
|
||||||
for (selector, entry) in origin.iter() {
|
for (selector, entry) in origin.iter() {
|
||||||
@ -235,7 +234,7 @@ pub(crate) fn get_differences(
|
|||||||
|
|
||||||
pub(crate) fn test_theme_against<P: AsRef<Path>>(
|
pub(crate) fn test_theme_against<P: AsRef<Path>>(
|
||||||
f: &P,
|
f: &P,
|
||||||
origin: &FxHashMap<String, CssPath>,
|
origin: &FxIndexMap<String, CssPath>,
|
||||||
dcx: DiagCtxtHandle<'_>,
|
dcx: DiagCtxtHandle<'_>,
|
||||||
) -> (bool, Vec<String>) {
|
) -> (bool, Vec<String>) {
|
||||||
let against = match fs::read_to_string(f)
|
let against = match fs::read_to_string(f)
|
||||||
|
Loading…
Reference in New Issue
Block a user