From 0baf61bfdb95980c69fbfcc0fc95ce82e8d81ac9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Wed, 23 Oct 2019 22:20:58 -0700 Subject: [PATCH 1/2] Increase spacing for suggestions in diagnostics Make the spacing between the code snippet and verbose structured suggestions consistent with note and help messages. --- src/librustc_errors/emitter.rs | 13 ++ .../rustdoc-ui/intra-links-ambiguity.stderr | 4 + src/test/rustdoc-ui/invalid-syntax.stderr | 11 ++ .../associated-types-path-2.stderr | 2 + ...edition-error-in-non-macro-position.stderr | 7 + .../await-keyword/2018-edition-error.stderr | 5 + src/test/ui/async-await/no-const-async.stderr | 1 + src/test/ui/bad/bad-crate-name.stderr | 1 + .../borrowck-vec-pattern-nesting.stderr | 2 + src/test/ui/class-missing-self.stderr | 1 + .../issue-18343.stderr | 1 + .../issue-2392.stderr | 9 ++ .../issue-32128.stderr | 1 + .../issue-33784.stderr | 3 + src/test/ui/consts/enum-discr-type-err.stderr | 1 + src/test/ui/crate-in-paths.stderr | 1 + .../ui/deprecation/invalid-literal.stderr | 1 + src/test/ui/did_you_mean/issue-40396.stderr | 3 + ...issue-43871-enum-instead-of-variant.stderr | 4 + ...92-tuple-destructure-missing-parens.stderr | 6 + ...de-confusable-in-float-literal-expt.stderr | 1 + ...ssue-56028-there-is-an-enum-variant.stderr | 2 + src/test/ui/discrim/discrim-ill-typed.stderr | 8 ++ src/test/ui/dotdotdot-expr.stderr | 1 + .../edition-keywords-2018-2015-parsing.stderr | 2 + .../edition-keywords-2018-2018-parsing.stderr | 2 + .../ui/empty/empty-struct-unit-expr.stderr | 2 + src/test/ui/error-codes/E0023.stderr | 2 + src/test/ui/error-codes/E0423.stderr | 2 + src/test/ui/error-codes/E0617.stderr | 1 + src/test/ui/error-codes/E0618.stderr | 1 + src/test/ui/error-codes/E0642.stderr | 3 + .../issue-43106-gating-of-macro_use.stderr | 1 + ...loat-literal-inference-restrictions.stderr | 1 + src/test/ui/fn/fn-compare-mismatch.stderr | 1 + src/test/ui/glob-resolve1.stderr | 6 + .../ui/hygiene/expansion-info-reset.stderr | 1 + src/test/ui/hygiene/globs.stderr | 2 + src/test/ui/if/ifmt-bad-format-args.stderr | 1 + .../impl-trait/impl-generic-mismatch.stderr | 2 + .../multiple-lifetimes/error-handling.stderr | 1 + ...t_outlive_least_region_or_bound.nll.stderr | 2 + .../static-return-lifetime-infered.nll.stderr | 2 + .../impl-trait/universal_wrong_bounds.stderr | 2 + src/test/ui/indexing-requires-a-uint.stderr | 1 + .../ui/inference/cannot-infer-closure.stderr | 1 + .../integer-literal-suffix-inference.stderr | 18 +++ src/test/ui/issues/issue-13359.stderr | 2 + src/test/ui/issues/issue-1362.stderr | 1 + src/test/ui/issues/issue-1448-2.stderr | 1 + src/test/ui/issues/issue-17546.stderr | 4 + src/test/ui/issues/issue-22644.stderr | 2 + src/test/ui/issues/issue-22933-3.stderr | 1 + src/test/ui/issues/issue-31910.stderr | 1 + src/test/ui/issues/issue-35075.stderr | 2 + src/test/ui/issues/issue-35675.stderr | 4 + src/test/ui/issues/issue-35976.stderr | 1 + src/test/ui/issues/issue-37534.stderr | 1 + src/test/ui/issues/issue-38293.stderr | 1 + .../ui/issues/issue-41652/issue-41652.stderr | 1 + src/test/ui/issues/issue-42944.stderr | 1 + src/test/ui/issues/issue-4366-2.stderr | 2 + src/test/ui/issues/issue-4366.stderr | 1 + src/test/ui/issues/issue-44406.stderr | 1 + src/test/ui/issues/issue-47377.stderr | 1 + src/test/ui/issues/issue-47380.stderr | 1 + src/test/ui/issues/issue-49257.stderr | 2 + src/test/ui/issues/issue-50571.stderr | 1 + src/test/ui/issues/issue-50599.stderr | 1 + src/test/ui/issues/issue-51874.stderr | 1 + src/test/ui/issues/issue-5239-1.stderr | 1 + src/test/ui/issues/issue-56685.stderr | 3 + src/test/ui/issues/issue-57198.stderr | 1 + src/test/ui/issues/issue-58857.stderr | 1 + src/test/ui/issues/issue-59488.stderr | 1 + src/test/ui/issues/issue-62554.stderr | 1 + src/test/ui/issues/issue-64732.stderr | 2 + src/test/ui/issues/issue-8761.stderr | 2 + .../keyword-extern-as-identifier-pat.stderr | 1 + .../keyword-extern-as-identifier-use.stderr | 1 + src/test/ui/lexical-scopes.stderr | 1 + .../ui/lifetime_starts_expressions.stderr | 1 + src/test/ui/lint/use_suggestion_json.stderr | 1 + .../loops/loop-break-value-no-repeat.stderr | 1 + src/test/ui/loops/loop-break-value.stderr | 8 ++ src/test/ui/macros/bad_hello.stderr | 2 + .../derive-in-eager-expansion-hang.stderr | 1 + src/test/ui/macros/format-parse-errors.stderr | 1 + src/test/ui/macros/issue-30143.stderr | 3 + .../macro-backtrace-invalid-internals.stderr | 2 + .../ui/macros/macro-outer-attributes.stderr | 1 + .../ui/macros/macros-nonfatal-errors.stderr | 1 + .../ui/malformed/malformed-unwind-2.stderr | 2 + .../meta-expected-error-correct-rev.a.stderr | 1 + ...od-ambig-one-trait-unknown-int-type.stderr | 1 + .../method-on-ambiguous-numeric-type.stderr | 3 + ...arg-count-expected-type-issue-47244.stderr | 1 + .../mismatched_types/closure-arg-count.stderr | 7 + .../ui/mismatched_types/issue-26480.stderr | 1 + .../numeric-literal-cast.stderr | 3 + .../mismatched_types/recovered-block.stderr | 1 + src/test/ui/namespace/namespace-mix.stderr | 2 + .../ty-outlives/impl-trait-captures.stderr | 1 + src/test/ui/no-implicit-prelude-nested.stderr | 15 ++ src/test/ui/no-implicit-prelude.stderr | 5 + src/test/ui/numeric/const-scope.stderr | 2 + src/test/ui/numeric/len.stderr | 1 + src/test/ui/numeric/numeric-cast-2.stderr | 3 + src/test/ui/numeric/numeric-cast.stderr | 98 +++++++++++++ src/test/ui/numeric/numeric-suffix.stderr | 132 ++++++++++++++++++ src/test/ui/obsolete-in-place/bad.stderr | 1 + .../ui/on-unimplemented/bad-annotation.stderr | 1 + .../ui/parenthesized-deref-suggestion.stderr | 1 + ...ed-types-project-from-hrtb-explicit.stderr | 1 + .../ui/parser/bad-value-ident-false.stderr | 1 + .../ui/parser/bad-value-ident-true.stderr | 1 + src/test/ui/parser/expr-as-stmt.stderr | 1 + src/test/ui/parser/issue-15980.stderr | 1 + src/test/ui/parser/issue-33418.stderr | 5 + src/test/ui/parser/issue-62895.stderr | 1 + src/test/ui/parser/issue-62973.stderr | 1 + src/test/ui/parser/keyword-abstract.stderr | 1 + .../ui/parser/keyword-as-as-identifier.stderr | 1 + .../parser/keyword-break-as-identifier.stderr | 1 + .../parser/keyword-const-as-identifier.stderr | 1 + .../keyword-continue-as-identifier.stderr | 1 + .../parser/keyword-else-as-identifier.stderr | 1 + .../parser/keyword-enum-as-identifier.stderr | 1 + src/test/ui/parser/keyword-final.stderr | 1 + .../ui/parser/keyword-fn-as-identifier.stderr | 1 + .../parser/keyword-for-as-identifier.stderr | 1 + .../ui/parser/keyword-if-as-identifier.stderr | 1 + .../parser/keyword-impl-as-identifier.stderr | 1 + .../parser/keyword-let-as-identifier.stderr | 1 + .../parser/keyword-loop-as-identifier.stderr | 1 + .../parser/keyword-match-as-identifier.stderr | 1 + .../parser/keyword-mod-as-identifier.stderr | 1 + .../parser/keyword-move-as-identifier.stderr | 1 + src/test/ui/parser/keyword-override.stderr | 1 + .../parser/keyword-pub-as-identifier.stderr | 1 + .../keyword-return-as-identifier.stderr | 1 + .../keyword-static-as-identifier.stderr | 1 + .../keyword-struct-as-identifier.stderr | 1 + .../parser/keyword-trait-as-identifier.stderr | 1 + ...yword-try-as-identifier-edition2018.stderr | 1 + .../parser/keyword-type-as-identifier.stderr | 1 + src/test/ui/parser/keyword-typeof.stderr | 1 + .../keyword-unsafe-as-identifier.stderr | 1 + .../parser/keyword-use-as-identifier.stderr | 1 + .../parser/keyword-where-as-identifier.stderr | 1 + .../parser/keyword-while-as-identifier.stderr | 1 + src/test/ui/parser/keyword.stderr | 1 + .../ui/parser/lex-bad-char-literals-2.stderr | 1 + .../ui/parser/lex-bad-char-literals-3.stderr | 2 + .../ui/parser/lex-bad-char-literals-5.stderr | 2 + .../ui/parser/lex-bad-char-literals-6.stderr | 3 + src/test/ui/parser/macro-keyword.stderr | 1 + .../parser/macros-no-semicolon-items.stderr | 2 + .../match-arrows-block-then-binop.stderr | 1 + src/test/ui/parser/mut-patterns.stderr | 3 + .../parser/range_inclusive_dotdotdot.stderr | 4 + .../ui/parser/recover-from-homoglyph.stderr | 1 + .../ui/parser/removed-syntax-field-let.stderr | 1 + ...quire-parens-for-chained-comparison.stderr | 2 + .../ui/parser/struct-literal-in-for.stderr | 1 + .../ui/parser/struct-literal-in-if.stderr | 1 + ...truct-literal-in-match-discriminant.stderr | 1 + .../ui/parser/struct-literal-in-while.stderr | 1 + ...truct-literal-restrictions-in-lamda.stderr | 1 + src/test/ui/parser/unicode-chars.stderr | 1 + src/test/ui/parser/unicode-quote-chars.stderr | 2 + .../use-as-where-use-ends-with-mod-sep.stderr | 1 + src/test/ui/placement-syntax.stderr | 1 + src/test/ui/pptypedef.stderr | 2 + src/test/ui/privacy/privacy-ns1.stderr | 4 + src/test/ui/privacy/privacy-ns2.stderr | 4 + src/test/ui/proc-macro/mixed-site-span.stderr | 1 + src/test/ui/pub/pub-ident-fn-2.stderr | 1 + .../pub/pub-ident-fn-with-lifetime-2.stderr | 1 + .../ui/pub/pub-ident-fn-with-lifetime.stderr | 1 + src/test/ui/pub/pub-ident-fn.stderr | 1 + .../pub/pub-ident-struct-with-lifetime.stderr | 1 + src/test/ui/pub/pub-ident-struct.stderr | 1 + src/test/ui/repeat_count.stderr | 2 + src/test/ui/reserved/reserved-become.stderr | 1 + .../ui/resolve/enums-are-namespaced-xc.stderr | 3 + src/test/ui/resolve/issue-16058.stderr | 1 + src/test/ui/resolve/issue-17518.stderr | 1 + src/test/ui/resolve/issue-21221-1.stderr | 3 + src/test/ui/resolve/issue-21221-2.stderr | 1 + src/test/ui/resolve/issue-21221-3.stderr | 1 + src/test/ui/resolve/issue-21221-4.stderr | 1 + src/test/ui/resolve/privacy-enum-ctor.stderr | 12 ++ .../ui/resolve/privacy-struct-ctor.stderr | 1 + ...uggest-path-instead-of-mod-dot-item.stderr | 2 + .../resolve/use_suggestion_placement.stderr | 3 + .../rust-2018/dyn-trait-compatibility.stderr | 1 + ...ition-lint-infer-outlives-multispan.stderr | 67 +++++++++ .../issue-52202-use-suggestions.stderr | 1 + ...s_pin_lifetime_impl_trait-async.nll.stderr | 1 + ...f_types_pin_lifetime_impl_trait.nll.stderr | 1 + src/test/ui/self/self_type_keyword.stderr | 1 + src/test/ui/shift-various-bad-types.stderr | 1 + .../one-use-in-fn-argument.stderr | 3 + src/test/ui/span/issue-35987.stderr | 1 + src/test/ui/span/issue-39018.stderr | 10 ++ src/test/ui/span/missing-unit-argument.stderr | 4 + src/test/ui/str/str-as-char.stderr | 1 + .../ui/str/str-concat-on-double-ref.stderr | 1 + .../ui/struct-literal-variant-in-if.stderr | 4 + .../no-extern-crate-in-type.stderr | 1 + .../suggest-closure-return-type-1.stderr | 1 + .../suggest-closure-return-type-2.stderr | 1 + .../suggest-closure-return-type-3.stderr | 1 + src/test/ui/suggestions/suggest-labels.stderr | 3 + .../suggest-on-bare-closure-call.stderr | 1 + .../suggest-std-when-using-type.stderr | 2 + ...type-argument-instead-of-assoc-type.stderr | 1 + .../ui/traits/traits-multidispatch-bad.stderr | 1 + ...ounds-inconsistent-projection-error.stderr | 1 + .../try-block/try-block-in-edition2015.stderr | 1 + .../ui/tutorial-suffix-inference-test.stderr | 2 + ...t-variant-form-through-alias-caught.stderr | 1 + .../ui/ufcs/ufcs-qpath-self-mismatch.stderr | 2 + .../unboxed-closures-type-mismatch.stderr | 1 + src/test/ui/use/use-super-global-path.stderr | 1 + .../ui/variants/variant-used-as-type.stderr | 2 + 227 files changed, 744 insertions(+) diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index e3b55a14133..e59d6c56750 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -1629,6 +1629,19 @@ impl EmitterWriter { _ => () } } + if children.is_empty() && suggestions.iter().any(|s| { + s.style != SuggestionStyle::CompletelyHidden + }) { + let mut buffer = StyledBuffer::new(); + if !self.short_message { + draw_col_separator_no_space(&mut buffer, 0, max_line_num_len + 1); + } + match emit_to_destination(&buffer.render(), level, &mut self.dst, + self.short_message) { + Ok(()) => (), + Err(e) => panic!("failed to emit error: {}", e) + } + } for sugg in suggestions { if sugg.style == SuggestionStyle::CompletelyHidden { // do not display this suggestion, it is meant only for tools diff --git a/src/test/rustdoc-ui/intra-links-ambiguity.stderr b/src/test/rustdoc-ui/intra-links-ambiguity.stderr index 5d66cc1364c..9ee3ff57fb5 100644 --- a/src/test/rustdoc-ui/intra-links-ambiguity.stderr +++ b/src/test/rustdoc-ui/intra-links-ambiguity.stderr @@ -23,6 +23,7 @@ error: `ambiguous` is both a struct and a function | LL | /// [ambiguous] is ambiguous. | ^^^^^^^^^ ambiguous link + | help: to link to the struct, prefix with the item type | LL | /// [struct@ambiguous] is ambiguous. @@ -37,6 +38,7 @@ error: `multi_conflict` is a struct, a function, and a macro | LL | /// [`multi_conflict`] is a three-way conflict. | ^^^^^^^^^^^^^^^^ ambiguous link + | help: to link to the struct, prefix with the item type | LL | /// [`struct@multi_conflict`] is a three-way conflict. @@ -55,6 +57,7 @@ error: `type_and_value` is both a module and a constant | LL | /// Ambiguous [type_and_value]. | ^^^^^^^^^^^^^^ ambiguous link + | help: to link to the module, prefix with the item type | LL | /// Ambiguous [module@type_and_value]. @@ -69,6 +72,7 @@ error: `foo::bar` is both an enum and a function | LL | /// Ambiguous non-implied shortcut link [`foo::bar`]. | ^^^^^^^^^^ ambiguous link + | help: to link to the enum, prefix with the item type | LL | /// Ambiguous non-implied shortcut link [`enum@foo::bar`]. diff --git a/src/test/rustdoc-ui/invalid-syntax.stderr b/src/test/rustdoc-ui/invalid-syntax.stderr index 6f50edae650..8ec4338e13f 100644 --- a/src/test/rustdoc-ui/invalid-syntax.stderr +++ b/src/test/rustdoc-ui/invalid-syntax.stderr @@ -24,6 +24,7 @@ LL | /// ``` LL | | /// \__________pkt->size___________/ \_result->size_/ \__pkt->size__/ LL | | /// ``` | |_______^ + | help: mark blocks that do not contain Rust code as text | LL | /// ```text @@ -34,6 +35,7 @@ error: unknown start of token: ` | 3 | | ^^^^^^ did you mean `baz::foobar`? | ^ + | help: Unicode character '`' (Grave Accent) looks like ''' (Single Quote), but it is not | 3 | | ^^^^^^ did you mean 'baz::foobar`? @@ -44,6 +46,7 @@ error: unknown start of token: ` | 3 | | ^^^^^^ did you mean `baz::foobar`? | ^ + | help: Unicode character '`' (Grave Accent) looks like ''' (Single Quote), but it is not | 3 | | ^^^^^^ did you mean `baz::foobar'? @@ -59,6 +62,7 @@ LL | | /// LL | use foobar::Baz; LL | | /// | ^^^^^^ did you mean `baz::foobar`? LL | | /// ``` | |_______^ + | help: mark blocks that do not contain Rust code as text | LL | /// ```text @@ -78,6 +82,7 @@ LL | /// ``` LL | | /// \_ LL | | /// ``` | |_______^ + | help: mark blocks that do not contain Rust code as text | LL | /// ```text @@ -117,6 +122,7 @@ error: unknown start of token: ` | 1 | ``` | ^ + | help: Unicode character '`' (Grave Accent) looks like ''' (Single Quote), but it is not | 1 | '`` @@ -127,6 +133,7 @@ error: unknown start of token: ` | 1 | ``` | ^ + | help: Unicode character '`' (Grave Accent) looks like ''' (Single Quote), but it is not | 1 | `'` @@ -137,6 +144,7 @@ error: unknown start of token: ` | 1 | ``` | ^ + | help: Unicode character '`' (Grave Accent) looks like ''' (Single Quote), but it is not | 1 | ``' @@ -196,6 +204,7 @@ LL | | /// LL | | /// LL | | /// ``` | |_______^ + | help: mark blocks that do not contain Rust code as text | LL | /// ```text @@ -236,6 +245,7 @@ error: unknown start of token: ` | 1 | ``` | ^ + | help: Unicode character '`' (Grave Accent) looks like ''' (Single Quote), but it is not | 1 | '`` @@ -264,6 +274,7 @@ error: unknown start of token: ` | 3 | | ^^^^^^ did you mean `baz::foobar`? | ^ + | help: Unicode character '`' (Grave Accent) looks like ''' (Single Quote), but it is not | 3 | | ^^^^^^ did you mean 'baz::foobar`? diff --git a/src/test/ui/associated-types/associated-types-path-2.stderr b/src/test/ui/associated-types/associated-types-path-2.stderr index bb2e7251849..246c745cd33 100644 --- a/src/test/ui/associated-types/associated-types-path-2.stderr +++ b/src/test/ui/associated-types/associated-types-path-2.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | f1(2i32, 4i32); | ^^^^ expected u32, found i32 + | help: change the type of the numeric literal from `i32` to `u32` | LL | f1(2i32, 4u32); @@ -43,6 +44,7 @@ error[E0308]: mismatched types | LL | let _: i32 = f2(2i32); | ^^^^^^^^ expected i32, found u32 + | help: you can convert an `u32` to `i32` and panic if the converted value wouldn't fit | LL | let _: i32 = f2(2i32).try_into().unwrap(); diff --git a/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.stderr b/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.stderr index 0e859466322..05d543a7e48 100644 --- a/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.stderr +++ b/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `await` | LL | pub mod await { | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | pub mod r#await { @@ -13,6 +14,7 @@ error: expected identifier, found keyword `await` | LL | pub struct await; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | pub struct r#await; @@ -23,6 +25,7 @@ error: expected identifier, found keyword `await` | LL | use self::outer_mod::await::await; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | use self::outer_mod::r#await::await; @@ -33,6 +36,7 @@ error: expected identifier, found keyword `await` | LL | use self::outer_mod::await::await; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | use self::outer_mod::await::r#await; @@ -43,6 +47,7 @@ error: expected identifier, found keyword `await` | LL | struct Foo { await: () } | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | struct Foo { r#await: () } @@ -53,6 +58,7 @@ error: expected identifier, found keyword `await` | LL | impl Foo { fn await() {} } | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | impl Foo { fn r#await() {} } @@ -63,6 +69,7 @@ error: expected identifier, found keyword `await` | LL | macro_rules! await { | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | macro_rules! r#await { diff --git a/src/test/ui/async-await/await-keyword/2018-edition-error.stderr b/src/test/ui/async-await/await-keyword/2018-edition-error.stderr index 71f403f278e..d44d51b8fd1 100644 --- a/src/test/ui/async-await/await-keyword/2018-edition-error.stderr +++ b/src/test/ui/async-await/await-keyword/2018-edition-error.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `await` | LL | pub mod await { | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | pub mod r#await { @@ -13,6 +14,7 @@ error: expected identifier, found keyword `await` | LL | pub struct await; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | pub struct r#await; @@ -23,6 +25,7 @@ error: expected identifier, found keyword `await` | LL | use self::outer_mod::await::await; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | use self::outer_mod::r#await::await; @@ -33,6 +36,7 @@ error: expected identifier, found keyword `await` | LL | use self::outer_mod::await::await; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | use self::outer_mod::await::r#await; @@ -43,6 +47,7 @@ error: expected identifier, found keyword `await` | LL | macro_rules! await { () => {}; } | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | macro_rules! r#await { () => {}; } diff --git a/src/test/ui/async-await/no-const-async.stderr b/src/test/ui/async-await/no-const-async.stderr index fe059145785..95ded537ab3 100644 --- a/src/test/ui/async-await/no-const-async.stderr +++ b/src/test/ui/async-await/no-const-async.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `async` | LL | pub const async fn x() {} | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | pub const r#async fn x() {} diff --git a/src/test/ui/bad/bad-crate-name.stderr b/src/test/ui/bad/bad-crate-name.stderr index a08535a7757..e015010da13 100644 --- a/src/test/ui/bad/bad-crate-name.stderr +++ b/src/test/ui/bad/bad-crate-name.stderr @@ -3,6 +3,7 @@ error: crate name using dashes are not valid in `extern crate` statements | LL | extern crate krate-name-here; | ^^^^^^^^^^^^^^^ dash-separated idents are not valid + | help: if the original crate name uses dashes you need to use underscores in the code | LL | extern crate krate_name_here; diff --git a/src/test/ui/borrowck/borrowck-vec-pattern-nesting.stderr b/src/test/ui/borrowck/borrowck-vec-pattern-nesting.stderr index f54a3a4072c..ad5e206a9a1 100644 --- a/src/test/ui/borrowck/borrowck-vec-pattern-nesting.stderr +++ b/src/test/ui/borrowck/borrowck-vec-pattern-nesting.stderr @@ -33,6 +33,7 @@ LL | &mut [_a, | | | data moved here | move occurs because `_a` has type `std::boxed::Box`, which does not implement the `Copy` trait + | help: consider removing the `&mut` | LL | [_a, @@ -64,6 +65,7 @@ LL | _b] => {} | | | data moved here | move occurs because `_b` has type `std::boxed::Box`, which does not implement the `Copy` trait + | help: consider removing the `&mut` | LL | [ diff --git a/src/test/ui/class-missing-self.stderr b/src/test/ui/class-missing-self.stderr index 25cb85dadb9..681d0ffea8b 100644 --- a/src/test/ui/class-missing-self.stderr +++ b/src/test/ui/class-missing-self.stderr @@ -9,6 +9,7 @@ error[E0425]: cannot find function `sleep` in this scope | LL | sleep(); | ^^^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use std::thread::sleep; diff --git a/src/test/ui/confuse-field-and-method/issue-18343.stderr b/src/test/ui/confuse-field-and-method/issue-18343.stderr index 03f9d990dbb..79ba93130a7 100644 --- a/src/test/ui/confuse-field-and-method/issue-18343.stderr +++ b/src/test/ui/confuse-field-and-method/issue-18343.stderr @@ -6,6 +6,7 @@ LL | struct Obj where F: FnMut() -> u32 { ... LL | o.closure(); | ^^^^^^^ field, not a method + | help: to call the function stored in `closure`, surround the field access with parentheses | LL | (o.closure)(); diff --git a/src/test/ui/confuse-field-and-method/issue-2392.stderr b/src/test/ui/confuse-field-and-method/issue-2392.stderr index 351cfef1b53..a44b9718415 100644 --- a/src/test/ui/confuse-field-and-method/issue-2392.stderr +++ b/src/test/ui/confuse-field-and-method/issue-2392.stderr @@ -6,6 +6,7 @@ LL | struct Obj where F: FnOnce() -> u32 { ... LL | o_closure.closure(); | ^^^^^^^ field, not a method + | help: to call the function stored in `closure`, surround the field access with parentheses | LL | (o_closure.closure)(); @@ -30,6 +31,7 @@ LL | struct Obj where F: FnOnce() -> u32 { ... LL | o_func.closure(); | ^^^^^^^ field, not a method + | help: to call the function stored in `closure`, surround the field access with parentheses | LL | (o_func.closure)(); @@ -43,6 +45,7 @@ LL | struct BoxedObj { ... LL | boxed_fn.boxed_closure(); | ^^^^^^^^^^^^^ field, not a method + | help: to call the function stored in `boxed_closure`, surround the field access with parentheses | LL | (boxed_fn.boxed_closure)(); @@ -56,6 +59,7 @@ LL | struct BoxedObj { ... LL | boxed_closure.boxed_closure(); | ^^^^^^^^^^^^^ field, not a method + | help: to call the function stored in `boxed_closure`, surround the field access with parentheses | LL | (boxed_closure.boxed_closure)(); @@ -69,6 +73,7 @@ LL | struct Obj where F: FnOnce() -> u32 { ... LL | w.wrap.closure(); | ^^^^^^^ field, not a method + | help: to call the function stored in `closure`, surround the field access with parentheses | LL | (w.wrap.closure)(); @@ -93,6 +98,7 @@ LL | struct Obj where F: FnOnce() -> u32 { ... LL | check_expression().closure(); | ^^^^^^^ field, not a method + | help: to call the function stored in `closure`, surround the field access with parentheses | LL | (check_expression().closure)(); @@ -106,6 +112,7 @@ LL | struct FuncContainer { ... LL | (*self.container).f1(1); | ^^ field, not a method + | help: to call the function stored in `f1`, surround the field access with parentheses | LL | ((*self.container).f1)(1); @@ -119,6 +126,7 @@ LL | struct FuncContainer { ... LL | (*self.container).f2(1); | ^^ field, not a method + | help: to call the function stored in `f2`, surround the field access with parentheses | LL | ((*self.container).f2)(1); @@ -132,6 +140,7 @@ LL | struct FuncContainer { ... LL | (*self.container).f3(1); | ^^ field, not a method + | help: to call the function stored in `f3`, surround the field access with parentheses | LL | ((*self.container).f3)(1); diff --git a/src/test/ui/confuse-field-and-method/issue-32128.stderr b/src/test/ui/confuse-field-and-method/issue-32128.stderr index fbabb3a88cc..b2f7894ba05 100644 --- a/src/test/ui/confuse-field-and-method/issue-32128.stderr +++ b/src/test/ui/confuse-field-and-method/issue-32128.stderr @@ -6,6 +6,7 @@ LL | struct Example { ... LL | demo.example(1); | ^^^^^^^ field, not a method + | help: to call the function stored in `example`, surround the field access with parentheses | LL | (demo.example)(1); diff --git a/src/test/ui/confuse-field-and-method/issue-33784.stderr b/src/test/ui/confuse-field-and-method/issue-33784.stderr index 60f1a932f44..af29a9963e1 100644 --- a/src/test/ui/confuse-field-and-method/issue-33784.stderr +++ b/src/test/ui/confuse-field-and-method/issue-33784.stderr @@ -3,6 +3,7 @@ error[E0599]: no method named `closure` found for type `&Obj<[closure@$DIR/issue | LL | p.closure(); | ^^^^^^^ field, not a method + | help: to call the function stored in `closure`, surround the field access with parentheses | LL | (p.closure)(); @@ -13,6 +14,7 @@ error[E0599]: no method named `fn_ptr` found for type `&&Obj<[closure@$DIR/issue | LL | q.fn_ptr(); | ^^^^^^ field, not a method + | help: to call the function stored in `fn_ptr`, surround the field access with parentheses | LL | (q.fn_ptr)(); @@ -23,6 +25,7 @@ error[E0599]: no method named `c_fn_ptr` found for type `&D` in the current scop | LL | s.c_fn_ptr(); | ^^^^^^^^ field, not a method + | help: to call the function stored in `c_fn_ptr`, surround the field access with parentheses | LL | (s.c_fn_ptr)(); diff --git a/src/test/ui/consts/enum-discr-type-err.stderr b/src/test/ui/consts/enum-discr-type-err.stderr index 3c4fac7327d..a2545c8b6f2 100644 --- a/src/test/ui/consts/enum-discr-type-err.stderr +++ b/src/test/ui/consts/enum-discr-type-err.stderr @@ -9,6 +9,7 @@ LL | | A = F, LL | | B = T, LL | | } | |_- in this macro invocation + | help: you can convert an `i32` to `isize` and panic if the converted value wouldn't fit | LL | $( $v = $s::V.try_into().unwrap(), )* diff --git a/src/test/ui/crate-in-paths.stderr b/src/test/ui/crate-in-paths.stderr index c67fd4ac13c..38d222f980d 100644 --- a/src/test/ui/crate-in-paths.stderr +++ b/src/test/ui/crate-in-paths.stderr @@ -3,6 +3,7 @@ error[E0425]: cannot find value `Foo` in this scope | LL | Foo; | ^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use crate::bar::Foo; diff --git a/src/test/ui/deprecation/invalid-literal.stderr b/src/test/ui/deprecation/invalid-literal.stderr index a82eed24814..a5088a3ee33 100644 --- a/src/test/ui/deprecation/invalid-literal.stderr +++ b/src/test/ui/deprecation/invalid-literal.stderr @@ -3,6 +3,7 @@ error: malformed `deprecated` attribute input | LL | #[deprecated = b"test"] | ^^^^^^^^^^^^^^^^^^^^^^^ + | help: the following are the possible correct uses | LL | #[deprecated] diff --git a/src/test/ui/did_you_mean/issue-40396.stderr b/src/test/ui/did_you_mean/issue-40396.stderr index 7fc7c2628c4..749d1093cca 100644 --- a/src/test/ui/did_you_mean/issue-40396.stderr +++ b/src/test/ui/did_you_mean/issue-40396.stderr @@ -3,6 +3,7 @@ error: chained comparison operators require parentheses | LL | (0..13).collect>(); | ^^^^^ + | help: use `::<...>` instead of `<...>` to specify type arguments | LL | (0..13).collect::>(); @@ -13,6 +14,7 @@ error: chained comparison operators require parentheses | LL | Vec::new(); | ^^^^^ + | help: use `::<...>` instead of `<...>` to specify type arguments | LL | Vec::::new(); @@ -23,6 +25,7 @@ error: chained comparison operators require parentheses | LL | (0..13).collect(); | ^^^^^ + | help: use `::<...>` instead of `<...>` to specify type arguments | LL | (0..13).collect::(); diff --git a/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.stderr b/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.stderr index ef68bf52cf3..0a2fbe4918f 100644 --- a/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.stderr +++ b/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.stderr @@ -3,6 +3,7 @@ error[E0423]: expected function, found enum `Option` | LL | let x = Option(1); | ^^^^^^ + | help: try using one of the enum's variants | LL | let x = std::option::Option::None(1); @@ -15,6 +16,7 @@ error[E0532]: expected tuple struct/variant, found enum `Option` | LL | if let Option(_) = x { | ^^^^^^ + | help: try using one of the enum's variants | LL | if let std::option::Option::None(_) = x { @@ -27,6 +29,7 @@ error[E0532]: expected tuple struct/variant, found enum `Example` | LL | if let Example(_) = y { | ^^^^^^^ + | help: try using one of the enum's variants | LL | if let Example::Ex(_) = y { @@ -45,6 +48,7 @@ error[E0423]: expected function, found enum `ManyVariants` | LL | let z = ManyVariants(); | ^^^^^^^^^^^^ + | help: try using one of the enum's variants | LL | let z = ManyVariants::One(); diff --git a/src/test/ui/did_you_mean/issue-48492-tuple-destructure-missing-parens.stderr b/src/test/ui/did_you_mean/issue-48492-tuple-destructure-missing-parens.stderr index 8099c3c0584..705c90985d5 100644 --- a/src/test/ui/did_you_mean/issue-48492-tuple-destructure-missing-parens.stderr +++ b/src/test/ui/did_you_mean/issue-48492-tuple-destructure-missing-parens.stderr @@ -3,6 +3,7 @@ error: unexpected `,` in pattern | LL | while let b1, b2, b3 = reading_frame.next().expect("there should be a start codon") { | ^ + | help: try adding parentheses to match on a tuple.. | LL | while let (b1, b2, b3) = reading_frame.next().expect("there should be a start codon") { @@ -17,6 +18,7 @@ error: unexpected `,` in pattern | LL | if let b1, b2, b3 = reading_frame.next().unwrap() { | ^ + | help: try adding parentheses to match on a tuple.. | LL | if let (b1, b2, b3) = reading_frame.next().unwrap() { @@ -31,6 +33,7 @@ error: unexpected `,` in pattern | LL | Nucleotide::Adenine, Nucleotide::Cytosine, _ => true | ^ + | help: try adding parentheses to match on a tuple.. | LL | (Nucleotide::Adenine, Nucleotide::Cytosine, _) => true @@ -45,6 +48,7 @@ error: unexpected `,` in pattern | LL | for x, _barr_body in women.iter().map(|woman| woman.allosomes.clone()) { | ^ + | help: try adding parentheses to match on a tuple.. | LL | for (x, _barr_body) in women.iter().map(|woman| woman.allosomes.clone()) { @@ -59,6 +63,7 @@ error: unexpected `,` in pattern | LL | for x, y @ Allosome::Y(_) in men.iter().map(|man| man.allosomes.clone()) { | ^ + | help: try adding parentheses to match on a tuple.. | LL | for (x, y @ Allosome::Y(_)) in men.iter().map(|man| man.allosomes.clone()) { @@ -73,6 +78,7 @@ error: unexpected `,` in pattern | LL | let women, men: (Vec, Vec) = genomes.iter().cloned() | ^ + | help: try adding parentheses to match on a tuple.. | LL | let (women, men): (Vec, Vec) = genomes.iter().cloned() diff --git a/src/test/ui/did_you_mean/issue-49746-unicode-confusable-in-float-literal-expt.stderr b/src/test/ui/did_you_mean/issue-49746-unicode-confusable-in-float-literal-expt.stderr index 9ee86adec52..f194b335fde 100644 --- a/src/test/ui/did_you_mean/issue-49746-unicode-confusable-in-float-literal-expt.stderr +++ b/src/test/ui/did_you_mean/issue-49746-unicode-confusable-in-float-literal-expt.stderr @@ -9,6 +9,7 @@ error: unknown start of token: \u{2212} | LL | const UNIVERSAL_GRAVITATIONAL_CONSTANT: f64 = 6.674e−11; // m³⋅kg⁻¹⋅s⁻² | ^ + | help: Unicode character '−' (Minus Sign) looks like '-' (Minus/Hyphen), but it is not | LL | const UNIVERSAL_GRAVITATIONAL_CONSTANT: f64 = 6.674e-11; // m³⋅kg⁻¹⋅s⁻² diff --git a/src/test/ui/did_you_mean/issue-56028-there-is-an-enum-variant.stderr b/src/test/ui/did_you_mean/issue-56028-there-is-an-enum-variant.stderr index cb350a1faee..792b36e00bb 100644 --- a/src/test/ui/did_you_mean/issue-56028-there-is-an-enum-variant.stderr +++ b/src/test/ui/did_you_mean/issue-56028-there-is-an-enum-variant.stderr @@ -3,6 +3,7 @@ error[E0412]: cannot find type `Set` in this scope | LL | fn setup() -> Set { Set } | ^^^ not found in this scope + | help: there is an enum variant `AffixHeart::Set` and 7 others; try using the variant's enum | LL | fn setup() -> AffixHeart { Set } @@ -20,6 +21,7 @@ error[E0425]: cannot find value `Set` in this scope | LL | fn setup() -> Set { Set } | ^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use AffixHeart::Set; diff --git a/src/test/ui/discrim/discrim-ill-typed.stderr b/src/test/ui/discrim/discrim-ill-typed.stderr index 543fecb249f..d9675d65a2a 100644 --- a/src/test/ui/discrim/discrim-ill-typed.stderr +++ b/src/test/ui/discrim/discrim-ill-typed.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | OhNo = 0_u8, | ^^^^ expected i8, found u8 + | help: change the type of the numeric literal from `u8` to `i8` | LL | OhNo = 0_i8, @@ -13,6 +14,7 @@ error[E0308]: mismatched types | LL | OhNo = 0_i8, | ^^^^ expected u8, found i8 + | help: change the type of the numeric literal from `i8` to `u8` | LL | OhNo = 0_u8, @@ -23,6 +25,7 @@ error[E0308]: mismatched types | LL | OhNo = 0_u16, | ^^^^^ expected i16, found u16 + | help: change the type of the numeric literal from `u16` to `i16` | LL | OhNo = 0_i16, @@ -33,6 +36,7 @@ error[E0308]: mismatched types | LL | OhNo = 0_i16, | ^^^^^ expected u16, found i16 + | help: change the type of the numeric literal from `i16` to `u16` | LL | OhNo = 0_u16, @@ -43,6 +47,7 @@ error[E0308]: mismatched types | LL | OhNo = 0_u32, | ^^^^^ expected i32, found u32 + | help: change the type of the numeric literal from `u32` to `i32` | LL | OhNo = 0_i32, @@ -53,6 +58,7 @@ error[E0308]: mismatched types | LL | OhNo = 0_i32, | ^^^^^ expected u32, found i32 + | help: change the type of the numeric literal from `i32` to `u32` | LL | OhNo = 0_u32, @@ -63,6 +69,7 @@ error[E0308]: mismatched types | LL | OhNo = 0_u64, | ^^^^^ expected i64, found u64 + | help: change the type of the numeric literal from `u64` to `i64` | LL | OhNo = 0_i64, @@ -73,6 +80,7 @@ error[E0308]: mismatched types | LL | OhNo = 0_i64, | ^^^^^ expected u64, found i64 + | help: change the type of the numeric literal from `i64` to `u64` | LL | OhNo = 0_u64, diff --git a/src/test/ui/dotdotdot-expr.stderr b/src/test/ui/dotdotdot-expr.stderr index a5ef7b65048..ec1335cfdb0 100644 --- a/src/test/ui/dotdotdot-expr.stderr +++ b/src/test/ui/dotdotdot-expr.stderr @@ -3,6 +3,7 @@ error: unexpected token: `...` | LL | let _redemptive = 1...21; | ^^^ + | help: use `..` for an exclusive range | LL | let _redemptive = 1..21; diff --git a/src/test/ui/editions/edition-keywords-2018-2015-parsing.stderr b/src/test/ui/editions/edition-keywords-2018-2015-parsing.stderr index be991cd0c81..77eb44c2065 100644 --- a/src/test/ui/editions/edition-keywords-2018-2015-parsing.stderr +++ b/src/test/ui/editions/edition-keywords-2018-2015-parsing.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `async` | LL | let mut async = 1; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let mut r#async = 1; @@ -13,6 +14,7 @@ error: expected identifier, found keyword `async` | LL | module::async(); | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | module::r#async(); diff --git a/src/test/ui/editions/edition-keywords-2018-2018-parsing.stderr b/src/test/ui/editions/edition-keywords-2018-2018-parsing.stderr index 93a7627f887..01f9f00e91c 100644 --- a/src/test/ui/editions/edition-keywords-2018-2018-parsing.stderr +++ b/src/test/ui/editions/edition-keywords-2018-2018-parsing.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `async` | LL | let mut async = 1; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let mut r#async = 1; @@ -13,6 +14,7 @@ error: expected identifier, found keyword `async` | LL | module::async(); | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | module::r#async(); diff --git a/src/test/ui/empty/empty-struct-unit-expr.stderr b/src/test/ui/empty/empty-struct-unit-expr.stderr index 696eabe99cf..50b0e19133e 100644 --- a/src/test/ui/empty/empty-struct-unit-expr.stderr +++ b/src/test/ui/empty/empty-struct-unit-expr.stderr @@ -19,6 +19,7 @@ LL | let e4 = E::Empty4(); | ^^^^^^^^^-- | | | call expression requires function + | help: `E::Empty4` is a unit variant, you need to write it without the parenthesis | LL | let e4 = E::Empty4; @@ -39,6 +40,7 @@ LL | let xe4 = XE::XEmpty4(); | ^^^^^^^^^^^-- | | | call expression requires function + | help: `XE::XEmpty4` is a unit variant, you need to write it without the parenthesis | LL | let xe4 = XE::XEmpty4; diff --git a/src/test/ui/error-codes/E0023.stderr b/src/test/ui/error-codes/E0023.stderr index dbce6003a2b..a3610099294 100644 --- a/src/test/ui/error-codes/E0023.stderr +++ b/src/test/ui/error-codes/E0023.stderr @@ -33,6 +33,7 @@ LL | Orange((String, String)), ... LL | Fruit::Orange(a, b) => {}, | ^^^^^^^^^^^^^^^^^^^ expected 1 field, found 2 + | help: missing parenthesis | LL | Fruit::Orange((a, b)) => {}, @@ -46,6 +47,7 @@ LL | Banana(()), ... LL | Fruit::Banana() => {}, | ^^^^^^^^^^^^^^^ expected 1 field, found 0 + | help: missing parenthesis | LL | Fruit::Banana(()) => {}, diff --git a/src/test/ui/error-codes/E0423.stderr b/src/test/ui/error-codes/E0423.stderr index 754006bc217..4e016dbd1c0 100644 --- a/src/test/ui/error-codes/E0423.stderr +++ b/src/test/ui/error-codes/E0423.stderr @@ -3,6 +3,7 @@ error: struct literals are not allowed here | LL | if let S { x: _x, y: 2 } = S { x: 1, y: 2 } { println!("Ok"); } | ^^^^^^^^^^^^^^^^ + | help: surround the struct literal with parentheses | LL | if let S { x: _x, y: 2 } = (S { x: 1, y: 2 }) { println!("Ok"); } @@ -19,6 +20,7 @@ error: struct literals are not allowed here | LL | for _ in std::ops::Range { start: 0, end: 10 } {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | help: surround the struct literal with parentheses | LL | for _ in (std::ops::Range { start: 0, end: 10 }) {} diff --git a/src/test/ui/error-codes/E0617.stderr b/src/test/ui/error-codes/E0617.stderr index 7c4df099d0d..c029060c3fb 100644 --- a/src/test/ui/error-codes/E0617.stderr +++ b/src/test/ui/error-codes/E0617.stderr @@ -33,6 +33,7 @@ error[E0617]: can't pass `unsafe extern "C" fn(*const i8, ...) {printf}` to vari | LL | printf(::std::ptr::null(), printf); | ^^^^^^ + | help: cast the value to `unsafe extern "C" fn(*const i8, ...)` | LL | printf(::std::ptr::null(), printf as unsafe extern "C" fn(*const i8, ...)); diff --git a/src/test/ui/error-codes/E0618.stderr b/src/test/ui/error-codes/E0618.stderr index b691f09ad7a..6ddda3bf8b5 100644 --- a/src/test/ui/error-codes/E0618.stderr +++ b/src/test/ui/error-codes/E0618.stderr @@ -8,6 +8,7 @@ LL | X::Entry(); | ^^^^^^^^-- | | | call expression requires function + | help: `X::Entry` is a unit variant, you need to write it without the parenthesis | LL | X::Entry; diff --git a/src/test/ui/error-codes/E0642.stderr b/src/test/ui/error-codes/E0642.stderr index da255143494..45486a5d632 100644 --- a/src/test/ui/error-codes/E0642.stderr +++ b/src/test/ui/error-codes/E0642.stderr @@ -3,6 +3,7 @@ error[E0642]: patterns aren't allowed in methods without bodies | LL | fn foo((x, y): (i32, i32)); | ^^^^^^ + | help: give this argument a name or use an underscore to ignore it | LL | fn foo(_: (i32, i32)); @@ -13,6 +14,7 @@ error[E0642]: patterns aren't allowed in methods without bodies | LL | fn bar((x, y): (i32, i32)) {} | ^^^^^^ + | help: give this argument a name or use an underscore to ignore it | LL | fn bar(_: (i32, i32)) {} @@ -23,6 +25,7 @@ error[E0642]: patterns aren't allowed in methods without bodies | LL | fn method(S { .. }: S) {} | ^^^^^^^^ + | help: give this argument a name or use an underscore to ignore it | LL | fn method(_: S) {} diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr index 665fe288087..3181d62298c 100644 --- a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr +++ b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr @@ -21,6 +21,7 @@ error: malformed `macro_use` attribute input | LL | #[macro_use = "2700"] struct S; | ^^^^^^^^^^^^^^^^^^^^^ + | help: the following are the possible correct uses | LL | #[macro_use] struct S; diff --git a/src/test/ui/float-literal-inference-restrictions.stderr b/src/test/ui/float-literal-inference-restrictions.stderr index 839ca57ce55..08513507ecf 100644 --- a/src/test/ui/float-literal-inference-restrictions.stderr +++ b/src/test/ui/float-literal-inference-restrictions.stderr @@ -15,6 +15,7 @@ error[E0308]: mismatched types | LL | let y: f32 = 1f64; | ^^^^ expected f32, found f64 + | help: change the type of the numeric literal from `f64` to `f32` | LL | let y: f32 = 1f32; diff --git a/src/test/ui/fn/fn-compare-mismatch.stderr b/src/test/ui/fn/fn-compare-mismatch.stderr index b2f6510d5a0..8915b747b73 100644 --- a/src/test/ui/fn/fn-compare-mismatch.stderr +++ b/src/test/ui/fn/fn-compare-mismatch.stderr @@ -5,6 +5,7 @@ LL | let x = f == g; | - ^^ - fn() {main::g} | | | fn() {main::f} + | help: you might have forgotten to call this function | LL | let x = f() == g; diff --git a/src/test/ui/glob-resolve1.stderr b/src/test/ui/glob-resolve1.stderr index 4958099ca74..ddd1e095489 100644 --- a/src/test/ui/glob-resolve1.stderr +++ b/src/test/ui/glob-resolve1.stderr @@ -3,6 +3,7 @@ error[E0425]: cannot find function `fpriv` in this scope | LL | fpriv(); | ^^^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use bar::fpriv; @@ -13,6 +14,7 @@ error[E0425]: cannot find function `epriv` in this scope | LL | epriv(); | ^^^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use bar::epriv; @@ -29,6 +31,7 @@ error[E0425]: cannot find value `C` in this scope | LL | C; | ^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use bar::C; @@ -45,6 +48,7 @@ error[E0412]: cannot find type `A` in this scope | LL | foo::(); | ^ + | help: an enum with a similar name exists | LL | foo::(); @@ -59,6 +63,7 @@ error[E0412]: cannot find type `C` in this scope | LL | foo::(); | ^ + | help: an enum with a similar name exists | LL | foo::(); @@ -73,6 +78,7 @@ error[E0412]: cannot find type `D` in this scope | LL | foo::(); | ^ + | help: an enum with a similar name exists | LL | foo::(); diff --git a/src/test/ui/hygiene/expansion-info-reset.stderr b/src/test/ui/hygiene/expansion-info-reset.stderr index d8b602ce1c6..216f7a24a1e 100644 --- a/src/test/ui/hygiene/expansion-info-reset.stderr +++ b/src/test/ui/hygiene/expansion-info-reset.stderr @@ -3,6 +3,7 @@ error: format argument must be a string literal | LL | format_args!({ #[derive(Clone)] struct S; }); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | help: you might be missing a string literal to format with | LL | format_args!("{}", { #[derive(Clone)] struct S; }); diff --git a/src/test/ui/hygiene/globs.stderr b/src/test/ui/hygiene/globs.stderr index 7acb266f49c..4b382a2b209 100644 --- a/src/test/ui/hygiene/globs.stderr +++ b/src/test/ui/hygiene/globs.stderr @@ -3,6 +3,7 @@ error[E0425]: cannot find function `f` in this scope | LL | f(); | ^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use foo::f; @@ -24,6 +25,7 @@ LL | | g(); LL | | f(); LL | | } | |_____- in this macro invocation + | help: possible candidates are found in other modules, you can import them into scope | LL | use bar::g; diff --git a/src/test/ui/if/ifmt-bad-format-args.stderr b/src/test/ui/if/ifmt-bad-format-args.stderr index 9dc2b8f9a73..23252b6b5f4 100644 --- a/src/test/ui/if/ifmt-bad-format-args.stderr +++ b/src/test/ui/if/ifmt-bad-format-args.stderr @@ -9,6 +9,7 @@ error: format argument must be a string literal | LL | format_args!(|| {}); | ^^^^^ + | help: you might be missing a string literal to format with | LL | format_args!("{}", || {}); diff --git a/src/test/ui/impl-trait/impl-generic-mismatch.stderr b/src/test/ui/impl-trait/impl-generic-mismatch.stderr index fae8da9861f..bfe94119a02 100644 --- a/src/test/ui/impl-trait/impl-generic-mismatch.stderr +++ b/src/test/ui/impl-trait/impl-generic-mismatch.stderr @@ -6,6 +6,7 @@ LL | fn foo(&self, _: &impl Debug); ... LL | fn foo(&self, _: &U) { } | ^ expected `impl Trait`, found generic parameter + | help: try removing the generic parameter and using `impl Trait` instead | LL | fn foo(&self, _: &impl Debug) { } @@ -19,6 +20,7 @@ LL | fn bar(&self, _: &U); ... LL | fn bar(&self, _: &impl Debug) { } | ^^^^^^^^^^ expected generic parameter, found `impl Trait` + | help: try changing the `impl Trait` argument to a generic parameter | LL | fn bar(&self, _: &U) { } diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr index f27e6ff44a6..82e280b9fb2 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr @@ -3,6 +3,7 @@ error: lifetime may not live long enough | LL | fn foo<'a, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { | -- lifetime `'a` defined here ^^^^^^^^^ opaque type requires that `'a` must outlive `'static` + | help: to allow this `impl Trait` to capture borrowed data with lifetime `'a`, add `'a` as a constraint | LL | type E<'a, 'b> = impl Sized; + 'a diff --git a/src/test/ui/impl-trait/must_outlive_least_region_or_bound.nll.stderr b/src/test/ui/impl-trait/must_outlive_least_region_or_bound.nll.stderr index b1e4edd9980..097f003575e 100644 --- a/src/test/ui/impl-trait/must_outlive_least_region_or_bound.nll.stderr +++ b/src/test/ui/impl-trait/must_outlive_least_region_or_bound.nll.stderr @@ -5,6 +5,7 @@ LL | fn elided(x: &i32) -> impl Copy { x } | - ^^^^^^^^^ opaque type requires that `'1` must outlive `'static` | | | let's call the lifetime of this reference `'1` + | help: to allow this `impl Trait` to capture borrowed data with lifetime `'1`, add `'_` as a constraint | LL | fn elided(x: &i32) -> impl Copy + '_ { x } @@ -17,6 +18,7 @@ LL | fn explicit<'a>(x: &'a i32) -> impl Copy { x } | -- ^^^^^^^^^ opaque type requires that `'a` must outlive `'static` | | | lifetime `'a` defined here + | help: to allow this `impl Trait` to capture borrowed data with lifetime `'a`, add `'a` as a constraint | LL | fn explicit<'a>(x: &'a i32) -> impl Copy + 'a { x } diff --git a/src/test/ui/impl-trait/static-return-lifetime-infered.nll.stderr b/src/test/ui/impl-trait/static-return-lifetime-infered.nll.stderr index 0736f25cb51..423cfcc4989 100644 --- a/src/test/ui/impl-trait/static-return-lifetime-infered.nll.stderr +++ b/src/test/ui/impl-trait/static-return-lifetime-infered.nll.stderr @@ -5,6 +5,7 @@ LL | fn iter_values_anon(&self) -> impl Iterator { | - ^^^^^^^^^^^^^^^^^^^^^^^ opaque type requires that `'1` must outlive `'static` | | | let's call the lifetime of this reference `'1` + | help: to allow this `impl Trait` to capture borrowed data with lifetime `'1`, add `'_` as a constraint | LL | fn iter_values_anon(&self) -> impl Iterator + '_ { @@ -17,6 +18,7 @@ LL | fn iter_values<'a>(&'a self) -> impl Iterator { | -- ^^^^^^^^^^^^^^^^^^^^^^^ opaque type requires that `'a` must outlive `'static` | | | lifetime `'a` defined here + | help: to allow this `impl Trait` to capture borrowed data with lifetime `'a`, add `'a` as a constraint | LL | fn iter_values<'a>(&'a self) -> impl Iterator + 'a { diff --git a/src/test/ui/impl-trait/universal_wrong_bounds.stderr b/src/test/ui/impl-trait/universal_wrong_bounds.stderr index f530792955b..32b638dc465 100644 --- a/src/test/ui/impl-trait/universal_wrong_bounds.stderr +++ b/src/test/ui/impl-trait/universal_wrong_bounds.stderr @@ -3,6 +3,7 @@ error[E0404]: expected trait, found derive macro `Debug` | LL | fn wants_debug(g: impl Debug) { } | ^^^^^ not a trait + | help: possible better candidate is found in another module, you can import it into scope | LL | use std::fmt::Debug; @@ -13,6 +14,7 @@ error[E0404]: expected trait, found derive macro `Debug` | LL | fn wants_display(g: impl Debug) { } | ^^^^^ not a trait + | help: possible better candidate is found in another module, you can import it into scope | LL | use std::fmt::Debug; diff --git a/src/test/ui/indexing-requires-a-uint.stderr b/src/test/ui/indexing-requires-a-uint.stderr index 3300db58d44..7010a3ccbea 100644 --- a/src/test/ui/indexing-requires-a-uint.stderr +++ b/src/test/ui/indexing-requires-a-uint.stderr @@ -12,6 +12,7 @@ error[E0308]: mismatched types | LL | bar::(i); // i should not be re-coerced back to an isize | ^ expected isize, found usize + | help: you can convert an `usize` to `isize` and panic if the converted value wouldn't fit | LL | bar::(i.try_into().unwrap()); // i should not be re-coerced back to an isize diff --git a/src/test/ui/inference/cannot-infer-closure.stderr b/src/test/ui/inference/cannot-infer-closure.stderr index 5f30b5d993c..c26c24f1dc5 100644 --- a/src/test/ui/inference/cannot-infer-closure.stderr +++ b/src/test/ui/inference/cannot-infer-closure.stderr @@ -3,6 +3,7 @@ error[E0282]: type annotations needed for the closure `fn((), ()) -> std::result | LL | Err(a)?; | ^^^^^^^ cannot infer type + | help: give this closure an explicit return type without `_` placeholders | LL | let x = |a: (), b: ()| -> std::result::Result<(), _> { diff --git a/src/test/ui/integer-literal-suffix-inference.stderr b/src/test/ui/integer-literal-suffix-inference.stderr index 80b601dc439..bbb57d97c39 100644 --- a/src/test/ui/integer-literal-suffix-inference.stderr +++ b/src/test/ui/integer-literal-suffix-inference.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | id_i8(a16); | ^^^ expected i8, found i16 + | help: you can convert an `i16` to `i8` and panic if the converted value wouldn't fit | LL | id_i8(a16.try_into().unwrap()); @@ -13,6 +14,7 @@ error[E0308]: mismatched types | LL | id_i8(a32); | ^^^ expected i8, found i32 + | help: you can convert an `i32` to `i8` and panic if the converted value wouldn't fit | LL | id_i8(a32.try_into().unwrap()); @@ -23,6 +25,7 @@ error[E0308]: mismatched types | LL | id_i8(a64); | ^^^ expected i8, found i64 + | help: you can convert an `i64` to `i8` and panic if the converted value wouldn't fit | LL | id_i8(a64.try_into().unwrap()); @@ -42,6 +45,7 @@ error[E0308]: mismatched types | LL | id_i16(a32); | ^^^ expected i16, found i32 + | help: you can convert an `i32` to `i16` and panic if the converted value wouldn't fit | LL | id_i16(a32.try_into().unwrap()); @@ -52,6 +56,7 @@ error[E0308]: mismatched types | LL | id_i16(a64); | ^^^ expected i16, found i64 + | help: you can convert an `i64` to `i16` and panic if the converted value wouldn't fit | LL | id_i16(a64.try_into().unwrap()); @@ -80,6 +85,7 @@ error[E0308]: mismatched types | LL | id_i32(a64); | ^^^ expected i32, found i64 + | help: you can convert an `i64` to `i32` and panic if the converted value wouldn't fit | LL | id_i32(a64.try_into().unwrap()); @@ -117,6 +123,7 @@ error[E0308]: mismatched types | LL | id_i8(c16); | ^^^ expected i8, found i16 + | help: you can convert an `i16` to `i8` and panic if the converted value wouldn't fit | LL | id_i8(c16.try_into().unwrap()); @@ -127,6 +134,7 @@ error[E0308]: mismatched types | LL | id_i8(c32); | ^^^ expected i8, found i32 + | help: you can convert an `i32` to `i8` and panic if the converted value wouldn't fit | LL | id_i8(c32.try_into().unwrap()); @@ -137,6 +145,7 @@ error[E0308]: mismatched types | LL | id_i8(c64); | ^^^ expected i8, found i64 + | help: you can convert an `i64` to `i8` and panic if the converted value wouldn't fit | LL | id_i8(c64.try_into().unwrap()); @@ -156,6 +165,7 @@ error[E0308]: mismatched types | LL | id_i16(c32); | ^^^ expected i16, found i32 + | help: you can convert an `i32` to `i16` and panic if the converted value wouldn't fit | LL | id_i16(c32.try_into().unwrap()); @@ -166,6 +176,7 @@ error[E0308]: mismatched types | LL | id_i16(c64); | ^^^ expected i16, found i64 + | help: you can convert an `i64` to `i16` and panic if the converted value wouldn't fit | LL | id_i16(c64.try_into().unwrap()); @@ -194,6 +205,7 @@ error[E0308]: mismatched types | LL | id_i32(c64); | ^^^ expected i32, found i64 + | help: you can convert an `i64` to `i32` and panic if the converted value wouldn't fit | LL | id_i32(c64.try_into().unwrap()); @@ -231,6 +243,7 @@ error[E0308]: mismatched types | LL | id_u8(b16); | ^^^ expected u8, found u16 + | help: you can convert an `u16` to `u8` and panic if the converted value wouldn't fit | LL | id_u8(b16.try_into().unwrap()); @@ -241,6 +254,7 @@ error[E0308]: mismatched types | LL | id_u8(b32); | ^^^ expected u8, found u32 + | help: you can convert an `u32` to `u8` and panic if the converted value wouldn't fit | LL | id_u8(b32.try_into().unwrap()); @@ -251,6 +265,7 @@ error[E0308]: mismatched types | LL | id_u8(b64); | ^^^ expected u8, found u64 + | help: you can convert an `u64` to `u8` and panic if the converted value wouldn't fit | LL | id_u8(b64.try_into().unwrap()); @@ -270,6 +285,7 @@ error[E0308]: mismatched types | LL | id_u16(b32); | ^^^ expected u16, found u32 + | help: you can convert an `u32` to `u16` and panic if the converted value wouldn't fit | LL | id_u16(b32.try_into().unwrap()); @@ -280,6 +296,7 @@ error[E0308]: mismatched types | LL | id_u16(b64); | ^^^ expected u16, found u64 + | help: you can convert an `u64` to `u16` and panic if the converted value wouldn't fit | LL | id_u16(b64.try_into().unwrap()); @@ -308,6 +325,7 @@ error[E0308]: mismatched types | LL | id_u32(b64); | ^^^ expected u32, found u64 + | help: you can convert an `u64` to `u32` and panic if the converted value wouldn't fit | LL | id_u32(b64.try_into().unwrap()); diff --git a/src/test/ui/issues/issue-13359.stderr b/src/test/ui/issues/issue-13359.stderr index 7cfd754f72d..76c5f39fe10 100644 --- a/src/test/ui/issues/issue-13359.stderr +++ b/src/test/ui/issues/issue-13359.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | foo(1*(1 as isize)); | ^^^^^^^^^^^^^^ expected i16, found isize + | help: you can convert an `isize` to `i16` and panic if the converted value wouldn't fit | LL | foo((1*(1 as isize)).try_into().unwrap()); @@ -13,6 +14,7 @@ error[E0308]: mismatched types | LL | bar(1*(1 as usize)); | ^^^^^^^^^^^^^^ expected u32, found usize + | help: you can convert an `usize` to `u32` and panic if the converted value wouldn't fit | LL | bar((1*(1 as usize)).try_into().unwrap()); diff --git a/src/test/ui/issues/issue-1362.stderr b/src/test/ui/issues/issue-1362.stderr index 3f4fdee50fd..7ffbbbce7a8 100644 --- a/src/test/ui/issues/issue-1362.stderr +++ b/src/test/ui/issues/issue-1362.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | let x: u32 = 20i32; | ^^^^^ expected u32, found i32 + | help: change the type of the numeric literal from `i32` to `u32` | LL | let x: u32 = 20u32; diff --git a/src/test/ui/issues/issue-1448-2.stderr b/src/test/ui/issues/issue-1448-2.stderr index a9fabca50a6..28c561462d4 100644 --- a/src/test/ui/issues/issue-1448-2.stderr +++ b/src/test/ui/issues/issue-1448-2.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | println!("{}", foo(10i32)); | ^^^^^ expected u32, found i32 + | help: change the type of the numeric literal from `i32` to `u32` | LL | println!("{}", foo(10u32)); diff --git a/src/test/ui/issues/issue-17546.stderr b/src/test/ui/issues/issue-17546.stderr index 291086d4f69..f3242919e01 100644 --- a/src/test/ui/issues/issue-17546.stderr +++ b/src/test/ui/issues/issue-17546.stderr @@ -3,6 +3,7 @@ error[E0573]: expected type, found variant `NoResult` | LL | fn new() -> NoResult { | ^^^^^^^^^^^^^^^^^^^^^^^^ + | help: try using the variant's enum | LL | fn new() -> foo::MyEnum { @@ -17,6 +18,7 @@ error[E0573]: expected type, found variant `Result` | LL | fn new() -> Result { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ not a type + | help: possible better candidates are found in other modules, you can import them into scope | LL | use std::fmt::Result; @@ -34,6 +36,7 @@ error[E0573]: expected type, found variant `Result` | LL | fn new() -> Result { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ not a type + | help: possible better candidates are found in other modules, you can import them into scope | LL | use std::fmt::Result; @@ -51,6 +54,7 @@ error[E0573]: expected type, found variant `NoResult` | LL | fn newer() -> NoResult { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | help: try using the variant's enum | LL | fn newer() -> foo::MyEnum { diff --git a/src/test/ui/issues/issue-22644.stderr b/src/test/ui/issues/issue-22644.stderr index 0fe167963c3..2bddcc2ba56 100644 --- a/src/test/ui/issues/issue-22644.stderr +++ b/src/test/ui/issues/issue-22644.stderr @@ -50,6 +50,7 @@ LL | < | ^ not interpreted as comparison LL | 4); | - interpreted as generic arguments + | help: try comparing the cast value | LL | println!("{}", (a @@ -64,6 +65,7 @@ LL | < | ^ not interpreted as comparison LL | 5); | - interpreted as generic arguments + | help: try comparing the cast value | LL | println!("{}", (a diff --git a/src/test/ui/issues/issue-22933-3.stderr b/src/test/ui/issues/issue-22933-3.stderr index e0e8b5e18a4..72bca3b0408 100644 --- a/src/test/ui/issues/issue-22933-3.stderr +++ b/src/test/ui/issues/issue-22933-3.stderr @@ -3,6 +3,7 @@ error[E0599]: no associated item named `MIN` found for type `u8` in the current | LL | const FOO: [u32; u8::MIN as usize] = []; | ^^^ associated item not found in `u8` + | help: you are looking for the module in `std`, not the primitive type | LL | const FOO: [u32; std::u8::MIN as usize] = []; diff --git a/src/test/ui/issues/issue-31910.stderr b/src/test/ui/issues/issue-31910.stderr index e7555b958a3..19b67ef2a72 100644 --- a/src/test/ui/issues/issue-31910.stderr +++ b/src/test/ui/issues/issue-31910.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | X = Trait::Number, | ^^^^^^^^^^^^^ expected isize, found i32 + | help: you can convert an `i32` to `isize` and panic if the converted value wouldn't fit | LL | X = Trait::Number.try_into().unwrap(), diff --git a/src/test/ui/issues/issue-35075.stderr b/src/test/ui/issues/issue-35075.stderr index 2aeb6b15224..85acbfb8de4 100644 --- a/src/test/ui/issues/issue-35075.stderr +++ b/src/test/ui/issues/issue-35075.stderr @@ -3,6 +3,7 @@ error[E0412]: cannot find type `Foo` in this scope | LL | inner: Foo | ^^^ not found in this scope + | help: there is an enum variant `Baz::Foo`; try using the variant's enum | LL | inner: Baz @@ -13,6 +14,7 @@ error[E0412]: cannot find type `Foo` in this scope | LL | Foo(Foo) | ^^^ not found in this scope + | help: there is an enum variant `Baz::Foo`; try using the variant's enum | LL | Foo(Baz) diff --git a/src/test/ui/issues/issue-35675.stderr b/src/test/ui/issues/issue-35675.stderr index 91814d94963..8072141aefd 100644 --- a/src/test/ui/issues/issue-35675.stderr +++ b/src/test/ui/issues/issue-35675.stderr @@ -3,6 +3,7 @@ error[E0412]: cannot find type `Apple` in this scope | LL | fn should_return_fruit() -> Apple { | ^^^^^ not found in this scope + | help: there is an enum variant `Fruit::Apple`; try using the variant's enum | LL | fn should_return_fruit() -> Fruit { @@ -13,6 +14,7 @@ error[E0425]: cannot find function `Apple` in this scope | LL | Apple(5) | ^^^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use Fruit::Apple; @@ -32,6 +34,7 @@ error[E0425]: cannot find function `Apple` in this scope | LL | Apple(5) | ^^^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use Fruit::Apple; @@ -51,6 +54,7 @@ error[E0412]: cannot find type `Variant3` in this scope | LL | fn bar() -> Variant3 { | ^^^^^^^^ not found in this scope + | help: there is an enum variant `x::Enum::Variant3`; try using the variant's enum | LL | fn bar() -> x::Enum { diff --git a/src/test/ui/issues/issue-35976.stderr b/src/test/ui/issues/issue-35976.stderr index d12198de5e1..99b243a0777 100644 --- a/src/test/ui/issues/issue-35976.stderr +++ b/src/test/ui/issues/issue-35976.stderr @@ -3,6 +3,7 @@ error: the `wait` method cannot be invoked on a trait object | LL | arg.wait(); | ^^^^ + | help: another candidate was found in the following trait, perhaps add a `use` for it: | LL | use private::Future; diff --git a/src/test/ui/issues/issue-37534.stderr b/src/test/ui/issues/issue-37534.stderr index fadb9cdd1a3..1a05c7ab420 100644 --- a/src/test/ui/issues/issue-37534.stderr +++ b/src/test/ui/issues/issue-37534.stderr @@ -3,6 +3,7 @@ error[E0404]: expected trait, found derive macro `Hash` | LL | struct Foo { } | ^^^^ not a trait + | help: possible better candidate is found in another module, you can import it into scope | LL | use std::hash::Hash; diff --git a/src/test/ui/issues/issue-38293.stderr b/src/test/ui/issues/issue-38293.stderr index d16d45277c0..cc3c72b496f 100644 --- a/src/test/ui/issues/issue-38293.stderr +++ b/src/test/ui/issues/issue-38293.stderr @@ -9,6 +9,7 @@ error[E0423]: expected function, found module `baz` | LL | baz(); | ^^^ not a function + | help: possible better candidate is found in another module, you can import it into scope | LL | use bar::baz; diff --git a/src/test/ui/issues/issue-41652/issue-41652.stderr b/src/test/ui/issues/issue-41652/issue-41652.stderr index 3c71536de2e..f7107d61ac3 100644 --- a/src/test/ui/issues/issue-41652/issue-41652.stderr +++ b/src/test/ui/issues/issue-41652/issue-41652.stderr @@ -3,6 +3,7 @@ error[E0689]: can't call method `f` on ambiguous numeric type `{integer}` | LL | 3.f() | ^ + | help: you must specify a concrete type for this numeric value, like `i32` | LL | 3_i32.f() diff --git a/src/test/ui/issues/issue-42944.stderr b/src/test/ui/issues/issue-42944.stderr index ba285953dbd..4ab272b9e9b 100644 --- a/src/test/ui/issues/issue-42944.stderr +++ b/src/test/ui/issues/issue-42944.stderr @@ -9,6 +9,7 @@ error[E0425]: cannot find function `B` in this scope | LL | B(()); | ^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use foo::B; diff --git a/src/test/ui/issues/issue-4366-2.stderr b/src/test/ui/issues/issue-4366-2.stderr index 63013a6523a..60a1155c614 100644 --- a/src/test/ui/issues/issue-4366-2.stderr +++ b/src/test/ui/issues/issue-4366-2.stderr @@ -3,6 +3,7 @@ error[E0412]: cannot find type `Bar` in this scope | LL | fn sub() -> Bar { 1 } | ^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use a::b::Bar; @@ -13,6 +14,7 @@ error[E0423]: expected function, found module `foo` | LL | foo(); | ^^^ not a function + | help: possible better candidates are found in other modules, you can import them into scope | LL | use foo::foo; diff --git a/src/test/ui/issues/issue-4366.stderr b/src/test/ui/issues/issue-4366.stderr index c59ab004557..d931d519117 100644 --- a/src/test/ui/issues/issue-4366.stderr +++ b/src/test/ui/issues/issue-4366.stderr @@ -3,6 +3,7 @@ error[E0425]: cannot find function `foo` in this scope | LL | fn sub() -> isize { foo(); 1 } | ^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use foo::foo; diff --git a/src/test/ui/issues/issue-44406.stderr b/src/test/ui/issues/issue-44406.stderr index 108542c9b6f..a98d833969e 100644 --- a/src/test/ui/issues/issue-44406.stderr +++ b/src/test/ui/issues/issue-44406.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `true` | LL | foo!(true); | ^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | foo!(r#true); diff --git a/src/test/ui/issues/issue-47377.stderr b/src/test/ui/issues/issue-47377.stderr index 7d11a8c8021..3460c1dae22 100644 --- a/src/test/ui/issues/issue-47377.stderr +++ b/src/test/ui/issues/issue-47377.stderr @@ -6,6 +6,7 @@ LL | let _a = b + ", World!"; | | | | | `+` cannot be used to concatenate two `&str` strings | &str + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _a = b.to_owned() + ", World!"; diff --git a/src/test/ui/issues/issue-47380.stderr b/src/test/ui/issues/issue-47380.stderr index 89a154c5109..f334dcbd916 100644 --- a/src/test/ui/issues/issue-47380.stderr +++ b/src/test/ui/issues/issue-47380.stderr @@ -6,6 +6,7 @@ LL | println!("🦀🦀🦀🦀🦀"); let _a = b + ", World!"; | | | | | `+` cannot be used to concatenate two `&str` strings | &str + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | println!("🦀🦀🦀🦀🦀"); let _a = b.to_owned() + ", World!"; diff --git a/src/test/ui/issues/issue-49257.stderr b/src/test/ui/issues/issue-49257.stderr index 43a505cfe85..b9d96dc7907 100644 --- a/src/test/ui/issues/issue-49257.stderr +++ b/src/test/ui/issues/issue-49257.stderr @@ -6,6 +6,7 @@ LL | let Point { .., y, } = p; | | | | | expected `}` | `..` must be at the end and cannot have a trailing comma + | help: move the `..` to the end of the field list | LL | let Point { y, .. } = p; @@ -19,6 +20,7 @@ LL | let Point { .., y } = p; | | | | | expected `}` | `..` must be at the end and cannot have a trailing comma + | help: move the `..` to the end of the field list | LL | let Point { y , .. } = p; diff --git a/src/test/ui/issues/issue-50571.stderr b/src/test/ui/issues/issue-50571.stderr index 834635388a0..df9d10b3950 100644 --- a/src/test/ui/issues/issue-50571.stderr +++ b/src/test/ui/issues/issue-50571.stderr @@ -3,6 +3,7 @@ error[E0642]: patterns aren't allowed in methods without bodies | LL | fn foo([a, b]: [i32; 2]) {} | ^^^^^^ + | help: give this argument a name or use an underscore to ignore it | LL | fn foo(_: [i32; 2]) {} diff --git a/src/test/ui/issues/issue-50599.stderr b/src/test/ui/issues/issue-50599.stderr index 4bd74c3c785..5c8cac44438 100644 --- a/src/test/ui/issues/issue-50599.stderr +++ b/src/test/ui/issues/issue-50599.stderr @@ -3,6 +3,7 @@ error[E0425]: cannot find value `LOG10_2` in module `std::f64` | LL | const M: usize = (f64::from(N) * std::f64::LOG10_2) as usize; | ^^^^^^^ not found in `std::f64` + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::f32::consts::LOG10_2; diff --git a/src/test/ui/issues/issue-51874.stderr b/src/test/ui/issues/issue-51874.stderr index 9b1a6bf2e12..c7c4843a0fa 100644 --- a/src/test/ui/issues/issue-51874.stderr +++ b/src/test/ui/issues/issue-51874.stderr @@ -3,6 +3,7 @@ error[E0689]: can't call method `pow` on ambiguous numeric type `{float}` | LL | let a = (1.0).pow(1.0); | ^^^ + | help: you must specify a concrete type for this numeric value, like `f32` | LL | let a = (1.0_f32).pow(1.0); diff --git a/src/test/ui/issues/issue-5239-1.stderr b/src/test/ui/issues/issue-5239-1.stderr index a95014fb12d..f4f0f17d001 100644 --- a/src/test/ui/issues/issue-5239-1.stderr +++ b/src/test/ui/issues/issue-5239-1.stderr @@ -5,6 +5,7 @@ LL | let x = |ref x: isize| { x += 1; }; | -^^^^^ | | | cannot use `+=` on type `&isize` + | help: `+=` can be used on 'isize', you can dereference `x` | LL | let x = |ref x: isize| { *x += 1; }; diff --git a/src/test/ui/issues/issue-56685.stderr b/src/test/ui/issues/issue-56685.stderr index 4a461c72b24..30fedbe1653 100644 --- a/src/test/ui/issues/issue-56685.stderr +++ b/src/test/ui/issues/issue-56685.stderr @@ -19,6 +19,7 @@ error: unused variable: `x` | LL | F::A(x, y) | F::B(x, y) => { y }, | ^ ^ + | help: consider prefixing with an underscore | LL | F::A(_x, y) | F::B(_x, y) => { y }, @@ -41,6 +42,7 @@ error: unused variable: `x` | LL | let _ = if let F::A(x, y) | F::B(x, y) = F::A(1, 2) { | ^ ^ + | help: consider prefixing with an underscore | LL | let _ = if let F::A(_x, y) | F::B(_x, y) = F::A(1, 2) { @@ -51,6 +53,7 @@ error: unused variable: `x` | LL | while let F::A(x, y) | F::B(x, y) = F::A(1, 2) { | ^ ^ + | help: consider prefixing with an underscore | LL | while let F::A(_x, y) | F::B(_x, y) = F::A(1, 2) { diff --git a/src/test/ui/issues/issue-57198.stderr b/src/test/ui/issues/issue-57198.stderr index 2ab552ccbd3..197c4cc967d 100644 --- a/src/test/ui/issues/issue-57198.stderr +++ b/src/test/ui/issues/issue-57198.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `for` | LL | m::for(); | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | m::r#for(); diff --git a/src/test/ui/issues/issue-58857.stderr b/src/test/ui/issues/issue-58857.stderr index 56e87215a80..ab9a0130c00 100644 --- a/src/test/ui/issues/issue-58857.stderr +++ b/src/test/ui/issues/issue-58857.stderr @@ -3,6 +3,7 @@ error: negative trait bounds are not supported | LL | impl Conj{} | ^^^^^^^^ negative trait bounds are not supported + | = help: remove the trait bound error: aborting due to previous error diff --git a/src/test/ui/issues/issue-59488.stderr b/src/test/ui/issues/issue-59488.stderr index e0cb1f7b96d..2397d583488 100644 --- a/src/test/ui/issues/issue-59488.stderr +++ b/src/test/ui/issues/issue-59488.stderr @@ -41,6 +41,7 @@ LL | foo > foo; | --- ^ --- fn() -> i32 {foo} | | | fn() -> i32 {foo} + | help: you might have forgotten to call this function | LL | foo() > foo; diff --git a/src/test/ui/issues/issue-62554.stderr b/src/test/ui/issues/issue-62554.stderr index 9675d540e72..87aaa036613 100644 --- a/src/test/ui/issues/issue-62554.stderr +++ b/src/test/ui/issues/issue-62554.stderr @@ -18,6 +18,7 @@ LL | fn foo(u: u8) { if u8 macro_rules! u8 { (u6) => { fn uuuuuuuuuuu() { use s | -- ^^^^^^^^^^^ expected `{` | | | this `if` statement has a condition, but no block + | help: try placing this code inside a block | LL | fn foo(u: u8) { if u8 { macro_rules! u8 { (u6) => { fn uuuuuuuuuuu() { use s loo mod u8 { diff --git a/src/test/ui/issues/issue-64732.stderr b/src/test/ui/issues/issue-64732.stderr index fc0e8e3bdb2..3b00ffc8f6c 100644 --- a/src/test/ui/issues/issue-64732.stderr +++ b/src/test/ui/issues/issue-64732.stderr @@ -3,6 +3,7 @@ error: character literal may only contain one codepoint | LL | let _foo = b'hello\0'; | ^^^^^^^^^ + | help: if you meant to write a byte string literal, use double quotes | LL | let _foo = b"hello\0"; @@ -13,6 +14,7 @@ error: character literal may only contain one codepoint | LL | let _bar = 'hello'; | ^^^^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | let _bar = "hello"; diff --git a/src/test/ui/issues/issue-8761.stderr b/src/test/ui/issues/issue-8761.stderr index 28847c5a82a..5a657575c1d 100644 --- a/src/test/ui/issues/issue-8761.stderr +++ b/src/test/ui/issues/issue-8761.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | A = 1i64, | ^^^^ expected isize, found i64 + | help: change the type of the numeric literal from `i64` to `isize` | LL | A = 1isize, @@ -13,6 +14,7 @@ error[E0308]: mismatched types | LL | B = 2u8 | ^^^ expected isize, found u8 + | help: change the type of the numeric literal from `u8` to `isize` | LL | B = 2isize diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.stderr b/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.stderr index 73ac113f1b1..5f5297be42a 100644 --- a/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.stderr +++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-pat.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `extern` | LL | let extern = 0; | ^^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#extern = 0; diff --git a/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.stderr b/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.stderr index 4b833f80681..05802f2d367 100644 --- a/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.stderr +++ b/src/test/ui/keyword/extern/keyword-extern-as-identifier-use.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `extern` | LL | use extern::foo; | ^^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | use r#extern::foo; diff --git a/src/test/ui/lexical-scopes.stderr b/src/test/ui/lexical-scopes.stderr index 38c7393e136..a7843a93011 100644 --- a/src/test/ui/lexical-scopes.stderr +++ b/src/test/ui/lexical-scopes.stderr @@ -3,6 +3,7 @@ error[E0574]: expected struct, variant or union type, found type parameter `T` | LL | let t = T { i: 0 }; | ^ not a struct, variant or union type + | help: possible better candidate is found in another module, you can import it into scope | LL | use T; diff --git a/src/test/ui/lifetime_starts_expressions.stderr b/src/test/ui/lifetime_starts_expressions.stderr index bacba10b55f..a2b4f114b95 100644 --- a/src/test/ui/lifetime_starts_expressions.stderr +++ b/src/test/ui/lifetime_starts_expressions.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `loop` | LL | loop { break 'label: loop { break 'label 42; }; } | ^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | loop { break 'label: r#loop { break 'label 42; }; } diff --git a/src/test/ui/lint/use_suggestion_json.stderr b/src/test/ui/lint/use_suggestion_json.stderr index 1da5acc9661..3e77d193fa4 100644 --- a/src/test/ui/lint/use_suggestion_json.stderr +++ b/src/test/ui/lint/use_suggestion_json.stderr @@ -385,6 +385,7 @@ mod foo { \u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m \u001b[0m\u001b[1m\u001b[38;5;12mLL\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m let x: Iter;\u001b[0m \u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9mnot found in this scope\u001b[0m +\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m \u001b[0m\u001b[1m\u001b[38;5;14mhelp\u001b[0m\u001b[0m: possible candidates are found in other modules, you can import them into scope\u001b[0m \u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m \u001b[0m\u001b[1m\u001b[38;5;12mLL\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0muse std::collections::binary_heap::Iter;\u001b[0m diff --git a/src/test/ui/loops/loop-break-value-no-repeat.stderr b/src/test/ui/loops/loop-break-value-no-repeat.stderr index 066dce531a5..ff93e9220e9 100644 --- a/src/test/ui/loops/loop-break-value-no-repeat.stderr +++ b/src/test/ui/loops/loop-break-value-no-repeat.stderr @@ -3,6 +3,7 @@ error[E0571]: `break` with value from a `for` loop | LL | break 22 | ^^^^^^^^ can only break with a value inside `loop` or breakable block + | help: instead, use `break` on its own without a value inside this `for` loop | LL | break diff --git a/src/test/ui/loops/loop-break-value.stderr b/src/test/ui/loops/loop-break-value.stderr index fef5b587306..b2e3ebc53ad 100644 --- a/src/test/ui/loops/loop-break-value.stderr +++ b/src/test/ui/loops/loop-break-value.stderr @@ -11,6 +11,7 @@ error[E0571]: `break` with value from a `while` loop | LL | break (); | ^^^^^^^^ can only break with a value inside `loop` or breakable block + | help: instead, use `break` on its own without a value inside this `while` loop | LL | break; @@ -21,6 +22,7 @@ error[E0571]: `break` with value from a `while` loop | LL | break 'while_loop 123; | ^^^^^^^^^^^^^^^^^^^^^ can only break with a value inside `loop` or breakable block + | help: instead, use `break` on its own without a value inside this `while` loop | LL | break; @@ -31,6 +33,7 @@ error[E0571]: `break` with value from a `while let` loop | LL | if break () { | ^^^^^^^^ can only break with a value inside `loop` or breakable block + | help: instead, use `break` on its own without a value inside this `while let` loop | LL | if break { @@ -41,6 +44,7 @@ error[E0571]: `break` with value from a `while let` loop | LL | break None; | ^^^^^^^^^^ can only break with a value inside `loop` or breakable block + | help: instead, use `break` on its own without a value inside this `while let` loop | LL | break; @@ -51,6 +55,7 @@ error[E0571]: `break` with value from a `while let` loop | LL | break 'while_let_loop "nope"; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can only break with a value inside `loop` or breakable block + | help: instead, use `break` on its own without a value inside this `while let` loop | LL | break; @@ -61,6 +66,7 @@ error[E0571]: `break` with value from a `for` loop | LL | break (); | ^^^^^^^^ can only break with a value inside `loop` or breakable block + | help: instead, use `break` on its own without a value inside this `for` loop | LL | break; @@ -71,6 +77,7 @@ error[E0571]: `break` with value from a `for` loop | LL | break [()]; | ^^^^^^^^^^ can only break with a value inside `loop` or breakable block + | help: instead, use `break` on its own without a value inside this `for` loop | LL | break; @@ -81,6 +88,7 @@ error[E0571]: `break` with value from a `for` loop | LL | break 'for_loop Some(17); | ^^^^^^^^^^^^^^^^^^^^^^^^ can only break with a value inside `loop` or breakable block + | help: instead, use `break` on its own without a value inside this `for` loop | LL | break; diff --git a/src/test/ui/macros/bad_hello.stderr b/src/test/ui/macros/bad_hello.stderr index ab3cbf058ba..6ef4cdcb020 100644 --- a/src/test/ui/macros/bad_hello.stderr +++ b/src/test/ui/macros/bad_hello.stderr @@ -3,6 +3,7 @@ error: format argument must be a string literal | LL | println!(3 + 4); | ^^^^^ + | help: you might be missing a string literal to format with | LL | println!("{}", 3 + 4); @@ -13,6 +14,7 @@ error: format argument must be a string literal | LL | println!(3, 4); | ^ + | help: you might be missing a string literal to format with | LL | println!("{} {}", 3, 4); diff --git a/src/test/ui/macros/derive-in-eager-expansion-hang.stderr b/src/test/ui/macros/derive-in-eager-expansion-hang.stderr index 5ca4088e585..0e2fb4c8af5 100644 --- a/src/test/ui/macros/derive-in-eager-expansion-hang.stderr +++ b/src/test/ui/macros/derive-in-eager-expansion-hang.stderr @@ -11,6 +11,7 @@ LL | | } ... LL | format_args!(hang!()); | ------- in this macro invocation + | help: you might be missing a string literal to format with | LL | format_args!("{}", hang!()); diff --git a/src/test/ui/macros/format-parse-errors.stderr b/src/test/ui/macros/format-parse-errors.stderr index 906738d7382..02b704299ff 100644 --- a/src/test/ui/macros/format-parse-errors.stderr +++ b/src/test/ui/macros/format-parse-errors.stderr @@ -43,6 +43,7 @@ error: format argument must be a string literal | LL | format!(123); | ^^^ + | help: you might be missing a string literal to format with | LL | format!("{}", 123); diff --git a/src/test/ui/macros/issue-30143.stderr b/src/test/ui/macros/issue-30143.stderr index f0c604a23ff..19d977f69a2 100644 --- a/src/test/ui/macros/issue-30143.stderr +++ b/src/test/ui/macros/issue-30143.stderr @@ -3,6 +3,7 @@ error: format argument must be a string literal | LL | println!(0); | ^ + | help: you might be missing a string literal to format with | LL | println!("{}", 0); @@ -13,6 +14,7 @@ error: format argument must be a string literal | LL | eprintln!('a'); | ^^^ + | help: you might be missing a string literal to format with | LL | eprintln!("{}", 'a'); @@ -23,6 +25,7 @@ error: format argument must be a string literal | LL | writeln!(s, true).unwrap(); | ^^^^ + | help: you might be missing a string literal to format with | LL | writeln!(s, "{}", true).unwrap(); diff --git a/src/test/ui/macros/macro-backtrace-invalid-internals.stderr b/src/test/ui/macros/macro-backtrace-invalid-internals.stderr index 96054de801c..85dee9f24fe 100644 --- a/src/test/ui/macros/macro-backtrace-invalid-internals.stderr +++ b/src/test/ui/macros/macro-backtrace-invalid-internals.stderr @@ -33,6 +33,7 @@ LL | 2.0.neg() ... LL | real_method_stmt!(); | -------------------- in this macro invocation + | help: you must specify a concrete type for this numeric value, like `f32` | LL | 2.0_f32.neg() @@ -73,6 +74,7 @@ LL | 2.0.neg() ... LL | let _ = real_method_expr!(); | ------------------- in this macro invocation + | help: you must specify a concrete type for this numeric value, like `f32` | LL | 2.0_f32.neg() diff --git a/src/test/ui/macros/macro-outer-attributes.stderr b/src/test/ui/macros/macro-outer-attributes.stderr index 838333b95c0..86a6baca053 100644 --- a/src/test/ui/macros/macro-outer-attributes.stderr +++ b/src/test/ui/macros/macro-outer-attributes.stderr @@ -3,6 +3,7 @@ error[E0425]: cannot find function `bar` in module `a` | LL | a::bar(); | ^^^ not found in `a` + | help: possible candidate is found in another module, you can import it into scope | LL | use b::bar; diff --git a/src/test/ui/macros/macros-nonfatal-errors.stderr b/src/test/ui/macros/macros-nonfatal-errors.stderr index f0ea5761bc8..b2fdbb736c8 100644 --- a/src/test/ui/macros/macros-nonfatal-errors.stderr +++ b/src/test/ui/macros/macros-nonfatal-errors.stderr @@ -45,6 +45,7 @@ error: format argument must be a string literal | LL | format!(invalid); | ^^^^^^^ + | help: you might be missing a string literal to format with | LL | format!("{}", invalid); diff --git a/src/test/ui/malformed/malformed-unwind-2.stderr b/src/test/ui/malformed/malformed-unwind-2.stderr index ed88b9afd87..28512bf9ef1 100644 --- a/src/test/ui/malformed/malformed-unwind-2.stderr +++ b/src/test/ui/malformed/malformed-unwind-2.stderr @@ -3,6 +3,7 @@ error[E0633]: malformed `unwind` attribute input | LL | #[unwind(allowed, aborts)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid argument + | help: the allowed arguments are `allowed` and `aborts` | LL | #[unwind(allowed)] @@ -15,6 +16,7 @@ error[E0633]: malformed `unwind` attribute input | LL | #[unwind(unsupported)] | ^^^^^^^^^^^^^^^^^^^^^^ invalid argument + | help: the allowed arguments are `allowed` and `aborts` | LL | #[unwind(allowed)] diff --git a/src/test/ui/meta-expected-error-correct-rev.a.stderr b/src/test/ui/meta-expected-error-correct-rev.a.stderr index db1d5070e7f..968b87288c0 100644 --- a/src/test/ui/meta-expected-error-correct-rev.a.stderr +++ b/src/test/ui/meta-expected-error-correct-rev.a.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | let x: u32 = 22_usize; | ^^^^^^^^ expected u32, found usize + | help: change the type of the numeric literal from `usize` to `u32` | LL | let x: u32 = 22_u32; diff --git a/src/test/ui/methods/method-ambig-one-trait-unknown-int-type.stderr b/src/test/ui/methods/method-ambig-one-trait-unknown-int-type.stderr index b1bd749bef4..8dfbde92f64 100644 --- a/src/test/ui/methods/method-ambig-one-trait-unknown-int-type.stderr +++ b/src/test/ui/methods/method-ambig-one-trait-unknown-int-type.stderr @@ -11,6 +11,7 @@ error[E0308]: mismatched types | LL | let y: usize = x.foo(); | ^^^^^^^ expected usize, found isize + | help: you can convert an `isize` to `usize` and panic if the converted value wouldn't fit | LL | let y: usize = x.foo().try_into().unwrap(); diff --git a/src/test/ui/methods/method-on-ambiguous-numeric-type.stderr b/src/test/ui/methods/method-on-ambiguous-numeric-type.stderr index 40e765abe27..d9e250882e1 100644 --- a/src/test/ui/methods/method-on-ambiguous-numeric-type.stderr +++ b/src/test/ui/methods/method-on-ambiguous-numeric-type.stderr @@ -3,6 +3,7 @@ error[E0689]: can't call method `neg` on ambiguous numeric type `{float}` | LL | let x = 2.0.neg(); | ^^^ + | help: you must specify a concrete type for this numeric value, like `f32` | LL | let x = 2.0_f32.neg(); @@ -13,6 +14,7 @@ error[E0689]: can't call method `neg` on ambiguous numeric type `{float}` | LL | let x = y.neg(); | ^^^ + | help: you must specify a type for this binding, like `f32` | LL | let y: f32 = 2.0; @@ -31,6 +33,7 @@ error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}` | LL | local_bar.pow(2); | ^^^ + | help: you must specify a type for this binding, like `i32` | LL | ($ident:ident) => { let $ident: i32 = 42; } diff --git a/src/test/ui/mismatched_types/closure-arg-count-expected-type-issue-47244.stderr b/src/test/ui/mismatched_types/closure-arg-count-expected-type-issue-47244.stderr index 00a4f9d48ff..a8da87d60bf 100644 --- a/src/test/ui/mismatched_types/closure-arg-count-expected-type-issue-47244.stderr +++ b/src/test/ui/mismatched_types/closure-arg-count-expected-type-issue-47244.stderr @@ -5,6 +5,7 @@ LL | let _n = m.iter().map(|_, b| { | ^^^ ------ takes 2 distinct arguments | | | expected closure that takes a single 2-tuple as argument + | help: change the closure to accept a tuple instead of individual arguments | LL | let _n = m.iter().map(|(_, b)| { diff --git a/src/test/ui/mismatched_types/closure-arg-count.stderr b/src/test/ui/mismatched_types/closure-arg-count.stderr index ed2b3f0c3ce..13954343246 100644 --- a/src/test/ui/mismatched_types/closure-arg-count.stderr +++ b/src/test/ui/mismatched_types/closure-arg-count.stderr @@ -5,6 +5,7 @@ LL | [1, 2, 3].sort_by(|| panic!()); | ^^^^^^^ -- takes 0 arguments | | | expected closure that takes 2 arguments + | help: consider changing the closure to take and ignore the expected arguments | LL | [1, 2, 3].sort_by(|_, _| panic!()); @@ -25,6 +26,7 @@ LL | [1, 2, 3].sort_by(|(tuple, tuple2)| panic!()); | ^^^^^^^ ----------------- takes a single 2-tuple as argument | | | expected closure that takes 2 distinct arguments + | help: change the closure to take multiple arguments instead of a single tuple | LL | [1, 2, 3].sort_by(|tuple, tuple2| panic!()); @@ -37,6 +39,7 @@ LL | [1, 2, 3].sort_by(|(tuple, tuple2): (usize, _)| panic!()); | ^^^^^^^ ----------------------------- takes a single 2-tuple as argument | | | expected closure that takes 2 distinct arguments + | help: change the closure to take multiple arguments instead of a single tuple | LL | [1, 2, 3].sort_by(|tuple, tuple2| panic!()); @@ -52,6 +55,7 @@ LL | f(|| panic!()); | ^ -- takes 0 arguments | | | expected closure that takes 1 argument + | help: consider changing the closure to take and ignore the expected argument | LL | f(|_| panic!()); @@ -67,6 +71,7 @@ LL | f( move || panic!()); | ^ ---------- takes 0 arguments | | | expected closure that takes 1 argument + | help: consider changing the closure to take and ignore the expected argument | LL | f( move |_| panic!()); @@ -79,6 +84,7 @@ LL | let _it = vec![1, 2, 3].into_iter().enumerate().map(|i, x| i); | ^^^ ------ takes 2 distinct arguments | | | expected closure that takes a single 2-tuple as argument + | help: change the closure to accept a tuple instead of individual arguments | LL | let _it = vec![1, 2, 3].into_iter().enumerate().map(|(i, x)| i); @@ -91,6 +97,7 @@ LL | let _it = vec![1, 2, 3].into_iter().enumerate().map(|i: usize, x| i); | ^^^ ------------- takes 2 distinct arguments | | | expected closure that takes a single 2-tuple as argument + | help: change the closure to accept a tuple instead of individual arguments | LL | let _it = vec![1, 2, 3].into_iter().enumerate().map(|(i, x)| i); diff --git a/src/test/ui/mismatched_types/issue-26480.stderr b/src/test/ui/mismatched_types/issue-26480.stderr index 881d9fd3202..9d5cd6eeb55 100644 --- a/src/test/ui/mismatched_types/issue-26480.stderr +++ b/src/test/ui/mismatched_types/issue-26480.stderr @@ -6,6 +6,7 @@ LL | $arr.len() * size_of($arr[0])); ... LL | write!(hello); | -------------- in this macro invocation + | help: you can convert an `usize` to `u64` and panic if the converted value wouldn't fit | LL | ($arr.len() * size_of($arr[0])).try_into().unwrap()); diff --git a/src/test/ui/mismatched_types/numeric-literal-cast.stderr b/src/test/ui/mismatched_types/numeric-literal-cast.stderr index ec53f1f0ecc..47ba1d26be5 100644 --- a/src/test/ui/mismatched_types/numeric-literal-cast.stderr +++ b/src/test/ui/mismatched_types/numeric-literal-cast.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | foo(1u8); | ^^^ expected u16, found u8 + | help: change the type of the numeric literal from `u8` to `u16` | LL | foo(1u16); @@ -13,6 +14,7 @@ error[E0308]: mismatched types | LL | foo1(2f32); | ^^^^ expected f64, found f32 + | help: change the type of the numeric literal from `f32` to `f64` | LL | foo1(2f64); @@ -23,6 +25,7 @@ error[E0308]: mismatched types | LL | foo2(3i16); | ^^^^ expected i32, found i16 + | help: change the type of the numeric literal from `i16` to `i32` | LL | foo2(3i32); diff --git a/src/test/ui/mismatched_types/recovered-block.stderr b/src/test/ui/mismatched_types/recovered-block.stderr index 7834750630b..207dc78a4b9 100644 --- a/src/test/ui/mismatched_types/recovered-block.stderr +++ b/src/test/ui/mismatched_types/recovered-block.stderr @@ -3,6 +3,7 @@ error: missing `struct` for struct definition | LL | pub Foo { text } | ^ + | help: add `struct` here to parse `Foo` as a public struct | LL | pub struct Foo { text } diff --git a/src/test/ui/namespace/namespace-mix.stderr b/src/test/ui/namespace/namespace-mix.stderr index 77da07f40d5..c3f2c79fdd2 100644 --- a/src/test/ui/namespace/namespace-mix.stderr +++ b/src/test/ui/namespace/namespace-mix.stderr @@ -42,6 +42,7 @@ LL | V {}, ... LL | check(m7::V); | ^^^^^ did you mean `m7::V { /* fields */ }`? + | help: a tuple variant with a similar name exists | LL | check(m7::TV); @@ -58,6 +59,7 @@ error[E0423]: expected value, found struct variant `xm7::V` | LL | check(xm7::V); | ^^^^^^ did you mean `xm7::V { /* fields */ }`? + | help: a tuple variant with a similar name exists | LL | check(xm7::TV); diff --git a/src/test/ui/nll/ty-outlives/impl-trait-captures.stderr b/src/test/ui/nll/ty-outlives/impl-trait-captures.stderr index 3a1e3ce3ad1..f6a86aa43b5 100644 --- a/src/test/ui/nll/ty-outlives/impl-trait-captures.stderr +++ b/src/test/ui/nll/ty-outlives/impl-trait-captures.stderr @@ -3,6 +3,7 @@ error[E0621]: explicit lifetime required in the type of `x` | LL | fn foo<'a, T>(x: &T) -> impl Foo<'a> { | ^^^^^^^^^^^^ lifetime `ReEarlyBound(0, 'a)` required + | help: add explicit lifetime `ReEarlyBound(0, 'a)` to the type of `x` | LL | fn foo<'a, T>(x: &ReEarlyBound(0, 'a) T) -> impl Foo<'a> { diff --git a/src/test/ui/no-implicit-prelude-nested.stderr b/src/test/ui/no-implicit-prelude-nested.stderr index 8d695e45da4..e57d8af5f99 100644 --- a/src/test/ui/no-implicit-prelude-nested.stderr +++ b/src/test/ui/no-implicit-prelude-nested.stderr @@ -3,6 +3,7 @@ error[E0405]: cannot find trait `Add` in this scope | LL | impl Add for Test {} | ^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use std::ops::Add; @@ -13,6 +14,7 @@ error[E0404]: expected trait, found derive macro `Clone` | LL | impl Clone for Test {} | ^^^^^ not a trait + | help: possible better candidates are found in other modules, you can import them into scope | LL | use std::clone::Clone; @@ -25,6 +27,7 @@ error[E0405]: cannot find trait `Iterator` in this scope | LL | impl Iterator for Test {} | ^^^^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::iter::Iterator; @@ -37,6 +40,7 @@ error[E0405]: cannot find trait `ToString` in this scope | LL | impl ToString for Test {} | ^^^^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::prelude::v1::ToString; @@ -55,6 +59,7 @@ error[E0425]: cannot find function `drop` in this scope | LL | drop(2) | ^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::mem::drop; @@ -67,6 +72,7 @@ error[E0405]: cannot find trait `Add` in this scope | LL | impl Add for Test {} | ^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use std::ops::Add; @@ -77,6 +83,7 @@ error[E0404]: expected trait, found derive macro `Clone` | LL | impl Clone for Test {} | ^^^^^ not a trait + | help: possible better candidates are found in other modules, you can import them into scope | LL | use std::clone::Clone; @@ -89,6 +96,7 @@ error[E0405]: cannot find trait `Iterator` in this scope | LL | impl Iterator for Test {} | ^^^^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::iter::Iterator; @@ -101,6 +109,7 @@ error[E0405]: cannot find trait `ToString` in this scope | LL | impl ToString for Test {} | ^^^^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::prelude::v1::ToString; @@ -119,6 +128,7 @@ error[E0425]: cannot find function `drop` in this scope | LL | drop(2) | ^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::mem::drop; @@ -131,6 +141,7 @@ error[E0405]: cannot find trait `Add` in this scope | LL | impl Add for Test {} | ^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use std::ops::Add; @@ -141,6 +152,7 @@ error[E0404]: expected trait, found derive macro `Clone` | LL | impl Clone for Test {} | ^^^^^ not a trait + | help: possible better candidates are found in other modules, you can import them into scope | LL | use std::clone::Clone; @@ -153,6 +165,7 @@ error[E0405]: cannot find trait `Iterator` in this scope | LL | impl Iterator for Test {} | ^^^^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::iter::Iterator; @@ -165,6 +178,7 @@ error[E0405]: cannot find trait `ToString` in this scope | LL | impl ToString for Test {} | ^^^^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::prelude::v1::ToString; @@ -183,6 +197,7 @@ error[E0425]: cannot find function `drop` in this scope | LL | drop(2) | ^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::mem::drop; diff --git a/src/test/ui/no-implicit-prelude.stderr b/src/test/ui/no-implicit-prelude.stderr index 6ae889df602..8b99529f4dd 100644 --- a/src/test/ui/no-implicit-prelude.stderr +++ b/src/test/ui/no-implicit-prelude.stderr @@ -3,6 +3,7 @@ error[E0405]: cannot find trait `Add` in this scope | LL | impl Add for Test {} | ^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use std::ops::Add; @@ -13,6 +14,7 @@ error[E0404]: expected trait, found derive macro `Clone` | LL | impl Clone for Test {} | ^^^^^ not a trait + | help: possible better candidates are found in other modules, you can import them into scope | LL | use std::clone::Clone; @@ -25,6 +27,7 @@ error[E0405]: cannot find trait `Iterator` in this scope | LL | impl Iterator for Test {} | ^^^^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::iter::Iterator; @@ -37,6 +40,7 @@ error[E0405]: cannot find trait `ToString` in this scope | LL | impl ToString for Test {} | ^^^^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::prelude::v1::ToString; @@ -55,6 +59,7 @@ error[E0425]: cannot find function `drop` in this scope | LL | drop(2) | ^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::mem::drop; diff --git a/src/test/ui/numeric/const-scope.stderr b/src/test/ui/numeric/const-scope.stderr index 3f69bcc7d4a..c8849505922 100644 --- a/src/test/ui/numeric/const-scope.stderr +++ b/src/test/ui/numeric/const-scope.stderr @@ -27,6 +27,7 @@ error[E0308]: mismatched types | LL | let c: i32 = 1i8; | ^^^ expected i32, found i8 + | help: change the type of the numeric literal from `i8` to `i32` | LL | let c: i32 = 1i32; @@ -37,6 +38,7 @@ error[E0308]: mismatched types | LL | let d: i8 = c; | ^ expected i8, found i32 + | help: you can convert an `i32` to `i8` and panic if the converted value wouldn't fit | LL | let d: i8 = c.try_into().unwrap(); diff --git a/src/test/ui/numeric/len.stderr b/src/test/ui/numeric/len.stderr index c767bdd9bd5..1e8bff7f04a 100644 --- a/src/test/ui/numeric/len.stderr +++ b/src/test/ui/numeric/len.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | test(array.len()); | ^^^^^^^^^^^ expected u32, found usize + | help: you can convert an `usize` to `u32` and panic if the converted value wouldn't fit | LL | test(array.len().try_into().unwrap()); diff --git a/src/test/ui/numeric/numeric-cast-2.stderr b/src/test/ui/numeric/numeric-cast-2.stderr index f58389ce96c..9f08985bdb3 100644 --- a/src/test/ui/numeric/numeric-cast-2.stderr +++ b/src/test/ui/numeric/numeric-cast-2.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | let x: u16 = foo(); | ^^^^^ expected u16, found i32 + | help: you can convert an `i32` to `u16` and panic if the converted value wouldn't fit | LL | let x: u16 = foo().try_into().unwrap(); @@ -13,6 +14,7 @@ error[E0308]: mismatched types | LL | let y: i64 = x + x; | ^^^^^ expected i64, found u16 + | help: you can convert an `u16` to `i64` and panic if the converted value wouldn't fit | LL | let y: i64 = (x + x).try_into().unwrap(); @@ -23,6 +25,7 @@ error[E0308]: mismatched types | LL | let z: i32 = x + x; | ^^^^^ expected i32, found u16 + | help: you can convert an `u16` to `i32` and panic if the converted value wouldn't fit | LL | let z: i32 = (x + x).try_into().unwrap(); diff --git a/src/test/ui/numeric/numeric-cast.stderr b/src/test/ui/numeric/numeric-cast.stderr index e66b83f2b39..983ea084025 100644 --- a/src/test/ui/numeric/numeric-cast.stderr +++ b/src/test/ui/numeric/numeric-cast.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected usize, found u64 + | help: you can convert an `u64` to `usize` and panic if the converted value wouldn't fit | LL | foo::(x_u64.try_into().unwrap()); @@ -13,6 +14,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected usize, found u32 + | help: you can convert an `u32` to `usize` and panic if the converted value wouldn't fit | LL | foo::(x_u32.try_into().unwrap()); @@ -23,6 +25,7 @@ error[E0308]: mismatched types | LL | foo::(x_u16); | ^^^^^ expected usize, found u16 + | help: you can convert an `u16` to `usize` and panic if the converted value wouldn't fit | LL | foo::(x_u16.try_into().unwrap()); @@ -33,6 +36,7 @@ error[E0308]: mismatched types | LL | foo::(x_u8); | ^^^^ expected usize, found u8 + | help: you can convert an `u8` to `usize` and panic if the converted value wouldn't fit | LL | foo::(x_u8.try_into().unwrap()); @@ -43,6 +47,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected usize, found isize + | help: you can convert an `isize` to `usize` and panic if the converted value wouldn't fit | LL | foo::(x_isize.try_into().unwrap()); @@ -53,6 +58,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected usize, found i64 + | help: you can convert an `i64` to `usize` and panic if the converted value wouldn't fit | LL | foo::(x_i64.try_into().unwrap()); @@ -63,6 +69,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected usize, found i32 + | help: you can convert an `i32` to `usize` and panic if the converted value wouldn't fit | LL | foo::(x_i32.try_into().unwrap()); @@ -73,6 +80,7 @@ error[E0308]: mismatched types | LL | foo::(x_i16); | ^^^^^ expected usize, found i16 + | help: you can convert an `i16` to `usize` and panic if the converted value wouldn't fit | LL | foo::(x_i16.try_into().unwrap()); @@ -83,6 +91,7 @@ error[E0308]: mismatched types | LL | foo::(x_i8); | ^^^^ expected usize, found i8 + | help: you can convert an `i8` to `usize` and panic if the converted value wouldn't fit | LL | foo::(x_i8.try_into().unwrap()); @@ -93,6 +102,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected isize, found usize + | help: you can convert an `usize` to `isize` and panic if the converted value wouldn't fit | LL | foo::(x_usize.try_into().unwrap()); @@ -103,6 +113,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected isize, found u64 + | help: you can convert an `u64` to `isize` and panic if the converted value wouldn't fit | LL | foo::(x_u64.try_into().unwrap()); @@ -113,6 +124,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected isize, found u32 + | help: you can convert an `u32` to `isize` and panic if the converted value wouldn't fit | LL | foo::(x_u32.try_into().unwrap()); @@ -123,6 +135,7 @@ error[E0308]: mismatched types | LL | foo::(x_u16); | ^^^^^ expected isize, found u16 + | help: you can convert an `u16` to `isize` and panic if the converted value wouldn't fit | LL | foo::(x_u16.try_into().unwrap()); @@ -133,6 +146,7 @@ error[E0308]: mismatched types | LL | foo::(x_u8); | ^^^^ expected isize, found u8 + | help: you can convert an `u8` to `isize` and panic if the converted value wouldn't fit | LL | foo::(x_u8.try_into().unwrap()); @@ -143,6 +157,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected isize, found i64 + | help: you can convert an `i64` to `isize` and panic if the converted value wouldn't fit | LL | foo::(x_i64.try_into().unwrap()); @@ -153,6 +168,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected isize, found i32 + | help: you can convert an `i32` to `isize` and panic if the converted value wouldn't fit | LL | foo::(x_i32.try_into().unwrap()); @@ -163,6 +179,7 @@ error[E0308]: mismatched types | LL | foo::(x_i16); | ^^^^^ expected isize, found i16 + | help: you can convert an `i16` to `isize` and panic if the converted value wouldn't fit | LL | foo::(x_i16.try_into().unwrap()); @@ -173,6 +190,7 @@ error[E0308]: mismatched types | LL | foo::(x_i8); | ^^^^ expected isize, found i8 + | help: you can convert an `i8` to `isize` and panic if the converted value wouldn't fit | LL | foo::(x_i8.try_into().unwrap()); @@ -183,6 +201,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected u64, found usize + | help: you can convert an `usize` to `u64` and panic if the converted value wouldn't fit | LL | foo::(x_usize.try_into().unwrap()); @@ -220,6 +239,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected u64, found isize + | help: you can convert an `isize` to `u64` and panic if the converted value wouldn't fit | LL | foo::(x_isize.try_into().unwrap()); @@ -230,6 +250,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected u64, found i64 + | help: you can convert an `i64` to `u64` and panic if the converted value wouldn't fit | LL | foo::(x_i64.try_into().unwrap()); @@ -240,6 +261,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected u64, found i32 + | help: you can convert an `i32` to `u64` and panic if the converted value wouldn't fit | LL | foo::(x_i32.try_into().unwrap()); @@ -250,6 +272,7 @@ error[E0308]: mismatched types | LL | foo::(x_i16); | ^^^^^ expected u64, found i16 + | help: you can convert an `i16` to `u64` and panic if the converted value wouldn't fit | LL | foo::(x_i16.try_into().unwrap()); @@ -260,6 +283,7 @@ error[E0308]: mismatched types | LL | foo::(x_i8); | ^^^^ expected u64, found i8 + | help: you can convert an `i8` to `u64` and panic if the converted value wouldn't fit | LL | foo::(x_i8.try_into().unwrap()); @@ -270,6 +294,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected i64, found usize + | help: you can convert an `usize` to `i64` and panic if the converted value wouldn't fit | LL | foo::(x_usize.try_into().unwrap()); @@ -280,6 +305,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected i64, found u64 + | help: you can convert an `u64` to `i64` and panic if the converted value wouldn't fit | LL | foo::(x_u64.try_into().unwrap()); @@ -290,6 +316,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected i64, found u32 + | help: you can convert an `u32` to `i64` and panic if the converted value wouldn't fit | LL | foo::(x_u32.try_into().unwrap()); @@ -300,6 +327,7 @@ error[E0308]: mismatched types | LL | foo::(x_u16); | ^^^^^ expected i64, found u16 + | help: you can convert an `u16` to `i64` and panic if the converted value wouldn't fit | LL | foo::(x_u16.try_into().unwrap()); @@ -310,6 +338,7 @@ error[E0308]: mismatched types | LL | foo::(x_u8); | ^^^^ expected i64, found u8 + | help: you can convert an `u8` to `i64` and panic if the converted value wouldn't fit | LL | foo::(x_u8.try_into().unwrap()); @@ -320,6 +349,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected i64, found isize + | help: you can convert an `isize` to `i64` and panic if the converted value wouldn't fit | LL | foo::(x_isize.try_into().unwrap()); @@ -357,6 +387,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected u32, found usize + | help: you can convert an `usize` to `u32` and panic if the converted value wouldn't fit | LL | foo::(x_usize.try_into().unwrap()); @@ -367,6 +398,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected u32, found u64 + | help: you can convert an `u64` to `u32` and panic if the converted value wouldn't fit | LL | foo::(x_u64.try_into().unwrap()); @@ -395,6 +427,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected u32, found isize + | help: you can convert an `isize` to `u32` and panic if the converted value wouldn't fit | LL | foo::(x_isize.try_into().unwrap()); @@ -405,6 +438,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected u32, found i64 + | help: you can convert an `i64` to `u32` and panic if the converted value wouldn't fit | LL | foo::(x_i64.try_into().unwrap()); @@ -415,6 +449,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected u32, found i32 + | help: you can convert an `i32` to `u32` and panic if the converted value wouldn't fit | LL | foo::(x_i32.try_into().unwrap()); @@ -425,6 +460,7 @@ error[E0308]: mismatched types | LL | foo::(x_i16); | ^^^^^ expected u32, found i16 + | help: you can convert an `i16` to `u32` and panic if the converted value wouldn't fit | LL | foo::(x_i16.try_into().unwrap()); @@ -435,6 +471,7 @@ error[E0308]: mismatched types | LL | foo::(x_i8); | ^^^^ expected u32, found i8 + | help: you can convert an `i8` to `u32` and panic if the converted value wouldn't fit | LL | foo::(x_i8.try_into().unwrap()); @@ -445,6 +482,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected i32, found usize + | help: you can convert an `usize` to `i32` and panic if the converted value wouldn't fit | LL | foo::(x_usize.try_into().unwrap()); @@ -455,6 +493,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected i32, found u64 + | help: you can convert an `u64` to `i32` and panic if the converted value wouldn't fit | LL | foo::(x_u64.try_into().unwrap()); @@ -465,6 +504,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected i32, found u32 + | help: you can convert an `u32` to `i32` and panic if the converted value wouldn't fit | LL | foo::(x_u32.try_into().unwrap()); @@ -475,6 +515,7 @@ error[E0308]: mismatched types | LL | foo::(x_u16); | ^^^^^ expected i32, found u16 + | help: you can convert an `u16` to `i32` and panic if the converted value wouldn't fit | LL | foo::(x_u16.try_into().unwrap()); @@ -485,6 +526,7 @@ error[E0308]: mismatched types | LL | foo::(x_u8); | ^^^^ expected i32, found u8 + | help: you can convert an `u8` to `i32` and panic if the converted value wouldn't fit | LL | foo::(x_u8.try_into().unwrap()); @@ -495,6 +537,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected i32, found isize + | help: you can convert an `isize` to `i32` and panic if the converted value wouldn't fit | LL | foo::(x_isize.try_into().unwrap()); @@ -505,6 +548,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected i32, found i64 + | help: you can convert an `i64` to `i32` and panic if the converted value wouldn't fit | LL | foo::(x_i64.try_into().unwrap()); @@ -533,6 +577,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected u16, found usize + | help: you can convert an `usize` to `u16` and panic if the converted value wouldn't fit | LL | foo::(x_usize.try_into().unwrap()); @@ -543,6 +588,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected u16, found u64 + | help: you can convert an `u64` to `u16` and panic if the converted value wouldn't fit | LL | foo::(x_u64.try_into().unwrap()); @@ -553,6 +599,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected u16, found u32 + | help: you can convert an `u32` to `u16` and panic if the converted value wouldn't fit | LL | foo::(x_u32.try_into().unwrap()); @@ -572,6 +619,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected u16, found isize + | help: you can convert an `isize` to `u16` and panic if the converted value wouldn't fit | LL | foo::(x_isize.try_into().unwrap()); @@ -582,6 +630,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected u16, found i64 + | help: you can convert an `i64` to `u16` and panic if the converted value wouldn't fit | LL | foo::(x_i64.try_into().unwrap()); @@ -592,6 +641,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected u16, found i32 + | help: you can convert an `i32` to `u16` and panic if the converted value wouldn't fit | LL | foo::(x_i32.try_into().unwrap()); @@ -602,6 +652,7 @@ error[E0308]: mismatched types | LL | foo::(x_i16); | ^^^^^ expected u16, found i16 + | help: you can convert an `i16` to `u16` and panic if the converted value wouldn't fit | LL | foo::(x_i16.try_into().unwrap()); @@ -612,6 +663,7 @@ error[E0308]: mismatched types | LL | foo::(x_i8); | ^^^^ expected u16, found i8 + | help: you can convert an `i8` to `u16` and panic if the converted value wouldn't fit | LL | foo::(x_i8.try_into().unwrap()); @@ -622,6 +674,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected i16, found usize + | help: you can convert an `usize` to `i16` and panic if the converted value wouldn't fit | LL | foo::(x_usize.try_into().unwrap()); @@ -632,6 +685,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected i16, found u64 + | help: you can convert an `u64` to `i16` and panic if the converted value wouldn't fit | LL | foo::(x_u64.try_into().unwrap()); @@ -642,6 +696,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected i16, found u32 + | help: you can convert an `u32` to `i16` and panic if the converted value wouldn't fit | LL | foo::(x_u32.try_into().unwrap()); @@ -652,6 +707,7 @@ error[E0308]: mismatched types | LL | foo::(x_u16); | ^^^^^ expected i16, found u16 + | help: you can convert an `u16` to `i16` and panic if the converted value wouldn't fit | LL | foo::(x_u16.try_into().unwrap()); @@ -662,6 +718,7 @@ error[E0308]: mismatched types | LL | foo::(x_u8); | ^^^^ expected i16, found u8 + | help: you can convert an `u8` to `i16` and panic if the converted value wouldn't fit | LL | foo::(x_u8.try_into().unwrap()); @@ -672,6 +729,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected i16, found isize + | help: you can convert an `isize` to `i16` and panic if the converted value wouldn't fit | LL | foo::(x_isize.try_into().unwrap()); @@ -682,6 +740,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected i16, found i64 + | help: you can convert an `i64` to `i16` and panic if the converted value wouldn't fit | LL | foo::(x_i64.try_into().unwrap()); @@ -692,6 +751,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected i16, found i32 + | help: you can convert an `i32` to `i16` and panic if the converted value wouldn't fit | LL | foo::(x_i32.try_into().unwrap()); @@ -711,6 +771,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected u8, found usize + | help: you can convert an `usize` to `u8` and panic if the converted value wouldn't fit | LL | foo::(x_usize.try_into().unwrap()); @@ -721,6 +782,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected u8, found u64 + | help: you can convert an `u64` to `u8` and panic if the converted value wouldn't fit | LL | foo::(x_u64.try_into().unwrap()); @@ -731,6 +793,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected u8, found u32 + | help: you can convert an `u32` to `u8` and panic if the converted value wouldn't fit | LL | foo::(x_u32.try_into().unwrap()); @@ -741,6 +804,7 @@ error[E0308]: mismatched types | LL | foo::(x_u16); | ^^^^^ expected u8, found u16 + | help: you can convert an `u16` to `u8` and panic if the converted value wouldn't fit | LL | foo::(x_u16.try_into().unwrap()); @@ -751,6 +815,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected u8, found isize + | help: you can convert an `isize` to `u8` and panic if the converted value wouldn't fit | LL | foo::(x_isize.try_into().unwrap()); @@ -761,6 +826,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected u8, found i64 + | help: you can convert an `i64` to `u8` and panic if the converted value wouldn't fit | LL | foo::(x_i64.try_into().unwrap()); @@ -771,6 +837,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected u8, found i32 + | help: you can convert an `i32` to `u8` and panic if the converted value wouldn't fit | LL | foo::(x_i32.try_into().unwrap()); @@ -781,6 +848,7 @@ error[E0308]: mismatched types | LL | foo::(x_i16); | ^^^^^ expected u8, found i16 + | help: you can convert an `i16` to `u8` and panic if the converted value wouldn't fit | LL | foo::(x_i16.try_into().unwrap()); @@ -791,6 +859,7 @@ error[E0308]: mismatched types | LL | foo::(x_i8); | ^^^^ expected u8, found i8 + | help: you can convert an `i8` to `u8` and panic if the converted value wouldn't fit | LL | foo::(x_i8.try_into().unwrap()); @@ -801,6 +870,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected i8, found usize + | help: you can convert an `usize` to `i8` and panic if the converted value wouldn't fit | LL | foo::(x_usize.try_into().unwrap()); @@ -811,6 +881,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected i8, found u64 + | help: you can convert an `u64` to `i8` and panic if the converted value wouldn't fit | LL | foo::(x_u64.try_into().unwrap()); @@ -821,6 +892,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected i8, found u32 + | help: you can convert an `u32` to `i8` and panic if the converted value wouldn't fit | LL | foo::(x_u32.try_into().unwrap()); @@ -831,6 +903,7 @@ error[E0308]: mismatched types | LL | foo::(x_u16); | ^^^^^ expected i8, found u16 + | help: you can convert an `u16` to `i8` and panic if the converted value wouldn't fit | LL | foo::(x_u16.try_into().unwrap()); @@ -841,6 +914,7 @@ error[E0308]: mismatched types | LL | foo::(x_u8); | ^^^^ expected i8, found u8 + | help: you can convert an `u8` to `i8` and panic if the converted value wouldn't fit | LL | foo::(x_u8.try_into().unwrap()); @@ -851,6 +925,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected i8, found isize + | help: you can convert an `isize` to `i8` and panic if the converted value wouldn't fit | LL | foo::(x_isize.try_into().unwrap()); @@ -861,6 +936,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected i8, found i64 + | help: you can convert an `i64` to `i8` and panic if the converted value wouldn't fit | LL | foo::(x_i64.try_into().unwrap()); @@ -871,6 +947,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected i8, found i32 + | help: you can convert an `i32` to `i8` and panic if the converted value wouldn't fit | LL | foo::(x_i32.try_into().unwrap()); @@ -881,6 +958,7 @@ error[E0308]: mismatched types | LL | foo::(x_i16); | ^^^^^ expected i8, found i16 + | help: you can convert an `i16` to `i8` and panic if the converted value wouldn't fit | LL | foo::(x_i16.try_into().unwrap()); @@ -891,6 +969,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected f64, found usize + | help: you can cast an `usize to `f64`, producing the floating point representation of the integer, | rounded if necessary LL | foo::(x_usize as f64); @@ -901,6 +980,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected f64, found u64 + | help: you can cast an `u64 to `f64`, producing the floating point representation of the integer, | rounded if necessary LL | foo::(x_u64 as f64); @@ -911,6 +991,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected f64, found u32 + | help: you can convert an `u32` to `f64`, producing the floating point representation of the integer | LL | foo::(x_u32.into()); @@ -921,6 +1002,7 @@ error[E0308]: mismatched types | LL | foo::(x_u16); | ^^^^^ expected f64, found u16 + | help: you can convert an `u16` to `f64`, producing the floating point representation of the integer | LL | foo::(x_u16.into()); @@ -931,6 +1013,7 @@ error[E0308]: mismatched types | LL | foo::(x_u8); | ^^^^ expected f64, found u8 + | help: you can convert an `u8` to `f64`, producing the floating point representation of the integer | LL | foo::(x_u8.into()); @@ -941,6 +1024,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected f64, found isize + | help: you can convert an `isize` to `f64`, producing the floating point representation of the integer, rounded if necessary | LL | foo::(x_isize as f64); @@ -951,6 +1035,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected f64, found i64 + | help: you can convert an `i64` to `f64`, producing the floating point representation of the integer, rounded if necessary | LL | foo::(x_i64 as f64); @@ -961,6 +1046,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected f64, found i32 + | help: you can convert an `i32` to `f64`, producing the floating point representation of the integer | LL | foo::(x_i32.into()); @@ -971,6 +1057,7 @@ error[E0308]: mismatched types | LL | foo::(x_i16); | ^^^^^ expected f64, found i16 + | help: you can convert an `i16` to `f64`, producing the floating point representation of the integer | LL | foo::(x_i16.into()); @@ -981,6 +1068,7 @@ error[E0308]: mismatched types | LL | foo::(x_i8); | ^^^^ expected f64, found i8 + | help: you can convert an `i8` to `f64`, producing the floating point representation of the integer | LL | foo::(x_i8.into()); @@ -1000,6 +1088,7 @@ error[E0308]: mismatched types | LL | foo::(x_usize); | ^^^^^^^ expected f32, found usize + | help: you can cast an `usize to `f32`, producing the floating point representation of the integer, | rounded if necessary LL | foo::(x_usize as f32); @@ -1010,6 +1099,7 @@ error[E0308]: mismatched types | LL | foo::(x_u64); | ^^^^^ expected f32, found u64 + | help: you can cast an `u64 to `f32`, producing the floating point representation of the integer, | rounded if necessary LL | foo::(x_u64 as f32); @@ -1020,6 +1110,7 @@ error[E0308]: mismatched types | LL | foo::(x_u32); | ^^^^^ expected f32, found u32 + | help: you can cast an `u32 to `f32`, producing the floating point representation of the integer, | rounded if necessary LL | foo::(x_u32 as f32); @@ -1030,6 +1121,7 @@ error[E0308]: mismatched types | LL | foo::(x_u16); | ^^^^^ expected f32, found u16 + | help: you can convert an `u16` to `f32`, producing the floating point representation of the integer | LL | foo::(x_u16.into()); @@ -1040,6 +1132,7 @@ error[E0308]: mismatched types | LL | foo::(x_u8); | ^^^^ expected f32, found u8 + | help: you can convert an `u8` to `f32`, producing the floating point representation of the integer | LL | foo::(x_u8.into()); @@ -1050,6 +1143,7 @@ error[E0308]: mismatched types | LL | foo::(x_isize); | ^^^^^^^ expected f32, found isize + | help: you can convert an `isize` to `f32`, producing the floating point representation of the integer, rounded if necessary | LL | foo::(x_isize as f32); @@ -1060,6 +1154,7 @@ error[E0308]: mismatched types | LL | foo::(x_i64); | ^^^^^ expected f32, found i64 + | help: you can convert an `i64` to `f32`, producing the floating point representation of the integer, rounded if necessary | LL | foo::(x_i64 as f32); @@ -1070,6 +1165,7 @@ error[E0308]: mismatched types | LL | foo::(x_i32); | ^^^^^ expected f32, found i32 + | help: you can convert an `i32` to `f32`, producing the floating point representation of the integer, rounded if necessary | LL | foo::(x_i32 as f32); @@ -1080,6 +1176,7 @@ error[E0308]: mismatched types | LL | foo::(x_i16); | ^^^^^ expected f32, found i16 + | help: you can convert an `i16` to `f32`, producing the floating point representation of the integer | LL | foo::(x_i16.into()); @@ -1090,6 +1187,7 @@ error[E0308]: mismatched types | LL | foo::(x_i8); | ^^^^ expected f32, found i8 + | help: you can convert an `i8` to `f32`, producing the floating point representation of the integer | LL | foo::(x_i8.into()); diff --git a/src/test/ui/numeric/numeric-suffix.stderr b/src/test/ui/numeric/numeric-suffix.stderr index c88eeeb9f70..9bcae4a1888 100644 --- a/src/test/ui/numeric/numeric-suffix.stderr +++ b/src/test/ui/numeric/numeric-suffix.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected usize, found u64 + | help: change the type of the numeric literal from `u64` to `usize` | LL | foo::(42_usize); @@ -13,6 +14,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected usize, found u32 + | help: change the type of the numeric literal from `u32` to `usize` | LL | foo::(42_usize); @@ -23,6 +25,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected usize, found u16 + | help: change the type of the numeric literal from `u16` to `usize` | LL | foo::(42_usize); @@ -33,6 +36,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected usize, found u8 + | help: change the type of the numeric literal from `u8` to `usize` | LL | foo::(42_usize); @@ -43,6 +47,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected usize, found isize + | help: change the type of the numeric literal from `isize` to `usize` | LL | foo::(42_usize); @@ -53,6 +58,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected usize, found i64 + | help: change the type of the numeric literal from `i64` to `usize` | LL | foo::(42_usize); @@ -63,6 +69,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected usize, found i32 + | help: change the type of the numeric literal from `i32` to `usize` | LL | foo::(42_usize); @@ -73,6 +80,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected usize, found i16 + | help: change the type of the numeric literal from `i16` to `usize` | LL | foo::(42_usize); @@ -83,6 +91,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected usize, found i8 + | help: change the type of the numeric literal from `i8` to `usize` | LL | foo::(42_usize); @@ -93,6 +102,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected usize, found f64 + | help: change the type of the numeric literal from `f64` to `usize` | LL | foo::(42usize); @@ -103,6 +113,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected usize, found f32 + | help: change the type of the numeric literal from `f32` to `usize` | LL | foo::(42usize); @@ -113,6 +124,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected isize, found usize + | help: change the type of the numeric literal from `usize` to `isize` | LL | foo::(42_isize); @@ -123,6 +135,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected isize, found u64 + | help: change the type of the numeric literal from `u64` to `isize` | LL | foo::(42_isize); @@ -133,6 +146,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected isize, found u32 + | help: change the type of the numeric literal from `u32` to `isize` | LL | foo::(42_isize); @@ -143,6 +157,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected isize, found u16 + | help: change the type of the numeric literal from `u16` to `isize` | LL | foo::(42_isize); @@ -153,6 +168,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected isize, found u8 + | help: change the type of the numeric literal from `u8` to `isize` | LL | foo::(42_isize); @@ -163,6 +179,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected isize, found i64 + | help: change the type of the numeric literal from `i64` to `isize` | LL | foo::(42_isize); @@ -173,6 +190,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected isize, found i32 + | help: change the type of the numeric literal from `i32` to `isize` | LL | foo::(42_isize); @@ -183,6 +201,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected isize, found i16 + | help: change the type of the numeric literal from `i16` to `isize` | LL | foo::(42_isize); @@ -193,6 +212,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected isize, found i8 + | help: change the type of the numeric literal from `i8` to `isize` | LL | foo::(42_isize); @@ -203,6 +223,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected isize, found f64 + | help: change the type of the numeric literal from `f64` to `isize` | LL | foo::(42isize); @@ -213,6 +234,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected isize, found f32 + | help: change the type of the numeric literal from `f32` to `isize` | LL | foo::(42isize); @@ -223,6 +245,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected u64, found usize + | help: change the type of the numeric literal from `usize` to `u64` | LL | foo::(42_u64); @@ -233,6 +256,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected u64, found u32 + | help: change the type of the numeric literal from `u32` to `u64` | LL | foo::(42_u64); @@ -243,6 +267,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected u64, found u16 + | help: change the type of the numeric literal from `u16` to `u64` | LL | foo::(42_u64); @@ -253,6 +278,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected u64, found u8 + | help: change the type of the numeric literal from `u8` to `u64` | LL | foo::(42_u64); @@ -263,6 +289,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected u64, found isize + | help: change the type of the numeric literal from `isize` to `u64` | LL | foo::(42_u64); @@ -273,6 +300,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected u64, found i64 + | help: change the type of the numeric literal from `i64` to `u64` | LL | foo::(42_u64); @@ -283,6 +311,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected u64, found i32 + | help: change the type of the numeric literal from `i32` to `u64` | LL | foo::(42_u64); @@ -293,6 +322,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected u64, found i16 + | help: change the type of the numeric literal from `i16` to `u64` | LL | foo::(42_u64); @@ -303,6 +333,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected u64, found i8 + | help: change the type of the numeric literal from `i8` to `u64` | LL | foo::(42_u64); @@ -313,6 +344,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected u64, found f64 + | help: change the type of the numeric literal from `f64` to `u64` | LL | foo::(42u64); @@ -323,6 +355,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected u64, found f32 + | help: change the type of the numeric literal from `f32` to `u64` | LL | foo::(42u64); @@ -333,6 +366,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected i64, found usize + | help: change the type of the numeric literal from `usize` to `i64` | LL | foo::(42_i64); @@ -343,6 +377,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected i64, found u64 + | help: change the type of the numeric literal from `u64` to `i64` | LL | foo::(42_i64); @@ -353,6 +388,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected i64, found u32 + | help: change the type of the numeric literal from `u32` to `i64` | LL | foo::(42_i64); @@ -363,6 +399,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected i64, found u16 + | help: change the type of the numeric literal from `u16` to `i64` | LL | foo::(42_i64); @@ -373,6 +410,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected i64, found u8 + | help: change the type of the numeric literal from `u8` to `i64` | LL | foo::(42_i64); @@ -383,6 +421,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected i64, found isize + | help: change the type of the numeric literal from `isize` to `i64` | LL | foo::(42_i64); @@ -393,6 +432,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected i64, found i32 + | help: change the type of the numeric literal from `i32` to `i64` | LL | foo::(42_i64); @@ -403,6 +443,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected i64, found i16 + | help: change the type of the numeric literal from `i16` to `i64` | LL | foo::(42_i64); @@ -413,6 +454,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected i64, found i8 + | help: change the type of the numeric literal from `i8` to `i64` | LL | foo::(42_i64); @@ -423,6 +465,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected i64, found f64 + | help: change the type of the numeric literal from `f64` to `i64` | LL | foo::(42i64); @@ -433,6 +476,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected i64, found f32 + | help: change the type of the numeric literal from `f32` to `i64` | LL | foo::(42i64); @@ -443,6 +487,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected u32, found usize + | help: change the type of the numeric literal from `usize` to `u32` | LL | foo::(42_u32); @@ -453,6 +498,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected u32, found u64 + | help: change the type of the numeric literal from `u64` to `u32` | LL | foo::(42_u32); @@ -463,6 +509,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected u32, found u16 + | help: change the type of the numeric literal from `u16` to `u32` | LL | foo::(42_u32); @@ -473,6 +520,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected u32, found u8 + | help: change the type of the numeric literal from `u8` to `u32` | LL | foo::(42_u32); @@ -483,6 +531,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected u32, found isize + | help: change the type of the numeric literal from `isize` to `u32` | LL | foo::(42_u32); @@ -493,6 +542,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected u32, found i64 + | help: change the type of the numeric literal from `i64` to `u32` | LL | foo::(42_u32); @@ -503,6 +553,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected u32, found i32 + | help: change the type of the numeric literal from `i32` to `u32` | LL | foo::(42_u32); @@ -513,6 +564,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected u32, found i16 + | help: change the type of the numeric literal from `i16` to `u32` | LL | foo::(42_u32); @@ -523,6 +575,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected u32, found i8 + | help: change the type of the numeric literal from `i8` to `u32` | LL | foo::(42_u32); @@ -533,6 +586,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected u32, found f64 + | help: change the type of the numeric literal from `f64` to `u32` | LL | foo::(42u32); @@ -543,6 +597,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected u32, found f32 + | help: change the type of the numeric literal from `f32` to `u32` | LL | foo::(42u32); @@ -553,6 +608,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected i32, found usize + | help: change the type of the numeric literal from `usize` to `i32` | LL | foo::(42_i32); @@ -563,6 +619,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected i32, found u64 + | help: change the type of the numeric literal from `u64` to `i32` | LL | foo::(42_i32); @@ -573,6 +630,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected i32, found u32 + | help: change the type of the numeric literal from `u32` to `i32` | LL | foo::(42_i32); @@ -583,6 +641,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected i32, found u16 + | help: change the type of the numeric literal from `u16` to `i32` | LL | foo::(42_i32); @@ -593,6 +652,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected i32, found u8 + | help: change the type of the numeric literal from `u8` to `i32` | LL | foo::(42_i32); @@ -603,6 +663,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected i32, found isize + | help: change the type of the numeric literal from `isize` to `i32` | LL | foo::(42_i32); @@ -613,6 +674,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected i32, found i64 + | help: change the type of the numeric literal from `i64` to `i32` | LL | foo::(42_i32); @@ -623,6 +685,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected i32, found i16 + | help: change the type of the numeric literal from `i16` to `i32` | LL | foo::(42_i32); @@ -633,6 +696,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected i32, found i8 + | help: change the type of the numeric literal from `i8` to `i32` | LL | foo::(42_i32); @@ -643,6 +707,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected i32, found f64 + | help: change the type of the numeric literal from `f64` to `i32` | LL | foo::(42i32); @@ -653,6 +718,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected i32, found f32 + | help: change the type of the numeric literal from `f32` to `i32` | LL | foo::(42i32); @@ -663,6 +729,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected u16, found usize + | help: change the type of the numeric literal from `usize` to `u16` | LL | foo::(42_u16); @@ -673,6 +740,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected u16, found u64 + | help: change the type of the numeric literal from `u64` to `u16` | LL | foo::(42_u16); @@ -683,6 +751,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected u16, found u32 + | help: change the type of the numeric literal from `u32` to `u16` | LL | foo::(42_u16); @@ -693,6 +762,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected u16, found u8 + | help: change the type of the numeric literal from `u8` to `u16` | LL | foo::(42_u16); @@ -703,6 +773,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected u16, found isize + | help: change the type of the numeric literal from `isize` to `u16` | LL | foo::(42_u16); @@ -713,6 +784,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected u16, found i64 + | help: change the type of the numeric literal from `i64` to `u16` | LL | foo::(42_u16); @@ -723,6 +795,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected u16, found i32 + | help: change the type of the numeric literal from `i32` to `u16` | LL | foo::(42_u16); @@ -733,6 +806,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected u16, found i16 + | help: change the type of the numeric literal from `i16` to `u16` | LL | foo::(42_u16); @@ -743,6 +817,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected u16, found i8 + | help: change the type of the numeric literal from `i8` to `u16` | LL | foo::(42_u16); @@ -753,6 +828,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected u16, found f64 + | help: change the type of the numeric literal from `f64` to `u16` | LL | foo::(42u16); @@ -763,6 +839,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected u16, found f32 + | help: change the type of the numeric literal from `f32` to `u16` | LL | foo::(42u16); @@ -773,6 +850,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected i16, found usize + | help: change the type of the numeric literal from `usize` to `i16` | LL | foo::(42_i16); @@ -783,6 +861,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected i16, found u64 + | help: change the type of the numeric literal from `u64` to `i16` | LL | foo::(42_i16); @@ -793,6 +872,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected i16, found u32 + | help: change the type of the numeric literal from `u32` to `i16` | LL | foo::(42_i16); @@ -803,6 +883,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected i16, found u16 + | help: change the type of the numeric literal from `u16` to `i16` | LL | foo::(42_i16); @@ -813,6 +894,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected i16, found u8 + | help: change the type of the numeric literal from `u8` to `i16` | LL | foo::(42_i16); @@ -823,6 +905,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected i16, found isize + | help: change the type of the numeric literal from `isize` to `i16` | LL | foo::(42_i16); @@ -833,6 +916,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected i16, found i64 + | help: change the type of the numeric literal from `i64` to `i16` | LL | foo::(42_i16); @@ -843,6 +927,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected i16, found i32 + | help: change the type of the numeric literal from `i32` to `i16` | LL | foo::(42_i16); @@ -853,6 +938,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected i16, found i8 + | help: change the type of the numeric literal from `i8` to `i16` | LL | foo::(42_i16); @@ -863,6 +949,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected i16, found f64 + | help: change the type of the numeric literal from `f64` to `i16` | LL | foo::(42i16); @@ -873,6 +960,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected i16, found f32 + | help: change the type of the numeric literal from `f32` to `i16` | LL | foo::(42i16); @@ -883,6 +971,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected u8, found usize + | help: change the type of the numeric literal from `usize` to `u8` | LL | foo::(42_u8); @@ -893,6 +982,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected u8, found u64 + | help: change the type of the numeric literal from `u64` to `u8` | LL | foo::(42_u8); @@ -903,6 +993,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected u8, found u32 + | help: change the type of the numeric literal from `u32` to `u8` | LL | foo::(42_u8); @@ -913,6 +1004,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected u8, found u16 + | help: change the type of the numeric literal from `u16` to `u8` | LL | foo::(42_u8); @@ -923,6 +1015,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected u8, found isize + | help: change the type of the numeric literal from `isize` to `u8` | LL | foo::(42_u8); @@ -933,6 +1026,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected u8, found i64 + | help: change the type of the numeric literal from `i64` to `u8` | LL | foo::(42_u8); @@ -943,6 +1037,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected u8, found i32 + | help: change the type of the numeric literal from `i32` to `u8` | LL | foo::(42_u8); @@ -953,6 +1048,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected u8, found i16 + | help: change the type of the numeric literal from `i16` to `u8` | LL | foo::(42_u8); @@ -963,6 +1059,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected u8, found i8 + | help: change the type of the numeric literal from `i8` to `u8` | LL | foo::(42_u8); @@ -973,6 +1070,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected u8, found f64 + | help: change the type of the numeric literal from `f64` to `u8` | LL | foo::(42u8); @@ -983,6 +1081,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected u8, found f32 + | help: change the type of the numeric literal from `f32` to `u8` | LL | foo::(42u8); @@ -993,6 +1092,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected i8, found usize + | help: change the type of the numeric literal from `usize` to `i8` | LL | foo::(42_i8); @@ -1003,6 +1103,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected i8, found u64 + | help: change the type of the numeric literal from `u64` to `i8` | LL | foo::(42_i8); @@ -1013,6 +1114,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected i8, found u32 + | help: change the type of the numeric literal from `u32` to `i8` | LL | foo::(42_i8); @@ -1023,6 +1125,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected i8, found u16 + | help: change the type of the numeric literal from `u16` to `i8` | LL | foo::(42_i8); @@ -1033,6 +1136,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected i8, found u8 + | help: change the type of the numeric literal from `u8` to `i8` | LL | foo::(42_i8); @@ -1043,6 +1147,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected i8, found isize + | help: change the type of the numeric literal from `isize` to `i8` | LL | foo::(42_i8); @@ -1053,6 +1158,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected i8, found i64 + | help: change the type of the numeric literal from `i64` to `i8` | LL | foo::(42_i8); @@ -1063,6 +1169,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected i8, found i32 + | help: change the type of the numeric literal from `i32` to `i8` | LL | foo::(42_i8); @@ -1073,6 +1180,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected i8, found i16 + | help: change the type of the numeric literal from `i16` to `i8` | LL | foo::(42_i8); @@ -1083,6 +1191,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected i8, found f64 + | help: change the type of the numeric literal from `f64` to `i8` | LL | foo::(42i8); @@ -1093,6 +1202,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected i8, found f32 + | help: change the type of the numeric literal from `f32` to `i8` | LL | foo::(42i8); @@ -1103,6 +1213,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected f64, found usize + | help: change the type of the numeric literal from `usize` to `f64` | LL | foo::(42_f64); @@ -1113,6 +1224,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected f64, found u64 + | help: change the type of the numeric literal from `u64` to `f64` | LL | foo::(42_f64); @@ -1123,6 +1235,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected f64, found u32 + | help: you can convert an `u32` to `f64`, producing the floating point representation of the integer | LL | foo::(42_u32.into()); @@ -1133,6 +1246,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected f64, found u16 + | help: you can convert an `u16` to `f64`, producing the floating point representation of the integer | LL | foo::(42_u16.into()); @@ -1143,6 +1257,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected f64, found u8 + | help: you can convert an `u8` to `f64`, producing the floating point representation of the integer | LL | foo::(42_u8.into()); @@ -1153,6 +1268,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected f64, found isize + | help: change the type of the numeric literal from `isize` to `f64` | LL | foo::(42_f64); @@ -1163,6 +1279,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected f64, found i64 + | help: change the type of the numeric literal from `i64` to `f64` | LL | foo::(42_f64); @@ -1173,6 +1290,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected f64, found i32 + | help: you can convert an `i32` to `f64`, producing the floating point representation of the integer | LL | foo::(42_i32.into()); @@ -1183,6 +1301,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected f64, found i16 + | help: you can convert an `i16` to `f64`, producing the floating point representation of the integer | LL | foo::(42_i16.into()); @@ -1193,6 +1312,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected f64, found i8 + | help: you can convert an `i8` to `f64`, producing the floating point representation of the integer | LL | foo::(42_i8.into()); @@ -1203,6 +1323,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f32); | ^^^^^^^^ expected f64, found f32 + | help: change the type of the numeric literal from `f32` to `f64` | LL | foo::(42.0_f64); @@ -1213,6 +1334,7 @@ error[E0308]: mismatched types | LL | foo::(42_usize); | ^^^^^^^^ expected f32, found usize + | help: change the type of the numeric literal from `usize` to `f32` | LL | foo::(42_f32); @@ -1223,6 +1345,7 @@ error[E0308]: mismatched types | LL | foo::(42_u64); | ^^^^^^ expected f32, found u64 + | help: change the type of the numeric literal from `u64` to `f32` | LL | foo::(42_f32); @@ -1233,6 +1356,7 @@ error[E0308]: mismatched types | LL | foo::(42_u32); | ^^^^^^ expected f32, found u32 + | help: change the type of the numeric literal from `u32` to `f32` | LL | foo::(42_f32); @@ -1243,6 +1367,7 @@ error[E0308]: mismatched types | LL | foo::(42_u16); | ^^^^^^ expected f32, found u16 + | help: you can convert an `u16` to `f32`, producing the floating point representation of the integer | LL | foo::(42_u16.into()); @@ -1253,6 +1378,7 @@ error[E0308]: mismatched types | LL | foo::(42_u8); | ^^^^^ expected f32, found u8 + | help: you can convert an `u8` to `f32`, producing the floating point representation of the integer | LL | foo::(42_u8.into()); @@ -1263,6 +1389,7 @@ error[E0308]: mismatched types | LL | foo::(42_isize); | ^^^^^^^^ expected f32, found isize + | help: change the type of the numeric literal from `isize` to `f32` | LL | foo::(42_f32); @@ -1273,6 +1400,7 @@ error[E0308]: mismatched types | LL | foo::(42_i64); | ^^^^^^ expected f32, found i64 + | help: change the type of the numeric literal from `i64` to `f32` | LL | foo::(42_f32); @@ -1283,6 +1411,7 @@ error[E0308]: mismatched types | LL | foo::(42_i32); | ^^^^^^ expected f32, found i32 + | help: change the type of the numeric literal from `i32` to `f32` | LL | foo::(42_f32); @@ -1293,6 +1422,7 @@ error[E0308]: mismatched types | LL | foo::(42_i16); | ^^^^^^ expected f32, found i16 + | help: you can convert an `i16` to `f32`, producing the floating point representation of the integer | LL | foo::(42_i16.into()); @@ -1303,6 +1433,7 @@ error[E0308]: mismatched types | LL | foo::(42_i8); | ^^^^^ expected f32, found i8 + | help: you can convert an `i8` to `f32`, producing the floating point representation of the integer | LL | foo::(42_i8.into()); @@ -1313,6 +1444,7 @@ error[E0308]: mismatched types | LL | foo::(42.0_f64); | ^^^^^^^^ expected f32, found f64 + | help: change the type of the numeric literal from `f64` to `f32` | LL | foo::(42.0_f32); diff --git a/src/test/ui/obsolete-in-place/bad.stderr b/src/test/ui/obsolete-in-place/bad.stderr index 8a731b6240b..b9aad01b292 100644 --- a/src/test/ui/obsolete-in-place/bad.stderr +++ b/src/test/ui/obsolete-in-place/bad.stderr @@ -3,6 +3,7 @@ error: unexpected token: `<-` | LL | x <- y; | ^^ + | help: if you meant to write a comparison against a negative value, add a space in between `<` and `-` | LL | x < - y; diff --git a/src/test/ui/on-unimplemented/bad-annotation.stderr b/src/test/ui/on-unimplemented/bad-annotation.stderr index 20b2169f458..ac0cf0f1f08 100644 --- a/src/test/ui/on-unimplemented/bad-annotation.stderr +++ b/src/test/ui/on-unimplemented/bad-annotation.stderr @@ -3,6 +3,7 @@ error: malformed `rustc_on_unimplemented` attribute input | LL | #[rustc_on_unimplemented] | ^^^^^^^^^^^^^^^^^^^^^^^^^ + | help: the following are the possible correct uses | LL | #[rustc_on_unimplemented(/*opt*/ message = "...", /*opt*/ label = "...", /*opt*/ note = "...")] diff --git a/src/test/ui/parenthesized-deref-suggestion.stderr b/src/test/ui/parenthesized-deref-suggestion.stderr index a16510055f5..24be32ae9eb 100644 --- a/src/test/ui/parenthesized-deref-suggestion.stderr +++ b/src/test/ui/parenthesized-deref-suggestion.stderr @@ -3,6 +3,7 @@ error[E0609]: no field `opts` on type `*const Session` | LL | (sess as *const Session).opts; | ^^^^ + | help: `(sess as *const Session)` is a raw pointer; try dereferencing it | LL | (*(sess as *const Session)).opts; diff --git a/src/test/ui/parser/associated-types-project-from-hrtb-explicit.stderr b/src/test/ui/parser/associated-types-project-from-hrtb-explicit.stderr index ada0f268a8d..7d0bb0965b6 100644 --- a/src/test/ui/parser/associated-types-project-from-hrtb-explicit.stderr +++ b/src/test/ui/parser/associated-types-project-from-hrtb-explicit.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `for` | LL | fn foo2(x: Foo<&'x isize>>::A) | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | fn foo2(x: Foo<&'x isize>>::A) diff --git a/src/test/ui/parser/bad-value-ident-false.stderr b/src/test/ui/parser/bad-value-ident-false.stderr index 9ddca101567..b59ea97e3b1 100644 --- a/src/test/ui/parser/bad-value-ident-false.stderr +++ b/src/test/ui/parser/bad-value-ident-false.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `false` | LL | fn false() { } | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | fn r#false() { } diff --git a/src/test/ui/parser/bad-value-ident-true.stderr b/src/test/ui/parser/bad-value-ident-true.stderr index ec497dbe407..12132b0856b 100644 --- a/src/test/ui/parser/bad-value-ident-true.stderr +++ b/src/test/ui/parser/bad-value-ident-true.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `true` | LL | fn true() { } | ^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | fn r#true() { } diff --git a/src/test/ui/parser/expr-as-stmt.stderr b/src/test/ui/parser/expr-as-stmt.stderr index a11209998a7..4dcc914f25d 100644 --- a/src/test/ui/parser/expr-as-stmt.stderr +++ b/src/test/ui/parser/expr-as-stmt.stderr @@ -35,6 +35,7 @@ error: expected expression, found `>` | LL | } > 0 | ^ expected expression + | help: parentheses are required to parse this as an expression | LL | (match x { diff --git a/src/test/ui/parser/issue-15980.stderr b/src/test/ui/parser/issue-15980.stderr index 879bcb2b4a1..47c275110b4 100644 --- a/src/test/ui/parser/issue-15980.stderr +++ b/src/test/ui/parser/issue-15980.stderr @@ -6,6 +6,7 @@ LL | Err(ref e) if e.kind == io::EndOfFile { LL | LL | return | ^^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | r#return diff --git a/src/test/ui/parser/issue-33418.stderr b/src/test/ui/parser/issue-33418.stderr index 660d9fd30c8..479e7bed101 100644 --- a/src/test/ui/parser/issue-33418.stderr +++ b/src/test/ui/parser/issue-33418.stderr @@ -3,6 +3,7 @@ error: negative trait bounds are not supported | LL | trait Tr: !SuperA {} | ^^^^^^^^^ negative trait bounds are not supported + | = help: remove the trait bound error: negative trait bounds are not supported @@ -10,6 +11,7 @@ error: negative trait bounds are not supported | LL | trait Tr2: SuperA + !SuperB {} | ^^^^^^^^^ negative trait bounds are not supported + | = help: remove the trait bound error: negative trait bounds are not supported @@ -17,6 +19,7 @@ error: negative trait bounds are not supported | LL | trait Tr3: !SuperA + SuperB {} | ^^^^^^^^^ negative trait bounds are not supported + | = help: remove the trait bound error: negative trait bounds are not supported @@ -26,6 +29,7 @@ LL | trait Tr4: !SuperA + SuperB | ^^^^^^^^^ LL | + !SuperC + SuperD {} | ^^^^^^^^^ negative trait bounds are not supported + | = help: remove the trait bounds error: negative trait bounds are not supported @@ -35,6 +39,7 @@ LL | trait Tr5: !SuperA | ^^^^^^^^^ LL | + !SuperB {} | ^^^^^^^^^ negative trait bounds are not supported + | = help: remove the trait bounds error: aborting due to 5 previous errors diff --git a/src/test/ui/parser/issue-62895.stderr b/src/test/ui/parser/issue-62895.stderr index 39ce980964b..14869e9c8f5 100644 --- a/src/test/ui/parser/issue-62895.stderr +++ b/src/test/ui/parser/issue-62895.stderr @@ -15,6 +15,7 @@ error: missing `fn` for function definition | LL | pub g() -> is | ^^^^ + | help: add `fn` here to parse `g` as a public function | LL | pub fn g() -> is diff --git a/src/test/ui/parser/issue-62973.stderr b/src/test/ui/parser/issue-62973.stderr index 141076bf6b6..e73776dc7b4 100644 --- a/src/test/ui/parser/issue-62973.stderr +++ b/src/test/ui/parser/issue-62973.stderr @@ -25,6 +25,7 @@ LL | fn p() { match s { v, E { [) {) } LL | | LL | | | |_^ + | help: surround the struct literal with parentheses | LL | fn p() { match (s { v, E { [) {) } diff --git a/src/test/ui/parser/keyword-abstract.stderr b/src/test/ui/parser/keyword-abstract.stderr index eb2c810099e..b355b3a708d 100644 --- a/src/test/ui/parser/keyword-abstract.stderr +++ b/src/test/ui/parser/keyword-abstract.stderr @@ -3,6 +3,7 @@ error: expected identifier, found reserved keyword `abstract` | LL | let abstract = (); | ^^^^^^^^ expected identifier, found reserved keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#abstract = (); diff --git a/src/test/ui/parser/keyword-as-as-identifier.stderr b/src/test/ui/parser/keyword-as-as-identifier.stderr index 5648652be9b..dea4afd5c0a 100644 --- a/src/test/ui/parser/keyword-as-as-identifier.stderr +++ b/src/test/ui/parser/keyword-as-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `as` | LL | let as = "foo"; | ^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#as = "foo"; diff --git a/src/test/ui/parser/keyword-break-as-identifier.stderr b/src/test/ui/parser/keyword-break-as-identifier.stderr index 820193db70b..db05f3956a2 100644 --- a/src/test/ui/parser/keyword-break-as-identifier.stderr +++ b/src/test/ui/parser/keyword-break-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `break` | LL | let break = "foo"; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#break = "foo"; diff --git a/src/test/ui/parser/keyword-const-as-identifier.stderr b/src/test/ui/parser/keyword-const-as-identifier.stderr index 95b536c99c7..45c129960ec 100644 --- a/src/test/ui/parser/keyword-const-as-identifier.stderr +++ b/src/test/ui/parser/keyword-const-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `const` | LL | let const = "foo"; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#const = "foo"; diff --git a/src/test/ui/parser/keyword-continue-as-identifier.stderr b/src/test/ui/parser/keyword-continue-as-identifier.stderr index 6b24422a555..2ec4b28c94e 100644 --- a/src/test/ui/parser/keyword-continue-as-identifier.stderr +++ b/src/test/ui/parser/keyword-continue-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `continue` | LL | let continue = "foo"; | ^^^^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#continue = "foo"; diff --git a/src/test/ui/parser/keyword-else-as-identifier.stderr b/src/test/ui/parser/keyword-else-as-identifier.stderr index f28635cd08c..b622806e916 100644 --- a/src/test/ui/parser/keyword-else-as-identifier.stderr +++ b/src/test/ui/parser/keyword-else-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `else` | LL | let else = "foo"; | ^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#else = "foo"; diff --git a/src/test/ui/parser/keyword-enum-as-identifier.stderr b/src/test/ui/parser/keyword-enum-as-identifier.stderr index fc54dce1b68..0f3fa3fb624 100644 --- a/src/test/ui/parser/keyword-enum-as-identifier.stderr +++ b/src/test/ui/parser/keyword-enum-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `enum` | LL | let enum = "foo"; | ^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#enum = "foo"; diff --git a/src/test/ui/parser/keyword-final.stderr b/src/test/ui/parser/keyword-final.stderr index 291710d05cb..c74e3101729 100644 --- a/src/test/ui/parser/keyword-final.stderr +++ b/src/test/ui/parser/keyword-final.stderr @@ -3,6 +3,7 @@ error: expected identifier, found reserved keyword `final` | LL | let final = (); | ^^^^^ expected identifier, found reserved keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#final = (); diff --git a/src/test/ui/parser/keyword-fn-as-identifier.stderr b/src/test/ui/parser/keyword-fn-as-identifier.stderr index 692f195b288..3219eaf24f9 100644 --- a/src/test/ui/parser/keyword-fn-as-identifier.stderr +++ b/src/test/ui/parser/keyword-fn-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `fn` | LL | let fn = "foo"; | ^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#fn = "foo"; diff --git a/src/test/ui/parser/keyword-for-as-identifier.stderr b/src/test/ui/parser/keyword-for-as-identifier.stderr index bcaf421286e..30974af7424 100644 --- a/src/test/ui/parser/keyword-for-as-identifier.stderr +++ b/src/test/ui/parser/keyword-for-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `for` | LL | let for = "foo"; | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#for = "foo"; diff --git a/src/test/ui/parser/keyword-if-as-identifier.stderr b/src/test/ui/parser/keyword-if-as-identifier.stderr index 43fbcd7148a..a72030befb3 100644 --- a/src/test/ui/parser/keyword-if-as-identifier.stderr +++ b/src/test/ui/parser/keyword-if-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `if` | LL | let if = "foo"; | ^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#if = "foo"; diff --git a/src/test/ui/parser/keyword-impl-as-identifier.stderr b/src/test/ui/parser/keyword-impl-as-identifier.stderr index 01886eb45cb..e51c60ed494 100644 --- a/src/test/ui/parser/keyword-impl-as-identifier.stderr +++ b/src/test/ui/parser/keyword-impl-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `impl` | LL | let impl = "foo"; | ^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#impl = "foo"; diff --git a/src/test/ui/parser/keyword-let-as-identifier.stderr b/src/test/ui/parser/keyword-let-as-identifier.stderr index f6c39077be2..d580b451809 100644 --- a/src/test/ui/parser/keyword-let-as-identifier.stderr +++ b/src/test/ui/parser/keyword-let-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `let` | LL | let let = "foo"; | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#let = "foo"; diff --git a/src/test/ui/parser/keyword-loop-as-identifier.stderr b/src/test/ui/parser/keyword-loop-as-identifier.stderr index f0c282faa29..15c008da353 100644 --- a/src/test/ui/parser/keyword-loop-as-identifier.stderr +++ b/src/test/ui/parser/keyword-loop-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `loop` | LL | let loop = "foo"; | ^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#loop = "foo"; diff --git a/src/test/ui/parser/keyword-match-as-identifier.stderr b/src/test/ui/parser/keyword-match-as-identifier.stderr index f1f4397d194..5ba63965c87 100644 --- a/src/test/ui/parser/keyword-match-as-identifier.stderr +++ b/src/test/ui/parser/keyword-match-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `match` | LL | let match = "foo"; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#match = "foo"; diff --git a/src/test/ui/parser/keyword-mod-as-identifier.stderr b/src/test/ui/parser/keyword-mod-as-identifier.stderr index 65ae3baa8c2..7fb1bda3fb0 100644 --- a/src/test/ui/parser/keyword-mod-as-identifier.stderr +++ b/src/test/ui/parser/keyword-mod-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `mod` | LL | let mod = "foo"; | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#mod = "foo"; diff --git a/src/test/ui/parser/keyword-move-as-identifier.stderr b/src/test/ui/parser/keyword-move-as-identifier.stderr index 216f7c931ee..9721c88cb16 100644 --- a/src/test/ui/parser/keyword-move-as-identifier.stderr +++ b/src/test/ui/parser/keyword-move-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `move` | LL | let move = "foo"; | ^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#move = "foo"; diff --git a/src/test/ui/parser/keyword-override.stderr b/src/test/ui/parser/keyword-override.stderr index 3183fa510c2..8bbc6fc6547 100644 --- a/src/test/ui/parser/keyword-override.stderr +++ b/src/test/ui/parser/keyword-override.stderr @@ -3,6 +3,7 @@ error: expected identifier, found reserved keyword `override` | LL | let override = (); | ^^^^^^^^ expected identifier, found reserved keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#override = (); diff --git a/src/test/ui/parser/keyword-pub-as-identifier.stderr b/src/test/ui/parser/keyword-pub-as-identifier.stderr index f81078b12bd..10ff53e2916 100644 --- a/src/test/ui/parser/keyword-pub-as-identifier.stderr +++ b/src/test/ui/parser/keyword-pub-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `pub` | LL | let pub = "foo"; | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#pub = "foo"; diff --git a/src/test/ui/parser/keyword-return-as-identifier.stderr b/src/test/ui/parser/keyword-return-as-identifier.stderr index 8cc4d12fbbb..5b5f2b7ed54 100644 --- a/src/test/ui/parser/keyword-return-as-identifier.stderr +++ b/src/test/ui/parser/keyword-return-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `return` | LL | let return = "foo"; | ^^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#return = "foo"; diff --git a/src/test/ui/parser/keyword-static-as-identifier.stderr b/src/test/ui/parser/keyword-static-as-identifier.stderr index 7d22bc97d66..81aeb9e37ab 100644 --- a/src/test/ui/parser/keyword-static-as-identifier.stderr +++ b/src/test/ui/parser/keyword-static-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `static` | LL | let static = "foo"; | ^^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#static = "foo"; diff --git a/src/test/ui/parser/keyword-struct-as-identifier.stderr b/src/test/ui/parser/keyword-struct-as-identifier.stderr index b109fa6247d..1b287b60197 100644 --- a/src/test/ui/parser/keyword-struct-as-identifier.stderr +++ b/src/test/ui/parser/keyword-struct-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `struct` | LL | let struct = "foo"; | ^^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#struct = "foo"; diff --git a/src/test/ui/parser/keyword-trait-as-identifier.stderr b/src/test/ui/parser/keyword-trait-as-identifier.stderr index ccc675cdb3a..c3d4d61dbb7 100644 --- a/src/test/ui/parser/keyword-trait-as-identifier.stderr +++ b/src/test/ui/parser/keyword-trait-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `trait` | LL | let trait = "foo"; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#trait = "foo"; diff --git a/src/test/ui/parser/keyword-try-as-identifier-edition2018.stderr b/src/test/ui/parser/keyword-try-as-identifier-edition2018.stderr index f71b889a30d..fcd717d6e67 100644 --- a/src/test/ui/parser/keyword-try-as-identifier-edition2018.stderr +++ b/src/test/ui/parser/keyword-try-as-identifier-edition2018.stderr @@ -3,6 +3,7 @@ error: expected identifier, found reserved keyword `try` | LL | let try = "foo"; | ^^^ expected identifier, found reserved keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#try = "foo"; diff --git a/src/test/ui/parser/keyword-type-as-identifier.stderr b/src/test/ui/parser/keyword-type-as-identifier.stderr index 88099d949a8..dfe1958e78f 100644 --- a/src/test/ui/parser/keyword-type-as-identifier.stderr +++ b/src/test/ui/parser/keyword-type-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `type` | LL | let type = "foo"; | ^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#type = "foo"; diff --git a/src/test/ui/parser/keyword-typeof.stderr b/src/test/ui/parser/keyword-typeof.stderr index 4a1b63d5c93..7cef6de0cee 100644 --- a/src/test/ui/parser/keyword-typeof.stderr +++ b/src/test/ui/parser/keyword-typeof.stderr @@ -3,6 +3,7 @@ error: expected identifier, found reserved keyword `typeof` | LL | let typeof = (); | ^^^^^^ expected identifier, found reserved keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#typeof = (); diff --git a/src/test/ui/parser/keyword-unsafe-as-identifier.stderr b/src/test/ui/parser/keyword-unsafe-as-identifier.stderr index 205bb81df40..d714a99dac4 100644 --- a/src/test/ui/parser/keyword-unsafe-as-identifier.stderr +++ b/src/test/ui/parser/keyword-unsafe-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `unsafe` | LL | let unsafe = "foo"; | ^^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#unsafe = "foo"; diff --git a/src/test/ui/parser/keyword-use-as-identifier.stderr b/src/test/ui/parser/keyword-use-as-identifier.stderr index 85a0492f573..30a6c5b16a3 100644 --- a/src/test/ui/parser/keyword-use-as-identifier.stderr +++ b/src/test/ui/parser/keyword-use-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `use` | LL | let use = "foo"; | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#use = "foo"; diff --git a/src/test/ui/parser/keyword-where-as-identifier.stderr b/src/test/ui/parser/keyword-where-as-identifier.stderr index b8b85069076..38d734ab812 100644 --- a/src/test/ui/parser/keyword-where-as-identifier.stderr +++ b/src/test/ui/parser/keyword-where-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `where` | LL | let where = "foo"; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#where = "foo"; diff --git a/src/test/ui/parser/keyword-while-as-identifier.stderr b/src/test/ui/parser/keyword-while-as-identifier.stderr index bb0c0ac668a..22b5454add8 100644 --- a/src/test/ui/parser/keyword-while-as-identifier.stderr +++ b/src/test/ui/parser/keyword-while-as-identifier.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `while` | LL | let while = "foo"; | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#while = "foo"; diff --git a/src/test/ui/parser/keyword.stderr b/src/test/ui/parser/keyword.stderr index 262467b6907..c179f4ec560 100644 --- a/src/test/ui/parser/keyword.stderr +++ b/src/test/ui/parser/keyword.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `break` | LL | pub mod break { | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | pub mod r#break { diff --git a/src/test/ui/parser/lex-bad-char-literals-2.stderr b/src/test/ui/parser/lex-bad-char-literals-2.stderr index 5653d4ea672..3a545ee2826 100644 --- a/src/test/ui/parser/lex-bad-char-literals-2.stderr +++ b/src/test/ui/parser/lex-bad-char-literals-2.stderr @@ -3,6 +3,7 @@ error: character literal may only contain one codepoint | LL | 'nope' | ^^^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | "nope" diff --git a/src/test/ui/parser/lex-bad-char-literals-3.stderr b/src/test/ui/parser/lex-bad-char-literals-3.stderr index 6462a3c0e57..ec661ee2a60 100644 --- a/src/test/ui/parser/lex-bad-char-literals-3.stderr +++ b/src/test/ui/parser/lex-bad-char-literals-3.stderr @@ -3,6 +3,7 @@ error: character literal may only contain one codepoint | LL | static c: char = '●●'; | ^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | static c: char = "●●"; @@ -13,6 +14,7 @@ error: character literal may only contain one codepoint | LL | let ch: &str = '●●'; | ^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | let ch: &str = "●●"; diff --git a/src/test/ui/parser/lex-bad-char-literals-5.stderr b/src/test/ui/parser/lex-bad-char-literals-5.stderr index 97c6338820d..334165a962a 100644 --- a/src/test/ui/parser/lex-bad-char-literals-5.stderr +++ b/src/test/ui/parser/lex-bad-char-literals-5.stderr @@ -3,6 +3,7 @@ error: character literal may only contain one codepoint | LL | static c: char = '\x10\x10'; | ^^^^^^^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | static c: char = "\x10\x10"; @@ -13,6 +14,7 @@ error: character literal may only contain one codepoint | LL | let ch: &str = '\x10\x10'; | ^^^^^^^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | let ch: &str = "\x10\x10"; diff --git a/src/test/ui/parser/lex-bad-char-literals-6.stderr b/src/test/ui/parser/lex-bad-char-literals-6.stderr index a7bbe05e94b..662cf2657e7 100644 --- a/src/test/ui/parser/lex-bad-char-literals-6.stderr +++ b/src/test/ui/parser/lex-bad-char-literals-6.stderr @@ -3,6 +3,7 @@ error: character literal may only contain one codepoint | LL | let x: &str = 'ab'; | ^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | let x: &str = "ab"; @@ -13,6 +14,7 @@ error: character literal may only contain one codepoint | LL | let y: char = 'cd'; | ^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | let y: char = "cd"; @@ -23,6 +25,7 @@ error: character literal may only contain one codepoint | LL | let z = 'ef'; | ^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | let z = "ef"; diff --git a/src/test/ui/parser/macro-keyword.stderr b/src/test/ui/parser/macro-keyword.stderr index f74c8aa57e7..9fe95c3fd3d 100644 --- a/src/test/ui/parser/macro-keyword.stderr +++ b/src/test/ui/parser/macro-keyword.stderr @@ -3,6 +3,7 @@ error: expected identifier, found reserved keyword `macro` | LL | fn macro() { | ^^^^^ expected identifier, found reserved keyword + | help: you can escape reserved keywords to use them as identifiers | LL | fn r#macro() { diff --git a/src/test/ui/parser/macros-no-semicolon-items.stderr b/src/test/ui/parser/macros-no-semicolon-items.stderr index 5276aa6f5e9..980ceeed8c6 100644 --- a/src/test/ui/parser/macros-no-semicolon-items.stderr +++ b/src/test/ui/parser/macros-no-semicolon-items.stderr @@ -3,6 +3,7 @@ error: macros that expand to items must be delimited with braces or followed by | LL | macro_rules! foo() | ^^ + | help: change the delimiters to curly braces | LL | macro_rules! foo {} @@ -22,6 +23,7 @@ LL | | blah LL | | blah LL | | ) | |_^ + | help: change the delimiters to curly braces | LL | bar! { diff --git a/src/test/ui/parser/match-arrows-block-then-binop.stderr b/src/test/ui/parser/match-arrows-block-then-binop.stderr index bb7df30783a..3bc451e84e6 100644 --- a/src/test/ui/parser/match-arrows-block-then-binop.stderr +++ b/src/test/ui/parser/match-arrows-block-then-binop.stderr @@ -3,6 +3,7 @@ error: expected pattern, found `+` | LL | } + 5 | ^ expected pattern + | help: parentheses are required to parse this as an expression | LL | 0 => ({ diff --git a/src/test/ui/parser/mut-patterns.stderr b/src/test/ui/parser/mut-patterns.stderr index b1cf99189f1..a0e290a834d 100644 --- a/src/test/ui/parser/mut-patterns.stderr +++ b/src/test/ui/parser/mut-patterns.stderr @@ -47,6 +47,7 @@ error: expected identifier, found reserved keyword `yield` | LL | let mut mut yield(become, await) = r#yield(0, 0); | ^^^^^ expected identifier, found reserved keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let mut mut r#yield(become, await) = r#yield(0, 0); @@ -57,6 +58,7 @@ error: expected identifier, found reserved keyword `become` | LL | let mut mut yield(become, await) = r#yield(0, 0); | ^^^^^^ expected identifier, found reserved keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let mut mut yield(r#become, await) = r#yield(0, 0); @@ -67,6 +69,7 @@ error: expected identifier, found keyword `await` | LL | let mut mut yield(become, await) = r#yield(0, 0); | ^^^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let mut mut yield(become, r#await) = r#yield(0, 0); diff --git a/src/test/ui/parser/range_inclusive_dotdotdot.stderr b/src/test/ui/parser/range_inclusive_dotdotdot.stderr index f877c5c6f79..f129e1e372f 100644 --- a/src/test/ui/parser/range_inclusive_dotdotdot.stderr +++ b/src/test/ui/parser/range_inclusive_dotdotdot.stderr @@ -3,6 +3,7 @@ error: unexpected token: `...` | LL | return ...1; | ^^^ + | help: use `..` for an exclusive range | LL | return ..1; @@ -17,6 +18,7 @@ error: unexpected token: `...` | LL | let x = ...0; | ^^^ + | help: use `..` for an exclusive range | LL | let x = ..0; @@ -31,6 +33,7 @@ error: unexpected token: `...` | LL | let x = 5...5; | ^^^ + | help: use `..` for an exclusive range | LL | let x = 5..5; @@ -45,6 +48,7 @@ error: unexpected token: `...` | LL | for _ in 0...1 {} | ^^^ + | help: use `..` for an exclusive range | LL | for _ in 0..1 {} diff --git a/src/test/ui/parser/recover-from-homoglyph.stderr b/src/test/ui/parser/recover-from-homoglyph.stderr index 424d492b7ba..ec7d041647a 100644 --- a/src/test/ui/parser/recover-from-homoglyph.stderr +++ b/src/test/ui/parser/recover-from-homoglyph.stderr @@ -3,6 +3,7 @@ error: unknown start of token: \u{37e} | LL | println!(""); | ^ + | help: Unicode character ';' (Greek Question Mark) looks like ';' (Semicolon), but it is not | LL | println!(""); diff --git a/src/test/ui/parser/removed-syntax-field-let.stderr b/src/test/ui/parser/removed-syntax-field-let.stderr index d6e38be4869..0d15151b7d4 100644 --- a/src/test/ui/parser/removed-syntax-field-let.stderr +++ b/src/test/ui/parser/removed-syntax-field-let.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `let` | LL | let foo: (), | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | r#let foo: (), diff --git a/src/test/ui/parser/require-parens-for-chained-comparison.stderr b/src/test/ui/parser/require-parens-for-chained-comparison.stderr index 5aa37a40cbd..85478dcd1dc 100644 --- a/src/test/ui/parser/require-parens-for-chained-comparison.stderr +++ b/src/test/ui/parser/require-parens-for-chained-comparison.stderr @@ -15,6 +15,7 @@ error: chained comparison operators require parentheses | LL | f(); | ^^^ + | help: use `::<...>` instead of `<...>` to specify type arguments | LL | f::(); @@ -25,6 +26,7 @@ error: chained comparison operators require parentheses | LL | f, Option>>(1, 2); | ^^^^^^^^ + | help: use `::<...>` instead of `<...>` to specify type arguments | LL | f::, Option>>(1, 2); diff --git a/src/test/ui/parser/struct-literal-in-for.stderr b/src/test/ui/parser/struct-literal-in-for.stderr index 29af72a5d23..2e59914864a 100644 --- a/src/test/ui/parser/struct-literal-in-for.stderr +++ b/src/test/ui/parser/struct-literal-in-for.stderr @@ -6,6 +6,7 @@ LL | for x in Foo { LL | | x: 3 LL | | }.hi() { | |_____^ + | help: surround the struct literal with parentheses | LL | for x in (Foo { diff --git a/src/test/ui/parser/struct-literal-in-if.stderr b/src/test/ui/parser/struct-literal-in-if.stderr index e76c1cb45dd..7a64a42e3c8 100644 --- a/src/test/ui/parser/struct-literal-in-if.stderr +++ b/src/test/ui/parser/struct-literal-in-if.stderr @@ -6,6 +6,7 @@ LL | if Foo { LL | | x: 3 LL | | }.hi() { | |_____^ + | help: surround the struct literal with parentheses | LL | if (Foo { diff --git a/src/test/ui/parser/struct-literal-in-match-discriminant.stderr b/src/test/ui/parser/struct-literal-in-match-discriminant.stderr index 95b0882b7ae..98077761e01 100644 --- a/src/test/ui/parser/struct-literal-in-match-discriminant.stderr +++ b/src/test/ui/parser/struct-literal-in-match-discriminant.stderr @@ -6,6 +6,7 @@ LL | match Foo { LL | | x: 3 LL | | } { | |_____^ + | help: surround the struct literal with parentheses | LL | match (Foo { diff --git a/src/test/ui/parser/struct-literal-in-while.stderr b/src/test/ui/parser/struct-literal-in-while.stderr index acd31b477dc..a14df3a220e 100644 --- a/src/test/ui/parser/struct-literal-in-while.stderr +++ b/src/test/ui/parser/struct-literal-in-while.stderr @@ -6,6 +6,7 @@ LL | while Foo { LL | | x: 3 LL | | }.hi() { | |_____^ + | help: surround the struct literal with parentheses | LL | while (Foo { diff --git a/src/test/ui/parser/struct-literal-restrictions-in-lamda.stderr b/src/test/ui/parser/struct-literal-restrictions-in-lamda.stderr index 24078074161..38f4a986e12 100644 --- a/src/test/ui/parser/struct-literal-restrictions-in-lamda.stderr +++ b/src/test/ui/parser/struct-literal-restrictions-in-lamda.stderr @@ -6,6 +6,7 @@ LL | while || Foo { LL | | x: 3 LL | | }.hi() { | |_____^ + | help: surround the struct literal with parentheses | LL | while || (Foo { diff --git a/src/test/ui/parser/unicode-chars.stderr b/src/test/ui/parser/unicode-chars.stderr index 76bf6627a4b..4e14eda8f2b 100644 --- a/src/test/ui/parser/unicode-chars.stderr +++ b/src/test/ui/parser/unicode-chars.stderr @@ -3,6 +3,7 @@ error: unknown start of token: \u{37e} | LL | let y = 0; | ^ + | help: Unicode character ';' (Greek Question Mark) looks like ';' (Semicolon), but it is not | LL | let y = 0; diff --git a/src/test/ui/parser/unicode-quote-chars.stderr b/src/test/ui/parser/unicode-quote-chars.stderr index 84e45ecd873..4b0cb96ed21 100644 --- a/src/test/ui/parser/unicode-quote-chars.stderr +++ b/src/test/ui/parser/unicode-quote-chars.stderr @@ -3,6 +3,7 @@ error: unknown start of token: \u{201c} | LL | println!(“hello world”); | ^ + | help: Unicode characters '“' (Left Double Quotation Mark) and '”' (Right Double Quotation Mark) look like '"' (Quotation Mark), but are not | LL | println!("hello world"); @@ -13,6 +14,7 @@ error: unknown start of token: \u{201d} | LL | println!(“hello world”); | ^ + | help: Unicode character '”' (Right Double Quotation Mark) looks like '"' (Quotation Mark), but it is not | LL | println!(“hello world"); diff --git a/src/test/ui/parser/use-as-where-use-ends-with-mod-sep.stderr b/src/test/ui/parser/use-as-where-use-ends-with-mod-sep.stderr index 07644002543..c73e17d2fc9 100644 --- a/src/test/ui/parser/use-as-where-use-ends-with-mod-sep.stderr +++ b/src/test/ui/parser/use-as-where-use-ends-with-mod-sep.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `as` | LL | use std::any:: as foo; | ^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | use std::any:: r#as foo; diff --git a/src/test/ui/placement-syntax.stderr b/src/test/ui/placement-syntax.stderr index e26931e60d8..1a76f7c222f 100644 --- a/src/test/ui/placement-syntax.stderr +++ b/src/test/ui/placement-syntax.stderr @@ -3,6 +3,7 @@ error: unexpected token: `<-` | LL | if x<-1 { | ^^ + | help: if you meant to write a comparison against a negative value, add a space in between `<` and `-` | LL | if x< -1 { diff --git a/src/test/ui/pptypedef.stderr b/src/test/ui/pptypedef.stderr index dc4b3ce370c..0886622247a 100644 --- a/src/test/ui/pptypedef.stderr +++ b/src/test/ui/pptypedef.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | let_in(3u32, |i| { assert!(i == 3i32); }); | ^^^^ expected u32, found i32 + | help: change the type of the numeric literal from `i32` to `u32` | LL | let_in(3u32, |i| { assert!(i == 3u32); }); @@ -13,6 +14,7 @@ error[E0308]: mismatched types | LL | let_in(3i32, |i| { assert!(i == 3u32); }); | ^^^^ expected i32, found u32 + | help: change the type of the numeric literal from `u32` to `i32` | LL | let_in(3i32, |i| { assert!(i == 3i32); }); diff --git a/src/test/ui/privacy/privacy-ns1.stderr b/src/test/ui/privacy/privacy-ns1.stderr index 8ffc12c31cb..16da57a78e0 100644 --- a/src/test/ui/privacy/privacy-ns1.stderr +++ b/src/test/ui/privacy/privacy-ns1.stderr @@ -3,6 +3,7 @@ error[E0423]: expected function, found trait `Bar` | LL | Bar(); | ^^^ + | help: a unit struct with a similar name exists | LL | Baz(); @@ -21,6 +22,7 @@ error[E0573]: expected type, found function `Bar` | LL | let _x: Box; | ^^^ + | help: a struct with a similar name exists | LL | let _x: Box; @@ -39,6 +41,7 @@ error[E0425]: cannot find function `Bar` in this scope | LL | Bar(); | ^^^ + | help: a unit struct with a similar name exists | LL | Baz(); @@ -57,6 +60,7 @@ error[E0412]: cannot find type `Bar` in this scope | LL | let _x: Box; | ^^^ + | help: a struct with a similar name exists | LL | let _x: Box; diff --git a/src/test/ui/privacy/privacy-ns2.stderr b/src/test/ui/privacy/privacy-ns2.stderr index 13057a899f3..f0d5da68685 100644 --- a/src/test/ui/privacy/privacy-ns2.stderr +++ b/src/test/ui/privacy/privacy-ns2.stderr @@ -3,6 +3,7 @@ error[E0423]: expected function, found trait `Bar` | LL | Bar(); | ^^^ not a function + | help: possible better candidates are found in other modules, you can import them into scope | LL | use foo1::Bar; @@ -17,6 +18,7 @@ error[E0423]: expected function, found trait `Bar` | LL | Bar(); | ^^^ + | help: a unit struct with a similar name exists | LL | Baz(); @@ -35,6 +37,7 @@ error[E0573]: expected type, found function `Bar` | LL | let _x : Box; | ^^^ not a type + | help: possible better candidates are found in other modules, you can import them into scope | LL | use foo1::Bar; @@ -49,6 +52,7 @@ error[E0573]: expected type, found function `Bar` | LL | let _x: Box; | ^^^ + | help: a struct with a similar name exists | LL | let _x: Box; diff --git a/src/test/ui/proc-macro/mixed-site-span.stderr b/src/test/ui/proc-macro/mixed-site-span.stderr index 475e3e0ca35..54d10fe0d90 100644 --- a/src/test/ui/proc-macro/mixed-site-span.stderr +++ b/src/test/ui/proc-macro/mixed-site-span.stderr @@ -38,6 +38,7 @@ LL | | } | LL | pass_dollar_crate!(); | --------------------- in this macro invocation + | help: possible candidate is found in another module, you can import it into scope | LL | use ItemUse; diff --git a/src/test/ui/pub/pub-ident-fn-2.stderr b/src/test/ui/pub/pub-ident-fn-2.stderr index 69b273df031..c44a5961565 100644 --- a/src/test/ui/pub/pub-ident-fn-2.stderr +++ b/src/test/ui/pub/pub-ident-fn-2.stderr @@ -3,6 +3,7 @@ error: missing `fn` for function definition | LL | pub foo(s: usize) { bar() } | ^ + | help: add `fn` here to parse `foo` as a public function | LL | pub fn foo(s: usize) { bar() } diff --git a/src/test/ui/pub/pub-ident-fn-with-lifetime-2.stderr b/src/test/ui/pub/pub-ident-fn-with-lifetime-2.stderr index c403774df8e..0df6c00a316 100644 --- a/src/test/ui/pub/pub-ident-fn-with-lifetime-2.stderr +++ b/src/test/ui/pub/pub-ident-fn-with-lifetime-2.stderr @@ -3,6 +3,7 @@ error: missing `fn` for method definition | LL | pub bar<'a>(&self, _s: &'a usize) -> bool { true } | ^^^ + | help: add `fn` here to parse `bar` as a public method | LL | pub fn bar<'a>(&self, _s: &'a usize) -> bool { true } diff --git a/src/test/ui/pub/pub-ident-fn-with-lifetime.stderr b/src/test/ui/pub/pub-ident-fn-with-lifetime.stderr index 85823809640..90c78141adb 100644 --- a/src/test/ui/pub/pub-ident-fn-with-lifetime.stderr +++ b/src/test/ui/pub/pub-ident-fn-with-lifetime.stderr @@ -3,6 +3,7 @@ error: missing `fn` for function definition | LL | pub foo<'a>(_s: &'a usize) -> bool { true } | ^^^ + | help: add `fn` here to parse `foo` as a public function | LL | pub fn foo<'a>(_s: &'a usize) -> bool { true } diff --git a/src/test/ui/pub/pub-ident-fn.stderr b/src/test/ui/pub/pub-ident-fn.stderr index b5ab88b8ccf..928f62133a9 100644 --- a/src/test/ui/pub/pub-ident-fn.stderr +++ b/src/test/ui/pub/pub-ident-fn.stderr @@ -3,6 +3,7 @@ error: missing `fn` for function definition | LL | pub foo(_s: usize) -> bool { true } | ^^^ + | help: add `fn` here to parse `foo` as a public function | LL | pub fn foo(_s: usize) -> bool { true } diff --git a/src/test/ui/pub/pub-ident-struct-with-lifetime.stderr b/src/test/ui/pub/pub-ident-struct-with-lifetime.stderr index 2bbcf5dfff0..79597c54e68 100644 --- a/src/test/ui/pub/pub-ident-struct-with-lifetime.stderr +++ b/src/test/ui/pub/pub-ident-struct-with-lifetime.stderr @@ -3,6 +3,7 @@ error: missing `struct` for struct definition | LL | pub S<'a> { | ^ + | help: add `struct` here to parse `S` as a public struct | LL | pub struct S<'a> { diff --git a/src/test/ui/pub/pub-ident-struct.stderr b/src/test/ui/pub/pub-ident-struct.stderr index a9f2f89edd9..efd7d1fe76a 100644 --- a/src/test/ui/pub/pub-ident-struct.stderr +++ b/src/test/ui/pub/pub-ident-struct.stderr @@ -3,6 +3,7 @@ error: missing `struct` for struct definition | LL | pub S { | ^ + | help: add `struct` here to parse `S` as a public struct | LL | pub struct S { diff --git a/src/test/ui/repeat_count.stderr b/src/test/ui/repeat_count.stderr index df73ac0b182..aae79dfbb3f 100644 --- a/src/test/ui/repeat_count.stderr +++ b/src/test/ui/repeat_count.stderr @@ -42,6 +42,7 @@ error[E0308]: mismatched types | LL | let f = [0; -4_isize]; | ^^^^^^^^ expected usize, found isize + | help: you can convert an `isize` to `usize` and panic if the converted value wouldn't fit | LL | let f = [0; (-4_isize).try_into().unwrap()]; @@ -52,6 +53,7 @@ error[E0308]: mismatched types | LL | let f = [0_usize; -1_isize]; | ^^^^^^^^ expected usize, found isize + | help: you can convert an `isize` to `usize` and panic if the converted value wouldn't fit | LL | let f = [0_usize; (-1_isize).try_into().unwrap()]; diff --git a/src/test/ui/reserved/reserved-become.stderr b/src/test/ui/reserved/reserved-become.stderr index 3ce9fb33c28..47e5b803970 100644 --- a/src/test/ui/reserved/reserved-become.stderr +++ b/src/test/ui/reserved/reserved-become.stderr @@ -3,6 +3,7 @@ error: expected identifier, found reserved keyword `become` | LL | let become = 0; | ^^^^^^ expected identifier, found reserved keyword + | help: you can escape reserved keywords to use them as identifiers | LL | let r#become = 0; diff --git a/src/test/ui/resolve/enums-are-namespaced-xc.stderr b/src/test/ui/resolve/enums-are-namespaced-xc.stderr index d2209236a42..092051ed874 100644 --- a/src/test/ui/resolve/enums-are-namespaced-xc.stderr +++ b/src/test/ui/resolve/enums-are-namespaced-xc.stderr @@ -3,6 +3,7 @@ error[E0425]: cannot find value `A` in crate `namespaced_enums` | LL | let _ = namespaced_enums::A; | ^ not found in `namespaced_enums` + | help: possible candidate is found in another module, you can import it into scope | LL | use namespaced_enums::Foo::A; @@ -13,6 +14,7 @@ error[E0425]: cannot find function `B` in crate `namespaced_enums` | LL | let _ = namespaced_enums::B(10); | ^ not found in `namespaced_enums` + | help: possible candidate is found in another module, you can import it into scope | LL | use namespaced_enums::Foo::B; @@ -23,6 +25,7 @@ error[E0422]: cannot find struct, variant or union type `C` in crate `namespaced | LL | let _ = namespaced_enums::C { a: 10 }; | ^ not found in `namespaced_enums` + | help: possible candidate is found in another module, you can import it into scope | LL | use namespaced_enums::Foo::C; diff --git a/src/test/ui/resolve/issue-16058.stderr b/src/test/ui/resolve/issue-16058.stderr index 9766f8f1412..31f4998bd83 100644 --- a/src/test/ui/resolve/issue-16058.stderr +++ b/src/test/ui/resolve/issue-16058.stderr @@ -3,6 +3,7 @@ error[E0574]: expected struct, variant or union type, found enum `Result` | LL | Result { | ^^^^^^ not a struct, variant or union type + | help: possible better candidates are found in other modules, you can import them into scope | LL | use std::fmt::Result; diff --git a/src/test/ui/resolve/issue-17518.stderr b/src/test/ui/resolve/issue-17518.stderr index 057aac25234..6098d4f4901 100644 --- a/src/test/ui/resolve/issue-17518.stderr +++ b/src/test/ui/resolve/issue-17518.stderr @@ -3,6 +3,7 @@ error[E0422]: cannot find struct, variant or union type `E` in this scope | LL | E { name: "foobar" }; | ^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use SomeEnum::E; diff --git a/src/test/ui/resolve/issue-21221-1.stderr b/src/test/ui/resolve/issue-21221-1.stderr index 513e02f74e3..27fd612faca 100644 --- a/src/test/ui/resolve/issue-21221-1.stderr +++ b/src/test/ui/resolve/issue-21221-1.stderr @@ -3,6 +3,7 @@ error[E0405]: cannot find trait `Mul` in this scope | LL | impl Mul for Foo { | ^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use mul1::Mul; @@ -17,6 +18,7 @@ error[E0412]: cannot find type `Mul` in this scope | LL | fn getMul() -> Mul { | ^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use mul1::Mul; @@ -40,6 +42,7 @@ error[E0405]: cannot find trait `Div` in this scope | LL | impl Div for Foo { | ^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use std::ops::Div; diff --git a/src/test/ui/resolve/issue-21221-2.stderr b/src/test/ui/resolve/issue-21221-2.stderr index 23d4015ca54..b360fda6f9d 100644 --- a/src/test/ui/resolve/issue-21221-2.stderr +++ b/src/test/ui/resolve/issue-21221-2.stderr @@ -3,6 +3,7 @@ error[E0405]: cannot find trait `T` in this scope | LL | impl T for Foo { } | ^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use foo::bar::T; diff --git a/src/test/ui/resolve/issue-21221-3.stderr b/src/test/ui/resolve/issue-21221-3.stderr index 09cfed96bed..f2c94d467e2 100644 --- a/src/test/ui/resolve/issue-21221-3.stderr +++ b/src/test/ui/resolve/issue-21221-3.stderr @@ -3,6 +3,7 @@ error[E0405]: cannot find trait `OuterTrait` in this scope | LL | impl OuterTrait for Foo {} | ^^^^^^^^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use issue_21221_3::outer::OuterTrait; diff --git a/src/test/ui/resolve/issue-21221-4.stderr b/src/test/ui/resolve/issue-21221-4.stderr index 68989a30e67..0b1527f91bd 100644 --- a/src/test/ui/resolve/issue-21221-4.stderr +++ b/src/test/ui/resolve/issue-21221-4.stderr @@ -3,6 +3,7 @@ error[E0405]: cannot find trait `T` in this scope | LL | impl T for Foo {} | ^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use issue_21221_4::T; diff --git a/src/test/ui/resolve/privacy-enum-ctor.stderr b/src/test/ui/resolve/privacy-enum-ctor.stderr index 7d8d1d0abfc..b7cc79cfed9 100644 --- a/src/test/ui/resolve/privacy-enum-ctor.stderr +++ b/src/test/ui/resolve/privacy-enum-ctor.stderr @@ -3,6 +3,7 @@ error[E0423]: expected value, found enum `n::Z` | LL | n::Z; | ^^^^ + | help: try using one of the enum's variants | LL | m::Z::Fn; @@ -17,6 +18,7 @@ error[E0423]: expected value, found enum `Z` | LL | Z; | ^ + | help: a function with a similar name exists | LL | f; @@ -46,6 +48,7 @@ error[E0423]: expected value, found enum `m::E` | LL | let _: E = m::E; | ^^^^ + | help: a function with a similar name exists | LL | let _: E = m::f; @@ -81,6 +84,7 @@ error[E0423]: expected value, found enum `E` | LL | let _: E = E; | ^ + | help: try using one of the enum's variants | LL | let _: E = E::Fn; @@ -112,6 +116,7 @@ error[E0412]: cannot find type `Z` in this scope | LL | let _: Z = m::n::Z; | ^ + | help: an enum with a similar name exists | LL | let _: E = m::n::Z; @@ -126,6 +131,7 @@ error[E0423]: expected value, found enum `m::n::Z` | LL | let _: Z = m::n::Z; | ^^^^^^^ + | help: try using one of the enum's variants | LL | let _: Z = m::Z::Fn; @@ -140,6 +146,7 @@ error[E0412]: cannot find type `Z` in this scope | LL | let _: Z = m::n::Z::Fn; | ^ + | help: an enum with a similar name exists | LL | let _: E = m::n::Z::Fn; @@ -154,6 +161,7 @@ error[E0412]: cannot find type `Z` in this scope | LL | let _: Z = m::n::Z::Struct; | ^ + | help: an enum with a similar name exists | LL | let _: E = m::n::Z::Struct; @@ -179,6 +187,7 @@ error[E0412]: cannot find type `Z` in this scope | LL | let _: Z = m::n::Z::Unit {}; | ^ + | help: an enum with a similar name exists | LL | let _: E = m::n::Z::Unit {}; @@ -237,6 +246,7 @@ LL | let _ = Z::Unit(); | ^^^^^^^-- | | | call expression requires function + | help: `Z::Unit` is a unit variant, you need to write it without the parenthesis | LL | let _ = Z::Unit; @@ -267,6 +277,7 @@ LL | let _: E = m::E::Unit(); | ^^^^^^^^^^-- | | | call expression requires function + | help: `m::E::Unit` is a unit variant, you need to write it without the parenthesis | LL | let _: E = m::E::Unit; @@ -297,6 +308,7 @@ LL | let _: E = E::Unit(); | ^^^^^^^-- | | | call expression requires function + | help: `E::Unit` is a unit variant, you need to write it without the parenthesis | LL | let _: E = E::Unit; diff --git a/src/test/ui/resolve/privacy-struct-ctor.stderr b/src/test/ui/resolve/privacy-struct-ctor.stderr index 7d884d3a669..51928c32e31 100644 --- a/src/test/ui/resolve/privacy-struct-ctor.stderr +++ b/src/test/ui/resolve/privacy-struct-ctor.stderr @@ -29,6 +29,7 @@ error[E0423]: expected value, found struct `xcrate::S` | LL | xcrate::S; | ^^^^^^^^^ constructor is not visible here due to private fields + | help: possible better candidate is found in another module, you can import it into scope | LL | use m::S; diff --git a/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr b/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr index b7b158ce7ef..9a3d5feee04 100644 --- a/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr +++ b/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr @@ -27,6 +27,7 @@ error[E0423]: expected value, found module `a::b` | LL | a::b.J | ^^^^ + | help: a constant with a similar name exists | LL | a::I.J @@ -57,6 +58,7 @@ error[E0423]: expected value, found module `a::b` | LL | a::b.f() | ^^^^ + | help: a constant with a similar name exists | LL | a::I.f() diff --git a/src/test/ui/resolve/use_suggestion_placement.stderr b/src/test/ui/resolve/use_suggestion_placement.stderr index 258b989387c..ef451ea847a 100644 --- a/src/test/ui/resolve/use_suggestion_placement.stderr +++ b/src/test/ui/resolve/use_suggestion_placement.stderr @@ -3,6 +3,7 @@ error[E0412]: cannot find type `Path` in this scope | LL | type Bar = Path; | ^^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use std::path::Path; @@ -13,6 +14,7 @@ error[E0425]: cannot find value `A` in this scope | LL | let _ = A; | ^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use m::A; @@ -23,6 +25,7 @@ error[E0412]: cannot find type `HashMap` in this scope | LL | type Dict = HashMap; | ^^^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use std::collections::HashMap; diff --git a/src/test/ui/rust-2018/dyn-trait-compatibility.stderr b/src/test/ui/rust-2018/dyn-trait-compatibility.stderr index e1f099e9190..01c4737de5e 100644 --- a/src/test/ui/rust-2018/dyn-trait-compatibility.stderr +++ b/src/test/ui/rust-2018/dyn-trait-compatibility.stderr @@ -3,6 +3,7 @@ error: expected identifier, found keyword `dyn` | LL | type A1 = dyn::dyn; | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | type A1 = dyn::r#dyn; diff --git a/src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.stderr b/src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.stderr index e0e846422d3..3515d422605 100644 --- a/src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.stderr +++ b/src/test/ui/rust-2018/edition-lint-infer-outlives-multispan.stderr @@ -19,6 +19,7 @@ error: outlives requirements can be inferred | LL | struct TeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: 'a + Debug + 'b { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: Debug { @@ -29,6 +30,7 @@ error: outlives requirements can be inferred | LL | struct TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: 'a + Debug + 'b> { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: Debug> { @@ -39,6 +41,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooBeeIsDebug<'a, 'b, T: 'a, U: 'b + Debug> { | ^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooBeeIsDebug<'a, 'b, T, U: Debug> { @@ -49,6 +52,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooIsDebugBee<'a, 'b, T: 'a, U: Debug + 'b> { | ^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooIsDebugBee<'a, 'b, T, U: Debug> { @@ -59,6 +63,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooWhereBee<'a, 'b, T: 'a, U> where U: 'b { | ^^^^ ^^^^^^^^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooWhereBee<'a, 'b, T, U> { @@ -69,6 +74,7 @@ error: outlives requirements can be inferred | LL | struct TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: Debug { @@ -79,6 +85,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T: 'a, U> where U: 'b + Debug { | ^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where U: Debug { @@ -89,6 +96,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T: 'a, U> where U: Debug + 'b { | ^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where U: Debug { @@ -99,6 +107,7 @@ error: outlives requirements can be inferred | LL | struct TeeWhereOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where T: 'a, U: 'b + Debug { | ^^^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeWhereOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where U: Debug { @@ -109,6 +118,7 @@ error: outlives requirements can be inferred | LL | struct TeeWhereOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where T: 'a, U: Debug + 'b { | ^^^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeWhereOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where U: Debug { @@ -119,6 +129,7 @@ error: outlives requirements can be inferred | LL | struct BeeOutlivesAyTeeBee<'a, 'b: 'a, T: 'b> { | ^^^^ ^^^^ + | help: remove these bounds | LL | struct BeeOutlivesAyTeeBee<'a, 'b, T> { @@ -129,6 +140,7 @@ error: outlives requirements can be inferred | LL | struct BeeOutlivesAyTeeAyBee<'a, 'b: 'a, T: 'a + 'b> { | ^^^^ ^^^^^^^^^ + | help: remove these bounds | LL | struct BeeOutlivesAyTeeAyBee<'a, 'b, T> { @@ -139,6 +151,7 @@ error: outlives requirements can be inferred | LL | struct BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b: 'a, T: 'a + Debug + 'b> { | ^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b, T: Debug> { @@ -149,6 +162,7 @@ error: outlives requirements can be inferred | LL | struct BeeWhereAyTeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where 'b: 'a, T: 'a + Debug + 'b { | ^^^^^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct BeeWhereAyTeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: Debug { @@ -159,6 +173,7 @@ error: outlives requirements can be inferred | LL | struct BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b: 'a, T, U: 'a + Debug + 'b> { | ^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: Debug> { @@ -169,6 +184,7 @@ error: outlives requirements can be inferred | LL | where U: 'a + Debug + 'b, 'b: 'a | ^^^^^ ^^^^^ ^^^^^^ + | help: remove these bounds | LL | where U: Debug, @@ -179,6 +195,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyIsDebugBee<'a, 'b, T: 'a + Debug + 'b>(&'a &'b T); | ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyIsDebugBee<'a, 'b, T: Debug>(&'a &'b T); @@ -189,6 +206,7 @@ error: outlives requirements can be inferred | LL | struct TeeWhereOutlivesAyIsDebugBee<'a, 'b, T>(&'a &'b T) where T: 'a + Debug + 'b; | ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeWhereOutlivesAyIsDebugBee<'a, 'b, T>(&'a &'b T) where T: Debug; @@ -199,6 +217,7 @@ error: outlives requirements can be inferred | LL | struct TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: 'a + Debug + 'b>(T, &'a &'b U); | ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: Debug>(T, &'a &'b U); @@ -209,6 +228,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooBeeIsDebug<'a, 'b, T: 'a, U: 'b + Debug>(&'a T, &'b U); | ^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooBeeIsDebug<'a, 'b, T, U: Debug>(&'a T, &'b U); @@ -219,6 +239,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooIsDebugBee<'a, 'b, T: 'a, U: Debug + 'b>(&'a T, &'b U); | ^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooIsDebugBee<'a, 'b, T, U: Debug>(&'a T, &'b U); @@ -229,6 +250,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooWhereBee<'a, 'b, T: 'a, U>(&'a T, &'b U) where U: 'b; | ^^^^ ^^^^^^^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooWhereBee<'a, 'b, T, U>(&'a T, &'b U) ; @@ -239,6 +261,7 @@ error: outlives requirements can be inferred | LL | struct TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U>(T, &'a &'b U) where U: 'a + Debug + 'b; | ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U>(T, &'a &'b U) where U: Debug; @@ -249,6 +272,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T: 'a, U>(&'a T, &'b U) where U: 'b + Debug; | ^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U>(&'a T, &'b U) where U: Debug; @@ -259,6 +283,7 @@ error: outlives requirements can be inferred | LL | struct TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T: 'a, U>(&'a T, &'b U) where U: Debug + 'b; | ^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U>(&'a T, &'b U) where U: Debug; @@ -269,6 +294,7 @@ error: outlives requirements can be inferred | LL | struct TeeWhereAyYooWhereBeeIsDebug<'a, 'b, T, U>(&'a T, &'b U) where T: 'a, U: 'b + Debug; | ^^^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeWhereAyYooWhereBeeIsDebug<'a, 'b, T, U>(&'a T, &'b U) where U: Debug; @@ -279,6 +305,7 @@ error: outlives requirements can be inferred | LL | struct TeeWhereAyYooWhereIsDebugBee<'a, 'b, T, U>(&'a T, &'b U) where T: 'a, U: Debug + 'b; | ^^^^^^^ ^^^^^ + | help: remove these bounds | LL | struct TeeWhereAyYooWhereIsDebugBee<'a, 'b, T, U>(&'a T, &'b U) where U: Debug; @@ -289,6 +316,7 @@ error: outlives requirements can be inferred | LL | struct BeeOutlivesAyTeeBee<'a, 'b: 'a, T: 'b>(&'a &'b T); | ^^^^ ^^^^ + | help: remove these bounds | LL | struct BeeOutlivesAyTeeBee<'a, 'b, T>(&'a &'b T); @@ -299,6 +327,7 @@ error: outlives requirements can be inferred | LL | struct BeeOutlivesAyTeeAyBee<'a, 'b: 'a, T: 'a + 'b>(&'a &'b T); | ^^^^ ^^^^^^^^^ + | help: remove these bounds | LL | struct BeeOutlivesAyTeeAyBee<'a, 'b, T>(&'a &'b T); @@ -309,6 +338,7 @@ error: outlives requirements can be inferred | LL | struct BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b: 'a, T: 'a + Debug + 'b>(&'a &'b T); | ^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b, T: Debug>(&'a &'b T); @@ -319,6 +349,7 @@ error: outlives requirements can be inferred | LL | struct BeeWhereAyTeeWhereAyIsDebugBee<'a, 'b, T>(&'a &'b T) where 'b: 'a, T: 'a + Debug + 'b; | ^^^^^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct BeeWhereAyTeeWhereAyIsDebugBee<'a, 'b, T>(&'a &'b T) where T: Debug; @@ -329,6 +360,7 @@ error: outlives requirements can be inferred | LL | struct BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b: 'a, T, U: 'a + Debug + 'b>(T, &'a &'b U); | ^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | struct BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: Debug>(T, &'a &'b U); @@ -339,6 +371,7 @@ error: outlives requirements can be inferred | LL | where U: 'a + Debug + 'b, 'b: 'a; | ^^^^^ ^^^^^ ^^^^^^ + | help: remove these bounds | LL | where U: Debug, ; @@ -349,6 +382,7 @@ error: outlives requirements can be inferred | LL | enum TeeOutlivesAyIsDebugBee<'a, 'b, T: 'a + Debug + 'b> { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeOutlivesAyIsDebugBee<'a, 'b, T: Debug> { @@ -359,6 +393,7 @@ error: outlives requirements can be inferred | LL | enum TeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: 'a + Debug + 'b { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: Debug { @@ -369,6 +404,7 @@ error: outlives requirements can be inferred | LL | enum TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: 'a + Debug + 'b> { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: Debug> { @@ -379,6 +415,7 @@ error: outlives requirements can be inferred | LL | enum TeeOutlivesAyYooBeeIsDebug<'a, 'b, T: 'a, U: 'b + Debug> { | ^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeOutlivesAyYooBeeIsDebug<'a, 'b, T, U: Debug> { @@ -389,6 +426,7 @@ error: outlives requirements can be inferred | LL | enum TeeOutlivesAyYooIsDebugBee<'a, 'b, T: 'a, U: Debug + 'b> { | ^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeOutlivesAyYooIsDebugBee<'a, 'b, T, U: Debug> { @@ -399,6 +437,7 @@ error: outlives requirements can be inferred | LL | enum TeeOutlivesAyYooWhereBee<'a, 'b, T: 'a, U> where U: 'b { | ^^^^ ^^^^^^^^^^^^ + | help: remove these bounds | LL | enum TeeOutlivesAyYooWhereBee<'a, 'b, T, U> { @@ -409,6 +448,7 @@ error: outlives requirements can be inferred | LL | enum TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: Debug { @@ -419,6 +459,7 @@ error: outlives requirements can be inferred | LL | enum TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T: 'a, U> where U: 'b + Debug { | ^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where U: Debug { @@ -429,6 +470,7 @@ error: outlives requirements can be inferred | LL | enum TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T: 'a, U> where U: Debug + 'b { | ^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where U: Debug { @@ -439,6 +481,7 @@ error: outlives requirements can be inferred | LL | enum TeeWhereOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where T: 'a, U: 'b + Debug { | ^^^^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeWhereOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where U: Debug { @@ -449,6 +492,7 @@ error: outlives requirements can be inferred | LL | enum TeeWhereOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where T: 'a, U: Debug + 'b { | ^^^^^^^ ^^^^^ + | help: remove these bounds | LL | enum TeeWhereOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where U: Debug { @@ -459,6 +503,7 @@ error: outlives requirements can be inferred | LL | enum BeeOutlivesAyTeeBee<'a, 'b: 'a, T: 'b> { | ^^^^ ^^^^ + | help: remove these bounds | LL | enum BeeOutlivesAyTeeBee<'a, 'b, T> { @@ -469,6 +514,7 @@ error: outlives requirements can be inferred | LL | enum BeeOutlivesAyTeeAyBee<'a, 'b: 'a, T: 'a + 'b> { | ^^^^ ^^^^^^^^^ + | help: remove these bounds | LL | enum BeeOutlivesAyTeeAyBee<'a, 'b, T> { @@ -479,6 +525,7 @@ error: outlives requirements can be inferred | LL | enum BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b: 'a, T: 'a + Debug + 'b> { | ^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | enum BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b, T: Debug> { @@ -489,6 +536,7 @@ error: outlives requirements can be inferred | LL | enum BeeWhereAyTeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where 'b: 'a, T: 'a + Debug + 'b { | ^^^^^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | enum BeeWhereAyTeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: Debug { @@ -499,6 +547,7 @@ error: outlives requirements can be inferred | LL | enum BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b: 'a, T, U: 'a + Debug + 'b> { | ^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | enum BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: Debug> { @@ -509,6 +558,7 @@ error: outlives requirements can be inferred | LL | enum BeeWhereAyTeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b, 'b: 'a { | ^^^^^ ^^^^^ ^^^^^^ + | help: remove these bounds | LL | enum BeeWhereAyTeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: Debug, { @@ -519,6 +569,7 @@ error: outlives requirements can be inferred | LL | union TeeOutlivesAyIsDebugBee<'a, 'b, T: 'a + Debug + 'b> { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeOutlivesAyIsDebugBee<'a, 'b, T: Debug> { @@ -529,6 +580,7 @@ error: outlives requirements can be inferred | LL | union TeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: 'a + Debug + 'b { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: Debug { @@ -539,6 +591,7 @@ error: outlives requirements can be inferred | LL | union TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: 'a + Debug + 'b> { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: Debug> { @@ -549,6 +602,7 @@ error: outlives requirements can be inferred | LL | union TeeOutlivesAyYooBeeIsDebug<'a, 'b, T: 'a, U: 'b + Debug> { | ^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeOutlivesAyYooBeeIsDebug<'a, 'b, T, U: Debug> { @@ -559,6 +613,7 @@ error: outlives requirements can be inferred | LL | union TeeOutlivesAyYooIsDebugBee<'a, 'b, T: 'a, U: Debug + 'b> { | ^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeOutlivesAyYooIsDebugBee<'a, 'b, T, U: Debug> { @@ -569,6 +624,7 @@ error: outlives requirements can be inferred | LL | union TeeOutlivesAyYooWhereBee<'a, 'b, T: 'a, U> where U: 'b { | ^^^^ ^^^^^^^^^^^^ + | help: remove these bounds | LL | union TeeOutlivesAyYooWhereBee<'a, 'b, T, U> { @@ -579,6 +635,7 @@ error: outlives requirements can be inferred | LL | union TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b { | ^^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: Debug { @@ -589,6 +646,7 @@ error: outlives requirements can be inferred | LL | union TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T: 'a, U> where U: 'b + Debug { | ^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where U: Debug { @@ -599,6 +657,7 @@ error: outlives requirements can be inferred | LL | union TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T: 'a, U> where U: Debug + 'b { | ^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where U: Debug { @@ -609,6 +668,7 @@ error: outlives requirements can be inferred | LL | union TeeWhereOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where T: 'a, U: 'b + Debug { | ^^^^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeWhereOutlivesAyYooWhereBeeIsDebug<'a, 'b, T, U> where U: Debug { @@ -619,6 +679,7 @@ error: outlives requirements can be inferred | LL | union TeeWhereOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where T: 'a, U: Debug + 'b { | ^^^^^^^ ^^^^^ + | help: remove these bounds | LL | union TeeWhereOutlivesAyYooWhereIsDebugBee<'a, 'b, T, U> where U: Debug { @@ -629,6 +690,7 @@ error: outlives requirements can be inferred | LL | union BeeOutlivesAyTeeBee<'a, 'b: 'a, T: 'b> { | ^^^^ ^^^^ + | help: remove these bounds | LL | union BeeOutlivesAyTeeBee<'a, 'b, T> { @@ -639,6 +701,7 @@ error: outlives requirements can be inferred | LL | union BeeOutlivesAyTeeAyBee<'a, 'b: 'a, T: 'a + 'b> { | ^^^^ ^^^^^^^^^ + | help: remove these bounds | LL | union BeeOutlivesAyTeeAyBee<'a, 'b, T> { @@ -649,6 +712,7 @@ error: outlives requirements can be inferred | LL | union BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b: 'a, T: 'a + Debug + 'b> { | ^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | union BeeOutlivesAyTeeOutlivesAyIsDebugBee<'a, 'b, T: Debug> { @@ -659,6 +723,7 @@ error: outlives requirements can be inferred | LL | union BeeWhereAyTeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where 'b: 'a, T: 'a + Debug + 'b { | ^^^^^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | union BeeWhereAyTeeWhereOutlivesAyIsDebugBee<'a, 'b, T> where T: Debug { @@ -669,6 +734,7 @@ error: outlives requirements can be inferred | LL | union BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b: 'a, T, U: 'a + Debug + 'b> { | ^^^^ ^^^^^ ^^^^^ + | help: remove these bounds | LL | union BeeOutlivesAyTeeYooOutlivesAyIsDebugBee<'a, 'b, T, U: Debug> { @@ -679,6 +745,7 @@ error: outlives requirements can be inferred | LL | union BeeWhereAyTeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: 'a + Debug + 'b, 'b: 'a { | ^^^^^ ^^^^^ ^^^^^^ + | help: remove these bounds | LL | union BeeWhereAyTeeYooWhereOutlivesAyIsDebugBee<'a, 'b, T, U> where U: Debug, { diff --git a/src/test/ui/rust-2018/issue-52202-use-suggestions.stderr b/src/test/ui/rust-2018/issue-52202-use-suggestions.stderr index 973c486970e..c712fd048f1 100644 --- a/src/test/ui/rust-2018/issue-52202-use-suggestions.stderr +++ b/src/test/ui/rust-2018/issue-52202-use-suggestions.stderr @@ -3,6 +3,7 @@ error[E0422]: cannot find struct, variant or union type `Drain` in this scope | LL | let _d = Drain {}; | ^^^^^ not found in this scope + | help: possible candidates are found in other modules, you can import them into scope | LL | use crate::plumbing::Drain; diff --git a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.nll.stderr b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.nll.stderr index a585b4fdbe6..713d4b75909 100644 --- a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.nll.stderr +++ b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.nll.stderr @@ -5,6 +5,7 @@ LL | async fn f(self: Pin<&Self>) -> impl Clone { self } | - ^^^^^^^^ returning this value requires that `'_` must outlive `'static` | | | lifetime `'_` defined here + | help: to allow this `impl Trait` to capture borrowed data with lifetime `'_`, add `'_` as a constraint | LL | async fn f(self: Pin<&Self>) -> impl Clone + '_ { self } diff --git a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait.nll.stderr b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait.nll.stderr index dcfc9ba511d..b46c6b9b713 100644 --- a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait.nll.stderr +++ b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait.nll.stderr @@ -5,6 +5,7 @@ LL | fn f(self: Pin<&Self>) -> impl Clone { self } | - ^^^^^^^^^^ opaque type requires that `'1` must outlive `'static` | | | let's call the lifetime of this reference `'1` + | help: to allow this `impl Trait` to capture borrowed data with lifetime `'1`, add `'_` as a constraint | LL | fn f(self: Pin<&Self>) -> impl Clone + '_ { self } diff --git a/src/test/ui/self/self_type_keyword.stderr b/src/test/ui/self/self_type_keyword.stderr index 0af24dcedfb..e3b871bd867 100644 --- a/src/test/ui/self/self_type_keyword.stderr +++ b/src/test/ui/self/self_type_keyword.stderr @@ -65,6 +65,7 @@ error[E0531]: cannot find unit struct/variant or constant `Self` in this scope | LL | mut Self => (), | ^^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use foo::Self; diff --git a/src/test/ui/shift-various-bad-types.stderr b/src/test/ui/shift-various-bad-types.stderr index 409fabb951a..c7a95883226 100644 --- a/src/test/ui/shift-various-bad-types.stderr +++ b/src/test/ui/shift-various-bad-types.stderr @@ -27,6 +27,7 @@ error[E0308]: mismatched types | LL | let _: i32 = 22_i64 >> 1_i32; | ^^^^^^^^^^^^^^^ expected i32, found i64 + | help: you can convert an `i64` to `i32` and panic if the converted value wouldn't fit | LL | let _: i32 = (22_i64 >> 1_i32).try_into().unwrap(); diff --git a/src/test/ui/single-use-lifetime/one-use-in-fn-argument.stderr b/src/test/ui/single-use-lifetime/one-use-in-fn-argument.stderr index faaa7e2f1b0..25aa8bb6fb0 100644 --- a/src/test/ui/single-use-lifetime/one-use-in-fn-argument.stderr +++ b/src/test/ui/single-use-lifetime/one-use-in-fn-argument.stderr @@ -23,6 +23,7 @@ LL | fn center<'m>(_: Single<'m>) {} | ^^ -- ...is used only here | | | this lifetime... + | help: elide the single-use lifetime | LL | fn center(_: Single<'_>) {} @@ -33,6 +34,7 @@ error: lifetime parameter `'y` only used once | LL | fn left<'x, 'y>(foo: Double<'x, 'y>) -> &'x u32 { foo.f } | ^^ this lifetime... -- ...is used only here + | help: elide the single-use lifetime | LL | fn left<'x>(foo: Double<'x, '_>) -> &'x u32 { foo.f } @@ -43,6 +45,7 @@ error: lifetime parameter `'x` only used once | LL | fn right<'x, 'y>(foo: Double<'x, 'y>) -> &'y u32 { foo.f } | ^^ this lifetime... -- ...is used only here + | help: elide the single-use lifetime | LL | fn right<'y>(foo: Double<'_, 'y>) -> &'y u32 { foo.f } diff --git a/src/test/ui/span/issue-35987.stderr b/src/test/ui/span/issue-35987.stderr index f73bf27110b..3245d8655e8 100644 --- a/src/test/ui/span/issue-35987.stderr +++ b/src/test/ui/span/issue-35987.stderr @@ -3,6 +3,7 @@ error[E0404]: expected trait, found type parameter `Add` | LL | impl Add for Foo { | ^^^ not a trait + | help: possible better candidate is found in another module, you can import it into scope | LL | use std::ops::Add; diff --git a/src/test/ui/span/issue-39018.stderr b/src/test/ui/span/issue-39018.stderr index d8fbf841b61..2ce5b0c1171 100644 --- a/src/test/ui/span/issue-39018.stderr +++ b/src/test/ui/span/issue-39018.stderr @@ -6,6 +6,7 @@ LL | let x = "Hello " + "World!"; | | | | | `+` cannot be used to concatenate two `&str` strings | &str + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let x = "Hello ".to_owned() + "World!"; @@ -29,6 +30,7 @@ LL | let x = "Hello " + "World!".to_owned(); | | | | | `+` cannot be used to concatenate a `&str` with a `String` | &str + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let x = "Hello ".to_owned() + &"World!".to_owned(); @@ -42,6 +44,7 @@ LL | let _ = &a + &b; | | | | | `+` cannot be used to concatenate two `&str` strings | &std::string::String + | help: String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _ = a + &b; @@ -55,6 +58,7 @@ LL | let _ = &a + b; | | | | | `+` cannot be used to concatenate a `&str` with a `String` | &std::string::String + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _ = a + &b; @@ -80,6 +84,7 @@ LL | let _ = e + b; | | | | | `+` cannot be used to concatenate a `&str` with a `String` | &std::string::String + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _ = e.to_owned() + &b; @@ -93,6 +98,7 @@ LL | let _ = e + &b; | | | | | `+` cannot be used to concatenate two `&str` strings | &std::string::String + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _ = e.to_owned() + &b; @@ -106,6 +112,7 @@ LL | let _ = e + d; | | | | | `+` cannot be used to concatenate two `&str` strings | &std::string::String + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _ = e.to_owned() + d; @@ -119,6 +126,7 @@ LL | let _ = e + &d; | | | | | `+` cannot be used to concatenate two `&str` strings | &std::string::String + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _ = e.to_owned() + &d; @@ -152,6 +160,7 @@ LL | let _ = c + &d; | | | | | `+` cannot be used to concatenate two `&str` strings | &str + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _ = c.to_owned() + &d; @@ -165,6 +174,7 @@ LL | let _ = c + d; | | | | | `+` cannot be used to concatenate two `&str` strings | &str + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let _ = c.to_owned() + d; diff --git a/src/test/ui/span/missing-unit-argument.stderr b/src/test/ui/span/missing-unit-argument.stderr index f1a29bed32b..90a96e3f174 100644 --- a/src/test/ui/span/missing-unit-argument.stderr +++ b/src/test/ui/span/missing-unit-argument.stderr @@ -3,6 +3,7 @@ error[E0061]: this function takes 1 parameter but 0 parameters were supplied | LL | let _: Result<(), String> = Ok(); | ^^^^ + | help: expected the unit value `()`; create it with empty parentheses | LL | let _: Result<(), String> = Ok(()); @@ -34,6 +35,7 @@ LL | fn bar(():()) {} ... LL | bar(); | ^^^^^ + | help: expected the unit value `()`; create it with empty parentheses | LL | bar(()); @@ -47,6 +49,7 @@ LL | fn baz(self, (): ()) { } ... LL | S.baz(); | ^^^ + | help: expected the unit value `()`; create it with empty parentheses | LL | S.baz(()); @@ -60,6 +63,7 @@ LL | fn generic(self, _: T) { } ... LL | S.generic::<()>(); | ^^^^^^^ + | help: expected the unit value `()`; create it with empty parentheses | LL | S.generic::<()>(()); diff --git a/src/test/ui/str/str-as-char.stderr b/src/test/ui/str/str-as-char.stderr index 540a1b55376..27d6336974c 100644 --- a/src/test/ui/str/str-as-char.stderr +++ b/src/test/ui/str/str-as-char.stderr @@ -3,6 +3,7 @@ error: character literal may only contain one codepoint | LL | println!('●●'); | ^^^^ + | help: if you meant to write a `str` literal, use double quotes | LL | println!("●●"); diff --git a/src/test/ui/str/str-concat-on-double-ref.stderr b/src/test/ui/str/str-concat-on-double-ref.stderr index 3e53cdc4d98..d193955af4b 100644 --- a/src/test/ui/str/str-concat-on-double-ref.stderr +++ b/src/test/ui/str/str-concat-on-double-ref.stderr @@ -6,6 +6,7 @@ LL | let c = a + b; | | | | | `+` cannot be used to concatenate two `&str` strings | &std::string::String + | help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | LL | let c = a.to_owned() + b; diff --git a/src/test/ui/struct-literal-variant-in-if.stderr b/src/test/ui/struct-literal-variant-in-if.stderr index a52ec6dc539..bfc8b24e8ac 100644 --- a/src/test/ui/struct-literal-variant-in-if.stderr +++ b/src/test/ui/struct-literal-variant-in-if.stderr @@ -3,6 +3,7 @@ error: struct literals are not allowed here | LL | if x == E::I { field1: true, field2: 42 } {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | help: surround the struct literal with parentheses | LL | if x == (E::I { field1: true, field2: 42 }) {} @@ -13,6 +14,7 @@ error: struct literals are not allowed here | LL | if x == E::V { field: false } {} | ^^^^^^^^^^^^^^^^^^^^^ + | help: surround the struct literal with parentheses | LL | if x == (E::V { field: false }) {} @@ -23,6 +25,7 @@ error: struct literals are not allowed here | LL | if x == E::J { field: -42 } {} | ^^^^^^^^^^^^^^^^^^^ + | help: surround the struct literal with parentheses | LL | if x == (E::J { field: -42 }) {} @@ -33,6 +36,7 @@ error: struct literals are not allowed here | LL | if x == E::K { field: "" } {} | ^^^^^^^^^^^^^^^^^^ + | help: surround the struct literal with parentheses | LL | if x == (E::K { field: "" }) {} diff --git a/src/test/ui/suggestions/no-extern-crate-in-type.stderr b/src/test/ui/suggestions/no-extern-crate-in-type.stderr index d4a5a956714..22aad3b0a9f 100644 --- a/src/test/ui/suggestions/no-extern-crate-in-type.stderr +++ b/src/test/ui/suggestions/no-extern-crate-in-type.stderr @@ -3,6 +3,7 @@ error[E0412]: cannot find type `Foo` in this scope | LL | type Output = Option; | ^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use foo::Foo; diff --git a/src/test/ui/suggestions/suggest-closure-return-type-1.stderr b/src/test/ui/suggestions/suggest-closure-return-type-1.stderr index de2d29f1270..7ef95905380 100644 --- a/src/test/ui/suggestions/suggest-closure-return-type-1.stderr +++ b/src/test/ui/suggestions/suggest-closure-return-type-1.stderr @@ -3,6 +3,7 @@ error[E0282]: type annotations needed for the closure `fn() -> [_; 0]` | LL | let _v = || -> _ { [] }; | ^^ cannot infer type + | help: give this closure an explicit return type without `_` placeholders | LL | let _v = || -> [_; 0] { [] }; diff --git a/src/test/ui/suggestions/suggest-closure-return-type-2.stderr b/src/test/ui/suggestions/suggest-closure-return-type-2.stderr index 9dbd822fbb5..2a8d7dd5b85 100644 --- a/src/test/ui/suggestions/suggest-closure-return-type-2.stderr +++ b/src/test/ui/suggestions/suggest-closure-return-type-2.stderr @@ -3,6 +3,7 @@ error[E0282]: type annotations needed for the closure `fn() -> [_; 0]` | LL | let _v = || { [] }; | ^^ cannot infer type + | help: give this closure an explicit return type without `_` placeholders | LL | let _v = || -> [_; 0] { [] }; diff --git a/src/test/ui/suggestions/suggest-closure-return-type-3.stderr b/src/test/ui/suggestions/suggest-closure-return-type-3.stderr index ad0d4e41f78..67dc4d8fd69 100644 --- a/src/test/ui/suggestions/suggest-closure-return-type-3.stderr +++ b/src/test/ui/suggestions/suggest-closure-return-type-3.stderr @@ -3,6 +3,7 @@ error[E0282]: type annotations needed for the closure `fn() -> [_; 0]` | LL | let _v = || []; | ^^ cannot infer type + | help: give this closure an explicit return type without `_` placeholders | LL | let _v = || -> [_; 0] { [] }; diff --git a/src/test/ui/suggestions/suggest-labels.stderr b/src/test/ui/suggestions/suggest-labels.stderr index 02d46a3f596..079821e6490 100644 --- a/src/test/ui/suggestions/suggest-labels.stderr +++ b/src/test/ui/suggestions/suggest-labels.stderr @@ -3,6 +3,7 @@ error[E0426]: use of undeclared label `'fo` | LL | break 'fo; | ^^^ + | help: a label with a similar name exists in this scope | LL | break 'foo; @@ -13,6 +14,7 @@ error[E0426]: use of undeclared label `'bor` | LL | continue 'bor; | ^^^^ + | help: a label with a similar name exists in this scope | LL | continue 'bar; @@ -23,6 +25,7 @@ error[E0426]: use of undeclared label `'longlable` | LL | break 'longlable; | ^^^^^^^^^^ + | help: a label with a similar name exists in this scope | LL | break 'longlabel1; diff --git a/src/test/ui/suggestions/suggest-on-bare-closure-call.stderr b/src/test/ui/suggestions/suggest-on-bare-closure-call.stderr index 17001e3974c..28fef511e04 100644 --- a/src/test/ui/suggestions/suggest-on-bare-closure-call.stderr +++ b/src/test/ui/suggestions/suggest-on-bare-closure-call.stderr @@ -5,6 +5,7 @@ LL | let _ = ||{}(); | ^^-- | | | call expression requires function + | help: if you meant to create this closure and immediately call it, surround the closure with parenthesis | LL | let _ = (||{})(); diff --git a/src/test/ui/suggestions/suggest-std-when-using-type.stderr b/src/test/ui/suggestions/suggest-std-when-using-type.stderr index eecb4e60f9d..5199faa5c8e 100644 --- a/src/test/ui/suggestions/suggest-std-when-using-type.stderr +++ b/src/test/ui/suggestions/suggest-std-when-using-type.stderr @@ -3,6 +3,7 @@ error[E0223]: ambiguous associated type | LL | let pi = f32::consts::PI; | ^^^^^^^^^^^^^^^ + | help: you are looking for the module in `std`, not the primitive type | LL | let pi = std::f32::consts::PI; @@ -13,6 +14,7 @@ error[E0599]: no function or associated item named `from_utf8` found for type `s | LL | str::from_utf8(bytes) | ^^^^^^^^^ function or associated item not found in `str` + | help: you are looking for the module in `std`, not the primitive type | LL | std::str::from_utf8(bytes) diff --git a/src/test/ui/suggestions/use-type-argument-instead-of-assoc-type.stderr b/src/test/ui/suggestions/use-type-argument-instead-of-assoc-type.stderr index d273ec3fca5..098d76a5c48 100644 --- a/src/test/ui/suggestions/use-type-argument-instead-of-assoc-type.stderr +++ b/src/test/ui/suggestions/use-type-argument-instead-of-assoc-type.stderr @@ -20,6 +20,7 @@ LL | i: Box>, | | | associated type `A` must be specified | associated type `C` must be specified + | help: if you meant to specify the associated types, write | LL | i: Box>, diff --git a/src/test/ui/traits/traits-multidispatch-bad.stderr b/src/test/ui/traits/traits-multidispatch-bad.stderr index 9e6c38ced0d..f4ce548314d 100644 --- a/src/test/ui/traits/traits-multidispatch-bad.stderr +++ b/src/test/ui/traits/traits-multidispatch-bad.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | test(22i32, 44i32); | ^^^^^ expected u32, found i32 + | help: change the type of the numeric literal from `i32` to `u32` | LL | test(22i32, 44u32); diff --git a/src/test/ui/trivial-bounds/trivial-bounds-inconsistent-projection-error.stderr b/src/test/ui/trivial-bounds/trivial-bounds-inconsistent-projection-error.stderr index e9c28248044..5820e4699c1 100644 --- a/src/test/ui/trivial-bounds/trivial-bounds-inconsistent-projection-error.stderr +++ b/src/test/ui/trivial-bounds/trivial-bounds-inconsistent-projection-error.stderr @@ -6,6 +6,7 @@ LL | fn global_bound_is_hidden() -> u8 ... LL | B::get_x() | ^^^^^^^^^^ expected u8, found i32 + | help: you can convert an `i32` to `u8` and panic if the converted value wouldn't fit | LL | B::get_x().try_into().unwrap() diff --git a/src/test/ui/try-block/try-block-in-edition2015.stderr b/src/test/ui/try-block/try-block-in-edition2015.stderr index c94e43131fa..7547dadf9e2 100644 --- a/src/test/ui/try-block/try-block-in-edition2015.stderr +++ b/src/test/ui/try-block/try-block-in-edition2015.stderr @@ -6,6 +6,7 @@ LL | let try_result: Option<_> = try { LL | LL | let x = 5; | ^^^ expected identifier, found keyword + | help: you can escape reserved keywords to use them as identifiers | LL | r#let x = 5; diff --git a/src/test/ui/tutorial-suffix-inference-test.stderr b/src/test/ui/tutorial-suffix-inference-test.stderr index f3e1cc41cad..ae0cf124673 100644 --- a/src/test/ui/tutorial-suffix-inference-test.stderr +++ b/src/test/ui/tutorial-suffix-inference-test.stderr @@ -12,6 +12,7 @@ error[E0308]: mismatched types | LL | identity_u16(y); | ^ expected u16, found i32 + | help: you can convert an `i32` to `u16` and panic if the converted value wouldn't fit | LL | identity_u16(y.try_into().unwrap()); @@ -22,6 +23,7 @@ error[E0308]: mismatched types | LL | identity_u16(a); | ^ expected u16, found isize + | help: you can convert an `isize` to `u16` and panic if the converted value wouldn't fit | LL | identity_u16(a.try_into().unwrap()); diff --git a/src/test/ui/type-alias-enum-variants/incorrect-variant-form-through-alias-caught.stderr b/src/test/ui/type-alias-enum-variants/incorrect-variant-form-through-alias-caught.stderr index c6528e417d8..801ca5f013b 100644 --- a/src/test/ui/type-alias-enum-variants/incorrect-variant-form-through-alias-caught.stderr +++ b/src/test/ui/type-alias-enum-variants/incorrect-variant-form-through-alias-caught.stderr @@ -26,6 +26,7 @@ LL | Alias::Unit(); | ^^^^^^^^^^^-- | | | call expression requires function + | help: `::Unit` is a unit variant, you need to write it without the parenthesis | LL | ::Unit; diff --git a/src/test/ui/ufcs/ufcs-qpath-self-mismatch.stderr b/src/test/ui/ufcs/ufcs-qpath-self-mismatch.stderr index f749ed3f9d8..a6f24984c8b 100644 --- a/src/test/ui/ufcs/ufcs-qpath-self-mismatch.stderr +++ b/src/test/ui/ufcs/ufcs-qpath-self-mismatch.stderr @@ -11,6 +11,7 @@ error[E0308]: mismatched types | LL | >::add(1u32, 2); | ^^^^ expected i32, found u32 + | help: change the type of the numeric literal from `u32` to `i32` | LL | >::add(1i32, 2); @@ -21,6 +22,7 @@ error[E0308]: mismatched types | LL | >::add(1, 2u32); | ^^^^ expected i32, found u32 + | help: change the type of the numeric literal from `u32` to `i32` | LL | >::add(1, 2i32); diff --git a/src/test/ui/unboxed-closures/unboxed-closures-type-mismatch.stderr b/src/test/ui/unboxed-closures/unboxed-closures-type-mismatch.stderr index 758762fd5fd..2479f3e601e 100644 --- a/src/test/ui/unboxed-closures/unboxed-closures-type-mismatch.stderr +++ b/src/test/ui/unboxed-closures/unboxed-closures-type-mismatch.stderr @@ -3,6 +3,7 @@ error[E0308]: mismatched types | LL | let z = f(1_usize, 2); | ^^^^^^^ expected isize, found usize + | help: change the type of the numeric literal from `usize` to `isize` | LL | let z = f(1_isize, 2); diff --git a/src/test/ui/use/use-super-global-path.stderr b/src/test/ui/use/use-super-global-path.stderr index 72b3deaaece..3ca30ebebba 100644 --- a/src/test/ui/use/use-super-global-path.stderr +++ b/src/test/ui/use/use-super-global-path.stderr @@ -15,6 +15,7 @@ error[E0425]: cannot find function `main` in this scope | LL | main(); | ^^^^ not found in this scope + | help: possible candidate is found in another module, you can import it into scope | LL | use main; diff --git a/src/test/ui/variants/variant-used-as-type.stderr b/src/test/ui/variants/variant-used-as-type.stderr index fdfc044d81f..096dd16c634 100644 --- a/src/test/ui/variants/variant-used-as-type.stderr +++ b/src/test/ui/variants/variant-used-as-type.stderr @@ -3,6 +3,7 @@ error[E0573]: expected type, found variant `Ty::A` | LL | B(Ty::A), | ^^^^^ not a type + | help: try using the variant's enum | LL | B(E), @@ -15,6 +16,7 @@ error[E0573]: expected type, found variant `E::A` | LL | impl E::A {} | ^^^^ not a type + | help: try using the variant's enum | LL | impl E {} From 508d0326475e0ceef2ea5755a03cacf181b34d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Thu, 24 Oct 2019 15:44:43 -0700 Subject: [PATCH 2/2] review comment: deduplicate logic --- src/librustc_errors/emitter.rs | 40 +++++++++++----------------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index e59d6c56750..2a7f9ad25de 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -1583,27 +1583,26 @@ impl EmitterWriter { Ok(()) } - fn emit_messages_default(&mut self, - level: &Level, - message: &[(String, Style)], - code: &Option, - span: &MultiSpan, - children: &[SubDiagnostic], - suggestions: &[CodeSuggestion]) { + fn emit_messages_default( + &mut self, + level: &Level, + message: &[(String, Style)], + code: &Option, + span: &MultiSpan, + children: &[SubDiagnostic], + suggestions: &[CodeSuggestion], + ) { let max_line_num_len = if self.ui_testing { ANONYMIZED_LINE_NUM.len() } else { self.get_max_line_num(span, children).to_string().len() }; - match self.emit_message_default(span, - message, - code, - level, - max_line_num_len, - false) { + match self.emit_message_default(span, message, code, level, max_line_num_len, false) { Ok(()) => { - if !children.is_empty() { + if !children.is_empty() || suggestions.iter().any(|s| { + s.style != SuggestionStyle::CompletelyHidden + }) { let mut buffer = StyledBuffer::new(); if !self.short_message { draw_col_separator_no_space(&mut buffer, 0, max_line_num_len + 1); @@ -1629,19 +1628,6 @@ impl EmitterWriter { _ => () } } - if children.is_empty() && suggestions.iter().any(|s| { - s.style != SuggestionStyle::CompletelyHidden - }) { - let mut buffer = StyledBuffer::new(); - if !self.short_message { - draw_col_separator_no_space(&mut buffer, 0, max_line_num_len + 1); - } - match emit_to_destination(&buffer.render(), level, &mut self.dst, - self.short_message) { - Ok(()) => (), - Err(e) => panic!("failed to emit error: {}", e) - } - } for sugg in suggestions { if sugg.style == SuggestionStyle::CompletelyHidden { // do not display this suggestion, it is meant only for tools