Commit graph

6338 commits

Author SHA1 Message Date
Joshua Nelson
f7983cae70 Don't use link.span yet
This shows the span of the _whole_ link, including the brackets.
But rustdoc only wants to warn about the link text.
2020-09-13 21:31:26 -04:00
Manish Goregaokar
c100e726c1 Stabilize intra-doc links 2020-09-13 18:11:34 -07:00
Joshua Nelson
e4c28bf61a Upgrade to pulldown-cmark 0.8.0
Thanks to marcusklaas' hard work in https://github.com/raphlinus/pulldown-cmark/pull/469, this fixes a lot of rustdoc bugs!

- Get rid of unnecessary `RefCell`
- Fix duplicate warnings for broken implicit reference link
- Remove unnecessary copy of links
2020-09-13 20:15:01 -04:00
Joshua Nelson
8a13fc494d Require module_id param to resolve to be non-empty
Previously, `resolve` would immediately check that `module_id` was
non-empty and give an error if not. This had two downsides:

- It introduced `Option`s everywhere, even if the calling function knew
it had a valid module, and
- It checked the module on each namespace, which is unnecessary: it only
needed to be checked once.

This makes the caller responsible for checking the module exists, making
the code a lot simpler.
2020-09-13 17:15:40 -04:00
Joshua Nelson
7dc0d335bc Refactor resolve_with_disambiguator into a separate function 2020-09-13 17:04:44 -04:00
Bastian Kauschke
e5b82a56c5 allow concrete self types in consts 2020-09-13 22:53:51 +02:00
Joshua Nelson
245f69ad3c Refactor resolve_link into a separate function 2020-09-13 16:48:51 -04:00
bors
7402a39447 Auto merge of #76244 - vandenheuvel:remove__paramenv__def_id, r=nikomatsakis
Removing the `def_id` field from hot `ParamEnv` to make it smaller

This PR addresses https://github.com/rust-lang/rust/issues/74865.
2020-09-13 16:28:22 +00:00
bors
a055c5a1bd Auto merge of #76623 - slightlyoutofphase:master, r=jyn514
Use `is_unstable_const_fn` instead of `is_min_const_fn` in rustdoc where appropriate

This closes #76501. Specifically, it allows for nightly users with the `#![feature(const_fn)]` flag enabled to still have their `const fn` declarations documented as such, while retaining the desired behavior that rustdoc *not* document functions that have the `rustc_const_unstable` attribute as `const`.
2020-09-13 13:36:31 +00:00
Lzu Tao
c743fc4342 Ignore rustc_private items from std docs
Apply suggestions from code review

Co-authored-by: Joshua Nelson <joshua@yottadb.com>
2020-09-13 05:30:49 +00:00
Guillaume Gomez
2e7ca73299 Don't emit an error on private doc tests when they're ignored 2020-09-12 19:02:15 +02:00
Anthony Ramine
75f0f7af31 Fix a typo 2020-09-12 18:35:57 +02:00
bors
bd51226305 Auto merge of #76632 - andjo403:updateDep, r=Mark-Simulacrum
update the version of itertools and parking_lot

this is to avoid compiling multiple version of the crates in rustc speeding up compilation of rustc

