Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 8 pull requests #100516

Merged
merged 22 commits into from
Aug 14, 2022
Merged
Changes from 2 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
86bdb3e
Rustdoc-Json: Add `Path` type for traits.
aDotInTheVoid Aug 9, 2022
0fb4ef6
Suggest path separator when a dot is used on a trait
fmease Aug 10, 2022
48c0341
suggest removing a semicolon after impl/trait items
TaKO8Ki Aug 12, 2022
b821ce6
enum variant ctor inherits stability of variant
compiler-errors Aug 11, 2022
6925f41
Check ctor for missing stability
compiler-errors Aug 11, 2022
20121fa
Point out a single arg if we have a single arg incompatibility
compiler-errors Jul 23, 2022
262644d
And for closures
compiler-errors Jul 23, 2022
237cbe9
Adjust span of closure param
compiler-errors Jul 23, 2022
c608918
Address nit
compiler-errors Aug 12, 2022
de8dedb
Use an extensionless `x` script for non-Windows
cuviper Aug 12, 2022
d47df26
use `span_suggestion` instead of `span_suggestion_verbose`
TaKO8Ki Aug 13, 2022
b0cd1e1
Label argument coercion errors
compiler-errors Aug 13, 2022
aa1a07f
Do not inline non-simple argument type errors into labels
compiler-errors Aug 13, 2022
752b0e0
make clean::Item::span return option instead of dummy span
compiler-errors Aug 9, 2022
2af3445
Rollup merge of #99646 - compiler-errors:arg-mismatch-single-arg-labe…
compiler-errors Aug 14, 2022
d496c4e
Rollup merge of #100299 - compiler-errors:issue-100283, r=notriddle
compiler-errors Aug 14, 2022
4989f6a
Rollup merge of #100335 - aDotInTheVoid:rdj-resolved-path, r=Guillaum…
compiler-errors Aug 14, 2022
e248c7f
Rollup merge of #100367 - fmease:fix-100365, r=compiler-errors
compiler-errors Aug 14, 2022
d46451c
Rollup merge of #100431 - compiler-errors:enum-ctor-variant-stab, r=e…
compiler-errors Aug 14, 2022
86e1d1e
Rollup merge of #100446 - TaKO8Ki:suggest-removing-semicolon-after-im…
compiler-errors Aug 14, 2022
809fc86
Rollup merge of #100468 - cuviper:lazy-x, r=jyn514
compiler-errors Aug 14, 2022
b3e76aa
Rollup merge of #100479 - compiler-errors:argument-type-error-improve…
compiler-errors Aug 14, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 7 additions & 16 deletions src/librustdoc/clean/types.rs
Original file line number Diff line number Diff line change
@@ -415,29 +415,28 @@ impl Item {
.unwrap_or(false)
}

