rust/tests/ui/type
Matthias Krüger a369714a29
Rollup merge of #133767 - estebank:multiple-dep-version-tests, r=Nadrieril
Add more info on type/trait mismatches for different crate versions

When encountering a type or trait mismatch for two types coming from two different crates with the same name, detect if it is either mixing two types/traits from the same crate on different versions:

```
error[E0308]: mismatched types
  --> replaced
   |
LL |     do_something_type(Type);
   |     ----------------- ^^^^ expected `dependency::Type`, found `dep_2_reexport::Type`
   |     |
   |     arguments to this function are incorrect
   |
note: two different versions of crate `dependency` are being used; two types coming from two different versions of the same crate are different types even if they look the same
  --> replaced
   |
LL | pub struct Type(pub i32);
   | ^^^^^^^^^^^^^^^ this is the expected type `dependency::Type`
   |
  ::: replaced
   |
LL | pub struct Type;
   | ^^^^^^^^^^^^^^^ this is the found type `dep_2_reexport::Type`
   |
  ::: replaced
   |
LL | extern crate dep_2_reexport;
   | ---------------------------- one version of crate `dependency` is used here, as a dependency of crate `foo`
LL | extern crate dependency;
   | ------------------------ one version of crate `dependency` is used here, as a direct dependency of the current crate
   = help: you can use `cargo tree` to explore your dependency tree
note: function defined here
  --> replaced
   |
LL | pub fn do_something_type(_: Type) {}
   |        ^^^^^^^^^^^^^^^^^

error[E0308]: mismatched types
  --> replaced
   |
LL |     do_something_trait(Box::new(Type) as Box<dyn Trait2>);
   |     ------------------ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected trait `dependency::Trait2`, found trait `dep_2_reexport::Trait2`
   |     |
   |     arguments to this function are incorrect
   |
note: two different versions of crate `dependency` are being used; two types coming from two different versions of the same crate are different types even if they look the same
  --> replaced
   |
LL | pub trait Trait2 {}
   | ^^^^^^^^^^^^^^^^ this is the expected trait `dependency::Trait2`
   |
  ::: replaced
   |
LL | pub trait Trait2 {}
   | ^^^^^^^^^^^^^^^^ this is the found trait `dep_2_reexport::Trait2`
   |
  ::: replaced
   |
LL | extern crate dep_2_reexport;
   | ---------------------------- one version of crate `dependency` is used here, as a dependency of crate `foo`
LL | extern crate dependency;
   | ------------------------ one version of crate `dependency` is used here, as a direct dependency of the current crate
   = help: you can use `cargo tree` to explore your dependency tree
note: function defined here
  --> replaced
   |
LL | pub fn do_something_trait(_: Box<dyn Trait2>) {}
   |        ^^^^^^^^^^^^^^^^^^
```

or if it is different crates that were renamed to the same name:

```
error[E0308]: mismatched types
  --> $DIR/type-mismatch-same-crate-name.rs:21:20
   |
LL |         a::try_foo(foo2);
   |         ---------- ^^^^ expected `main:🅰️:Foo`, found a different `main:🅰️:Foo`
   |         |
   |         arguments to this function are incorrect
   |
note: two types coming from two different crates are different types even if they look the same
  --> $DIR/auxiliary/crate_a2.rs:1:1
   |
LL | pub struct Foo;
   | ^^^^^^^^^^^^^^ this is the found type `crate_a2::Foo`
   |
  ::: $DIR/auxiliary/crate_a1.rs:1:1
   |
LL | pub struct Foo;
   | ^^^^^^^^^^^^^^ this is the expected type `crate_a1::Foo`
   |
  ::: $DIR/type-mismatch-same-crate-name.rs:13:17
   |
LL |     let foo2 = {extern crate crate_a2 as a; a::Foo};
   |                 --------------------------- one type comes from crate `crate_a2` is used here, which is renamed locally to `a`
...
LL |         extern crate crate_a1 as a;
   |         --------------------------- one type comes from crate `crate_a1` is used here, which is renamed locally to `a`
note: function defined here
  --> $DIR/auxiliary/crate_a1.rs:10:8
   |
LL | pub fn try_foo(x: Foo){}
   |        ^^^^^^^

error[E0308]: mismatched types
  --> $DIR/type-mismatch-same-crate-name.rs:27:20
   |
LL |         a::try_bar(bar2);
   |         ---------- ^^^^ expected trait `main:🅰️:Bar`, found a different trait `main:🅰️:Bar`
   |         |
   |         arguments to this function are incorrect
   |
note: two types coming from two different crates are different types even if they look the same
  --> $DIR/auxiliary/crate_a2.rs:3:1
   |
LL | pub trait Bar {}
   | ^^^^^^^^^^^^^ this is the found trait `crate_a2::Bar`
   |
  ::: $DIR/auxiliary/crate_a1.rs:3:1
   |
LL | pub trait Bar {}
   | ^^^^^^^^^^^^^ this is the expected trait `crate_a1::Bar`
   |
  ::: $DIR/type-mismatch-same-crate-name.rs:13:17
   |
LL |     let foo2 = {extern crate crate_a2 as a; a::Foo};
   |                 --------------------------- one trait comes from crate `crate_a2` is used here, which is renamed locally to `a`
...
LL |         extern crate crate_a1 as a;
   |         --------------------------- one trait comes from crate `crate_a1` is used here, which is renamed locally to `a`
note: function defined here
  --> $DIR/auxiliary/crate_a1.rs:11:8
   |
LL | pub fn try_bar(x: Box<Bar>){}
   |        ^^^^^^^
```

