diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-12-22 11:03:50 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-22 11:03:50 +0100 |
| commit | ecdabb490cc71960dca3ab893e20825c7f2247ec (patch) | |
| tree | a57525e9b0955dc4375b5c37593a09d36681204e /src | |
| parent | 2cace6aa5d1db3e95d1d1fe8c2c9c432e8ae7c3d (diff) | |
| parent | 20052c83c037ee76dfc0e95f5c42c929250e6b71 (diff) | |
| download | rust-ecdabb490cc71960dca3ab893e20825c7f2247ec.tar.gz rust-ecdabb490cc71960dca3ab893e20825c7f2247ec.zip | |
Rollup merge of #105843 - compiler-errors:sugg-const, r=lcnr
Suggest associated const on possible capitalization mistake Suggest `i32::MAX` if we typed `i32::max` without making a function call. Fixes #93844
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/suggestions/assoc-ct-for-assoc-method.rs | 25 | ||||
| -rw-r--r-- | src/test/ui/suggestions/assoc-ct-for-assoc-method.stderr | 47 |
2 files changed, 72 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/assoc-ct-for-assoc-method.rs b/src/test/ui/suggestions/assoc-ct-for-assoc-method.rs new file mode 100644 index 00000000000..fe222776989 --- /dev/null +++ b/src/test/ui/suggestions/assoc-ct-for-assoc-method.rs @@ -0,0 +1,25 @@ +struct MyS; + +impl MyS { + const FOO: i32 = 1; + fn foo() -> MyS { + MyS + } +} + +fn main() { + let x: i32 = MyS::foo; + //~^ ERROR mismatched types + //~| HELP try referring to the + + let z: i32 = i32::max; + //~^ ERROR mismatched types + //~| HELP try referring to the + + // This example is still broken though... This is a hard suggestion to make, + // because we don't have access to the associated const probing code to make + // this suggestion where it's emitted, i.e. in trait selection. + let y: i32 = i32::max - 42; + //~^ ERROR cannot subtract + //~| HELP use parentheses +} diff --git a/src/test/ui/suggestions/assoc-ct-for-assoc-method.stderr b/src/test/ui/suggestions/assoc-ct-for-assoc-method.stderr new file mode 100644 index 00000000000..afef38f1296 --- /dev/null +++ b/src/test/ui/suggestions/assoc-ct-for-assoc-method.stderr @@ -0,0 +1,47 @@ +error[E0308]: mismatched types + --> $DIR/assoc-ct-for-assoc-method.rs:11:18 + | +LL | let x: i32 = MyS::foo; + | --- ^^^^^^^^ expected `i32`, found fn item + | | + | expected due to this + | + = note: expected type `i32` + found fn item `fn() -> MyS {MyS::foo}` +help: try referring to the associated const `FOO` instead + | +LL | let x: i32 = MyS::FOO; + | ~~~ + +error[E0308]: mismatched types + --> $DIR/assoc-ct-for-assoc-method.rs:15:18 + | +LL | let z: i32 = i32::max; + | --- ^^^^^^^^ expected `i32`, found fn item + | | + | expected due to this + | + = note: expected type `i32` + found fn item `fn(i32, i32) -> i32 {<i32 as Ord>::max}` +help: try referring to the associated const `MAX` instead + | +LL | let z: i32 = i32::MAX; + | ~~~ + +error[E0369]: cannot subtract `{integer}` from `fn(i32, i32) -> i32 {<i32 as Ord>::max}` + --> $DIR/assoc-ct-for-assoc-method.rs:22:27 + | +LL | let y: i32 = i32::max - 42; + | -------- ^ -- {integer} + | | + | fn(i32, i32) -> i32 {<i32 as Ord>::max} + | +help: use parentheses to call this associated function + | +LL | let y: i32 = i32::max(/* i32 */, /* i32 */) - 42; + | ++++++++++++++++++++++ + +error: aborting due to 3 previous errors + +Some errors have detailed explanations: E0308, E0369. +For more information about an error, try `rustc --explain E0308`. |
