1
Fork 0

Use verbose style when suggesting changing const with let

This commit is contained in:
Esteban Küber 2024-07-05 19:32:17 +00:00
parent bcf1f6db45
commit b56dc8ee90
20 changed files with 153 additions and 82 deletions

View file

@ -810,7 +810,7 @@ impl<'a> Parser<'a> {
self.dcx().struct_span_err(non_item_span, "non-item in item list"); self.dcx().struct_span_err(non_item_span, "non-item in item list");
self.consume_block(Delimiter::Brace, ConsumeClosingDelim::Yes); self.consume_block(Delimiter::Brace, ConsumeClosingDelim::Yes);
if is_let { if is_let {
err.span_suggestion( err.span_suggestion_verbose(
non_item_span, non_item_span,
"consider using `const` instead of `let` for associated const", "consider using `const` instead of `let` for associated const",
"const", "const",

View file

@ -836,11 +836,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
let ((with, with_label), without) = match sp { let ((with, with_label), without) = match sp {
Some(sp) if !self.tcx.sess.source_map().is_multiline(sp) => { Some(sp) if !self.tcx.sess.source_map().is_multiline(sp) => {
let sp = sp.with_lo(BytePos(sp.lo().0 - (current.len() as u32))); let sp = sp
.with_lo(BytePos(sp.lo().0 - (current.len() as u32)))
.until(ident.span);
( (
(Some(errs::AttemptToUseNonConstantValueInConstantWithSuggestion { (Some(errs::AttemptToUseNonConstantValueInConstantWithSuggestion {
span: sp, span: sp,
ident,
suggestion, suggestion,
current, current,
}), Some(errs::AttemptToUseNonConstantValueInConstantLabelWithSuggestion {span})), }), Some(errs::AttemptToUseNonConstantValueInConstantLabelWithSuggestion {span})),

View file

@ -242,13 +242,13 @@ pub(crate) struct AttemptToUseNonConstantValueInConstant<'a> {
#[derive(Subdiagnostic)] #[derive(Subdiagnostic)]
#[suggestion( #[suggestion(
resolve_attempt_to_use_non_constant_value_in_constant_with_suggestion, resolve_attempt_to_use_non_constant_value_in_constant_with_suggestion,
code = "{suggestion} {ident}", code = "{suggestion} ",
style = "verbose",
applicability = "maybe-incorrect" applicability = "maybe-incorrect"
)] )]
pub(crate) struct AttemptToUseNonConstantValueInConstantWithSuggestion<'a> { pub(crate) struct AttemptToUseNonConstantValueInConstantWithSuggestion<'a> {
#[primary_span] #[primary_span]
pub(crate) span: Span, pub(crate) span: Span,
pub(crate) ident: Ident,
pub(crate) suggestion: &'a str, pub(crate) suggestion: &'a str,
pub(crate) current: &'a str, pub(crate) current: &'a str,
} }

View file

@ -371,47 +371,57 @@ LL | global_asm!("{}", label {});
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/parse-error.rs:39:37 --> $DIR/parse-error.rs:39:37
| |
LL | let mut foo = 0;
| ----------- help: consider using `const` instead of `let`: `const foo`
...
LL | asm!("{}", options(), const foo); LL | asm!("{}", options(), const foo);
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const foo = 0;
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/parse-error.rs:71:44 --> $DIR/parse-error.rs:71:44
| |
LL | let mut foo = 0;
| ----------- help: consider using `const` instead of `let`: `const foo`
...
LL | asm!("{}", clobber_abi("C"), const foo); LL | asm!("{}", clobber_abi("C"), const foo);
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const foo = 0;
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/parse-error.rs:74:55 --> $DIR/parse-error.rs:74:55
| |
LL | let mut foo = 0;
| ----------- help: consider using `const` instead of `let`: `const foo`
...
LL | asm!("{}", options(), clobber_abi("C"), const foo); LL | asm!("{}", options(), clobber_abi("C"), const foo);
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const foo = 0;
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/parse-error.rs:76:31 --> $DIR/parse-error.rs:76:31
| |
LL | let mut foo = 0;
| ----------- help: consider using `const` instead of `let`: `const foo`
...
LL | asm!("{a}", a = const foo, a = const bar); LL | asm!("{a}", a = const foo, a = const bar);
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const foo = 0;
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/parse-error.rs:76:46 --> $DIR/parse-error.rs:76:46
| |
LL | let mut bar = 0;
| ----------- help: consider using `const` instead of `let`: `const bar`
...
LL | asm!("{a}", a = const foo, a = const bar); LL | asm!("{a}", a = const foo, a = const bar);
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const bar = 0;
| ~~~~~
error: aborting due to 64 previous errors error: aborting due to 64 previous errors

View file

@ -1,29 +1,35 @@
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/type-check-1.rs:41:26 --> $DIR/type-check-1.rs:41:26
| |
LL | let x = 0;
| ----- help: consider using `const` instead of `let`: `const x`
...
LL | asm!("{}", const x); LL | asm!("{}", const x);
| ^ non-constant value | ^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const x = 0;
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/type-check-1.rs:44:36 --> $DIR/type-check-1.rs:44:36
| |
LL | let x = 0;
| ----- help: consider using `const` instead of `let`: `const x`
...
LL | asm!("{}", const const_foo(x)); LL | asm!("{}", const const_foo(x));
| ^ non-constant value | ^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const x = 0;
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/type-check-1.rs:47:36 --> $DIR/type-check-1.rs:47:36
| |
LL | let x = 0;
| ----- help: consider using `const` instead of `let`: `const x`
...
LL | asm!("{}", const const_bar(x)); LL | asm!("{}", const const_bar(x));
| ^ non-constant value | ^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const x = 0;
| ~~~~~
error: invalid `sym` operand error: invalid `sym` operand
--> $DIR/type-check-1.rs:49:24 --> $DIR/type-check-1.rs:49:24

View file

@ -15,29 +15,35 @@ LL | asm!("{1}", in("eax") foo, const bar);
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/x86_64_parse_error.rs:13:46 --> $DIR/x86_64_parse_error.rs:13:46
| |
LL | let mut bar = 0;
| ----------- help: consider using `const` instead of `let`: `const bar`
...
LL | asm!("{a}", in("eax") foo, a = const bar); LL | asm!("{a}", in("eax") foo, a = const bar);
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const bar = 0;
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/x86_64_parse_error.rs:15:46 --> $DIR/x86_64_parse_error.rs:15:46
| |
LL | let mut bar = 0;
| ----------- help: consider using `const` instead of `let`: `const bar`
...
LL | asm!("{a}", in("eax") foo, a = const bar); LL | asm!("{a}", in("eax") foo, a = const bar);
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const bar = 0;
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/x86_64_parse_error.rs:17:42 --> $DIR/x86_64_parse_error.rs:17:42
| |
LL | let mut bar = 0;
| ----------- help: consider using `const` instead of `let`: `const bar`
...
LL | asm!("{1}", in("eax") foo, const bar); LL | asm!("{1}", in("eax") foo, const bar);
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const bar = 0;
| ~~~~~
error: aborting due to 5 previous errors error: aborting due to 5 previous errors

View file

@ -1,10 +1,13 @@
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/legacy-const-generics-bad.rs:7:35 --> $DIR/legacy-const-generics-bad.rs:7:35
| |
LL | let a = 1;
| ----- help: consider using `const` instead of `let`: `const a`
LL | legacy_const_generics::foo(0, a, 2); LL | legacy_const_generics::foo(0, a, 2);
| ^ non-constant value | ^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const a = 1;
| ~~~~~
error: generic parameters may not be used in const operations error: generic parameters may not be used in const operations
--> $DIR/legacy-const-generics-bad.rs:12:35 --> $DIR/legacy-const-generics-bad.rs:12:35

View file

@ -1,11 +1,13 @@
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-3521.rs:8:15 --> $DIR/issue-3521.rs:8:15
| |
LL | let foo: isize = 100;
| ------- help: consider using `const` instead of `let`: `const foo`
...
LL | Bar = foo LL | Bar = foo
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const foo: isize = 100;
| ~~~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -1,20 +1,24 @@
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-91560.rs:10:19 --> $DIR/issue-91560.rs:10:19
| |
LL | let mut length: usize = 2;
| -------------- help: consider using `const` instead of `let`: `const length`
LL |
LL | let arr = [0; length]; LL | let arr = [0; length];
| ^^^^^^ non-constant value | ^^^^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const length: usize = 2;
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-91560.rs:17:19 --> $DIR/issue-91560.rs:17:19
| |
LL | let length: usize = 2;
| ------------ help: consider using `const` instead of `let`: `const length`
LL |
LL | let arr = [0; length]; LL | let arr = [0; length];
| ^^^^^^ non-constant value | ^^^^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const length: usize = 2;
| ~~~~~
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -2,18 +2,23 @@ error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/non-const-value-in-const.rs:3:20 --> $DIR/non-const-value-in-const.rs:3:20
| |
LL | const Y: i32 = x; LL | const Y: i32 = x;
| ------- ^ non-constant value | ^ non-constant value
| | |
| help: consider using `let` instead of `const`: `let Y` help: consider using `let` instead of `const`
|
LL | let Y: i32 = x;
| ~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/non-const-value-in-const.rs:6:17 --> $DIR/non-const-value-in-const.rs:6:17
| |
LL | let x = 5;
| ----- help: consider using `const` instead of `let`: `const x`
...
LL | let _ = [0; x]; LL | let _ = [0; x];
| ^ non-constant value | ^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const x = 5;
| ~~~~~
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -1,10 +1,13 @@
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/E0435.rs:5:17 --> $DIR/E0435.rs:5:17
| |
LL | let foo: usize = 42;
| ------- help: consider using `const` instead of `let`: `const foo`
LL | let _: [u8; foo]; LL | let _: [u8; foo];
| ^^^ non-constant value | ^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const foo: usize = 42;
| ~~~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -2,9 +2,12 @@ error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-27433.rs:5:23 --> $DIR/issue-27433.rs:5:23
| |
LL | const FOO : u32 = foo; LL | const FOO : u32 = foo;
| --------- ^^^ non-constant value | ^^^ non-constant value
| | |
| help: consider using `let` instead of `const`: `let FOO` help: consider using `let` instead of `const`
|
LL | let FOO : u32 = foo;
| ~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -2,9 +2,12 @@ error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-3521-2.rs:5:23 --> $DIR/issue-3521-2.rs:5:23
| |
LL | static y: isize = foo + 1; LL | static y: isize = foo + 1;
| -------- ^^^ non-constant value | ^^^ non-constant value
| | |
| help: consider using `let` instead of `static`: `let y` help: consider using `let` instead of `static`
|
LL | let y: isize = foo + 1;
| ~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -2,9 +2,12 @@ error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-3668-2.rs:4:27 --> $DIR/issue-3668-2.rs:4:27
| |
LL | static child: isize = x + 1; LL | static child: isize = x + 1;
| ------------ ^ non-constant value | ^ non-constant value
| | |
| help: consider using `let` instead of `static`: `let child` help: consider using `let` instead of `static`
|
LL | let child: isize = x + 1;
| ~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -2,9 +2,12 @@ error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-3668.rs:8:34 --> $DIR/issue-3668.rs:8:34
| |
LL | static childVal: Box<P> = self.child.get(); LL | static childVal: Box<P> = self.child.get();
| --------------- ^^^^ non-constant value | ^^^^ non-constant value
| | |
| help: consider using `let` instead of `static`: `let childVal` help: consider using `let` instead of `static`
|
LL | let childVal: Box<P> = self.child.get();
| ~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -1,11 +1,13 @@
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-44239.rs:8:26 --> $DIR/issue-44239.rs:8:26
| |
LL | let n: usize = 0;
| ----- help: consider using `const` instead of `let`: `const n`
...
LL | const N: usize = n; LL | const N: usize = n;
| ^ non-constant value | ^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const n: usize = 0;
| ~~~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -2,7 +2,12 @@ error: non-item in item list
--> $DIR/suggest-assoc-const.rs:5:5 --> $DIR/suggest-assoc-const.rs:5:5
| |
LL | let _X: i32; LL | let _X: i32;
| ^^^ help: consider using `const` instead of `let` for associated const: `const` | ^^^
|
help: consider using `const` instead of `let` for associated const
|
LL | const _X: i32;
| ~~~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -1,10 +1,13 @@
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/repeat_count.rs:5:17 --> $DIR/repeat_count.rs:5:17
| |
LL | let n = 1;
| ----- help: consider using `const` instead of `let`: `const n`
LL | let a = [0; n]; LL | let a = [0; n];
| ^ non-constant value | ^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const n = 1;
| ~~~~~
error[E0308]: mismatched types error[E0308]: mismatched types
--> $DIR/repeat_count.rs:7:17 --> $DIR/repeat_count.rs:7:17

View file

@ -2,9 +2,12 @@ error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/type-dependent-def-issue-49241.rs:3:22 --> $DIR/type-dependent-def-issue-49241.rs:3:22
| |
LL | const l: usize = v.count(); LL | const l: usize = v.count();
| ------- ^ non-constant value | ^ non-constant value
| | |
| help: consider using `let` instead of `const`: `let l` help: consider using `let` instead of `const`
|
LL | let l: usize = v.count();
| ~~~
error: aborting due to 1 previous error error: aborting due to 1 previous error

View file

@ -1,18 +1,24 @@
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-42060.rs:3:23 --> $DIR/issue-42060.rs:3:23
| |
LL | let thing = ();
| --------- help: consider using `const` instead of `let`: `const thing`
LL | let other: typeof(thing) = thing; LL | let other: typeof(thing) = thing;
| ^^^^^ non-constant value | ^^^^^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const thing = ();
| ~~~~~
error[E0435]: attempt to use a non-constant value in a constant error[E0435]: attempt to use a non-constant value in a constant
--> $DIR/issue-42060.rs:9:13 --> $DIR/issue-42060.rs:9:13
| |
LL | let q = 1;
| ----- help: consider using `const` instead of `let`: `const q`
LL | <typeof(q)>::N LL | <typeof(q)>::N
| ^ non-constant value | ^ non-constant value
|
help: consider using `const` instead of `let`
|
LL | const q = 1;
| ~~~~~
error[E0516]: `typeof` is a reserved keyword but unimplemented error[E0516]: `typeof` is a reserved keyword but unimplemented
--> $DIR/issue-42060.rs:3:16 --> $DIR/issue-42060.rs:3:16