This new output unifies the E0308 errors detail with the pre-existing E0277 errors, and better differentiates the "`extern crate` renamed" and "same crate, different versions" cases.
2024-12-08 14:28:24 +01:00
..
ascription Use more accurate span for : to :: suggestion 2024-07-12 03:02:58 +00:00
auxiliary Add more info on type/trait mismatches for different crate versions 2024-12-07 18:18:08 +00:00
pattern_types Rename core_pattern_type and core_pattern_types lib feature gates to pattern_type_macro 2024-12-04 16:16:24 +00:00
type-check Use trait name instead of full constraint in suggestion message 2024-12-07 21:29:58 +00:00
binding-assigned-block-without-tail-expression.rs
binding-assigned-block-without-tail-expression.stderr
clarify-error-for-generics-with-default-issue-120785.rs Update item order in test 2024-02-28 19:28:34 -05:00
clarify-error-for-generics-with-default-issue-120785.stderr Update item order in test 2024-02-28 19:28:34 -05:00
closure-with-wrong-borrows.rs
closure-with-wrong-borrows.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
default_type_parameter_in_fn_or_impl.rs make invalid_type_param_default lint show up in cargo future-compat reports 2024-07-15 22:05:45 +02:00
default_type_parameter_in_fn_or_impl.stderr make invalid_type_param_default lint show up in cargo future-compat reports 2024-07-15 22:05:45 +02:00
issue-7607-1.rs Move some tests 2024-04-21 15:43:43 -03:00
issue-7607-1.stderr Move some tests 2024-04-21 15:43:43 -03:00
issue-7607-2.rs tests: remove //@ pretty-expanded usages 2024-11-26 02:50:48 +08:00
issue-58355.rs
issue-58355.stderr Remove detail from label/note that is already available in other note 2024-10-29 16:26:57 +00:00
issue-67690-type-alias-bound-diagnostic-crash.rs Improve the impl and diag output of lint type_alias_bounds 2024-07-23 01:48:03 +02:00
issue-67690-type-alias-bound-diagnostic-crash.stderr Improve the impl and diag output of lint type_alias_bounds 2024-07-23 01:48:03 +02:00
issue-91268.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
issue-91268.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
issue-94187-verbose-type-name.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
issue-100584.rs
issue-100584.stderr
issue-101866.rs
issue-101866.stderr Deduplicate more sized errors on call exprs 2024-01-24 02:53:15 +00:00
issue-102598.rs
issue-102598.stderr
issue-103271.rs
issue-103271.stderr
missing-let-in-binding-2.fixed [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
missing-let-in-binding-2.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
missing-let-in-binding-2.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
missing-let-in-binding-3.rs
missing-let-in-binding-3.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
missing-let-in-binding-4.rs
missing-let-in-binding-4.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
missing-let-in-binding.fixed [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
missing-let-in-binding.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
missing-let-in-binding.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
option-ref-advice.rs
option-ref-advice.stderr
type-alias-bounds.rs Improve the impl and diag output of lint type_alias_bounds 2024-07-23 01:48:03 +02:00
type-alias-bounds.stderr Improve the impl and diag output of lint type_alias_bounds 2024-07-23 01:48:03 +02:00
type-annotation-needed.rs
type-annotation-needed.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
type-arg-out-of-scope.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
type-arg-out-of-scope.stderr
type-ascription-instead-of-initializer.rs
type-ascription-instead-of-initializer.stderr Use ordinal number in argument error 2024-07-14 13:50:09 +09:00
type-ascription-instead-of-statement-end.rs
type-ascription-instead-of-statement-end.stderr Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
type-ascription-precedence.rs
type-ascription-precedence.stderr
type-ascription-soundness.rs
type-ascription-soundness.stderr
type-ascription-with-fn-call.fixed [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
type-ascription-with-fn-call.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
type-ascription-with-fn-call.stderr Make parse error suggestions verbose and fix spans 2024-07-12 03:02:57 +00:00
type-ascription.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
type-check-defaults.rs
type-check-defaults.stderr Use trait name instead of full constraint in suggestion message 2024-12-07 21:29:58 +00:00
type-dependent-def-issue-49241.rs
type-dependent-def-issue-49241.stderr fix ICE when promoted has layout size overflow 2024-12-01 19:52:27 +01:00
type-error-break-tail.rs
type-error-break-tail.stderr Tweak value suggestions in borrowck and hir_analysis 2024-04-09 23:37:13 +00:00
type-mismatch-multiple.rs
type-mismatch-multiple.stderr
type-mismatch-same-crate-name.rs Add more info on type/trait mismatches for different crate versions 2024-12-07 18:18:08 +00:00
type-mismatch-same-crate-name.stderr Add more info on type/trait mismatches for different crate versions 2024-12-07 18:18:08 +00:00
type-mismatch.rs
type-mismatch.stderr recurse into refs when comparing tys for diagnostics 2023-12-07 23:00:46 -05:00
type-parameter-defaults-referencing-Self-ppaux.rs
type-parameter-defaults-referencing-Self-ppaux.stderr Compiler: Rename "object safe" to "dyn compatible" 2024-09-25 13:26:48 +02:00
type-parameter-defaults-referencing-Self.rs
type-parameter-defaults-referencing-Self.stderr Better suggestion span for missing type parameter 2024-07-04 02:41:13 +00:00
type-parameter-names.rs
type-parameter-names.stderr Note that type param is chosen by caller when suggesting return impl Trait 2024-03-16 23:20:42 +00:00
type-params-in-different-spaces-1.rs
type-params-in-different-spaces-1.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
type-params-in-different-spaces-2.rs
type-params-in-different-spaces-2.stderr
type-params-in-different-spaces-3.rs
type-params-in-different-spaces-3.stderr Note that type param is chosen by caller when suggesting return impl Trait 2024-03-16 23:20:42 +00:00
type-path-err-node-types.rs
type-path-err-node-types.stderr
type-recursive-box-shadowed.rs
type-recursive-box-shadowed.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
type-recursive.rs
type-recursive.stderr
type-shadow.rs
type-shadow.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
type-unsatisfiable.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
type-unsatisfiable.usage.stderr Show number in error message even for one error 2023-11-24 19:15:52 +01:00
verbose.normal.stderr don't elide shared parts of types in diagnostics when --verbose is passed 2023-12-24 16:47:18 -05:00
verbose.rs [AUTO-GENERATED] Migrate ui tests from // to //@ directives 2024-02-16 20:02:50 +00:00
verbose.verbose.stderr don't elide shared parts of types in diagnostics when --verbose is passed 2023-12-24 16:47:18 -05:00
wrong-call-return-type-due-to-generic-arg.rs
wrong-call-return-type-due-to-generic-arg.stderr