Add custom sort for link in rustdoc
This commit is contained in:
parent
9cd60bd2cc
commit
a467ecacd4
3 changed files with 50 additions and 1 deletions
|
@ -1,4 +1,5 @@
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
use std::cmp::Ordering;
|
||||||
|
|
||||||
use rinja::Template;
|
use rinja::Template;
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
|
@ -12,6 +13,7 @@ use crate::clean;
|
||||||
use crate::formats::Impl;
|
use crate::formats::Impl;
|
||||||
use crate::formats::item_type::ItemType;
|
use crate::formats::item_type::ItemType;
|
||||||
use crate::html::markdown::{IdMap, MarkdownWithToc};
|
use crate::html::markdown::{IdMap, MarkdownWithToc};
|
||||||
|
use crate::html::render::print_item::compare_names;
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
pub(crate) enum ModuleLike {
|
pub(crate) enum ModuleLike {
|
||||||
|
@ -77,7 +79,7 @@ impl<'a> LinkBlock<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A link to an item. Content should not be escaped.
|
/// A link to an item. Content should not be escaped.
|
||||||
#[derive(PartialOrd, Ord, PartialEq, Eq, Hash, Clone)]
|
#[derive(Ord, PartialEq, Eq, Hash, Clone)]
|
||||||
pub(crate) struct Link<'a> {
|
pub(crate) struct Link<'a> {
|
||||||
/// The content for the anchor tag and title attr
|
/// The content for the anchor tag and title attr
|
||||||
name: Cow<'a, str>,
|
name: Cow<'a, str>,
|
||||||
|
@ -89,6 +91,20 @@ pub(crate) struct Link<'a> {
|
||||||
children: Vec<Link<'a>>,
|
children: Vec<Link<'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PartialOrd for Link<'_> {
|
||||||
|
fn partial_cmp(&self, other: &Link<'_>) -> Option<Ordering> {
|
||||||
|
match compare_names(&self.name, &other.name) {
|
||||||
|
Ordering::Equal => (),
|
||||||
|
result => return Some(result),
|
||||||
|
}
|
||||||
|
(&self.name_html, &self.href, &self.children).partial_cmp(&(
|
||||||
|
&other.name_html,
|
||||||
|
&other.href,
|
||||||
|
&other.children,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'a> Link<'a> {
|
impl<'a> Link<'a> {
|
||||||
pub fn new(href: impl Into<Cow<'a, str>>, name: impl Into<Cow<'a, str>>) -> Self {
|
pub fn new(href: impl Into<Cow<'a, str>>, name: impl Into<Cow<'a, str>>) -> Self {
|
||||||
Self { href: href.into(), name: name.into(), children: vec![], name_html: None }
|
Self { href: href.into(), name: name.into(), children: vec![], name_html: None }
|
||||||
|
|
15
tests/rustdoc-gui/sidebar-foreign-impl-sort.goml
Normal file
15
tests/rustdoc-gui/sidebar-foreign-impl-sort.goml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
// Checks sidebar resizing close the Settings popover
|
||||||
|
go-to: "file://" + |DOC_PATH| + "/test_docs/SidebarSort/trait.Sort.html#foreign-impls"
|
||||||
|
|
||||||
|
// Check that the sidebar contains the expected foreign implementations
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(1)", "&'a str")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(2)", "AtomicBool")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(3)", "AtomicU8")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(4)", "AtomicU16")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(5)", "AtomicU32")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(6)", "Cell<u8>")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(7)", "Cell<u16>")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(8)", "u8")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(9)", "u16")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(10)", "u32")
|
||||||
|
assert-text: (".sidebar-elems section ul > li:nth-child(11)", "usize")
|
|
@ -713,3 +713,21 @@ pub trait ItemsTrait {
|
||||||
/// blablala
|
/// blablala
|
||||||
fn bar();
|
fn bar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod SidebarSort {
|
||||||
|
use std::cell::Cell;
|
||||||
|
use std::sync::atomic::*;
|
||||||
|
pub trait Sort {}
|
||||||
|
|
||||||
|
impl Sort for u32 {}
|
||||||
|
impl Sort for u8 {}
|
||||||
|
impl Sort for u16 {}
|
||||||
|
impl Sort for usize {}
|
||||||
|
impl Sort for AtomicU32 {}
|
||||||
|
impl Sort for AtomicU16 {}
|
||||||
|
impl Sort for AtomicU8 {}
|
||||||
|
impl Sort for AtomicBool {}
|
||||||
|
impl Sort for Cell<u16> {}
|
||||||
|
impl Sort for Cell<u8> {}
|
||||||
|
impl<'a> Sort for &'a str {}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue