Commit graph

178 commits

Author SHA1 Message Date
Guillaume Gomez
f957bae74e Update rustdoc-ui tests 2020-08-18 14:32:15 +02:00
bors
d495ef527c Auto merge of #75127 - jyn514:impl-trait, r=pnkfelix
Fix async-std by special-casing rustdoc in typeck

https://github.com/rust-lang/rust/issues/75100
2020-08-10 19:33:25 +00:00
Joshua Nelson
a306e12874 Add another test 2020-08-08 10:19:56 -04:00
Joshua Nelson
b146000e91 EXTREMELY hacky fix
This runs _just_ enough of typeck that later queries don't panic.
Because this is in the same part of the compiler that errors on `impl
Trait`, this special-cases impl Trait for rustdoc and no one else.
Everything is fine.
2020-08-07 21:26:12 -04:00
bors
1e0e618cfb Auto merge of #73842 - euclio:doctest-expn, r=GuillaumeGomez
Use outermost invocation span for doctest names

Fixes #70090.

This PR also allows using aux-build files in rustdoc-ui tests.
2020-08-07 11:38:17 +00:00
Joshua Nelson
ef54cde625 Improve tests 2020-08-06 18:33:29 -04:00
Joshua Nelson
0c99d806ea Use the proper kind for associated items
See comments in the diff; this is such a hack.

The reason this can't be done properly in `register_res` is because
there's no way to get back the parent type: calling
`tcx.parent(assoc_item)` gets you the _impl_, not the type.
You can call `tcx.impl_trait_ref(impl_).self_ty()`, but there's no way
to go from that to a DefId without unwrapping.
2020-08-06 18:16:10 -04:00
Joshua Nelson
2dad90d8b5 Suggest f() for functions and add a test case 2020-08-05 20:46:02 -04:00
Joshua Nelson
fc273a035d Unresolved link -> incompatible link kind
Clearly it has been resolved, because we say on the next line what it
resolved to.
2020-08-05 00:20:37 -04:00
Joshua Nelson
444f5a0556 Give a much better error message if the struct failed to resolve 2020-08-05 00:20:34 -04:00
Joshua Nelson
70697d8be8 Add more realistic example of async error 2020-08-03 21:26:59 -04:00
Joshua Nelson
31fcda170a Fix async-std at the price of breaking half the test suite
- Don't mark impl trait as an error
2020-08-03 21:26:54 -04:00
Joshua Nelson
99354f552d item -> link 2020-08-03 08:39:46 -04:00
Joshua Nelson
8e0e925e2b Disallow linking to items with a mismatched disambiguator 2020-08-02 22:39:46 -04:00
Manish Goregaokar
c17eb566c2 Fix uitests 2020-07-30 10:40:17 -07:00
Manish Goregaokar
8fe438e632 intra_doc_resolution_failures -> broken_intra_doc_links 2020-07-30 10:38:55 -07:00
Manish Goregaokar
bcb2813e01 Update uitest expectations 2020-07-30 10:22:57 -07:00
Manish Goregaokar
4df76f0f90 Rename to intra_doc_resolution_failures 2020-07-30 08:14:27 -07:00
Manish Goregaokar
48de8ac041 Rename usage of intra_doc_link_resolution_failure 2020-07-29 15:23:14 -07:00
Joshua Nelson
617d10975e Separate missing_doc_code_examples from intra-doc links
These two lints have no relation other than both being nightly-only.
This allows stabilizing intra-doc links without stabilizing
missing_doc_code_examples.
2020-07-27 22:54:14 -04:00
Dennis Hamester
c14641a814 rustdoc: Add explanation when linting against public to private item links
The additional note helps explaining why the lint was triggered and that
--document-private-items directly influences the link resolution.
2020-07-22 21:40:51 +02:00
Dennis Hamester
ed53de029c rustdoc: Always warn when linking from public to private items
Change the logic such that linking from a public to a private item always
triggers intra_doc_link_resolution_failure. Previously, the warning was
not emitted when --document-private-items is passed.