an old version of parking_lot is still used in measureme but new version will not be released for some time see [zulip chat](https://rust-lang.zulipchat.com/#narrow/stream/187831-t-compiler.2Fwg-self-profile/topic/new.20release.20of.20measureme)
2020-09-12 14:00:39 +00:00
Ralf Jung
5d90d6ee90
Rollup merge of #76297 - lcnr:const-ty-alias, r=varkor
rustdoc: fix min_const_generics with ty::Param

fixes #75913

r? @varkor cc @jyn514
2020-09-12 10:43:15 +02:00
Andreas Jonson
b8752fff19 update the version of itertools and parking_lot
this is to avoid compiling multiple version of the crates in rustc
2020-09-12 08:26:53 +02:00
bors
0f5c769513 Auto merge of #75756 - jyn514:diagnostic-suggestions, r=estebank
Improve suggestions for broken intra-doc links

~~Depends on #74489 and should not be merged before that PR.~~ Merged 🎉
~~Depends on #75916 and should not be merged before.~~ Merged

Fixes https://github.com/rust-lang/rust/issues/75305.

This does a lot of different things 😆.

- Add `PerNS::into_iter()` so I didn't have to keep rewriting hacks around it. Also add `PerNS::iter()` for consistency. Let me know if this should be `impl IntoIterator` instead.
- Make `ResolutionFailure` an enum instead of a unit variant. This was most of the changes: everywhere that said `ErrorKind::ResolutionFailure` now has to say _why_ the link failed to resolve.
- Store the resolution in case of an anchor failure. Previously this was implemented as variants on `AnchorFailure` which was prone to typos and had inconsistent output compared to the rest of the diagnostics.
- Turn some `Err`ors into unwrap() or panic()s, because they're rustdoc bugs and not user error. These have comments as to why they're bugs (in particular this would have caught #76073 as a bug a while ago).
- If an item is not in scope at all, say the first segment in the path that failed to resolve
- If an item exists but not in the current namespaces, say that and suggests linking to that namespace.
- If there is a partial resolution for an item (part of the segments resolved, but not all of them), say the partial resolution and why the following segment didn't resolve.
- Add the `DefId` of associated items to `kind_side_channel` so it can be used for diagnostics (tl;dr of the hack: the rest of rustdoc expects the id of the item, but for diagnostics we need the associated item).
- No longer suggests escaping the brackets for every link that failed to resolve; this was pretty obnoxious. Now it only suggests `\[ \]` if no segment resolved and there is no `::` in the link.
- Add `Suggestion`, which says _what_ to prefix the link with, not just 'prefix with the item kind'.

Places where this is currently buggy:

<details><summary>All outdated</summary>

~~1. When the link has the wrong namespace:~~ Now fixed.

<details>

```rust
/// [type@S::h]
impl S {
	pub fn h() {}
}

/// [type@T::g]
pub trait T {
	fn g() {}
}
```
```
error: unresolved link to `T::g`
  --> /home/joshua/rustc/src/test/rustdoc-ui/intra-link-errors.rs:53:6
   |
53 | /// [type@T::g]
   |      ^^^^^^^^^
   |
   = note: this link partially resolves to the trait `T`,
   = note: `T` has no field, variant, or associated item named `g`

error: unresolved link to `S::h`
  --> /home/joshua/rustc/src/test/rustdoc-ui/intra-link-errors.rs:48:6
   |
48 | /// [type@S::h]
   |      ^^^^^^^^^
   |
   = note: this link partially resolves to the struct `S`,
   = note: `S` has no field, variant, or associated item named `h`
```
Instead it should suggest changing the disambiguator, the way it currently does for macros:
```
error: unresolved link to `S`
  --> /home/joshua/rustc/src/test/rustdoc-ui/intra-link-errors.rs:38:6
   |
38 | /// [S!]
   |      ^^ help: to link to the unit struct, use its disambiguator: `value@S`
   |
   = note: this link resolves to the unit struct `S`, which is not in the macro namespace
```

</details>

2. ~~Associated items for values. It says that the value isn't in scope; instead it should say that values can't have associated items.~~ Fixed.

<details>

```
error: unresolved link to `f::A`
  --> /home/joshua/rustc/src/test/rustdoc-ui/intra-link-errors.rs:14:6
   |
14 | /// [f::A]
   |      ^^^^
   |
   = note: no item named `f` is in scope
   = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
```
This is _mostly_ fixed, it now says

```rust
warning: unresolved link to `f::A`
 --> /home/joshua/test-rustdoc/f.rs:1:6
  |
1 | /// [f::A]
  |      ^^^^
  |
  = note: this link partially resolves to the function `f`
  = note: `f` is a function, not a module
```

'function, not a module' seems awfully terse when what I actually mean is '`::` isn't allowed here', though.

</details>

It looks a lot nicer now, it says

```
error: unresolved link to `f::A`
  --> /home/joshua/rustc/src/test/rustdoc-ui/intra-link-errors.rs:13:6
   |
13 | /// [f::A]
   |      ^^^^
   |
   = note: `f` is a function, not a module or type, and cannot have associated items
```

3. ~~I'm also not very happy with the second note for this error:~~

<details>
```
error: unresolved link to `S::A`
  --> /home/joshua/rustc/src/test/rustdoc-ui/intra-link-errors.rs:19:6
   |
19 | /// [S::A]
   |      ^^^^
   |
   = note: this link partially resolves to the struct `S`,
   = note: `S` has no field, variant, or associated item named `A`
```

but I'm not sure how better to word it.

I ended up going with 'no `A` in `S`' to match `rustc_resolve` but that seems terse as well.

</details>

This now says

```
error: unresolved link to `S::A`
  --> /home/joshua/rustc/src/test/rustdoc-ui/intra-link-errors.rs:17:6
   |
17 | /// [S::A]
   |      ^^^^
   |
   = note: the struct `S` has no field or associated item named `A`
```

which I think looks pretty good :)

4. This is minor, but it would be nice to say that `path` wasn't found instead of the full thing:
```
error: unresolved link to `path::to::nonexistent::module`
 --> /home/joshua/rustc/src/test/rustdoc-ui/intra-link-errors.rs:8:6
  |
8 | /// [path::to::nonexistent::module]
  |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

It will now look at most 3 paths up (so it reports `path::to` as not in scope), but it doesn't work with arbitrarily many paths.

</details>

~~I recommend only reviewing the last few commits - the first 7 are all from #74489.~~ Rebased so that only the relevant commits are shown. Let me know if I should squash the history some more.

r? `@estebank`
2020-09-12 05:52:14 +00:00
SlightlyOutOfPhase
4284aad8fc
Fix formatting for tidy 2020-09-11 22:57:20 -04:00
SlightlyOutOfPhase
0439556eb0
Check basic constness before unstable constness 2020-09-11 22:39:16 -04:00
SlightlyOutOfPhase
950006711d
Use is_unstable_const_fn where appropriate 2020-09-11 21:40:02 -04:00
Joshua Nelson
5ea3eaf237 Name the current module
'not in scope' -> 'not in `module`'
2020-09-11 14:52:45 -04:00
Joshua Nelson
b2a5a7a8c2 Remove unnecessary clone 2020-09-11 13:49:45 -04:00
Joshua Nelson
57250eff55 Use span_label instead of note
This puts the error message closer to the link, making it easier to see
what went wrong.
2020-09-11 13:42:56 -04:00
Joshua Nelson
c213c68500 box ResolutionFailures on the heap
This decreases the size of the `Result`s being returned,
improving performance in the common case.
2020-09-11 13:29:55 -04:00
Bram van den Heuvel
7dad29d686 Remove def_id field from ParamEnv 2020-09-09 10:14:31 +02:00
bors
780ca140a0 Auto merge of #76453 - camelid:fix-css-crate-list, r=GuillaumeGomez,ollie27
rustdoc: Fix font CSS for crate lists

I had put it in the wrong file in #76126. This should fix it now. Thank
you to `@ollie27` for pointing this out!

---

`@rustbot` modify labels: T-rustdoc C-bug
2020-09-09 04:35:40 +00:00
Dylan DPC
3cec71e9b4
Rollup merge of #76374 - pickfire:patch-4, r=Cldfire
Improve ayu doc source line number contrast

Improve contrast of foreground line number.

Before

![image](https://user-images.githubusercontent.com/4687791/92305696-1bf2ab80-efbc-11ea-8b5c-a24c4f6261e0.png)

After

![image](https://user-images.githubusercontent.com/4687791/92305700-2a40c780-efbc-11ea-9061-dbfcb1e71980.png)

r? @Cldfire

I think we should add the line for light and dark theme too, it looks better and clearer that way.
2020-09-09 01:35:13 +02:00
Camelid
bf09a529ee rustdoc: Fix font CSS for crate lists
I had put it in the wrong file in #76126. This should fix it now. Thank
you to @ollie27 for pointing this out!
2020-09-07 13:57:33 -07:00
Joshua Nelson
cd72d9029f Find the first segment that failed to resolve for _any_ namespace
Moves this detection into `resolution_failure` to avoid doing
unnecessary work and make the control flow a little easier to work with.
2020-09-05 13:56:57 -04:00
Joshua Nelson
efdc3facdf Give a much better error message when an item has a macro disambiguator
Previously, this called `check_full_res` for values and types, but not
macros. This would result in not showing when there was a partial
resolution for a parent of the item.

This now calls `check_full_res`. Additionally, it checks if there was a
disambiguator, and if so, says that specific kind wasn't found instead
of saying generically 'associated item'.
2020-09-05 13:56:57 -04:00
Joshua Nelson
ee683ef853 Say 'prefix with kind@' instead of 'prefix with the item kind'
This is both more specific and easier to read.
2020-09-05 13:56:55 -04:00
Joshua Nelson
d67eb1f148 Don't suggest \[ \] if there's a :: in the path 2020-09-05 13:48:20 -04:00
Joshua Nelson
f2826d9e9b Show the first path segment which failed to resolve.
Before, it would arbitrarily pick the third-to-last if the last three or
more did not resolve.
2020-09-05 13:48:19 -04:00
Joshua Nelson
bb9d157604 Address my own review comments
- Remove unneeded lifetime parameter
- Comment why some code doesn't use `check_full_res`
2020-09-05 13:48:19 -04:00
Joshua Nelson
2ca6f11663 Fix rebase conflicts 2020-09-05 13:48:19 -04:00
Joshua Nelson
418f6089e9 Give a better error message when linking to a macro with the wrong disambiguator
Before:

```
warning: unresolved link to `m`
 --> m.rs:1:6
  |
1 | /// [value@m]
  |      ^^^^^^^
  |
  = note: `#[warn(broken_intra_doc_links)]` on by default
  = note: no item named `m` is in scope
  = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]`
```

