Address review comments
This commit is contained in:
parent
09fff50637
commit
83f553c95c
@ -333,6 +333,22 @@ impl NonMacroAttrKind {
|
|||||||
NonMacroAttrKind::LegacyPluginHelper => "legacy plugin helper attribute",
|
NonMacroAttrKind::LegacyPluginHelper => "legacy plugin helper attribute",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn article(self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
NonMacroAttrKind::Registered => "an",
|
||||||
|
_ => "a",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Users of some attributes cannot mark them as used, so they are considered always used.
|
||||||
|
pub fn is_used(self) -> bool {
|
||||||
|
match self {
|
||||||
|
NonMacroAttrKind::Tool | NonMacroAttrKind::DeriveHelper => true,
|
||||||
|
NonMacroAttrKind::Builtin | NonMacroAttrKind::Registered |
|
||||||
|
NonMacroAttrKind::LegacyPluginHelper => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Id> Res<Id> {
|
impl<Id> Res<Id> {
|
||||||
@ -389,6 +405,7 @@ impl<Id> Res<Id> {
|
|||||||
pub fn article(&self) -> &'static str {
|
pub fn article(&self) -> &'static str {
|
||||||
match *self {
|
match *self {
|
||||||
Res::Def(kind, _) => kind.article(),
|
Res::Def(kind, _) => kind.article(),
|
||||||
|
Res::NonMacroAttr(kind) => kind.article(),
|
||||||
Res::Err => "an",
|
Res::Err => "an",
|
||||||
_ => "a",
|
_ => "a",
|
||||||
}
|
}
|
||||||
|
@ -141,8 +141,7 @@ impl<'a> Resolver<'a> {
|
|||||||
crate fn get_macro(&mut self, res: Res) -> Option<Lrc<SyntaxExtension>> {
|
crate fn get_macro(&mut self, res: Res) -> Option<Lrc<SyntaxExtension>> {
|
||||||
match res {
|
match res {
|
||||||
Res::Def(DefKind::Macro(..), def_id) => self.get_macro_by_def_id(def_id),
|
Res::Def(DefKind::Macro(..), def_id) => self.get_macro_by_def_id(def_id),
|
||||||
Res::NonMacroAttr(attr_kind) =>
|
Res::NonMacroAttr(attr_kind) => Some(self.non_macro_attr(attr_kind.is_used())),
|
||||||
Some(self.non_macro_attr(attr_kind == NonMacroAttrKind::Tool)),
|
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1472,7 +1472,7 @@ impl<'a> Resolver<'a> {
|
|||||||
Scope::MacroRules(..) => true,
|
Scope::MacroRules(..) => true,
|
||||||
Scope::CrateRoot => true,
|
Scope::CrateRoot => true,
|
||||||
Scope::Module(..) => true,
|
Scope::Module(..) => true,
|
||||||
Scope::RegisteredAttrs => true,
|
Scope::RegisteredAttrs => use_prelude,
|
||||||
Scope::MacroUsePrelude => use_prelude || rust_2015,
|
Scope::MacroUsePrelude => use_prelude || rust_2015,
|
||||||
Scope::BuiltinAttrs => true,
|
Scope::BuiltinAttrs => true,
|
||||||
Scope::LegacyPluginHelpers => use_prelude || rust_2015,
|
Scope::LegacyPluginHelpers => use_prelude || rust_2015,
|
||||||
|
@ -94,6 +94,7 @@ fn fast_print_path(path: &ast::Path) -> Symbol {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The code common between processing `#![register_tool]` and `#![register_attr]`.
|
||||||
fn registered_idents(
|
fn registered_idents(
|
||||||
sess: &Session,
|
sess: &Session,
|
||||||
attrs: &[ast::Attribute],
|
attrs: &[ast::Attribute],
|
||||||
@ -832,7 +833,8 @@ impl<'a> Resolver<'a> {
|
|||||||
res: Option<Res>, span: Span) {
|
res: Option<Res>, span: Span) {
|
||||||
if let Some(Res::NonMacroAttr(kind)) = res {
|
if let Some(Res::NonMacroAttr(kind)) = res {
|
||||||
if kind != NonMacroAttrKind::Tool && binding.map_or(true, |b| b.is_import()) {
|
if kind != NonMacroAttrKind::Tool && binding.map_or(true, |b| b.is_import()) {
|
||||||
let msg = format!("cannot use a {} through an import", kind.descr());
|
let msg =
|
||||||
|
format!("cannot use {} {} through an import", kind.article(), kind.descr());
|
||||||
let mut err = self.session.struct_span_err(span, &msg);
|
let mut err = self.session.struct_span_err(span, &msg);
|
||||||
if let Some(binding) = binding {
|
if let Some(binding) = binding {
|
||||||
err.span_note(binding.span, &format!("the {} imported here", kind.descr()));
|
err.span_note(binding.span, &format!("the {} imported here", kind.descr()));
|
||||||
|
@ -524,10 +524,10 @@ declare_features! (
|
|||||||
(active, abi_efiapi, "1.40.0", Some(65815), None),
|
(active, abi_efiapi, "1.40.0", Some(65815), None),
|
||||||
|
|
||||||
/// Allows using the `#[register_attr]` attribute.
|
/// Allows using the `#[register_attr]` attribute.
|
||||||
(active, register_attr, "1.41.0", Some(29642), None),
|
(active, register_attr, "1.41.0", Some(66080), None),
|
||||||
|
|
||||||
/// Allows using the `#[register_attr]` attribute.
|
/// Allows using the `#[register_attr]` attribute.
|
||||||
(active, register_tool, "1.41.0", Some(44690), None),
|
(active, register_tool, "1.41.0", Some(66079), None),
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// feature-group-end: actual feature gates
|
// feature-group-end: actual feature gates
|
||||||
|
@ -330,11 +330,11 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
|
|||||||
gated!(ffi_returns_twice, Whitelisted, template!(Word), experimental!(ffi_returns_twice)),
|
gated!(ffi_returns_twice, Whitelisted, template!(Word), experimental!(ffi_returns_twice)),
|
||||||
gated!(track_caller, Whitelisted, template!(Word), experimental!(track_caller)),
|
gated!(track_caller, Whitelisted, template!(Word), experimental!(track_caller)),
|
||||||
gated!(
|
gated!(
|
||||||
register_attr, Whitelisted, template!(List: "attr1, attr2, ..."),
|
register_attr, CrateLevel, template!(List: "attr1, attr2, ..."),
|
||||||
experimental!(register_attr),
|
experimental!(register_attr),
|
||||||
),
|
),
|
||||||
gated!(
|
gated!(
|
||||||
register_tool, Whitelisted, template!(List: "tool1, tool2, ..."),
|
register_tool, CrateLevel, template!(List: "tool1, tool2, ..."),
|
||||||
experimental!(register_tool),
|
experimental!(register_tool),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
14
src/test/ui/attributes/register-attr-tool-import.rs
Normal file
14
src/test/ui/attributes/register-attr-tool-import.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// edition:2018
|
||||||
|
|
||||||
|
#![feature(register_attr)]
|
||||||
|
#![feature(register_tool)]
|
||||||
|
|
||||||
|
#![register_attr(attr)]
|
||||||
|
#![register_tool(tool)]
|
||||||
|
|
||||||
|
use attr as renamed_attr; // OK
|
||||||
|
use tool as renamed_tool; // OK
|
||||||
|
|
||||||
|
#[renamed_attr] //~ ERROR cannot use an explicitly registered attribute through an import
|
||||||
|
#[renamed_tool::attr] //~ ERROR cannot use a tool module through an import
|
||||||
|
fn main() {}
|
26
src/test/ui/attributes/register-attr-tool-import.stderr
Normal file
26
src/test/ui/attributes/register-attr-tool-import.stderr
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
error: cannot use an explicitly registered attribute through an import
|
||||||
|
--> $DIR/register-attr-tool-import.rs:12:3
|
||||||
|
|
|
||||||
|
LL | #[renamed_attr]
|
||||||
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
note: the explicitly registered attribute imported here
|
||||||
|
--> $DIR/register-attr-tool-import.rs:9:5
|
||||||
|
|
|
||||||
|
LL | use attr as renamed_attr; // OK
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: cannot use a tool module through an import
|
||||||
|
--> $DIR/register-attr-tool-import.rs:13:3
|
||||||
|
|
|
||||||
|
LL | #[renamed_tool::attr]
|
||||||
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
note: the tool module imported here
|
||||||
|
--> $DIR/register-attr-tool-import.rs:10:5
|
||||||
|
|
|
||||||
|
LL | use tool as renamed_tool; // OK
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
14
src/test/ui/attributes/register-attr-tool-prelude.rs
Normal file
14
src/test/ui/attributes/register-attr-tool-prelude.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#![feature(register_attr)]
|
||||||
|
#![feature(register_tool)]
|
||||||
|
|
||||||
|
#![register_attr(attr)]
|
||||||
|
#![register_tool(tool)]
|
||||||
|
|
||||||
|
#[no_implicit_prelude]
|
||||||
|
mod m {
|
||||||
|
#[attr] //~ ERROR cannot find attribute `attr` in this scope
|
||||||
|
#[tool::attr] //~ ERROR failed to resolve: use of undeclared type or module `tool`
|
||||||
|
fn check() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
15
src/test/ui/attributes/register-attr-tool-prelude.stderr
Normal file
15
src/test/ui/attributes/register-attr-tool-prelude.stderr
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
error[E0433]: failed to resolve: use of undeclared type or module `tool`
|
||||||
|
--> $DIR/register-attr-tool-prelude.rs:10:7
|
||||||
|
|
|
||||||
|
LL | #[tool::attr]
|
||||||
|
| ^^^^ use of undeclared type or module `tool`
|
||||||
|
|
||||||
|
error: cannot find attribute `attr` in this scope
|
||||||
|
--> $DIR/register-attr-tool-prelude.rs:9:7
|
||||||
|
|
|
||||||
|
LL | #[attr]
|
||||||
|
| ^^^^
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0433`.
|
10
src/test/ui/attributes/register-attr-tool-unused.rs
Normal file
10
src/test/ui/attributes/register-attr-tool-unused.rs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#![deny(unused)]
|
||||||
|
|
||||||
|
#![feature(register_attr)]
|
||||||
|
#![feature(register_tool)]
|
||||||
|
|
||||||
|
#[register_attr(attr)] //~ ERROR crate-level attribute should be an inner attribute
|
||||||
|
//~| ERROR unused attribute
|
||||||
|
#[register_tool(tool)] //~ ERROR crate-level attribute should be an inner attribute
|
||||||
|
//~| ERROR unused attribute
|
||||||
|
fn main() {}
|
33
src/test/ui/attributes/register-attr-tool-unused.stderr
Normal file
33
src/test/ui/attributes/register-attr-tool-unused.stderr
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
error: unused attribute
|
||||||
|
--> $DIR/register-attr-tool-unused.rs:6:1
|
||||||
|
|
|
||||||
|
LL | #[register_attr(attr)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
note: lint level defined here
|
||||||
|
--> $DIR/register-attr-tool-unused.rs:1:9
|
||||||
|
|
|
||||||
|
LL | #![deny(unused)]
|
||||||
|
| ^^^^^^
|
||||||
|
= note: `#[deny(unused_attributes)]` implied by `#[deny(unused)]`
|
||||||
|
|
||||||
|
error: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||||
|
--> $DIR/register-attr-tool-unused.rs:6:1
|
||||||
|
|
|
||||||
|
LL | #[register_attr(attr)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: unused attribute
|
||||||
|
--> $DIR/register-attr-tool-unused.rs:8:1
|
||||||
|
|
|
||||||
|
LL | #[register_tool(tool)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
|
||||||
|
--> $DIR/register-attr-tool-unused.rs:8:1
|
||||||
|
|
|
||||||
|
LL | #[register_tool(tool)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
@ -4,7 +4,7 @@ error[E0658]: the `#[register_attr]` attribute is an experimental feature
|
|||||||
LL | #![register_attr(attr)]
|
LL | #![register_attr(attr)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: for more information, see https://github.com/rust-lang/rust/issues/29642
|
= note: for more information, see https://github.com/rust-lang/rust/issues/66080
|
||||||
= help: add `#![feature(register_attr)]` to the crate attributes to enable
|
= help: add `#![feature(register_attr)]` to the crate attributes to enable
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
@ -4,7 +4,7 @@ error[E0658]: the `#[register_tool]` attribute is an experimental feature
|
|||||||
LL | #![register_tool(tool)]
|
LL | #![register_tool(tool)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: for more information, see https://github.com/rust-lang/rust/issues/44690
|
= note: for more information, see https://github.com/rust-lang/rust/issues/66079
|
||||||
= help: add `#![feature(register_tool)]` to the crate attributes to enable
|
= help: add `#![feature(register_tool)]` to the crate attributes to enable
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
Loading…
x
Reference in New Issue
Block a user