Also don't rely anymore on the item's visibility, which would falsely trigger
the lint now that the check for --document-private-items is gone.
2020-07-22 21:36:30 +02:00
Andy Russell
7f3e2c0d37
refactor and reword intra-doc link errors
This commit refactors intra-doc link error reporting to deduplicate code
and decouple error construction from the type of error. This greatly
improves flexibility at each error construction site, while reducing the
complexity of the diagnostic creation.

This commit also rewords the diagnostics for clarity and style:

- Diagnostics should not end in periods.
- It's unnecessary to say "ignoring it". Since this is a warning by
  default, it's already clear that the link is ignored.
2020-07-20 18:44:15 -04:00
Joshua Nelson
c46e0386c5 Fix invalid lint
intra_doc_resolution_failure is not a lint.
2020-07-16 18:26:58 -04:00
Manish Goregaokar
61a3f6701b
Rollup merge of #74148 - GuillaumeGomez:doc-alias-check, r=Manishearth
Move #[doc(alias)] check in rustc

Part of #73721.

r? @ollie27
2020-07-16 11:18:44 -07:00
Joshua Nelson
e117b47f75 Catch errors for any new item, not just trait implementations
This matches the previous behavior of everybody_loops and is also more
consistent than special-casing impls.
2020-07-15 10:54:06 -04:00
Joshua Nelson
02a24c8e2f Don't ICE on infinitely recursive types
`evaluate_obligation` can only be run on types that are already valid.
So rustdoc still has to run typeck even though it doesn't care about the
result.
2020-07-15 10:54:05 -04:00
Joshua Nelson
2d0e8e2162 --bless 2020-07-15 10:54:05 -04:00
Joshua Nelson
bbe4971095 Don't crash on Vec<DoesNotExist> 2020-07-15 10:54:05 -04:00
Joshua Nelson
a93bcc9a7b Recurse into function bodies, but don't typeck closures
Previously, rustdoc would issue a delay_span_bug ICE on the following code:

```rust
pub fn a() -> impl Fn() -> u32 {
    || content::doesnt::matter()
}
```

This wasn't picked up earlier because having `type Alias = impl Trait;`
in the same module caused _all closures_ to be typechecked, even if they
wouldn't normally. Additionally, if _any_ error was emitted, no
delay_span_bug would be emitted. So as part of this commit all of the
tests were separated out into different files.
2020-07-15 10:54:05 -04:00
Joshua Nelson
768d6a4950 Don't ICE on errors in function returning impl trait
Instead, report the error.

This emits the errors on-demand, without special-casing `impl Trait`, so
it should catch all ICEs of this kind, including ones that haven't been
found yet.

Since the error is emitted during type-checking there is less info about
the error; see comments in the code for details.

- Add test case for -> impl Trait
- Add test for impl trait with alias
- Move EmitIgnoredResolutionErrors to rustdoc

This makes `fn typeck_item_bodies` public, which is not desired behavior.
That change should be removed once
https://github.com/rust-lang/rust/pull/74070 is merged.

- Don't visit nested closures twice
2020-07-15 10:54:05 -04:00
Joshua Nelson
1b8accb749 Add an option not to report resolution errors for rustdoc
- Remove unnecessary `should_loop` variable
- Report errors for trait implementations

These should give resolution errors because they are visible outside the
current scope. Without these errors, rustdoc will give ICEs:

```
thread 'rustc' panicked at 'attempted .def_id() on invalid res: Err', /home/joshua/src/rust/src/libstd/macros.rs:16:9
  15: rustc_hir::def::Res<Id>::def_id
             at /home/joshua/src/rust/src/librustc_hir/def.rs:382
  16: rustdoc::clean::utils::register_res
             at src/librustdoc/clean/utils.rs:627
  17: rustdoc::clean::utils::resolve_type
             at src/librustdoc/clean/utils.rs:587
```

- Add much more extensive tests
  + fn -> impl -> fn
  + fn -> impl -> fn -> macro
  + errors in function parameters
  + errors in trait bounds
  + errors in the type implementing the trait
  + unknown bounds for the type
  + unknown types in function bodies
  + errors generated by macros

