summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_attr/src
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
commitd1b2d29528b7794b41e66fc2136e395a02f8529b (patch)
treea4a17504b260206dec3cf55b2dca82929a348ac2 /compiler/rustc_attr/src
parentReleasing progress-linux version 1.72.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.tar.xz
rustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.zip
Merging upstream version 1.73.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'compiler/rustc_attr/src')
-rw-r--r--compiler/rustc_attr/src/builtin.rs40
1 files changed, 27 insertions, 13 deletions
diff --git a/compiler/rustc_attr/src/builtin.rs b/compiler/rustc_attr/src/builtin.rs
index 372a58857..3592287b9 100644
--- a/compiler/rustc_attr/src/builtin.rs
+++ b/compiler/rustc_attr/src/builtin.rs
@@ -28,7 +28,7 @@ pub fn rust_version_symbol() -> Symbol {
}
pub fn is_builtin_attr(attr: &Attribute) -> bool {
- attr.is_doc_comment() || attr.ident().filter(|ident| is_builtin_attr_name(ident.name)).is_some()
+ attr.is_doc_comment() || attr.ident().is_some_and(|ident| is_builtin_attr_name(ident.name))
}
enum AttrError {
@@ -800,18 +800,15 @@ pub struct Deprecation {
}
/// Finds the deprecation attribute. `None` if none exists.
-pub fn find_deprecation(sess: &Session, attrs: &[Attribute]) -> Option<(Deprecation, Span)> {
- find_deprecation_generic(sess, attrs.iter())
-}
-
-fn find_deprecation_generic<'a, I>(sess: &Session, attrs_iter: I) -> Option<(Deprecation, Span)>
-where
- I: Iterator<Item = &'a Attribute>,
-{
+pub fn find_deprecation(
+ sess: &Session,
+ features: &Features,
+ attrs: &[Attribute],
+) -> Option<(Deprecation, Span)> {
let mut depr: Option<(Deprecation, Span)> = None;
- let is_rustc = sess.features_untracked().staged_api;
+ let is_rustc = features.staged_api;
- 'outer: for attr in attrs_iter {
+ 'outer: for attr in attrs {
if !attr.has_name(sym::deprecated) {
continue;
}
@@ -872,7 +869,7 @@ where
}
}
sym::suggestion => {
- if !sess.features_untracked().deprecated_suggestion {
+ if !features.deprecated_suggestion {
sess.emit_err(session_diagnostics::DeprecatedItemSuggestion {
span: mi.span,
is_nightly: sess.is_nightly_build().then_some(()),
@@ -890,7 +887,7 @@ where
meta.span(),
AttrError::UnknownMetaItem(
pprust::path_to_string(&mi.path),
- if sess.features_untracked().deprecated_suggestion {
+ if features.deprecated_suggestion {
&["since", "note", "suggestion"]
} else {
&["since", "note"]
@@ -1217,3 +1214,20 @@ pub fn parse_alignment(node: &ast::LitKind) -> Result<u32, &'static str> {
Err("not an unsuffixed integer")
}
}
+
+/// Read the content of a `rustc_confusables` attribute, and return the list of candidate names.
+pub fn parse_confusables(attr: &Attribute) -> Option<Vec<Symbol>> {
+ let meta = attr.meta()?;
+ let MetaItem { kind: MetaItemKind::List(ref metas), .. } = meta else { return None };
+
+ let mut candidates = Vec::new();
+
+ for meta in metas {
+ let NestedMetaItem::Lit(meta_lit) = meta else {
+ return None;
+ };
+ candidates.push(meta_lit.symbol);
+ }
+
+ return Some(candidates);
+}