| Age | Commit message (Collapse) | Author | Lines |
|
|
|
|
|
r=davidtwco
Enhance type inference errors involving the `?` operator
This patch adds a special-cased note on type inference errors when the error span points to a `?` return. It also makes the primary label for such errors "cannot infer type of `?` error" in cases where before we would have only said "cannot infer type".
One beneficiary of this change is async blocks, where we can't explicitly annotate the return type and so may not generate any other help (#77880); this lets us at least print the error type we're converting from and anything we know about the type we can't fully infer. More generally, it signposts that an implicit conversion is happening that may have impeded type inference the user was expecting. We already do something similar for [mismatched type errors](https://github.com/rust-lang/rust/blob/2987785df3d46d5ff144a5c67fbb8f5cca798d78/src/test/ui/try-block/try-block-bad-type.stderr#L7).
The check for a relevant `?` operator is built into the existing HIR traversal which looks for places that could be annotated to resolve the error. That means we could identify `?` uses anywhere in the function that output the type we can't infer, but this patch just sticks to adding the note if the primary span given for the error has the operator; if there are other expressions where the type occurs and one of them is selected for the error instead, it's more likely that the `?` operator's implicit conversion isn't the sole cause of the inference failure and that adding an additional diagnostic would just be noise. I added a ui test for one such case.
The data about the `?` conversion is passed around in a `UseDiagnostic` enum that in theory could be used to add more of this kind of note in the future. It was also just easier to pass around than something with a more specific name. There are some follow-up refactoring commits for the code that generates the error label, which was already pretty involved and made a bit more complicated by this change.
|
|
fix typo in trait method mutability mismatch help
|
|
Move some tests to more reasonable directories
The idea is to move `issues`/`ui` tests in small batches
r? `@petrochenkov`
|
|
Replace tabs earlier in diagnostics
This replaces tabs earlier in the diagnostics emitting process, which allows various margin calculations to ignore the existence of tabs. It does add a string copy for the source lines that are emitted.
Fixes https://github.com/rust-lang/rust/issues/78438
r? `@estebank`
|
|
Suggest async {} for async || {}
Fixes #76011
This adds support for adding help diagnostics to the feature gating checks and
then uses it for the async_closure gate to add the extra bit of help
information as described in the issue.
|
|
|
|
rustdoc: Resolve `&str` as `str`
People almost always are referring to `&str`, not `str`, so this will
save a manual link resolve in many cases.
Note that we already accept `&` (resolves to `reference`) in intra-doc
links, so this shouldn't cause breakage.
r? `@jyn514`
|
|
Explain method-call move errors in loops
PR #73708 added a more detailed explanation of move errors that occur
due to a call to a method that takes `self`. This PR extends that logic
to work when a move error occurs due to a method call in the previous
iteration of a loop.
|
|
|
|
rustdoc: Remove `*` intra-doc alias for `pointer`
It's not valid Rust code and it can easily be confused with a wildcard
glob pattern or something else. People can always use `pointer` instead,
so it's just removing an alias.
It hasn't hit stable yet (I think it's still on nightly), so it's okay
to remove it. (We can always add it back later if we change our mind
too.)
r? `@jyn514`
cc https://github.com/rust-lang/rust/pull/80885#discussion_r554622737
|
|
Fix intra-doc links to `Self` and `crate`
Closes https://github.com/rust-lang/rust/issues/77732.
|
|
Use standard formatting for "rust-call" ABI message
Nearly all error messages start with a lowercase letter and don't use
articles - instead they refer to the plural case.
|
|
|
|
|
|
It's not valid Rust code and it can easily be confused with a wildcard
glob pattern or something else. People can always use `pointer` instead,
so it's just removing an alias.
It hasn't hit stable yet (I think it's still on nightly), so it's okay
to remove it. (We can always add it back later if we change our mind
too.)
|
|
People almost always are referring to `&str`, not `str`, so this will
save a manual link resolve in many cases.
Note that we already accept `&` (resolves to `reference`) in intra-doc
links, so this shouldn't cause breakage.
|
|
sasurau4:feature/add-suggestion-for-pattern-in-fns-without-body, r=matthewjasper
Add suggestion for PATTERNS_IN_FNS_WITHOUT_BODY
## Overview
Fix #78927
|
|
Nearly all error messages start with a lowercase letter and don't use
articles - instead they refer to the plural case.
|
|
Synthesize a `TokenStream` for `StmtKind::Empty`
Fixes #80760
|
|
|
|
Rollup of 9 pull requests
Successful merges:
- #79502 (Implement From<char> for u64 and u128.)
- #79968 (Improve core::ptr::drop_in_place debuginfo)
- #80774 (Fix safety comment)
- #80801 (Use correct span for structured suggestion)
- #80803 (Remove useless `fill_in` function)
- #80820 (Support `download-ci-llvm` on NixOS)
- #80825 (Remove under-used ImplPolarity enum)
- #80850 (Allow #[rustc_builtin_macro = "name"])
- #80857 (Add comment to `Vec::truncate` explaining `>` vs `>=`)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
Use correct span for structured suggestion
On structured suggestion for `let` -> `const` and `const` -> `let`, use
a proper `Span` and update tests to check the correct application.
Follow up to #80012.
|
|
r=jyn514,petrochenkov
Rustdoc: Fix macros 2.0 and built-in derives being shown at the wrong path
Fixes #74355
- ~~waiting on author + draft PR since my code ought to be cleaned up _w.r.t._ the way I avoid the `.unwrap()`s:~~
- ~~dummy items may avoid the first `?`,~~
- ~~but within the module traversal some tests did fail (hence the second `?`), meaning the crate did not possess the exact path of the containing module (`extern` / `impl` blocks maybe? I'll look into that).~~
r? `@jyn514`
|
|
ast: Remove some indirection layers from values in key-value attributes
Trying to address some perf regressions from https://github.com/rust-lang/rust/pull/78837#issuecomment-745380762.
|
|
Fixes #80760
|
|
|
|
|
|
|
|
PR #73708 added a more detailed explanation of move errors that occur
due to a call to a method that takes `self`. This PR extends that logic
to work when a move error occurs due to a method call in the previous
iteration of a loop.
|
|
Do not make local copies of inline fns in debug mode
r? `@wesleywiser`
cc `@rust-lang/wg-incr-comp`
If this is correct it supersedes https://github.com/rust-lang/rust/pull/76889
Related to #54089
|
|
Recursively document methods via `Deref` traits
This changes `rustdoc` to recursively follow `Deref` targets so that methods from all levels are added to the rendered output. This implementation displays the methods from all levels in the expanded state with separate sections for each level.

Fixes https://github.com/rust-lang/rust/issues/26207
Fixes https://github.com/rust-lang/rust/issues/53038
Fixes https://github.com/rust-lang/rust/issues/71640
r? `@jyn514`
|
|
|
|
This adjusts the `rustdoc` trait impl collection path to preserve `Deref` impls
from other crates. This adds a first pass to map all of the `Deref` type to
target edges and then recursively preserves all targets.
|
|
There can now be multiple `Deref` method sections, so this adds the target type
to the section ID to ensure they are unique.
|
|
|
|
Get rid of custom pretty-printing in rustdoc
and use rustc_hir_pretty directly instead.
Closes https://github.com/rust-lang/rust/issues/79497.
r? `@CraftSpider`
|
|
handle generic trait methods in coverage-report tests
also make the generic function pattern more specific and remove the extra $ that fails the matching.
r? `@wesleywiser`
as this was failing the test of #76896
|
|
Don't panic when an external crate can't be resolved
This isn't actually a bug, it can occur when rustdoc tries to resolve a
crate that isn't used in the main code.
Fixes #72381.
r? `@kinnison` if you have time, otherwise `@Manishearth`
|
|
Make sure rust-call errors occur correctly for traits
Fixes #79669
Adds trait method resolution to the error, and adds UI tests to ensure it doesn't happen again. Opening as draft because I'm getting weird link errors from unrelated code on my machine, and want to see what CI thinks.
|
|
On structured suggestion for `let` -> `const` and `const` -> `let`, use
a proper `Span` and update tests to check the correct application.
Follow up to #80012.
|
|
and use rustc_hir_pretty directly instead
|
|
make the generic function pattern more specific
|
|
rustc_parse: Better spans for synthesized token streams
I think using the nonterminal span for synthesizing its tokens is a better approximation than using `DUMMY_SP` or the attribute span like #79472 did in `expand.rs`.
r? `@Aaron1011`
|
|
Properly handle primitive disambiguators in rustdoc
Fixes #80559
r? ``@jyn514``
Is there a way to test that the generated intra-doc link is what I expect?
|
|
MIR Inline is incompatible with coverage
Fixes: #80060
Fixed by disabling inlining if `-Zinstrument-coverage` is set.
The PR also adds additional use cases to the coverage test for doctests.
r? `@wesleywiser`
cc: `@tmandry`
|
|
r=petrochenkov
Add pointing const identifier when emitting E0435
Fix #79919
|
|
|
|
|