- Use explicit state instead of trying to reconstruct it from random info
- Use an enum instead of a boolean
- Add example of ignored error
2020-07-15 10:54:05 -04:00
Manish Goregaokar
e4a9b36126
Rollup merge of #74147 - dennis-hamester:fix/issue-74134, r=jyn514
rustdoc: Allow linking from private items to private types

Fixes #74134

After PR #72771 this would trigger an intra_doc_link_resolution_failure warning
when rustdoc is invoked without --document-private-items. Links from private
items to private types are however never actually generated in that case and
thus shouldn't produce a warning. These links are in fact a very useful tool to
document crate internals.

Tests are added for all 4 combinations of public/private items and link
targets. Test 1 is the case mentioned above and fails without this commit. Tests
2 - 4 passed before already but are added nonetheless to prevent regressions.
2020-07-13 22:23:11 -07:00
Dennis Hamester
87895251ea test: rustdoc-ui: issue-74134: Shorten a too long line 2020-07-11 10:31:27 +02:00
Dennis Hamester
97048595e1 test: rustdoc-ui: Expand issue-74134 to cover types in a private module 2020-07-11 10:02:18 +02:00
Dennis Hamester
689e360d82 test: rustdoc-ui: Add issue-74134, replacing test/rustdoc/issue-74134-*
As per the discussion in PR #74147, the 4 individual tests are replaced by a
single one.

The test is expanded to cover all 4 public/private cases, each with and without
--document-private-items.
2020-07-11 09:26:26 +02:00
Guillaume Gomez
b0884c098b Move #[doc(alias)] check in rustc 2020-07-08 14:48:31 +02:00
Oliver Middleton
56fb71786a rustdoc: Rename invalid_codeblock_attribute lint to be plural 2020-07-07 18:29:26 +01:00
Andy Russell
608807934d
use outermost invocation span for doctest names
Fixes #70090.
2020-06-28 13:06:33 -04:00
Joshua Nelson
20552c811a Generate docs for links to private items when passed --document-private
- Pass around document_private a lot more
- Add tests
  + Add tests for intra-doc links to private items
  + Add ignored tests for warnings in reference links
2020-06-26 07:23:39 -04:00
Manish Goregaokar
7d2fba1bd2
Rollup merge of #72780 - GuillaumeGomez:enforce-doc-alias-check, r=ollie27
Enforce doc alias check

Part of #50146.

r? @ollie27
2020-06-23 13:09:59 -07:00
Guillaume Gomez
c14d85fd33 Update UI tests 2020-06-21 16:40:36 +02:00
Guillaume Gomez
2d6267a7a8 Add test for doc alias attribute validation 2020-05-30 15:36:57 +02:00
Andy Russell
c379fb5b3a
remove extra space from crate-level doctest names 2020-05-15 23:56:23 -04:00
flip1995
485f1999f5
Add rustdoc regression test for the unused_braces lint 2020-04-24 19:15:07 +02:00
Dylan DPC
0959802a57
Rollup merge of #71408 - GuillaumeGomez:check-code-blocks-tags, r=kinnison
Check code blocks tags

Fixes #71347.

Explanations here: I realized recently that it was a common issue to confuse/misspell tags on code blocks. This is actually quite a big issue since it generally ends up in a code blocks being ignored since it's not being considered as a rust one. With this new warning, users will at least be notified about it.

PS: some improvements can be done on the error rendering but considering how big the PR already is, I think it's better to do it afterwards.

r? @ollie27

cc @rust-lang/rustdoc
2020-04-23 20:35:01 +02:00
Guillaume Gomez
96a352ebd3 Add UI tests for new rustdoc lint 2020-04-23 16:18:50 +02:00
Val Markovic
2add9d8fc2 Moving all rustdoc-ui tests to check-pass
These were all build-pass before and don't seem to need it.

Helps with #62277
2020-04-19 16:40:53 -07:00
RoccoDev
b85c64c3ea
rustc: Add a warning count upon completion 2020-04-11 16:15:24 +02:00
bors
77621317d6 Auto merge of #66938 - GuillaumeGomez:lint-for-no-crate-level-doc, r=Dylan-DPC
Add lint when no doc is present at the crate-level

Follow-up of #66267.

r? @kinnison
2020-03-28 20:11:01 +00:00