Auto merge of #49757 - GuillaumeGomez:never-search, r=QuietMisdreavus
Add specific never search Fixes #49529. r? @QuietMisdreavus
This commit is contained in:
commit
bbdd1cf744
22 changed files with 293 additions and 11 deletions
|
@ -373,3 +373,19 @@ This is an internal flag intended for the standard library and compiler that app
|
|||
`#[unstable]` attribute to any dependent crate that doesn't have another stability attribute. This
|
||||
allows `rustdoc` to be able to generate documentation for the compiler crates and the standard
|
||||
library, as an equivalent command-line argument is provided to `rustc` when building those crates.
|
||||
|
||||
### `doc_alias` feature
|
||||
|
||||
This feature allows you to add alias(es) to an item when using the `rustdoc` search through the
|
||||
`doc(alias)` attribute. Example:
|
||||
|
||||
```rust,no_run
|
||||
#![feature(doc_alias)]
|
||||
|
||||
#[doc(alias = "x")]
|
||||
#[doc(alias = "big")]
|
||||
pub struct BigX;
|
||||
```
|
||||
|
||||
Then, when looking for it through the `rustdoc` search, if you enter "x" or
|
||||
"big", search will show the `BigX` struct first.
|
||||
|
|
23
src/doc/unstable-book/src/language-features/doc-alias.md
Normal file
23
src/doc/unstable-book/src/language-features/doc-alias.md
Normal file
|
@ -0,0 +1,23 @@
|
|||
# `doc_alias`
|
||||
|
||||
The tracking issue for this feature is: [#50146]
|
||||
|
||||
[#50146]: https://github.com/rust-lang/rust/issues/50146
|
||||
|
||||
------------------------
|
||||
|
||||
You can add alias(es) to an item when using the `rustdoc` search through the
|
||||
`doc(alias)` attribute. Example:
|
||||
|
||||
```rust,no_run
|
||||
#![feature(doc_alias)]
|
||||
|
||||
#[doc(alias = "x")]
|
||||
#[doc(alias = "big")]
|
||||
pub struct BigX;
|
||||
```
|
||||
|
||||
Then, when looking for it through the `rustdoc` search, if you enter "x" or
|
||||
"big", search will show the `BigX` struct first.
|
||||
|
||||
Note that this feature is currently hidden behind the `feature(doc_alias)` gate.
|
|
@ -102,6 +102,7 @@
|
|||
#![feature(unboxed_closures)]
|
||||
#![feature(untagged_unions)]
|
||||
#![feature(unwind_attributes)]
|
||||
#![feature(doc_alias)]
|
||||
|
||||
#![cfg_attr(not(stage0), feature(mmx_target_feature))]
|
||||
#![cfg_attr(not(stage0), feature(tbm_target_feature))]
|
||||
|
|
|
@ -295,6 +295,7 @@ macro_rules! debug_assert_ne {
|
|||
/// ```
|
||||
#[macro_export]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[doc(alias = "?")]
|
||||
macro_rules! try {
|
||||
($expr:expr) => (match $expr {
|
||||
$crate::result::Result::Ok(val) => val,
|
||||
|
|
|
@ -87,6 +87,7 @@
|
|||
message="cannot add `{RHS}` to `{Self}`",
|
||||
label="no implementation for `{Self} + {RHS}`",
|
||||
)]
|
||||
#[doc(alias = "+")]
|
||||
pub trait Add<RHS=Self> {
|
||||
/// The resulting type after applying the `+` operator.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -183,6 +184,7 @@ add_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 }
|
|||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_on_unimplemented(message="cannot subtract `{RHS}` from `{Self}`",
|
||||
label="no implementation for `{Self} - {RHS}`")]
|
||||
#[doc(alias = "-")]
|
||||
pub trait Sub<RHS=Self> {
|
||||
/// The resulting type after applying the `-` operator.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -301,6 +303,7 @@ sub_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 }
|
|||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_on_unimplemented(message="cannot multiply `{RHS}` to `{Self}`",
|
||||
label="no implementation for `{Self} * {RHS}`")]
|
||||
#[doc(alias = "*")]
|
||||
pub trait Mul<RHS=Self> {
|
||||
/// The resulting type after applying the `*` operator.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -423,6 +426,7 @@ mul_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 }
|
|||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_on_unimplemented(message="cannot divide `{Self}` by `{RHS}`",
|
||||
label="no implementation for `{Self} / {RHS}`")]
|
||||
#[doc(alias = "/")]
|
||||
pub trait Div<RHS=Self> {
|
||||
/// The resulting type after applying the `/` operator.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -506,6 +510,7 @@ div_impl_float! { f32 f64 }
|
|||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_on_unimplemented(message="cannot mod `{Self}` by `{RHS}`",
|
||||
label="no implementation for `{Self} % {RHS}`")]
|
||||
#[doc(alias = "%")]
|
||||
pub trait Rem<RHS=Self> {
|
||||
/// The resulting type after applying the `%` operator.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -589,6 +594,7 @@ rem_impl_float! { f32 f64 }
|
|||
/// ```
|
||||
#[lang = "neg"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[doc(alias = "-")]
|
||||
pub trait Neg {
|
||||
/// The resulting type after applying the `-` operator.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -664,6 +670,8 @@ neg_impl_numeric! { isize i8 i16 i32 i64 i128 f32 f64 }
|
|||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
#[rustc_on_unimplemented(message="cannot add-assign `{Rhs}` to `{Self}`",
|
||||
label="no implementation for `{Self} += {Rhs}`")]
|
||||
#[doc(alias = "+")]
|
||||
#[doc(alias = "+=")]
|
||||
pub trait AddAssign<Rhs=Self> {
|
||||
/// Performs the `+=` operation.
|
||||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
|
@ -718,6 +726,8 @@ add_assign_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 }
|
|||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
#[rustc_on_unimplemented(message="cannot subtract-assign `{Rhs}` from `{Self}`",
|
||||
label="no implementation for `{Self} -= {Rhs}`")]
|
||||
#[doc(alias = "-")]
|
||||
#[doc(alias = "-=")]
|
||||
pub trait SubAssign<Rhs=Self> {
|
||||
/// Performs the `-=` operation.
|
||||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
|
@ -763,6 +773,8 @@ sub_assign_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 }
|
|||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
#[rustc_on_unimplemented(message="cannot multiply-assign `{Rhs}` to `{Self}`",
|
||||
label="no implementation for `{Self} *= {Rhs}`")]
|
||||
#[doc(alias = "*")]
|
||||
#[doc(alias = "*=")]
|
||||
pub trait MulAssign<Rhs=Self> {
|
||||
/// Performs the `*=` operation.
|
||||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
|
@ -808,6 +820,8 @@ mul_assign_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 }
|
|||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
#[rustc_on_unimplemented(message="cannot divide-assign `{Self}` by `{Rhs}`",
|
||||
label="no implementation for `{Self} /= {Rhs}`")]
|
||||
#[doc(alias = "/")]
|
||||
#[doc(alias = "/=")]
|
||||
pub trait DivAssign<Rhs=Self> {
|
||||
/// Performs the `/=` operation.
|
||||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
|
@ -856,6 +870,8 @@ div_assign_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 f32 f64 }
|
|||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
#[rustc_on_unimplemented(message="cannot mod-assign `{Self}` by `{Rhs}``",
|
||||
label="no implementation for `{Self} %= {Rhs}`")]
|
||||
#[doc(alias = "%")]
|
||||
#[doc(alias = "%=")]
|
||||
pub trait RemAssign<Rhs=Self> {
|
||||
/// Performs the `%=` operation.
|
||||
#[stable(feature = "op_assign_traits", since = "1.8.0")]
|
||||
|
|
|
@ -62,6 +62,9 @@
|
|||
#[lang = "index"]
|
||||
#[rustc_on_unimplemented = "the type `{Self}` cannot be indexed by `{Idx}`"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[doc(alias = "]")]
|
||||
#[doc(alias = "[")]
|
||||
#[doc(alias = "[]")]
|
||||
pub trait Index<Idx: ?Sized> {
|
||||
/// The returned type after indexing.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -146,6 +149,9 @@ pub trait Index<Idx: ?Sized> {
|
|||
#[lang = "index_mut"]
|
||||
#[rustc_on_unimplemented = "the type `{Self}` cannot be mutably indexed by `{Idx}`"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[doc(alias = "[")]
|
||||
#[doc(alias = "]")]
|
||||
#[doc(alias = "[]")]
|
||||
pub trait IndexMut<Idx: ?Sized>: Index<Idx> {
|
||||
/// Performs the mutable indexing (`container[index]`) operation.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
that implement `{Try}`",
|
||||
label="the `?` operator cannot be applied to type `{Self}`")
|
||||
)]
|
||||
#[doc(alias = "?")]
|
||||
pub trait Try {
|
||||
/// The type of this value when viewed as successful.
|
||||
#[unstable(feature = "try_trait", issue = "42327")]
|
||||
|
|
|
@ -19,7 +19,7 @@ use clean;
|
|||
/// discriminants. JavaScript then is used to decode them into the original value.
|
||||
/// Consequently, every change to this type should be synchronized to
|
||||
/// the `itemTypes` mapping table in `static/main.js`.
|
||||
#[derive(Copy, PartialEq, Clone)]
|
||||
#[derive(Copy, PartialEq, Clone, Debug)]
|
||||
pub enum ItemType {
|
||||
Module = 0,
|
||||
ExternCrate = 1,
|
||||
|
|
|
@ -145,6 +145,7 @@ pub fn render<T: fmt::Display, S: fmt::Display>(
|
|||
</script>\
|
||||
<script src=\"{root_path}main{suffix}.js\"></script>\
|
||||
<script defer src=\"{root_path}search-index.js\"></script>\
|
||||
<script defer src=\"{root_path}aliases.js\"></script>\
|
||||
</body>\
|
||||
</html>",
|
||||
css_extension = if css_file_extension {
|
||||
|
|
|
@ -329,6 +329,10 @@ pub struct Cache {
|
|||
// yet when its implementation methods are being indexed. Caches such methods
|
||||
// and their parent id here and indexes them at the end of crate parsing.
|
||||
orphan_impl_items: Vec<(DefId, clean::Item)>,
|
||||
|
||||
/// Aliases added through `#[doc(alias = "...")]`. Since a few items can have the same alias,
|
||||
/// we need the alias element to have an array of items.
|
||||
aliases: FxHashMap<String, Vec<IndexItem>>,
|
||||
}
|
||||
|
||||
/// Temporary storage for data obtained during `RustdocVisitor::clean()`.
|
||||
|
@ -369,6 +373,7 @@ struct Sidebar<'a> { cx: &'a Context, item: &'a clean::Item, }
|
|||
|
||||
/// Struct representing one entry in the JS search index. These are all emitted
|
||||
/// by hand to a large JS file at the end of cache-creation.
|
||||
#[derive(Debug)]
|
||||
struct IndexItem {
|
||||
ty: ItemType,
|
||||
name: String,
|
||||
|
@ -396,6 +401,7 @@ impl ToJson for IndexItem {
|
|||
}
|
||||
|
||||
/// A type used for the search index.
|
||||
#[derive(Debug)]
|
||||
struct Type {
|
||||
name: Option<String>,
|
||||
generics: Option<Vec<String>>,
|
||||
|
@ -418,9 +424,10 @@ impl ToJson for Type {
|
|||
}
|
||||
|
||||
/// Full type of functions/methods in the search index.
|
||||
#[derive(Debug)]
|
||||
struct IndexItemFunctionType {
|
||||
inputs: Vec<Type>,
|
||||
output: Option<Type>
|
||||
output: Option<Type>,
|
||||
}
|
||||
|
||||
impl ToJson for IndexItemFunctionType {
|
||||
|
@ -609,6 +616,7 @@ pub fn run(mut krate: clean::Crate,
|
|||
owned_box_did,
|
||||
masked_crates: mem::replace(&mut krate.masked_crates, FxHashSet()),
|
||||
typarams: external_typarams,
|
||||
aliases: FxHashMap(),
|
||||
};
|
||||
|
||||
// Cache where all our extern crates are located
|
||||
|
@ -847,8 +855,7 @@ themePicker.onclick = function() {{
|
|||
write(cx.dst.join("COPYRIGHT.txt"),
|
||||
include_bytes!("static/COPYRIGHT.txt"))?;
|
||||
|
||||
fn collect(path: &Path, krate: &str,
|
||||
key: &str) -> io::Result<Vec<String>> {
|
||||
fn collect(path: &Path, krate: &str, key: &str) -> io::Result<Vec<String>> {
|
||||
let mut ret = Vec::new();
|
||||
if path.exists() {
|
||||
for line in BufReader::new(File::open(path)?).lines() {
|
||||
|
@ -865,6 +872,40 @@ themePicker.onclick = function() {{
|
|||
Ok(ret)
|
||||
}
|
||||
|
||||
fn show_item(item: &IndexItem, krate: &str) -> String {
|
||||
format!("{{'crate':'{}','ty':{},'name':'{}','path':'{}'{}}}",
|
||||
krate, item.ty as usize, item.name, item.path,
|
||||
if let Some(p) = item.parent_idx {
|
||||
format!(",'parent':{}", p)
|
||||
} else {
|
||||
String::new()
|
||||
})
|
||||
}
|
||||
|
||||
let dst = cx.dst.join("aliases.js");
|
||||
{
|
||||
let mut all_aliases = try_err!(collect(&dst, &krate.name, "ALIASES"), &dst);
|
||||
let mut w = try_err!(File::create(&dst), &dst);
|
||||
let mut output = String::with_capacity(100);
|
||||
for (alias, items) in &cache.aliases {
|
||||
if items.is_empty() {
|
||||
continue
|
||||
}
|
||||
output.push_str(&format!("\"{}\":[{}],",
|
||||
alias,
|
||||
items.iter()
|
||||
.map(|v| show_item(v, &krate.name))
|
||||
.collect::<Vec<_>>()
|
||||
.join(",")));
|
||||
}
|
||||
all_aliases.push(format!("ALIASES['{}'] = {{{}}};", krate.name, output));
|
||||
all_aliases.sort();
|
||||
try_err!(writeln!(&mut w, "var ALIASES = {{}};"), &dst);
|
||||
for aliases in &all_aliases {
|
||||
try_err!(writeln!(&mut w, "{}", aliases), &dst);
|
||||
}
|
||||
}
|
||||
|
||||
// Update the search index
|
||||
let dst = cx.dst.join("search-index.js");
|
||||
let mut all_indexes = try_err!(collect(&dst, &krate.name, "searchIndex"), &dst);
|
||||
|
@ -1251,13 +1292,13 @@ impl DocFolder for Cache {
|
|||
// `public_items` map, so we can skip inserting into the
|
||||
// paths map if there was already an entry present and we're
|
||||
// not a public item.
|
||||
if
|
||||
!self.paths.contains_key(&item.def_id) ||
|
||||
if !self.paths.contains_key(&item.def_id) ||
|
||||
self.access_levels.is_public(item.def_id)
|
||||
{
|
||||
self.paths.insert(item.def_id,
|
||||
(self.stack.clone(), item.type_()));
|
||||
}
|
||||
self.add_aliases(&item);
|
||||
}
|
||||
// Link variants to their parent enum because pages aren't emitted
|
||||
// for each variant.
|
||||
|
@ -1268,6 +1309,7 @@ impl DocFolder for Cache {
|
|||
}
|
||||
|
||||
clean::PrimitiveItem(..) if item.visibility.is_some() => {
|
||||
self.add_aliases(&item);
|
||||
self.paths.insert(item.def_id, (self.stack.clone(),
|
||||
item.type_()));
|
||||
}
|
||||
|
@ -1372,6 +1414,36 @@ impl<'a> Cache {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn add_aliases(&mut self, item: &clean::Item) {
|
||||
if item.def_id.index == CRATE_DEF_INDEX {
|
||||
return
|
||||
}
|
||||
if let Some(ref item_name) = item.name {
|
||||
let path = self.paths.get(&item.def_id)
|
||||
.map(|p| p.0.join("::").to_string())
|
||||
.unwrap_or("std".to_owned());
|
||||
for alias in item.attrs.lists("doc")
|
||||
.filter(|a| a.check_name("alias"))
|
||||
.filter_map(|a| a.value_str()
|
||||
.map(|s| s.to_string().replace("\"", "")))
|
||||
.filter(|v| !v.is_empty())
|
||||
.collect::<FxHashSet<_>>()
|
||||
.into_iter() {
|
||||
self.aliases.entry(alias)
|
||||
.or_insert(Vec::with_capacity(1))
|
||||
.push(IndexItem {
|
||||
ty: item.type_(),
|
||||
name: item_name.to_string(),
|
||||
path: path.clone(),
|
||||
desc: String::new(),
|
||||
parent: None,
|
||||
parent_idx: None,
|
||||
search_type: get_index_search_type(&item),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Eq, PartialEq, Hash)]
|
||||
|
|
|
@ -1012,11 +1012,21 @@
|
|||
}
|
||||
}
|
||||
|
||||
return {
|
||||
var ret = {
|
||||
'in_args': sortResults(results_in_args, true),
|
||||
'returned': sortResults(results_returned, true),
|
||||
'others': sortResults(results),
|
||||
};
|
||||
if (ALIASES[window.currentCrate][query.raw]) {
|
||||
var aliases = ALIASES[window.currentCrate][query.raw];
|
||||
for (var i = 0; i < aliases.length; ++i) {
|
||||
ret['others'].unshift(aliases[i]);
|
||||
if (ret['others'].length > MAX_RESULTS) {
|
||||
ret['others'].pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1197,11 +1207,13 @@
|
|||
array.forEach(function(item) {
|
||||
var name, type, href, displayPath;
|
||||
|
||||
if (shown.indexOf(item) !== -1) {
|
||||
var id_ty = item.ty + item.path + item.name;
|
||||
if (shown.indexOf(id_ty) !== -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
shown.push(item);
|
||||
console.log(item);
|
||||
shown.push(id_ty);
|
||||
name = item.name;
|
||||
type = itemTypes[item.ty];
|
||||
|
||||
|
@ -1369,7 +1381,7 @@
|
|||
|
||||
function search(e) {
|
||||
var params = getQueryStringParams();
|
||||
var query = getQuery(document.getElementsByClassName('search-input')[0].value);
|
||||
var query = getQuery(document.getElementsByClassName('search-input')[0].value.trim());
|
||||
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
|
|
|
@ -319,6 +319,7 @@
|
|||
#![feature(doc_spotlight)]
|
||||
#![cfg_attr(test, feature(update_panic_count))]
|
||||
#![cfg_attr(windows, feature(used))]
|
||||
#![feature(doc_alias)]
|
||||
|
||||
#![default_lib_allocator]
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
// except according to those terms.
|
||||
|
||||
#[doc(primitive = "bool")]
|
||||
#[doc(alias = "true")]
|
||||
#[doc(alias = "false")]
|
||||
//
|
||||
/// The boolean type.
|
||||
///
|
||||
|
@ -68,6 +70,7 @@
|
|||
mod prim_bool { }
|
||||
|
||||
#[doc(primitive = "never")]
|
||||
#[doc(alias = "!")]
|
||||
//
|
||||
/// The `!` type, also called "never".
|
||||
///
|
||||
|
@ -501,6 +504,9 @@ mod prim_pointer { }
|
|||
mod prim_array { }
|
||||
|
||||
#[doc(primitive = "slice")]
|
||||
#[doc(alias = "[")]
|
||||
#[doc(alias = "]")]
|
||||
#[doc(alias = "[]")]
|
||||
//
|
||||
/// A dynamically-sized view into a contiguous sequence, `[T]`.
|
||||
///
|
||||
|
@ -599,6 +605,9 @@ mod prim_slice { }
|
|||
mod prim_str { }
|
||||
|
||||
#[doc(primitive = "tuple")]
|
||||
#[doc(alias = "(")]
|
||||
#[doc(alias = ")")]
|
||||
#[doc(alias = "()")]
|
||||
//
|
||||
/// A finite heterogeneous sequence, `(T, U, ..)`.
|
||||
///
|
||||
|
@ -821,6 +830,7 @@ mod prim_isize { }
|
|||
mod prim_usize { }
|
||||
|
||||
#[doc(primitive = "reference")]
|
||||
#[doc(alias = "&")]
|
||||
//
|
||||
/// References, both shared and mutable.
|
||||
///
|
||||
|
|
|
@ -463,6 +463,9 @@ declare_features! (
|
|||
(active, proc_macro_mod, "1.27.0", None, None),
|
||||
(active, proc_macro_expr, "1.27.0", None, None),
|
||||
(active, proc_macro_non_items, "1.27.0", None, None),
|
||||
|
||||
// #[doc(alias = "...")]
|
||||
(active, doc_alias, "1.27.0", Some(50146), None),
|
||||
);
|
||||
|
||||
declare_features! (
|
||||
|
@ -1458,6 +1461,10 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
|||
gate_feature_post!(&self, doc_spotlight, attr.span,
|
||||
"#[doc(spotlight)] is experimental"
|
||||
);
|
||||
} else if content.iter().any(|c| c.check_name("alias")) {
|
||||
gate_feature_post!(&self, doc_alias, attr.span,
|
||||
"#[doc(alias = \"...\")] is experimental"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
17
src/test/rustdoc-js/alias-1.js
Normal file
17
src/test/rustdoc-js/alias-1.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
const QUERY = '&';
|
||||
|
||||
const EXPECTED = {
|
||||
'others': [
|
||||
{ 'path': 'std', 'name': 'reference' },
|
||||
],
|
||||
};
|
18
src/test/rustdoc-js/alias-2.js
Normal file
18
src/test/rustdoc-js/alias-2.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
const QUERY = '+';
|
||||
|
||||
const EXPECTED = {
|
||||
'others': [
|
||||
{ 'path': 'std::ops::AddAssign', 'name': 'AddAssign' },
|
||||
{ 'path': 'std::ops::Add', 'name': 'Add' },
|
||||
],
|
||||
};
|
17
src/test/rustdoc-js/alias-3.js
Normal file
17
src/test/rustdoc-js/alias-3.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
const QUERY = '!';
|
||||
|
||||
const EXPECTED = {
|
||||
'others': [
|
||||
{ 'path': 'std', 'name': 'never' },
|
||||
],
|
||||
};
|
19
src/test/rustdoc-js/alias.js
Normal file
19
src/test/rustdoc-js/alias.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
const QUERY = '[';
|
||||
|
||||
const EXPECTED = {
|
||||
'others': [
|
||||
{ 'path': 'std', 'name': 'slice' },
|
||||
{ 'path': 'std::ops::IndexMut', 'name': 'IndexMut' },
|
||||
{ 'path': 'std::ops::Index', 'name': 'Index' },
|
||||
],
|
||||
};
|
17
src/test/rustdoc-js/never.js
Normal file
17
src/test/rustdoc-js/never.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
const QUERY = '!';
|
||||
|
||||
const EXPECTED = {
|
||||
'others': [
|
||||
{ 'path': 'std', 'name': 'never' },
|
||||
],
|
||||
};
|
14
src/test/ui/feature-gate-doc_alias.rs
Normal file
14
src/test/ui/feature-gate-doc_alias.rs
Normal file
|
@ -0,0 +1,14 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#[doc(alias = "foo")] //~ ERROR: #[doc(alias = "...")] is experimental
|
||||
pub struct Foo;
|
||||
|
||||
fn main() {}
|
11
src/test/ui/feature-gate-doc_alias.stderr
Normal file
11
src/test/ui/feature-gate-doc_alias.stderr
Normal file
|
@ -0,0 +1,11 @@
|
|||
error[E0658]: #[doc(alias = "...")] is experimental (see issue #50146)
|
||||
--> $DIR/feature-gate-doc_alias.rs:11:1
|
||||
|
|
||||
LL | #[doc(alias = "foo")] //~ ERROR: #[doc(alias = "...")] is experimental
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: add #![feature(doc_alias)] to the crate attributes to enable
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
|
@ -144,6 +144,7 @@ function main(argv) {
|
|||
var toolchain = argv[2];
|
||||
|
||||
var mainJs = readFile("build/" + toolchain + "/doc/main.js");
|
||||
var ALIASES = readFile("build/" + toolchain + "/doc/aliases.js");
|
||||
var searchIndex = readFile("build/" + toolchain + "/doc/search-index.js").split("\n");
|
||||
if (searchIndex[searchIndex.length - 1].length === 0) {
|
||||
searchIndex.pop();
|
||||
|
@ -161,6 +162,7 @@ function main(argv) {
|
|||
"execSearch"];
|
||||
|
||||
finalJS += 'window = { "currentCrate": "std" };\n';
|
||||
finalJS += ALIASES;
|
||||
finalJS += loadThings(arraysToLoad, 'array', extractArrayVariable, mainJs);
|
||||
finalJS += loadThings(variablesToLoad, 'variable', extractVariable, mainJs);
|
||||
finalJS += loadThings(functionsToLoad, 'function', extractFunction, mainJs);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue