mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Auto merge of #85258 - GuillaumeGomez:rollup-kzay7o5, r=GuillaumeGomez
Rollup of 4 pull requests Successful merges: - #85068 (Fix diagnostic for cross crate private tuple struct constructors) - #85175 (Rustdoc cleanup) - #85177 (add BITS associated constant to core::num::Wrapping) - #85240 (Don't suggest adding `'static` lifetime to arguments) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
952c5732c2
@ -114,12 +114,16 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
||||
);
|
||||
|
||||
diag.span_label(span, format!("lifetime `{}` required", named));
|
||||
diag.span_suggestion(
|
||||
new_ty_span,
|
||||
&format!("add explicit lifetime `{}` to {}", named, span_label_var),
|
||||
new_ty.to_string(),
|
||||
Applicability::Unspecified,
|
||||
);
|
||||
// Suggesting `'static` is nearly always incorrect, and can steer users
|
||||
// down the wrong path.
|
||||
if *named != ty::ReStatic {
|
||||
diag.span_suggestion(
|
||||
new_ty_span,
|
||||
&format!("add explicit lifetime `{}` to {}", named, span_label_var),
|
||||
new_ty.to_string(),
|
||||
Applicability::Unspecified,
|
||||
);
|
||||
}
|
||||
|
||||
Some(diag)
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ use rustc_middle::middle::exported_symbols::{ExportedSymbol, SymbolExportLevel};
|
||||
use rustc_middle::mir::interpret::{AllocDecodingSession, AllocDecodingState};
|
||||
use rustc_middle::mir::{self, Body, Promoted};
|
||||
use rustc_middle::ty::codec::TyDecoder;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt, Visibility};
|
||||
use rustc_serialize::{opaque, Decodable, Decoder};
|
||||
use rustc_session::Session;
|
||||
use rustc_span::hygiene::ExpnDataDecodeMode;
|
||||
@ -1312,6 +1312,17 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn get_struct_field_visibilities(&self, id: DefIndex) -> Vec<Visibility> {
|
||||
self.root
|
||||
.tables
|
||||
.children
|
||||
.get(self, id)
|
||||
.unwrap_or_else(Lazy::empty)
|
||||
.decode(self)
|
||||
.map(|field_index| self.get_visibility(field_index))
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn get_inherent_implementations_for_type(
|
||||
&self,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
|
@ -8,7 +8,7 @@ use rustc_ast::expand::allocator::AllocatorKind;
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
use rustc_data_structures::svh::Svh;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::DefKind;
|
||||
use rustc_hir::def::{CtorKind, DefKind};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, CRATE_DEF_INDEX, LOCAL_CRATE};
|
||||
use rustc_hir::definitions::{DefKey, DefPath, DefPathHash};
|
||||
use rustc_middle::hir::exports::Export;
|
||||
@ -17,7 +17,7 @@ use rustc_middle::middle::cstore::{CrateSource, CrateStore, EncodedMetadata};
|
||||
use rustc_middle::middle::exported_symbols::ExportedSymbol;
|
||||
use rustc_middle::middle::stability::DeprecationEntry;
|
||||
use rustc_middle::ty::query::Providers;
|
||||
use rustc_middle::ty::{self, TyCtxt};
|
||||
use rustc_middle::ty::{self, TyCtxt, Visibility};
|
||||
use rustc_session::utils::NativeLibKind;
|
||||
use rustc_session::{CrateDisambiguator, Session};
|
||||
use rustc_span::source_map::{Span, Spanned};
|
||||
@ -392,6 +392,20 @@ impl CStore {
|
||||
self.get_crate_data(def.krate).get_struct_field_names(def.index, sess)
|
||||
}
|
||||
|
||||
pub fn struct_field_visibilities_untracked(&self, def: DefId) -> Vec<Visibility> {
|
||||
self.get_crate_data(def.krate).get_struct_field_visibilities(def.index)
|
||||
}
|
||||
|
||||
pub fn ctor_def_id_and_kind_untracked(&self, def: DefId) -> Option<(DefId, CtorKind)> {
|
||||
self.get_crate_data(def.krate).get_ctor_def_id(def.index).map(|ctor_def_id| {
|
||||
(ctor_def_id, self.get_crate_data(def.krate).get_ctor_kind(def.index))
|
||||
})
|
||||
}
|
||||
|
||||
pub fn visibility_untracked(&self, def: DefId) -> Visibility {
|
||||
self.get_crate_data(def.krate).get_visibility(def.index)
|
||||
}
|
||||
|
||||
pub fn item_children_untracked(
|
||||
&self,
|
||||
def_id: DefId,
|
||||
|
@ -995,7 +995,20 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
||||
// Record some extra data for better diagnostics.
|
||||
let cstore = self.r.cstore();
|
||||
match res {
|
||||
Res::Def(DefKind::Struct | DefKind::Union, def_id) => {
|
||||
Res::Def(DefKind::Struct, def_id) => {
|
||||
let field_names = cstore.struct_field_names_untracked(def_id, self.r.session);
|
||||
let ctor = cstore.ctor_def_id_and_kind_untracked(def_id);
|
||||
if let Some((ctor_def_id, ctor_kind)) = ctor {
|
||||
let ctor_res = Res::Def(DefKind::Ctor(CtorOf::Struct, ctor_kind), ctor_def_id);
|
||||
let ctor_vis = cstore.visibility_untracked(ctor_def_id);
|
||||
let field_visibilities = cstore.struct_field_visibilities_untracked(def_id);
|
||||
self.r
|
||||
.struct_constructors
|
||||
.insert(def_id, (ctor_res, ctor_vis, field_visibilities));
|
||||
}
|
||||
self.insert_field_names(def_id, field_names);
|
||||
}
|
||||
Res::Def(DefKind::Union, def_id) => {
|
||||
let field_names = cstore.struct_field_names_untracked(def_id, self.r.session);
|
||||
self.insert_field_names(def_id, field_names);
|
||||
}
|
||||
@ -1007,12 +1020,6 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
|
||||
self.r.has_self.insert(def_id);
|
||||
}
|
||||
}
|
||||
Res::Def(DefKind::Ctor(CtorOf::Struct, ..), def_id) => {
|
||||
let parent = cstore.def_key(def_id).parent;
|
||||
if let Some(struct_def_id) = parent.map(|index| DefId { index, ..def_id }) {
|
||||
self.r.struct_constructors.insert(struct_def_id, (res, vis, vec![]));
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
@ -433,6 +433,21 @@ macro_rules! wrapping_int_impl {
|
||||
#[unstable(feature = "wrapping_int_impl", issue = "32463")]
|
||||
pub const MAX: Self = Self(<$t>::MAX);
|
||||
|
||||
/// Returns the size of this integer type in bits.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(wrapping_int_impl)]
|
||||
/// use std::num::Wrapping;
|
||||
///
|
||||
#[doc = concat!("assert_eq!(<Wrapping<", stringify!($t), ">>::BITS, ", stringify!($t), "::BITS);")]
|
||||
/// ```
|
||||
#[unstable(feature = "wrapping_int_impl", issue = "32463")]
|
||||
pub const BITS: u32 = <$t>::BITS;
|
||||
|
||||
/// Returns the number of ones in the binary representation of `self`.
|
||||
///
|
||||
/// # Examples
|
||||
|
@ -573,10 +573,6 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
||||
)
|
||||
}
|
||||
|
||||
fn write_loading_content(w: &mut Buffer, extra_content: &str) {
|
||||
write!(w, "{}<span class=\"loading-content\">Loading content...</span>", extra_content)
|
||||
}
|
||||
|
||||
fn trait_item(w: &mut Buffer, cx: &Context<'_>, m: &clean::Item, t: &clean::Item) {
|
||||
let name = m.name.as_ref().unwrap();
|
||||
info!("Documenting {} on {:?}", name, t.name);
|
||||
@ -601,7 +597,7 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
||||
for t in types {
|
||||
trait_item(w, cx, t, it);
|
||||
}
|
||||
write_loading_content(w, "</div>");
|
||||
w.write_str("</div>");
|
||||
}
|
||||
|
||||
if !consts.is_empty() {
|
||||
@ -614,7 +610,7 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
||||
for t in consts {
|
||||
trait_item(w, cx, t, it);
|
||||
}
|
||||
write_loading_content(w, "</div>");
|
||||
w.write_str("</div>");
|
||||
}
|
||||
|
||||
// Output the documentation for each function individually
|
||||
@ -628,7 +624,7 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
||||
for m in required {
|
||||
trait_item(w, cx, m, it);
|
||||
}
|
||||
write_loading_content(w, "</div>");
|
||||
w.write_str("</div>");
|
||||
}
|
||||
if !provided.is_empty() {
|
||||
write_small_section_header(
|
||||
@ -640,7 +636,7 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
||||
for m in provided {
|
||||
trait_item(w, cx, m, it);
|
||||
}
|
||||
write_loading_content(w, "</div>");
|
||||
w.write_str("</div>");
|
||||
}
|
||||
|
||||
// If there are methods directly on this trait object, render them here.
|
||||
@ -703,7 +699,6 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
||||
&[],
|
||||
);
|
||||
}
|
||||
write_loading_content(w, "");
|
||||
}
|
||||
|
||||
write_small_section_header(
|
||||
@ -715,7 +710,7 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
||||
for implementor in concrete {
|
||||
render_implementor(cx, implementor, it, w, &implementor_dups, &[]);
|
||||
}
|
||||
write_loading_content(w, "</div>");
|
||||
w.write_str("</div>");
|
||||
|
||||
if t.is_auto {
|
||||
write_small_section_header(
|
||||
@ -734,7 +729,7 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
||||
&collect_paths_for_type(implementor.inner_impl().for_.clone(), &cx.cache),
|
||||
);
|
||||
}
|
||||
write_loading_content(w, "</div>");
|
||||
w.write_str("</div>");
|
||||
}
|
||||
} else {
|
||||
// even without any implementations to write in, we still want the heading and list, so the
|
||||
@ -743,18 +738,16 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
|
||||
w,
|
||||
"implementors",
|
||||
"Implementors",
|
||||
"<div class=\"item-list\" id=\"implementors-list\">",
|
||||
"<div class=\"item-list\" id=\"implementors-list\"></div>",
|
||||
);
|
||||
write_loading_content(w, "</div>");
|
||||
|
||||
if t.is_auto {
|
||||
write_small_section_header(
|
||||
w,
|
||||
"synthetic-implementors",
|
||||
"Auto implementors",
|
||||
"<div class=\"item-list\" id=\"synthetic-implementors-list\">",
|
||||
"<div class=\"item-list\" id=\"synthetic-implementors-list\"></div>",
|
||||
);
|
||||
write_loading_content(w, "</div>");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,152 +156,154 @@ function hideThemeButtonState() {
|
||||
"use strict";
|
||||
|
||||
window.searchState = {
|
||||
loadingText: "Loading search results...",
|
||||
input: document.getElementsByClassName("search-input")[0],
|
||||
outputElement: function() {
|
||||
return document.getElementById("search");
|
||||
},
|
||||
title: null,
|
||||
titleBeforeSearch: document.title,
|
||||
timeout: null,
|
||||
// On the search screen, so you remain on the last tab you opened.
|
||||
//
|
||||
// 0 for "In Names"
|
||||
// 1 for "In Parameters"
|
||||
// 2 for "In Return Types"
|
||||
currentTab: 0,
|
||||
mouseMovedAfterSearch: true,
|
||||
clearInputTimeout: function() {
|
||||
if (searchState.timeout !== null) {
|
||||
clearTimeout(searchState.timeout);
|
||||
searchState.timeout = null;
|
||||
}
|
||||
},
|
||||
// Sets the focus on the search bar at the top of the page
|
||||
focus: function() {
|
||||
searchState.input.focus();
|
||||
},
|
||||
// Removes the focus from the search bar.
|
||||
defocus: function() {
|
||||
searchState.input.blur();
|
||||
},
|
||||
showResults: function(search) {
|
||||
if (search === null || typeof search === 'undefined') {
|
||||
search = searchState.outputElement();
|
||||
}
|
||||
addClass(main, "hidden");
|
||||
removeClass(search, "hidden");
|
||||
searchState.mouseMovedAfterSearch = false;
|
||||
document.title = searchState.title;
|
||||
},
|
||||
hideResults: function(search) {
|
||||
if (search === null || typeof search === 'undefined') {
|
||||
search = searchState.outputElement();
|
||||
}
|
||||
addClass(search, "hidden");
|
||||
removeClass(main, "hidden");
|
||||
document.title = searchState.titleBeforeSearch;
|
||||
// We also remove the query parameter from the URL.
|
||||
if (searchState.browserSupportsHistoryApi()) {
|
||||
history.replaceState("", window.currentCrate + " - Rust",
|
||||
getNakedUrl() + window.location.hash);
|
||||
}
|
||||
},
|
||||
getQueryStringParams: function() {
|
||||
var params = {};
|
||||
window.location.search.substring(1).split("&").
|
||||
map(function(s) {
|
||||
var pair = s.split("=");
|
||||
params[decodeURIComponent(pair[0])] =
|
||||
typeof pair[1] === "undefined" ? null : decodeURIComponent(pair[1]);
|
||||
});
|
||||
return params;
|
||||
},
|
||||
putBackSearch: function(search_input) {
|
||||
var search = searchState.outputElement();
|
||||
if (search_input.value !== "" && hasClass(search, "hidden")) {
|
||||
searchState.showResults(search);
|
||||
if (searchState.browserSupportsHistoryApi()) {
|
||||
var extra = "?search=" + encodeURIComponent(search_input.value);
|
||||
history.replaceState(search_input.value, "",
|
||||
getNakedUrl() + extra + window.location.hash);
|
||||
loadingText: "Loading search results...",
|
||||
input: document.getElementsByClassName("search-input")[0],
|
||||
outputElement: function() {
|
||||
return document.getElementById("search");
|
||||
},
|
||||
title: null,
|
||||
titleBeforeSearch: document.title,
|
||||
timeout: null,
|
||||
// On the search screen, so you remain on the last tab you opened.
|
||||
//
|
||||
// 0 for "In Names"
|
||||
// 1 for "In Parameters"
|
||||
// 2 for "In Return Types"
|
||||
currentTab: 0,
|
||||
mouseMovedAfterSearch: true,
|
||||
clearInputTimeout: function() {
|
||||
if (searchState.timeout !== null) {
|
||||
clearTimeout(searchState.timeout);
|
||||
searchState.timeout = null;
|
||||
}
|
||||
},
|
||||
// Sets the focus on the search bar at the top of the page
|
||||
focus: function() {
|
||||
searchState.input.focus();
|
||||
},
|
||||
// Removes the focus from the search bar.
|
||||
defocus: function() {
|
||||
searchState.input.blur();
|
||||
},
|
||||
showResults: function(search) {
|
||||
if (search === null || typeof search === 'undefined') {
|
||||
search = searchState.outputElement();
|
||||
}
|
||||
addClass(main, "hidden");
|
||||
removeClass(search, "hidden");
|
||||
searchState.mouseMovedAfterSearch = false;
|
||||
document.title = searchState.title;
|
||||
}
|
||||
},
|
||||
browserSupportsHistoryApi: function() {
|
||||
return window.history && typeof window.history.pushState === "function";
|
||||
},
|
||||
setup: function() {
|
||||
var search_input = searchState.input;
|
||||
if (!searchState.input) {
|
||||
return;
|
||||
}
|
||||
function loadScript(url) {
|
||||
var script = document.createElement('script');
|
||||
script.src = url;
|
||||
document.head.append(script);
|
||||
}
|
||||
|
||||
var searchLoaded = false;
|
||||
function loadSearch() {
|
||||
if (!searchLoaded) {
|
||||
searchLoaded = true;
|
||||
loadScript(window.searchJS);
|
||||
loadScript(window.searchIndexJS);
|
||||
},
|
||||
hideResults: function(search) {
|
||||
if (search === null || typeof search === 'undefined') {
|
||||
search = searchState.outputElement();
|
||||
}
|
||||
}
|
||||
|
||||
search_input.addEventListener("focus", function() {
|
||||
searchState.putBackSearch(this);
|
||||
search_input.origPlaceholder = searchState.input.placeholder;
|
||||
search_input.placeholder = "Type your search here.";
|
||||
loadSearch();
|
||||
});
|
||||
search_input.addEventListener("blur", function() {
|
||||
search_input.placeholder = searchState.input.origPlaceholder;
|
||||
});
|
||||
|
||||
document.addEventListener("mousemove", function() {
|
||||
searchState.mouseMovedAfterSearch = true;
|
||||
});
|
||||
|
||||
search_input.removeAttribute('disabled');
|
||||
|
||||
// `crates{version}.js` should always be loaded before this script, so we can use it safely.
|
||||
searchState.addCrateDropdown(window.ALL_CRATES);
|
||||
var params = searchState.getQueryStringParams();
|
||||
if (params.search !== undefined) {
|
||||
addClass(search, "hidden");
|
||||
removeClass(main, "hidden");
|
||||
document.title = searchState.titleBeforeSearch;
|
||||
// We also remove the query parameter from the URL.
|
||||
if (searchState.browserSupportsHistoryApi()) {
|
||||
history.replaceState("", window.currentCrate + " - Rust",
|
||||
getNakedUrl() + window.location.hash);
|
||||
}
|
||||
},
|
||||
getQueryStringParams: function() {
|
||||
var params = {};
|
||||
window.location.search.substring(1).split("&").
|
||||
map(function(s) {
|
||||
var pair = s.split("=");
|
||||
params[decodeURIComponent(pair[0])] =
|
||||
typeof pair[1] === "undefined" ? null : decodeURIComponent(pair[1]);
|
||||
});
|
||||
return params;
|
||||
},
|
||||
putBackSearch: function(search_input) {
|
||||
var search = searchState.outputElement();
|
||||
search.innerHTML = "<h3 style=\"text-align: center;\">" +
|
||||
searchState.loadingText + "</h3>";
|
||||
searchState.showResults(search);
|
||||
loadSearch();
|
||||
}
|
||||
},
|
||||
addCrateDropdown: function(crates) {
|
||||
var elem = document.getElementById("crate-search");
|
||||
|
||||
if (!elem) {
|
||||
return;
|
||||
}
|
||||
var savedCrate = getSettingValue("saved-filter-crate");
|
||||
for (var i = 0, len = crates.length; i < len; ++i) {
|
||||
var option = document.createElement("option");
|
||||
option.value = crates[i];
|
||||
option.innerText = crates[i];
|
||||
elem.appendChild(option);
|
||||
// Set the crate filter from saved storage, if the current page has the saved crate
|
||||
// filter.
|
||||
//
|
||||
// If not, ignore the crate filter -- we want to support filtering for crates on sites
|
||||
// like doc.rust-lang.org where the crates may differ from page to page while on the
|
||||
// same domain.
|
||||
if (crates[i] === savedCrate) {
|
||||
elem.value = savedCrate;
|
||||
if (search_input.value !== "" && hasClass(search, "hidden")) {
|
||||
searchState.showResults(search);
|
||||
if (searchState.browserSupportsHistoryApi()) {
|
||||
var extra = "?search=" + encodeURIComponent(search_input.value);
|
||||
history.replaceState(search_input.value, "",
|
||||
getNakedUrl() + extra + window.location.hash);
|
||||
}
|
||||
document.title = searchState.title;
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
browserSupportsHistoryApi: function() {
|
||||
return window.history && typeof window.history.pushState === "function";
|
||||
},
|
||||
setup: function() {
|
||||
var search_input = searchState.input;
|
||||
if (!searchState.input) {
|
||||
return;
|
||||
}
|
||||
function loadScript(url) {
|
||||
var script = document.createElement('script');
|
||||
script.src = url;
|
||||
document.head.append(script);
|
||||
}
|
||||
|
||||
var searchLoaded = false;
|
||||
function loadSearch() {
|
||||
if (!searchLoaded) {
|
||||
searchLoaded = true;
|
||||
loadScript(window.searchJS);
|
||||
loadScript(window.searchIndexJS);
|
||||
}
|
||||
}
|
||||
|
||||
search_input.addEventListener("focus", function() {
|
||||
searchState.putBackSearch(this);
|
||||
search_input.origPlaceholder = searchState.input.placeholder;
|
||||
search_input.placeholder = "Type your search here.";
|
||||
loadSearch();
|
||||
});
|
||||
search_input.addEventListener("blur", function() {
|
||||
search_input.placeholder = searchState.input.origPlaceholder;
|
||||
});
|
||||
|
||||
document.addEventListener("mousemove", function() {
|
||||
searchState.mouseMovedAfterSearch = true;
|
||||
});
|
||||
|
||||
search_input.removeAttribute('disabled');
|
||||
|
||||
// `crates{version}.js` should always be loaded before this script, so we can use it
|
||||
// safely.
|
||||
searchState.addCrateDropdown(window.ALL_CRATES);
|
||||
var params = searchState.getQueryStringParams();
|
||||
if (params.search !== undefined) {
|
||||
var search = searchState.outputElement();
|
||||
search.innerHTML = "<h3 style=\"text-align: center;\">" +
|
||||
searchState.loadingText + "</h3>";
|
||||
searchState.showResults(search);
|
||||
loadSearch();
|
||||
}
|
||||
},
|
||||
addCrateDropdown: function(crates) {
|
||||
var elem = document.getElementById("crate-search");
|
||||
|
||||
if (!elem) {
|
||||
return;
|
||||
}
|
||||
var savedCrate = getSettingValue("saved-filter-crate");
|
||||
for (var i = 0, len = crates.length; i < len; ++i) {
|
||||
var option = document.createElement("option");
|
||||
option.value = crates[i];
|
||||
option.innerText = crates[i];
|
||||
elem.appendChild(option);
|
||||
// Set the crate filter from saved storage, if the current page has the saved crate
|
||||
// filter.
|
||||
//
|
||||
// If not, ignore the crate filter -- we want to support filtering for crates on
|
||||
// sites like doc.rust-lang.org where the crates may differ from page to page while
|
||||
// on the
|
||||
// same domain.
|
||||
if (crates[i] === savedCrate) {
|
||||
elem.value = savedCrate;
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
function getPageId() {
|
||||
@ -1045,26 +1047,6 @@ function hideThemeButtonState() {
|
||||
};
|
||||
}
|
||||
|
||||
if (main) {
|
||||
onEachLazy(main.getElementsByClassName("loading-content"), function(e) {
|
||||
e.remove();
|
||||
});
|
||||
onEachLazy(main.childNodes, function(e) {
|
||||
// Unhide the actual content once loading is complete. Headers get
|
||||
// flex treatment for their horizontal layout, divs get block treatment
|
||||
// for vertical layout (column-oriented flex layout for divs caused
|
||||
// errors in mobile browsers).
|
||||
if (e.tagName === "H2" || e.tagName === "H3") {
|
||||
var nextTagName = e.nextElementSibling.tagName;
|
||||
if (nextTagName === "H2" || nextTagName === "H3") {
|
||||
e.nextElementSibling.style.display = "flex";
|
||||
} else if (nextTagName !== "DETAILS") {
|
||||
e.nextElementSibling.style.display = "block";
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function buildHelperPopup() {
|
||||
var popup = document.createElement("aside");
|
||||
addClass(popup, "hidden");
|
||||
|
@ -4,31 +4,6 @@ of content is hidden by default (depending on the settings too), we have to over
|
||||
rules.
|
||||
*/
|
||||
|
||||
#main > h2 + div, #main > h2 + h3, #main > h3 + div {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.loading-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#main > h2 + div, #main > h3 + div {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#main > h2 + h3 {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#main .impl-items .hidden {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
#main .impl-items h4.hidden {
|
||||
/* Without this rule, the version and the "[src]" span aren't on the same line as the header. */
|
||||
display: flex !important;
|
||||
}
|
||||
|
||||
#main .attributes {
|
||||
/* Since there is no toggle (the "[-]") when JS is disabled, no need for this margin either. */
|
||||
margin-left: 0 !important;
|
||||
|
@ -145,7 +145,7 @@ h4.type.trait-impl, h4.associatedconstant.trait-impl, h4.associatedtype.trait-im
|
||||
|
||||
h1, h2, h3, h4,
|
||||
.sidebar, a.source, .search-input, .content table td:first-child > a,
|
||||
.collapse-toggle, div.item-list .out-of-band,
|
||||
div.item-list .out-of-band,
|
||||
#source-sidebar, #sidebar-toggle,
|
||||
details.rustdoc-toggle > summary::before,
|
||||
details.undocumented > summary::before,
|
||||
@ -431,11 +431,6 @@ nav.sub {
|
||||
#main > .docblock h2 { font-size: 1.15em; }
|
||||
#main > .docblock h3, #main > .docblock h4, #main > .docblock h5 { font-size: 1em; }
|
||||
|
||||
#main > h2 + div, #main > h2 + h3, #main > h3 + div {
|
||||
display: none; /* Changed to flex or block via js once the page is loaded */
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.docblock h1 { font-size: 1em; }
|
||||
.docblock h2 { font-size: 0.95em; }
|
||||
.docblock h3, .docblock h4, .docblock h5 { font-size: 0.9em; }
|
||||
@ -565,9 +560,6 @@ h4 > code, h3 > code, .invisible > code {
|
||||
.content .docblock >.impl-items table td {
|
||||
padding: 0;
|
||||
}
|
||||
.toggle-wrapper.marg-left > .collapse-toggle {
|
||||
left: -24px;
|
||||
}
|
||||
.content .docblock > .impl-items .table-display, .impl-items table td {
|
||||
border: none;
|
||||
}
|
||||
@ -974,45 +966,6 @@ a.test-arrow:hover{
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.collapse-toggle {
|
||||
font-weight: 300;
|
||||
position: absolute;
|
||||
left: -23px;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
h3 > .collapse-toggle, h4 > .collapse-toggle {
|
||||
font-size: 0.8em;
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.toggle-wrapper > .collapse-toggle {
|
||||
left: -24px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.toggle-wrapper {
|
||||
position: relative;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.toggle-wrapper.collapsed {
|
||||
height: 25px;
|
||||
transition: height .2s;
|
||||
margin-bottom: .6em;
|
||||
}
|
||||
|
||||
.collapse-toggle > .inner {
|
||||
display: inline-block;
|
||||
width: 1.2ch;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.collapse-toggle.hidden-default {
|
||||
position: relative;
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.since + .srclink {
|
||||
display: table-cell;
|
||||
padding-left: 10px;
|
||||
@ -1029,14 +982,6 @@ h3 > .collapse-toggle, h4 > .collapse-toggle {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.toggle-wrapper > .collapse-toggle {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.variant + .toggle-wrapper + .docblock > p {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.sub-variant, .sub-variant > h3 {
|
||||
margin-top: 0px !important;
|
||||
padding-top: 1px;
|
||||
@ -1457,14 +1402,6 @@ h4 > .notable-traits {
|
||||
position: inherit;
|
||||
}
|
||||
|
||||
.toggle-wrapper > .collapse-toggle {
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
.toggle-wrapper {
|
||||
height: 1.5em;
|
||||
}
|
||||
|
||||
#search {
|
||||
margin-left: 0;
|
||||
}
|
||||
@ -1555,14 +1492,6 @@ h4 > .notable-traits {
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
|
||||
.collapse-toggle {
|
||||
left: -20px;
|
||||
}
|
||||
|
||||
.impl > .collapse-toggle {
|
||||
left: -10px;
|
||||
}
|
||||
|
||||
.item-list > details.rustdoc-toggle > summary:not(.hideme)::before {
|
||||
left: -10px;
|
||||
}
|
||||
@ -1602,7 +1531,7 @@ h4 > .notable-traits {
|
||||
}
|
||||
|
||||
@media print {
|
||||
nav.sub, .content .out-of-band, .collapse-toggle {
|
||||
nav.sub, .content .out-of-band {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
@ -1505,7 +1505,7 @@ window.initSearch = function(rawSearchIndex) {
|
||||
};
|
||||
|
||||
if (window.searchIndex !== undefined) {
|
||||
initSearch(window.searchIndex);
|
||||
initSearch(window.searchIndex);
|
||||
}
|
||||
|
||||
})();
|
||||
|
@ -224,7 +224,6 @@ a {
|
||||
color: #39AFD7;
|
||||
}
|
||||
|
||||
.collapse-toggle,
|
||||
details.rustdoc-toggle > summary.hideme > span,
|
||||
details.rustdoc-toggle > summary::before,
|
||||
details.undocumented > summary::before {
|
||||
|
@ -186,7 +186,6 @@ a.test-arrow {
|
||||
color: #dedede;
|
||||
}
|
||||
|
||||
.collapse-toggle,
|
||||
details.rustdoc-toggle > summary.hideme > span,
|
||||
details.rustdoc-toggle > summary::before,
|
||||
details.undocumented > summary::before {
|
||||
|
@ -184,7 +184,6 @@ a.test-arrow {
|
||||
color: #f5f5f5;
|
||||
}
|
||||
|
||||
.collapse-toggle,
|
||||
details.rustdoc-toggle > summary.hideme > span,
|
||||
details.rustdoc-toggle > summary::before,
|
||||
details.undocumented > summary::before {
|
||||
|
@ -1,8 +1,6 @@
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:5:5
|
||||
|
|
||||
LL | fn foo(x: &()) {
|
||||
| --- help: add explicit lifetime `'static` to the type of `x`: `&'static ()`
|
||||
LL | / bar(|| {
|
||||
LL | |
|
||||
LL | | let _ = x;
|
||||
|
@ -1,8 +1,6 @@
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/closure-bounds-static-cant-capture-borrowed.rs:5:5
|
||||
|
|
||||
LL | fn foo(x: &()) {
|
||||
| --- help: add explicit lifetime `'static` to the type of `x`: `&'static ()`
|
||||
LL | bar(|| {
|
||||
| ^^^ lifetime `'static` required
|
||||
|
||||
|
@ -1,9 +1,6 @@
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/generator-region-requirements.rs:12:51
|
||||
|
|
||||
LL | fn dangle(x: &mut i32) -> &'static mut i32 {
|
||||
| -------- help: add explicit lifetime `'static` to the type of `x`: `&'static mut i32`
|
||||
...
|
||||
LL | GeneratorState::Complete(c) => return c,
|
||||
| ^ lifetime `'static` required
|
||||
|
||||
|
@ -1,24 +1,18 @@
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/projection-type-lifetime-mismatch.rs:18:5
|
||||
|
|
||||
LL | fn f(x: &impl for<'a> X<Y<'a> = &'a ()>) -> &'static () {
|
||||
| ------------------------------- help: add explicit lifetime `'static` to the type of `x`: `&'static impl for<'a> X<Y<'a> = &'a ()>`
|
||||
LL | x.m()
|
||||
| ^^^^^ lifetime `'static` required
|
||||
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/projection-type-lifetime-mismatch.rs:23:5
|
||||
|
|
||||
LL | fn g<T: for<'a> X<Y<'a> = &'a ()>>(x: &T) -> &'static () {
|
||||
| -- help: add explicit lifetime `'static` to the type of `x`: `&'static T`
|
||||
LL | x.m()
|
||||
| ^^^^^ lifetime `'static` required
|
||||
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/projection-type-lifetime-mismatch.rs:28:5
|
||||
|
|
||||
LL | fn h(x: &()) -> &'static () {
|
||||
| --- help: add explicit lifetime `'static` to the type of `x`: `&'static ()`
|
||||
LL | x.m()
|
||||
| ^^^^^ lifetime `'static` required
|
||||
|
||||
|
@ -3,3 +3,15 @@ pub struct Bar(pub u8, u8, u8);
|
||||
pub fn make_bar() -> Bar {
|
||||
Bar(1, 12, 10)
|
||||
}
|
||||
|
||||
mod inner {
|
||||
pub struct Foo(u8, pub u8, u8);
|
||||
|
||||
impl Foo {
|
||||
pub fn new() -> Foo {
|
||||
Foo(1, 12, 10)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub use inner::Foo;
|
||||
|
@ -1,8 +1,6 @@
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/issue-46983.rs:2:5
|
||||
|
|
||||
LL | fn foo(x: &u32) -> &'static u32 {
|
||||
| ---- help: add explicit lifetime `'static` to the type of `x`: `&'static u32`
|
||||
LL | &*x
|
||||
| ^^^ lifetime `'static` required
|
||||
|
||||
|
@ -3,9 +3,12 @@
|
||||
|
||||
extern crate issue_75907 as a;
|
||||
|
||||
use a::{make_bar, Bar};
|
||||
use a::{make_bar, Bar, Foo};
|
||||
|
||||
fn main() {
|
||||
let Bar(x, y, z) = make_bar();
|
||||
//~^ ERROR cannot match against a tuple struct which contains private fields
|
||||
|
||||
let Foo(x, y, z) = Foo::new();
|
||||
//~^ ERROR cannot match against a tuple struct which contains private fields
|
||||
}
|
||||
|
@ -2,8 +2,30 @@ error[E0532]: cannot match against a tuple struct which contains private fields
|
||||
--> $DIR/issue-75907_b.rs:9:9
|
||||
|
|
||||
LL | let Bar(x, y, z) = make_bar();
|
||||
| ^^^ constructor is not visible here due to private fields
|
||||
| ^^^
|
||||
|
|
||||
note: constructor is not visible here due to private fields
|
||||
--> $DIR/issue-75907_b.rs:9:16
|
||||
|
|
||||
LL | let Bar(x, y, z) = make_bar();
|
||||
| ^ ^ private field
|
||||
| |
|
||||
| private field
|
||||
|
||||
error: aborting due to previous error
|
||||
error[E0532]: cannot match against a tuple struct which contains private fields
|
||||
--> $DIR/issue-75907_b.rs:12:9
|
||||
|
|
||||
LL | let Foo(x, y, z) = Foo::new();
|
||||
| ^^^
|
||||
|
|
||||
note: constructor is not visible here due to private fields
|
||||
--> $DIR/issue-75907_b.rs:12:13
|
||||
|
|
||||
LL | let Foo(x, y, z) = Foo::new();
|
||||
| ^ ^ private field
|
||||
| |
|
||||
| private field
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0532`.
|
||||
|
@ -1,8 +1,6 @@
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/region-lbr-anon-does-not-outlive-static.rs:9:5
|
||||
|
|
||||
LL | fn foo(x: &u32) -> &'static u32 {
|
||||
| ---- help: add explicit lifetime `ReStatic` to the type of `x`: `&ReStatic u32`
|
||||
LL | &*x
|
||||
| ^^^ lifetime `ReStatic` required
|
||||
|
||||
|
@ -12,9 +12,6 @@ LL | *x
|
||||
error[E0621]: explicit lifetime required in the type of `s`
|
||||
--> $DIR/guarantor-issue-46974.rs:15:5
|
||||
|
|
||||
LL | fn bar(s: &Box<(i32,)>) -> &'static i32 {
|
||||
| ------------ help: add explicit lifetime `'static` to the type of `s`: `&'static Box<(i32,)>`
|
||||
LL | // FIXME(#46983): error message should be better
|
||||
LL | &s.0
|
||||
| ^^^^ lifetime `'static` required
|
||||
|
||||
|
@ -11,17 +11,12 @@ LL | t
|
||||
error[E0621]: explicit lifetime required in the type of `u`
|
||||
--> $DIR/regions-static-bound.rs:14:5
|
||||
|
|
||||
LL | fn error(u: &(), v: &()) {
|
||||
| --- help: add explicit lifetime `'static` to the type of `u`: `&'static ()`
|
||||
LL | static_id(&u);
|
||||
| ^^^^^^^^^^^^^ lifetime `'static` required
|
||||
|
||||
error[E0621]: explicit lifetime required in the type of `v`
|
||||
--> $DIR/regions-static-bound.rs:16:5
|
||||
|
|
||||
LL | fn error(u: &(), v: &()) {
|
||||
| --- help: add explicit lifetime `'static` to the type of `v`: `&'static ()`
|
||||
...
|
||||
LL | static_id_indirect(&v);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ lifetime `'static` required
|
||||
|
||||
|
@ -14,17 +14,12 @@ LL | fn static_id_wrong_way<'a>(t: &'a ()) -> &'static () where 'static: 'a {
|
||||
error[E0621]: explicit lifetime required in the type of `u`
|
||||
--> $DIR/regions-static-bound.rs:14:5
|
||||
|
|
||||
LL | fn error(u: &(), v: &()) {
|
||||
| --- help: add explicit lifetime `'static` to the type of `u`: `&'static ()`
|
||||
LL | static_id(&u);
|
||||
| ^^^^^^^^^ lifetime `'static` required
|
||||
|
||||
error[E0621]: explicit lifetime required in the type of `v`
|
||||
--> $DIR/regions-static-bound.rs:16:5
|
||||
|
|
||||
LL | fn error(u: &(), v: &()) {
|
||||
| --- help: add explicit lifetime `'static` to the type of `v`: `&'static ()`
|
||||
...
|
||||
LL | static_id_indirect(&v);
|
||||
| ^^^^^^^^^^^^^^^^^^ lifetime `'static` required
|
||||
|
||||
|
@ -11,17 +11,12 @@ LL | t
|
||||
error[E0621]: explicit lifetime required in the type of `u`
|
||||
--> $DIR/regions-static-bound.rs:14:5
|
||||
|
|
||||
LL | fn error(u: &(), v: &()) {
|
||||
| --- help: add explicit lifetime `'static` to the type of `u`: `&'static ()`
|
||||
LL | static_id(&u);
|
||||
| ^^^^^^^^^^^^^ lifetime `'static` required
|
||||
|
||||
error[E0621]: explicit lifetime required in the type of `v`
|
||||
--> $DIR/regions-static-bound.rs:16:5
|
||||
|
|
||||
LL | fn error(u: &(), v: &()) {
|
||||
| --- help: add explicit lifetime `'static` to the type of `v`: `&'static ()`
|
||||
...
|
||||
LL | static_id_indirect(&v);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ lifetime `'static` required
|
||||
|
||||
|
@ -2,7 +2,7 @@ error[E0423]: cannot initialize a tuple struct which contains private fields
|
||||
--> $DIR/struct.rs:20:14
|
||||
|
|
||||
LL | let ts = TupleStruct(640, 480);
|
||||
| ^^^^^^^^^^^ constructor is not visible here due to private fields
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error[E0423]: expected value, found struct `UnitStruct`
|
||||
--> $DIR/struct.rs:29:14
|
||||
|
Loading…
Reference in New Issue
Block a user