pub(crate) fn span(&self, tcx: TyCtxt<'_>) -> Span {
pub(crate) fn span(&self, tcx: TyCtxt<'_>) -> Option<Span> {
let kind = match &*self.kind {
ItemKind::StrippedItem(k) => k,
_ => &*self.kind,
};
match kind {
ItemKind::ModuleItem(Module { span, .. }) => *span,
ItemKind::ImplItem(box Impl { kind: ImplKind::Auto, .. }) => Span::dummy(),
ItemKind::ModuleItem(Module { span, .. }) => Some(*span),
ItemKind::ImplItem(box Impl { kind: ImplKind::Auto, .. }) => None,
ItemKind::ImplItem(box Impl { kind: ImplKind::Blanket(_), .. }) => {
if let ItemId::Blanket { impl_id, .. } = self.item_id {
rustc_span(impl_id, tcx)
Some(rustc_span(impl_id, tcx))
} else {
panic!("blanket impl item has non-blanket ID")
}
}
_ => {
self.item_id.as_def_id().map(|did| rustc_span(did, tcx)).unwrap_or_else(Span::dummy)
}
_ => self.item_id.as_def_id().map(|did| rustc_span(did, tcx)),
}
}

pub(crate) fn attr_span(&self, tcx: TyCtxt<'_>) -> rustc_span::Span {
crate::passes::span_of_attrs(&self.attrs).unwrap_or_else(|| self.span(tcx).inner())
crate::passes::span_of_attrs(&self.attrs)
.unwrap_or_else(|| self.span(tcx).map_or(rustc_span::DUMMY_SP, |span| span.inner()))
}

/// Finds the `doc` attribute as a NameValue and returns the corresponding
@@ -2109,14 +2108,6 @@ impl Span {
self.0
}

pub(crate) fn dummy() -> Self {
Self(rustc_span::DUMMY_SP)
}

pub(crate) fn is_dummy(&self) -> bool {
self.0.is_dummy()
}

pub(crate) fn filename(&self, sess: &Session) -> FileName {
sess.source_map().span_to_filename(self.0)
}
5 changes: 1 addition & 4 deletions src/librustdoc/html/render/context.rs
Original file line number Diff line number Diff line change
@@ -301,13 +301,10 @@ impl<'tcx> Context<'tcx> {
/// may happen, for example, with externally inlined items where the source
/// of their crate documentation isn't known.
pub(super) fn src_href(&self, item: &clean::Item) -> Option<String> {
self.href_from_span(item.span(self.tcx()), true)
self.href_from_span(item.span(self.tcx())?, true)
}

pub(crate) fn href_from_span(&self, span: clean::Span, with_lines: bool) -> Option<String> {
if span.is_dummy() {
return None;
}
let mut root = self.root_path();
let mut path = String::new();
let cnum = span.cnum(self.sess());
2 changes: 1 addition & 1 deletion src/librustdoc/html/render/mod.rs
Original file line number Diff line number Diff line change
@@ -2677,7 +2677,7 @@ fn render_call_locations(w: &mut Buffer, cx: &mut Context<'_>, item: &clean::Ite
let contents = match fs::read_to_string(&path) {
Ok(contents) => contents,
Err(err) => {
let span = item.span(tcx).inner();
let span = item.span(tcx).map_or(rustc_span::DUMMY_SP, |span| span.inner());
tcx.sess
.span_err(span, &format!("failed to read file {}: {}", path.display(), err));
return false;
2 changes: 2 additions & 0 deletions src/librustdoc/html/sources.rs
Original file line number Diff line number Diff line change
@@ -53,6 +53,7 @@ impl LocalSourcesCollector<'_, '_> {
fn add_local_source(&mut self, item: &clean::Item) {
let sess = self.tcx.sess;
let span = item.span(self.tcx);
let Some(span) = span else { return };
// skip all synthetic "files"
if !is_real_and_local(span, sess) {
return;
@@ -109,6 +110,7 @@ impl DocVisitor for SourceCollector<'_, '_> {

let tcx = self.cx.tcx();
let span = item.span(tcx);
let Some(span) = span else { return };
let sess = tcx.sess;

// If we're not rendering sources, there's nothing to do.
2 changes: 1 addition & 1 deletion src/librustdoc/json/conversions.rs
Original file line number Diff line number Diff line change
@@ -59,7 +59,7 @@ impl JsonRenderer<'_> {
id: from_item_id_with_name(item_id, self.tcx, name),
crate_id: item_id.krate().as_u32(),
name: name.map(|sym| sym.to_string()),
span: self.convert_span(span),
span: span.and_then(|span| self.convert_span(span)),
visibility: self.convert_visibility(visibility),
docs,
attrs,
18 changes: 10 additions & 8 deletions src/librustdoc/passes/calculate_doc_coverage.rs
Original file line number Diff line number Diff line change
@@ -215,7 +215,6 @@ impl<'a, 'b> DocVisitor for CoverageCalculator<'a, 'b> {
None,
);

let filename = i.span(self.ctx.tcx).filename(self.ctx.sess());
let has_doc_example = tests.found_tests != 0;
// The `expect_def_id()` should be okay because `local_def_id_to_hir_id`
// would presumably panic if a fake `DefIndex` were passed.
@@ -261,13 +260,16 @@ impl<'a, 'b> DocVisitor for CoverageCalculator<'a, 'b> {
let should_have_docs = !should_be_ignored
&& (level != lint::Level::Allow || matches!(source, LintLevelSource::Default));

debug!("counting {:?} {:?} in {:?}", i.type_(), i.name, filename);
self.items.entry(filename).or_default().count_item(
has_docs,
has_doc_example,
should_have_doc_example(self.ctx, i),
should_have_docs,
);
if let Some(span) = i.span(self.ctx.tcx) {
let filename = span.filename(self.ctx.sess());
debug!("counting {:?} {:?} in {:?}", i.type_(), i.name, filename);
self.items.entry(filename).or_default().count_item(
has_docs,
has_doc_example,
should_have_doc_example(self.ctx, i),
should_have_docs,
);
}
}
}

18 changes: 18 additions & 0 deletions src/test/rustdoc-json/impls/auto.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#![feature(no_core, auto_traits, lang_items)]
#![no_core]

#[lang = "sized"]
trait Sized {}

pub auto trait Bar {}

/// has span
impl Foo {
pub fn baz(&self) {}
}

// Testing spans, so all tests below code
// @is auto.json "$.index[*][?(@.kind=='impl' && @.inner.synthetic==true)].span" null
// @is - "$.index[*][?(@.docs=='has span')].span.begin" "[10, 0]"
// @is - "$.index[*][?(@.docs=='has span')].span.end" "[12, 1]"
pub struct Foo;