After:

```
warning: unresolved link to `m`
 --> m.rs:1:6
  |
1 | /// [value@m]
  |      ^^^^^^^ help: to link to the macro, use its disambiguator: `m!`
  |
  = note: `#[warn(broken_intra_doc_links)]` on by default
  = note: this link resolves to the macro `m`, which is not in the value namespace
```
2020-09-05 13:48:19 -04:00
Joshua Nelson
6875220e1a Use rustc_resolve's descr() instead of rewriting it 2020-09-05 13:48:19 -04:00
Joshua Nelson
ebc8cb470f Turn NoParentItem from a panic into an ICE 2020-09-05 13:48:19 -04:00
Joshua Nelson
19d100278d Fix failures to resolve primitives
Previously, when looking for the associated items for primitives,
rustdoc would look for primitives in the current namespace.
But all primitives are in the type namespace. To fix this, rustdoc now
always looks for primitives in the namespace when considering them as a
stepping stone to the associated item.

However, fixing that bug caused several duplicate errors because rustdoc
now reports the same error in each namespace. To avoid this, rustdoc now
ignores all duplicate errors when issuing them.
2020-09-05 13:48:19 -04:00
Joshua Nelson
e2d69f2eb1 Make errors more concise and helpful
Before:
```
   = note: this link partially resolves to the struct `S`
   = note: no `fmt` in `S`
