rust/tests/ui/methods
bors f13f37fd7b Auto merge of #123007 - kadiwa4:suggest_convert_ptr_to_mut_ref, r=estebank
Rework ptr-to-ref conversion suggestion for method calls

If we have a value `z` of type `*const u8` and try to call `z.to_string()`, the upstream compiler will show you a note suggesting to call `<*const u8>::as_ref` first.

This PR extends that:
- The note will only be shown when the method would exist on the corresponding reference type
- It can now suggest any of `<*const u8>::as_ref`, `<*mut u8>::as_ref` and `<*mut u8>::as_mut`, depending on what the method needs.

I didn't introduce a `help` message because that's not a good idea with `unsafe` functions (and you'd also need to unwrap the `Option<&_>` somehow).
People should check the safety requirements.

For the simplest case
```rust
fn main() {
    let x = 8u8;
    let z: *const u8 = &x;
    // issue #21596
    println!("{}", z.to_string()); //~ ERROR E0599
}
```
the output changes like this:
```diff
 error[E0599]: `*const u8` doesn't implement `std::fmt::Display`
   --> $DIR/suggest-convert-ptr-to-ref.rs:5:22
    |
 LL |     println!("{}", z.to_string());
    |                      ^^^^^^^^^ `*const u8` cannot be formatted with the default formatter
    |
-   = note: try using `<*const T>::as_ref()` to get a reference to the type behind the pointer: https://doc.rust-lang.org/std/primitive.pointer.html#method.as_ref
-   = note: using `<*const T>::as_ref()` on a pointer which is unaligned or points to invalid or uninitialized memory is undefined behavior
+note: the method `to_string` exists on the type `&u8`
+  --> $SRC_DIR/alloc/src/string.rs:LL:COL
+   = note: try using the unsafe method `<*const T>::as_ref` to get an optional reference to the value behind the pointer: https://doc.rust-lang.org/std/primitive.pointer.html#method.as_ref
    = note: the following trait bounds were not satisfied:
            `*const u8: std::fmt::Display`
            which is required by `*const u8: ToString`
```

I removed the separate note about the safety requirements because it was incomplete and the linked doc page already has the information you need.

Fixes #83695, but that's more of a side effect. The upstream compiler already suggests the right method name here.
2024-04-11 04:41:39 +00:00
..
auxiliary
issues Be more lax in .into_iter() suggestion when encountering Iterator methods on non-Iterator 2024-03-03 18:53:36 +00:00
assign-to-method.rs Continue to borrowck even if there were previous errors 2024-02-08 08:10:43 +00:00
assign-to-method.stderr Remove save-analysis. 2023-02-16 15:14:45 +11:00
call_method_unknown_pointee.rs Use the more informative generic type inference failure error on method calls on raw pointers 2024-03-20 15:53:06 +00:00
call_method_unknown_pointee.stderr Use the more informative generic type inference failure error on method calls on raw pointers 2024-03-20 15:53:06 +00:00
disambiguate-associated-function-first-arg.rs fix broken CI and code review 2023-12-27 15:47:57 +08:00
disambiguate-associated-function-first-arg.stderr fix broken CI and code review 2023-12-27 15:47:57 +08:00
disambiguate-multiple-blanket-impl.rs Unify suggestion wording 2023-10-17 17:33:55 +00:00
disambiguate-multiple-blanket-impl.stderr Rework print_disambiguation_help 2023-11-07 05:23:09 +00:00
disambiguate-multiple-impl.rs Unify suggestion wording 2023-10-17 17:33:55 +00:00
disambiguate-multiple-impl.stderr Rework print_disambiguation_help 2023-11-07 05:23:09 +00:00
disambiguate-multiple-trait-2.rs Unify suggestion wording 2023-10-17 17:33:55 +00:00
disambiguate-multiple-trait-2.stderr Rework print_disambiguation_help 2023-11-07 05:23:09 +00:00
disambiguate-multiple-trait.rs Unify suggestion wording 2023-10-17 17:33:55 +00:00
disambiguate-multiple-trait.stderr Rework print_disambiguation_help 2023-11-07 05:23:09 +00:00
field-method-suggestion-using-return-ty.rs
field-method-suggestion-using-return-ty.stderr
inherent-bound-in-probe.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
inherent-bound-in-probe.stderr write-long-types-to-disk: update tests 2023-07-25 12:08:44 +01:00
issue-3707.rs Move tests 2023-08-28 17:47:37 -03:00
issue-3707.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
issue-7950.rs Move tests 2024-03-03 16:30:48 -03:00
issue-7950.stderr Move tests 2024-03-03 16:30:48 -03:00
issue-19521.rs Move tests 2024-03-03 16:30:48 -03:00
issue-19521.stderr Move tests 2024-03-03 16:30:48 -03:00
method-ambig-one-trait-unknown-int-type.rs
method-ambig-one-trait-unknown-int-type.stderr Use fn ptr signature instead of {closure@..} in infer error 2024-04-10 00:41:27 +00:00
method-ambig-two-traits-cross-crate.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-ambig-two-traits-cross-crate.stderr Sort method suggestions by DefPath instead of DefId 2024-03-27 14:02:16 +00:00
method-ambig-two-traits-from-bounds.rs
method-ambig-two-traits-from-bounds.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
method-ambig-two-traits-from-impls2.rs
method-ambig-two-traits-from-impls2.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
method-ambig-two-traits-from-impls.rs
method-ambig-two-traits-from-impls.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
method-ambig-two-traits-with-default-method.rs
method-ambig-two-traits-with-default-method.stderr Sort method suggestions by DefPath instead of DefId 2024-03-27 14:02:16 +00:00
method-ambiguity-no-rcvr.rs Don't expect a rcvr in print_disambiguation_help 2023-11-12 19:59:13 +00:00
method-ambiguity-no-rcvr.stderr fix broken CI and code review 2023-12-27 15:47:57 +08:00
method-argument-inference-associated-type.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-call-err-msg.rs
method-call-err-msg.stderr Sort a diagnostic by DefPathStr instead of DefId 2024-03-27 14:02:16 +00:00
method-call-lifetime-args-fail.rs diagnostics: remove inconsistent English article "this" from E0107 2023-02-23 10:27:06 -07:00
method-call-lifetime-args-fail.stderr Error code E0794 for late-bound lifetime parameter error. 2023-03-07 21:26:19 +01:00
method-call-lifetime-args-lint-fail.rs
method-call-lifetime-args-lint-fail.stderr
method-call-lifetime-args-lint.rs
method-call-lifetime-args-lint.stderr
method-call-lifetime-args-subst-index.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-call-lifetime-args-unresolved.rs
method-call-lifetime-args-unresolved.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
method-call-lifetime-args.rs
method-call-lifetime-args.stderr Error code E0794 for late-bound lifetime parameter error. 2023-03-07 21:26:19 +01:00
method-call-type-binding.rs
method-call-type-binding.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
method-deref-to-same-trait-object-with-separate-params.rs
method-deref-to-same-trait-object-with-separate-params.stderr Sort method suggestions by DefPath instead of DefId 2024-03-27 14:02:16 +00:00
method-early-bound-lifetimes-on-self.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-lookup-order.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-macro-backtrace.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-macro-backtrace.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
method-missing-call.rs
method-missing-call.stderr adjust how closure/generator types and rvalues are printed 2023-09-21 22:20:58 +02:00
method-mut-self-modifies-mut-slice-lvalue.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-normalize-bounds-issue-20604.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-not-found-but-doc-alias.rs Consider doc(alias) when providing typo suggestions 2023-01-23 10:07:10 +09:00
method-not-found-but-doc-alias.stderr Deduplicate some logic and reword output 2024-02-22 18:05:28 +00:00
method-not-found-generic-arg-elision.rs Make method-not-found-generic-arg-elision.rs error message not path dependent 2023-04-26 21:48:21 +00:00
method-not-found-generic-arg-elision.stderr Stop sorting DefIds in the compiler 2024-03-27 14:02:17 +00:00
method-on-ambiguous-numeric-type.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-on-ambiguous-numeric-type.stderr macro_rules: Preserve all metavariable spans in a global side table 2024-02-18 11:19:24 +03:00
method-path-in-pattern.rs
method-path-in-pattern.stderr
method-probe-no-guessing-dyn-trait.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-projection.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-recursive-blanket-impl.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-recursive-blanket-impl.stderr Update tests 2024-02-07 10:42:01 +08:00
method-resolvable-path-in-pattern.rs
method-resolvable-path-in-pattern.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
method-self-arg-1.rs Modify primary span label for E0308 2023-01-30 20:12:19 +00:00
method-self-arg-1.stderr Tweak borrow suggestion 2023-05-08 03:36:30 +00:00
method-self-arg-2.rs
method-self-arg-2.stderr Do not set up wrong span for adjustments 2023-07-10 20:09:26 +00:00
method-self-arg-aux1.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-self-arg-aux2.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-self-arg-trait.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-self-arg.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-trait-object-with-hrtb.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-two-trait-defer-resolution-1.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-two-trait-defer-resolution-2.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-two-trait-defer-resolution-2.stderr Update tests 2024-02-07 10:42:01 +08:00
method-two-traits-distinguished-via-where-clause.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
method-two-traits-distinguished-via-where-clause.stderr Update tests 2024-02-07 10:42:01 +08:00
method-where-clause.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
opaque_param_in_ufc.rs Add regression test 2024-04-04 15:45:50 +00:00
opaque_param_in_ufc.stderr Add regression test 2024-04-04 15:45:50 +00:00
probe-overflow-due-to-sized-predicate-ordering.rs Make sure to insert Sized bound first into clauses list 2024-04-01 21:41:45 -04:00
suggest-convert-ptr-to-ref.rs rework ptr-to-ref conversion suggestion for method calls 2024-04-10 18:51:09 +02:00
suggest-convert-ptr-to-ref.stderr rework ptr-to-ref conversion suggestion for method calls 2024-04-10 18:51:09 +02:00
suggest-method-on-call-with-macro-rcvr.rs Adjust spans correctly for fn -> method suggestion 2023-07-27 16:50:28 +00:00
suggest-method-on-call-with-macro-rcvr.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00