Port rustc_conversion_suggestion to the new attribute parser
This commit is contained in:
parent
9cc2924959
commit
9d10b2ff37
6 changed files with 35 additions and 15 deletions
|
|
@ -395,6 +395,22 @@ impl<S: Stage> SingleAttributeParser<S> for RustcDeprecatedSafe2024Parser {
|
|||
Some(AttributeKind::RustcDeprecatedSafe2024 { suggestion })
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) struct RustcConversionSuggestionParser;
|
||||
|
||||
impl<S: Stage> NoArgsAttributeParser<S> for RustcConversionSuggestionParser {
|
||||
const PATH: &[Symbol] = &[sym::rustc_conversion_suggestion];
|
||||
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
|
||||
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
|
||||
Allow(Target::Fn),
|
||||
Allow(Target::Method(MethodKind::Inherent)),
|
||||
Allow(Target::Method(MethodKind::Trait { body: false })),
|
||||
Allow(Target::Method(MethodKind::Trait { body: true })),
|
||||
Allow(Target::Method(MethodKind::TraitImpl)),
|
||||
]);
|
||||
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcConversionSuggestion;
|
||||
}
|
||||
|
||||
pub(crate) struct RustcLintQueryInstabilityParser;
|
||||
|
||||
impl<S: Stage> NoArgsAttributeParser<S> for RustcLintQueryInstabilityParser {
|
||||
|
|
|
|||
|
|
@ -264,6 +264,7 @@ attribute_parsers!(
|
|||
Single<WithoutArgs<RustcAllocatorParser>>,
|
||||
Single<WithoutArgs<RustcAllocatorZeroedParser>>,
|
||||
Single<WithoutArgs<RustcCoherenceIsCoreParser>>,
|
||||
Single<WithoutArgs<RustcConversionSuggestionParser>>,
|
||||
Single<WithoutArgs<RustcDeallocatorParser>>,
|
||||
Single<WithoutArgs<RustcDelayedBugFromInsideQueryParser>>,
|
||||
Single<WithoutArgs<RustcDumpDefParentsParser>>,
|
||||
|
|
|
|||
|
|
@ -1091,6 +1091,9 @@ pub enum AttributeKind {
|
|||
/// Represents `#[rustc_const_stable_indirect]`.
|
||||
RustcConstStabilityIndirect,
|
||||
|
||||
/// Represents `#[rustc_conversion_suggestion]`
|
||||
RustcConversionSuggestion,
|
||||
|
||||
/// Represents `#[rustc_deallocator]`
|
||||
RustcDeallocator,
|
||||
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@ impl AttributeKind {
|
|||
RustcConfusables { .. } => Yes,
|
||||
RustcConstStability { .. } => Yes,
|
||||
RustcConstStabilityIndirect => No,
|
||||
RustcConversionSuggestion => Yes,
|
||||
RustcDeallocator => No,
|
||||
RustcDefPath(..) => No,
|
||||
RustcDelayedBugFromInsideQuery => No,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
use rustc_errors::{Applicability, Diag, MultiSpan, listify};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::attrs::AttributeKind;
|
||||
use rustc_hir::def::Res;
|
||||
use rustc_hir::intravisit::Visitor;
|
||||
use rustc_hir::{self as hir, find_attr};
|
||||
use rustc_infer::infer::DefineOpaqueTypes;
|
||||
use rustc_middle::bug;
|
||||
use rustc_middle::ty::adjustment::AllowTwoPhase;
|
||||
|
|
@ -1081,19 +1082,17 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
hir_id,
|
||||
|m| {
|
||||
self.has_only_self_parameter(m)
|
||||
&& self
|
||||
.tcx
|
||||
// This special internal attribute is used to permit
|
||||
// "identity-like" conversion methods to be suggested here.
|
||||
//
|
||||
// FIXME (#46459 and #46460): ideally
|
||||
// `std::convert::Into::into` and `std::borrow:ToOwned` would
|
||||
// also be `#[rustc_conversion_suggestion]`, if not for
|
||||
// method-probing false-positives and -negatives (respectively).
|
||||
//
|
||||
// FIXME? Other potential candidate methods: `as_ref` and
|
||||
// `as_mut`?
|
||||
.has_attr(m.def_id, sym::rustc_conversion_suggestion)
|
||||
// This special internal attribute is used to permit
|
||||
// "identity-like" conversion methods to be suggested here.
|
||||
//
|
||||
// FIXME (#46459 and #46460): ideally
|
||||
// `std::convert::Into::into` and `std::borrow:ToOwned` would
|
||||
// also be `#[rustc_conversion_suggestion]`, if not for
|
||||
// method-probing false-positives and -negatives (respectively).
|
||||
//
|
||||
// FIXME? Other potential candidate methods: `as_ref` and
|
||||
// `as_mut`?
|
||||
&& find_attr!(self.tcx.get_all_attrs(m.def_id), AttributeKind::RustcConversionSuggestion)
|
||||
},
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -299,6 +299,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
|
|||
| AttributeKind::RustcCoinductive(..)
|
||||
| AttributeKind::RustcConfusables { .. }
|
||||
| AttributeKind::RustcConstStabilityIndirect
|
||||
| AttributeKind::RustcConversionSuggestion
|
||||
| AttributeKind::RustcDeallocator
|
||||
| AttributeKind::RustcDefPath(..)
|
||||
| AttributeKind::RustcDelayedBugFromInsideQuery
|
||||
|
|
@ -400,7 +401,6 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
|
|||
| sym::rustc_on_unimplemented
|
||||
| sym::rustc_do_not_const_check
|
||||
| sym::rustc_doc_primitive
|
||||
| sym::rustc_conversion_suggestion
|
||||
| sym::rustc_test_marker
|
||||
| sym::rustc_layout
|
||||
| sym::rustc_proc_macro_decls
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue