mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 22:41:50 +00:00
Update invalid crate attributes, add help message
tidy run update invalid crate attributes, improve error update test outputs de-capitalise error update tests Update invalid crate attributes, add help message Update - generate span without using BytePos Add correct dependancies Update - generate suggestion without BytePos Tidy run update tests Generate Suggestion without BytePos Add all builtin attributes add err builtin inner attr at top of crate fix tests add err builtin inner attr at top of crate tidy fix add err builtin inner attr at top of crate
This commit is contained in:
parent
2a9e0831d6
commit
3827b6451c
@ -1953,7 +1953,12 @@ fn is_c_like_enum(item: &Item<'_>) -> bool {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Fix "Cannot determine resolution" error and remove built-in macros
|
||||
// from this check.
|
||||
fn check_invalid_crate_level_attr(tcx: TyCtxt<'_>, attrs: &[Attribute]) {
|
||||
// Check for builtin attributes at the crate level
|
||||
// which were unsuccessfully resolved due to cannot determine
|
||||
// resolution for the attribute macro error.
|
||||
const ATTRS_TO_CHECK: &[Symbol] = &[
|
||||
sym::macro_export,
|
||||
sym::repr,
|
||||
@ -1961,20 +1966,39 @@ fn check_invalid_crate_level_attr(tcx: TyCtxt<'_>, attrs: &[Attribute]) {
|
||||
sym::automatically_derived,
|
||||
sym::start,
|
||||
sym::rustc_main,
|
||||
sym::derive,
|
||||
sym::test,
|
||||
sym::test_case,
|
||||
sym::global_allocator,
|
||||
sym::bench,
|
||||
];
|
||||
|
||||
for attr in attrs {
|
||||
for attr_to_check in ATTRS_TO_CHECK {
|
||||
if attr.has_name(*attr_to_check) {
|
||||
tcx.sess
|
||||
.struct_span_err(
|
||||
// This function should only be called with crate attributes
|
||||
// which are inner attributes always but lets check to make sure
|
||||
if attr.style == AttrStyle::Inner {
|
||||
for attr_to_check in ATTRS_TO_CHECK {
|
||||
if attr.has_name(*attr_to_check) {
|
||||
let mut err = tcx.sess.struct_span_err(
|
||||
attr.span,
|
||||
&format!(
|
||||
"`{}` attribute cannot be used at crate level",
|
||||
attr_to_check.to_ident_string()
|
||||
),
|
||||
)
|
||||
.emit();
|
||||
);
|
||||
// Only emit an error with a suggestion if we can create a
|
||||
// string out of the attribute span
|
||||
if let Ok(src) = tcx.sess.source_map().span_to_snippet(attr.span) {
|
||||
let replacement = src.replace("#!", "#");
|
||||
err.span_suggestion_verbose(
|
||||
attr.span,
|
||||
"perhaps you meant to use an outer attribute",
|
||||
replacement,
|
||||
rustc_errors::Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
err.emit()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,16 @@
|
||||
#![derive(Copy)] //~ ERROR cannot determine resolution for the attribute macro `derive`
|
||||
//~^ ERROR `derive` attribute cannot be used at crate level
|
||||
|
||||
#![test]//~ ERROR cannot determine resolution for the attribute macro `test`
|
||||
//~^ ERROR `test` attribute cannot be used at crate level
|
||||
|
||||
#![test_case]//~ ERROR cannot determine resolution for the attribute macro `test_case`
|
||||
//~^ ERROR `test_case` attribute cannot be used at crate level
|
||||
|
||||
#![bench]//~ ERROR cannot determine resolution for the attribute macro `bench`
|
||||
//~^ ERROR `bench` attribute cannot be used at crate level
|
||||
|
||||
#![global_allocator]//~ ERROR cannot determine resolution for the attribute macro `global_allocator`
|
||||
//~^ ERROR `global_allocator` attribute cannot be used at crate level
|
||||
|
||||
fn main() {}
|
||||
|
@ -6,5 +6,92 @@ LL | #![derive(Copy)]
|
||||
|
|
||||
= note: import resolution is stuck, try simplifying macro imports
|
||||
|
||||
error: aborting due to previous error
|
||||
error: cannot determine resolution for the attribute macro `test`
|
||||
--> $DIR/issue-36617.rs:4:4
|
||||
|
|
||||
LL | #![test]
|
||||
| ^^^^
|
||||
|
|
||||
= note: import resolution is stuck, try simplifying macro imports
|
||||
|
||||
error: cannot determine resolution for the attribute macro `test_case`
|
||||
--> $DIR/issue-36617.rs:7:4
|
||||
|
|
||||
LL | #![test_case]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: import resolution is stuck, try simplifying macro imports
|
||||
|
||||
error: cannot determine resolution for the attribute macro `bench`
|
||||
--> $DIR/issue-36617.rs:10:4
|
||||
|
|
||||
LL | #![bench]
|
||||
| ^^^^^
|
||||
|
|
||||
= note: import resolution is stuck, try simplifying macro imports
|
||||
|
||||
error: cannot determine resolution for the attribute macro `global_allocator`
|
||||
--> $DIR/issue-36617.rs:13:4
|
||||
|
|
||||
LL | #![global_allocator]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: import resolution is stuck, try simplifying macro imports
|
||||
|
||||
error: `derive` attribute cannot be used at crate level
|
||||
--> $DIR/issue-36617.rs:1:1
|
||||
|
|
||||
LL | #![derive(Copy)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[derive(Copy)]
|
||||
| ~~~~~~~~~~~~~~~
|
||||
|
||||
error: `test` attribute cannot be used at crate level
|
||||
--> $DIR/issue-36617.rs:4:1
|
||||
|
|
||||
LL | #![test]
|
||||
| ^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[test]
|
||||
| ~~~~~~~
|
||||
|
||||
error: `test_case` attribute cannot be used at crate level
|
||||
--> $DIR/issue-36617.rs:7:1
|
||||
|
|
||||
LL | #![test_case]
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[test_case]
|
||||
| ~~~~~~~~~~~~
|
||||
|
||||
error: `bench` attribute cannot be used at crate level
|
||||
--> $DIR/issue-36617.rs:10:1
|
||||
|
|
||||
LL | #![bench]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[bench]
|
||||
| ~~~~~~~~
|
||||
|
||||
error: `global_allocator` attribute cannot be used at crate level
|
||||
--> $DIR/issue-36617.rs:13:1
|
||||
|
|
||||
LL | #![global_allocator]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[global_allocator]
|
||||
| ~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
|
@ -6,5 +6,5 @@
|
||||
|
||||
#![bench = "4100"]
|
||||
//~^ ERROR cannot determine resolution for the attribute macro `bench`
|
||||
|
||||
//~^^ ERROR `bench` attribute cannot be used at crate level
|
||||
fn main() {}
|
||||
|
@ -6,5 +6,16 @@ LL | #![bench = "4100"]
|
||||
|
|
||||
= note: import resolution is stuck, try simplifying macro imports
|
||||
|
||||
error: aborting due to previous error
|
||||
error: `bench` attribute cannot be used at crate level
|
||||
--> $DIR/issue-43106-gating-of-bench.rs:7:1
|
||||
|
|
||||
LL | #![bench = "4100"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[bench = "4100"]
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -129,36 +129,66 @@ error: `macro_export` attribute cannot be used at crate level
|
||||
|
|
||||
LL | #![macro_export]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[macro_export]
|
||||
|
|
||||
|
||||
error: `rustc_main` attribute cannot be used at crate level
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:14:1
|
||||
|
|
||||
LL | #![rustc_main]
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[rustc_main]
|
||||
| ~~~~~~~~~~~~~
|
||||
|
||||
error: `start` attribute cannot be used at crate level
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:16:1
|
||||
|
|
||||
LL | #![start]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[start]
|
||||
|
|
||||
|
||||
error: `repr` attribute cannot be used at crate level
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:18:1
|
||||
|
|
||||
LL | #![repr()]
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[repr()]
|
||||
|
|
||||
|
||||
error: `path` attribute cannot be used at crate level
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:20:1
|
||||
|
|
||||
LL | #![path = "3800"]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[path = "3800"]
|
||||
|
|
||||
|
||||
error: `automatically_derived` attribute cannot be used at crate level
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:22:1
|
||||
|
|
||||
LL | #![automatically_derived]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[automatically_derived]
|
||||
|
|
||||
|
||||
error[E0518]: attribute should be applied to function or closure
|
||||
--> $DIR/issue-43106-gating-of-builtin-attrs-error.rs:36:17
|
||||
|
@ -3,5 +3,5 @@
|
||||
#![allow(soft_unstable)]
|
||||
#![test = "4200"]
|
||||
//~^ ERROR cannot determine resolution for the attribute macro `test`
|
||||
|
||||
//~^^ ERROR `test` attribute cannot be used at crate level
|
||||
fn main() {}
|
||||
|
@ -6,5 +6,16 @@ LL | #![test = "4200"]
|
||||
|
|
||||
= note: import resolution is stuck, try simplifying macro imports
|
||||
|
||||
error: aborting due to previous error
|
||||
error: `test` attribute cannot be used at crate level
|
||||
--> $DIR/issue-43106-gating-of-test.rs:4:1
|
||||
|
|
||||
LL | #![test = "4200"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[test = "4200"]
|
||||
|
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -2,3 +2,4 @@
|
||||
|
||||
#![allow(soft_unstable)]
|
||||
#![test] //~ ERROR cannot determine resolution for the attribute macro `test`
|
||||
//~^ ERROR 4:1: 4:9: `test` attribute cannot be used at crate level
|
||||
|
@ -6,5 +6,16 @@ LL | #![test]
|
||||
|
|
||||
= note: import resolution is stuck, try simplifying macro imports
|
||||
|
||||
error: aborting due to previous error
|
||||
error: `test` attribute cannot be used at crate level
|
||||
--> $DIR/issue-28134.rs:4:1
|
||||
|
|
||||
LL | #![test]
|
||||
| ^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[test]
|
||||
| ~~~~~~~
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
#![derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
||||
//~^ ERROR cannot determine resolution for the attribute macro `derive`
|
||||
//~^^ ERROR `derive` attribute cannot be used at crate level
|
||||
struct DerivedOn;
|
||||
|
||||
fn main() {}
|
||||
|
@ -6,5 +6,16 @@ LL | #![derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
||||
|
|
||||
= note: import resolution is stuck, try simplifying macro imports
|
||||
|
||||
error: aborting due to previous error
|
||||
error: `derive` attribute cannot be used at crate level
|
||||
--> $DIR/issue-43927-non-ADT-derive.rs:1:1
|
||||
|
|
||||
LL | #![derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: perhaps you meant to use an outer attribute
|
||||
|
|
||||
LL | #[derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user