```

After:
```
   = note: the struct `S` has no field or associated item named `fmt`
```
2020-09-05 13:48:19 -04:00
Joshua Nelson
7b8d0befd6 Remove some TODOs 2020-09-05 13:48:19 -04:00
Joshua Nelson
002d3a922c Don't give misleading errors for f::A, where f is in the value namespace 2020-09-05 13:48:19 -04:00
Joshua Nelson
f4e6ebd11a Fix tests and improve error message if :: isn't found 2020-09-05 13:48:19 -04:00
Joshua Nelson
42bed03500 Pass on the DefId so rustdoc can name it in suggestions
Look at this beauty:

```rust
error: unresolved link to `S::h`
  --> intra-link-errors.rs:51:6
   |
51 | /// [type@S::h]
   |      ^^^^^^^^^ help: to link to the associated function, use its disambiguator: `S::h()`
   |
   = note: this link resolves to the associated function `h`, which is not in the type namespace
```
2020-09-05 13:48:19 -04:00
Joshua Nelson
fcb21999a7 Report if the thing exists in another namespace 2020-09-05 13:48:19 -04:00
Joshua Nelson
4ace4e7520 Use fewer .to_string()s 2020-09-05 13:48:19 -04:00
Joshua Nelson
3797f29aad [WIP] give better errors for broken intra doc links 2020-09-05 13:48:19 -04:00
Dylan DPC
f1eb5f800f
Rollup merge of #76082 - jyn514:top-level-links, r=ollie27,GuillaumeGomez
Fix intra-doc links on pub re-exports

Partial fix for https://github.com/rust-lang/rust/issues/76073 - This removes the incorrect error, but doesn't show the documentation anywhere.
r? @GuillaumeGomez
2020-09-05 16:28:28 +02:00
Dylan DPC
ed39e6d60a
Rollup merge of #76078 - jyn514:no-disambiguator, r=manishearth
Remove disambiguators from intra doc link text

Closes https://github.com/rust-lang/rust/issues/65354.
r? @Manishearth

The commits are mostly atomic, but there might be some mix between them here and there. I recommend reading 'refactor ItemLink' and 'refactor RenderedLink' on their own though, lots of churn without any logic changes.
2020-09-05 16:28:26 +02:00
Ivan Tham
d80415a3bf
Improve ayu doc source line number contrast
Improve contrast of foreground line number.
2020-09-05 21:08:35 +08:00
LeSeulArtichaut
085e417087 ty.kind -> ty.kind() in rustdoc and clippy 2020-09-04 18:27:33 +02:00