Auto merge of #129670 - est31:cfg_attr_crate_type_name_error, r=Urgau
Make deprecated_cfg_attr_crate_type_name a hard error Turns the forward compatibility lint added by #83744 into a hard error, so now, while the `#![crate_name]` and `#![crate_type]` attributes are still allowed in raw form, they are now forbidden to be nested inside a `#![cfg_attr()]` attribute. The following will now be an error: ```Rust #![cfg_attr(foo, crate_name = "foobar")] #![cfg_attr(foo, crate_type = "bin")] ``` This code will continue working and is not deprecated: ```Rust #![crate_name = "foobar"] #![crate_type = "lib"] ``` The reasoning for this is explained in #83744: it allows us to not have to cfg-expand in order to determine the crate's type and name. As of filing the PR, exactly two years have passed since #99784 has been merged, which has turned the lint's default warning level into an error, so there has been ample time to move off the now-forbidden syntax. cc #91632 - tracking issue for the lint
This commit is contained in:
commit
8422e27b27
12 changed files with 60 additions and 118 deletions
|
@ -23,8 +23,9 @@ use thin_vec::ThinVec;
|
|||
use tracing::instrument;
|
||||
|
||||
use crate::errors::{
|
||||
FeatureNotAllowed, FeatureRemoved, FeatureRemovedReason, InvalidCfg, MalformedFeatureAttribute,
|
||||
MalformedFeatureAttributeHelp, RemoveExprNotSupported,
|
||||
CrateNameInCfgAttr, CrateTypeInCfgAttr, FeatureNotAllowed, FeatureRemoved,
|
||||
FeatureRemovedReason, InvalidCfg, MalformedFeatureAttribute, MalformedFeatureAttributeHelp,
|
||||
RemoveExprNotSupported,
|
||||
};
|
||||
|
||||
/// A folder that strips out items that do not belong in the current configuration.
|
||||
|
@ -360,20 +361,10 @@ impl<'a> StripUnconfigured<'a> {
|
|||
item_span,
|
||||
);
|
||||
if attr.has_name(sym::crate_type) {
|
||||
self.sess.psess.buffer_lint(
|
||||
rustc_lint_defs::builtin::DEPRECATED_CFG_ATTR_CRATE_TYPE_NAME,
|
||||
attr.span,
|
||||
ast::CRATE_NODE_ID,
|
||||
BuiltinLintDiag::CrateTypeInCfgAttr,
|
||||
);
|
||||
self.sess.dcx().emit_err(CrateTypeInCfgAttr { span: attr.span });
|
||||
}
|
||||
if attr.has_name(sym::crate_name) {
|
||||
self.sess.psess.buffer_lint(
|
||||
rustc_lint_defs::builtin::DEPRECATED_CFG_ATTR_CRATE_TYPE_NAME,
|
||||
attr.span,
|
||||
ast::CRATE_NODE_ID,
|
||||
BuiltinLintDiag::CrateNameInCfgAttr,
|
||||
);
|
||||
self.sess.dcx().emit_err(CrateNameInCfgAttr { span: attr.span });
|
||||
}
|
||||
attr
|
||||
}
|
||||
|
|
|
@ -467,6 +467,20 @@ pub(crate) struct GlobDelegationOutsideImpls {
|
|||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(expand_crate_name_in_cfg_attr)]
|
||||
pub(crate) struct CrateNameInCfgAttr {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(expand_crate_type_in_cfg_attr)]
|
||||
pub(crate) struct CrateTypeInCfgAttr {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(expand_glob_delegation_traitless_qpath)]
|
||||
pub(crate) struct GlobDelegationTraitlessQpath {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue