Add Rustdoc book link to scrape examples help. Remove remaining panic
locations in scrape examples.
This commit is contained in:
parent
b9ecdca0d5
commit
6a18b68655
2 changed files with 51 additions and 22 deletions
|
@ -79,6 +79,7 @@ use crate::html::sources;
|
||||||
use crate::html::static_files::SCRAPE_EXAMPLES_HELP_MD;
|
use crate::html::static_files::SCRAPE_EXAMPLES_HELP_MD;
|
||||||
use crate::scrape_examples::{CallData, CallLocation};
|
use crate::scrape_examples::{CallData, CallLocation};
|
||||||
use crate::try_none;
|
use crate::try_none;
|
||||||
|
use crate::DOC_RUST_LANG_ORG_CHANNEL;
|
||||||
|
|
||||||
/// A pair of name and its optional document.
|
/// A pair of name and its optional document.
|
||||||
crate type NameDoc = (String, Option<String>);
|
crate type NameDoc = (String, Option<String>);
|
||||||
|
@ -463,17 +464,22 @@ fn settings(root_path: &str, suffix: &str, theme_names: Vec<String>) -> Result<S
|
||||||
}
|
}
|
||||||
|
|
||||||
fn scrape_examples_help(shared: &SharedContext<'_>) -> String {
|
fn scrape_examples_help(shared: &SharedContext<'_>) -> String {
|
||||||
let content = SCRAPE_EXAMPLES_HELP_MD;
|
let mut content = SCRAPE_EXAMPLES_HELP_MD.to_owned();
|
||||||
|
content.push_str(&format!(
|
||||||
|
"## More information\n\n\
|
||||||
|
If you want more information about this feature, please read the [corresponding chapter in the Rustdoc book]({}/rustdoc/scraped-examples.html).",
|
||||||
|
DOC_RUST_LANG_ORG_CHANNEL));
|
||||||
|
|
||||||
let mut ids = IdMap::default();
|
let mut ids = IdMap::default();
|
||||||
format!(
|
format!(
|
||||||
"<div class=\"main-heading\">
|
"<div class=\"main-heading\">\
|
||||||
<h1 class=\"fqn\">\
|
<h1 class=\"fqn\">\
|
||||||
<span class=\"in-band\">About scraped examples</span>\
|
<span class=\"in-band\">About scraped examples</span>\
|
||||||
</h1>\
|
</h1>\
|
||||||
</div>\
|
</div>\
|
||||||
<div>{}</div>",
|
<div>{}</div>",
|
||||||
Markdown {
|
Markdown {
|
||||||
content,
|
content: &content,
|
||||||
links: &[],
|
links: &[],
|
||||||
ids: &mut ids,
|
ids: &mut ids,
|
||||||
error_codes: shared.codes,
|
error_codes: shared.codes,
|
||||||
|
|
|
@ -71,14 +71,14 @@ crate struct SyntaxRange {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SyntaxRange {
|
impl SyntaxRange {
|
||||||
fn new(span: rustc_span::Span, file: &SourceFile) -> Self {
|
fn new(span: rustc_span::Span, file: &SourceFile) -> Option<Self> {
|
||||||
let get_pos = |bytepos: BytePos| file.original_relative_byte_pos(bytepos).0;
|
let get_pos = |bytepos: BytePos| file.original_relative_byte_pos(bytepos).0;
|
||||||
let get_line = |bytepos: BytePos| file.lookup_line(bytepos).unwrap();
|
let get_line = |bytepos: BytePos| file.lookup_line(bytepos);
|
||||||
|
|
||||||
SyntaxRange {
|
Some(SyntaxRange {
|
||||||
byte_span: (get_pos(span.lo()), get_pos(span.hi())),
|
byte_span: (get_pos(span.lo()), get_pos(span.hi())),
|
||||||
line_span: (get_line(span.lo()), get_line(span.hi())),
|
line_span: (get_line(span.lo())?, get_line(span.hi())?),
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,12 +95,12 @@ impl CallLocation {
|
||||||
ident_span: rustc_span::Span,
|
ident_span: rustc_span::Span,
|
||||||
enclosing_item_span: rustc_span::Span,
|
enclosing_item_span: rustc_span::Span,
|
||||||
source_file: &SourceFile,
|
source_file: &SourceFile,
|
||||||
) -> Self {
|
) -> Option<Self> {
|
||||||
CallLocation {
|
Some(CallLocation {
|
||||||
call_expr: SyntaxRange::new(expr_span, source_file),
|
call_expr: SyntaxRange::new(expr_span, source_file)?,
|
||||||
call_ident: SyntaxRange::new(ident_span, source_file),
|
call_ident: SyntaxRange::new(ident_span, source_file)?,
|
||||||
enclosing_item: SyntaxRange::new(enclosing_item_span, source_file),
|
enclosing_item: SyntaxRange::new(enclosing_item_span, source_file)?,
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ where
|
||||||
// If this span comes from a macro expansion, then the source code may not actually show
|
// If this span comes from a macro expansion, then the source code may not actually show
|
||||||
// a use of the given item, so it would be a poor example. Hence, we skip all uses in macros.
|
// a use of the given item, so it would be a poor example. Hence, we skip all uses in macros.
|
||||||
if call_span.from_expansion() {
|
if call_span.from_expansion() {
|
||||||
trace!("Rejecting expr from macro: {:?}", call_span);
|
trace!("Rejecting expr from macro: {call_span:?}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ where
|
||||||
.hir()
|
.hir()
|
||||||
.span_with_body(tcx.hir().local_def_id_to_hir_id(tcx.hir().get_parent_item(ex.hir_id)));
|
.span_with_body(tcx.hir().local_def_id_to_hir_id(tcx.hir().get_parent_item(ex.hir_id)));
|
||||||
if enclosing_item_span.from_expansion() {
|
if enclosing_item_span.from_expansion() {
|
||||||
trace!("Rejecting expr ({:?}) from macro item: {:?}", call_span, enclosing_item_span);
|
trace!("Rejecting expr ({call_span:?}) from macro item: {enclosing_item_span:?}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,11 +224,27 @@ where
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(file_path) = file_path {
|
if let Some(file_path) = file_path {
|
||||||
let abs_path = fs::canonicalize(file_path.clone()).unwrap();
|
let abs_path = match fs::canonicalize(file_path.clone()) {
|
||||||
|
Ok(abs_path) => abs_path,
|
||||||
|
Err(_) => {
|
||||||
|
trace!("Could not canonicalize file path: {}", file_path.display());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let cx = &self.cx;
|
let cx = &self.cx;
|
||||||
let mk_call_data = || {
|
|
||||||
let clean_span = crate::clean::types::Span::new(call_span);
|
let clean_span = crate::clean::types::Span::new(call_span);
|
||||||
let url = cx.href_from_span(clean_span, false).unwrap();
|
let url = match cx.href_from_span(clean_span, false) {
|
||||||
|
Some(url) => url,
|
||||||
|
None => {
|
||||||
|
trace!(
|
||||||
|
"Rejecting expr ({call_span:?}) whose clean span ({clean_span:?}) cannot be turned into a link"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let mk_call_data = || {
|
||||||
let display_name = file_path.display().to_string();
|
let display_name = file_path.display().to_string();
|
||||||
let edition = call_span.edition();
|
let edition = call_span.edition();
|
||||||
CallData { locations: Vec::new(), url, display_name, edition }
|
CallData { locations: Vec::new(), url, display_name, edition }
|
||||||
|
@ -240,7 +256,14 @@ where
|
||||||
trace!("Including expr: {:?}", call_span);
|
trace!("Including expr: {:?}", call_span);
|
||||||
let enclosing_item_span =
|
let enclosing_item_span =
|
||||||
source_map.span_extend_to_prev_char(enclosing_item_span, '\n', false);
|
source_map.span_extend_to_prev_char(enclosing_item_span, '\n', false);
|
||||||
let location = CallLocation::new(call_span, ident_span, enclosing_item_span, &file);
|
let location =
|
||||||
|
match CallLocation::new(call_span, ident_span, enclosing_item_span, &file) {
|
||||||
|
Some(location) => location,
|
||||||
|
None => {
|
||||||
|
trace!("Could not get serializable call location for {call_span:?}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
fn_entries.entry(abs_path).or_insert_with(mk_call_data).locations.push(location);
|
fn_entries.entry(abs_path).or_insert_with(mk_call_data).locations.push(location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -274,8 +297,8 @@ crate fn run(
|
||||||
.map(|(crate_num, _)| **crate_num)
|
.map(|(crate_num, _)| **crate_num)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
debug!("All crates in TyCtxt: {:?}", all_crates);
|
debug!("All crates in TyCtxt: {all_crates:?}");
|
||||||
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 = FxHashMap::default();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue