Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit db7239a

Browse files
committedNov 6, 2024
Also warn against #[diagnostic::do_not_recommend] on plain impls
1 parent cea9103 commit db7239a

File tree

4 files changed

+27
-4
lines changed

4 files changed

+27
-4
lines changed
 

‎compiler/rustc_passes/src/check_attr.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
118118
for attr in attrs {
119119
match attr.path().as_slice() {
120120
[sym::diagnostic, sym::do_not_recommend, ..] => {
121-
self.check_do_not_recommend(attr.span, hir_id, target, attr)
121+
self.check_do_not_recommend(attr.span, hir_id, target, attr, item)
122122
}
123123
[sym::diagnostic, sym::on_unimplemented, ..] => {
124124
self.check_diagnostic_on_unimplemented(attr.span, hir_id, target)
@@ -359,8 +359,15 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
359359
hir_id: HirId,
360360
target: Target,
361361
attr: &Attribute,
362+
item: Option<ItemLike<'_>>,
362363
) {
363-
if !matches!(target, Target::Impl) {
364+
if !matches!(target, Target::Impl)
365+
|| matches!(
366+
item,
367+
Some(ItemLike::Item(hir::Item { kind: hir::ItemKind::Impl(_impl),.. }))
368+
if _impl.of_trait.is_none()
369+
)
370+
{
364371
self.tcx.emit_node_span_lint(
365372
UNKNOWN_OR_MALFORMED_DIAGNOSTIC_ATTRIBUTES,
366373
hir_id,

‎tests/ui/diagnostic_namespace/do_not_recommend/incorrect-locations.current.stderr

+7-1
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,11 @@ warning: `#[diagnostic::do_not_recommend]` can only be placed on trait implement
4848
LL | #[diagnostic::do_not_recommend]
4949
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5050

51-
warning: 8 warnings emitted
51+
warning: `#[diagnostic::do_not_recommend]` can only be placed on trait implementations
52+
--> $DIR/incorrect-locations.rs:38:1
53+
|
54+
LL | #[diagnostic::do_not_recommend]
55+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
56+
57+
warning: 9 warnings emitted
5258

‎tests/ui/diagnostic_namespace/do_not_recommend/incorrect-locations.next.stderr

+7-1
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,11 @@ warning: `#[diagnostic::do_not_recommend]` can only be placed on trait implement
4848
LL | #[diagnostic::do_not_recommend]
4949
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5050

51-
warning: 8 warnings emitted
51+
warning: `#[diagnostic::do_not_recommend]` can only be placed on trait implementations
52+
--> $DIR/incorrect-locations.rs:38:1
53+
|
54+
LL | #[diagnostic::do_not_recommend]
55+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
56+
57+
warning: 9 warnings emitted
5258

‎tests/ui/diagnostic_namespace/do_not_recommend/incorrect-locations.rs

+4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ type Type = ();
1919
//~^WARN `#[diagnostic::do_not_recommend]` can only be placed
2020
enum Enum {}
2121

22+
#[diagnostic::do_not_recommend]
23+
//~^WARN `#[diagnostic::do_not_recommend]` can only be placed
24+
impl Enum {}
25+
2226
#[diagnostic::do_not_recommend]
2327
//~^WARN `#[diagnostic::do_not_recommend]` can only be placed
2428
extern "C" {}

0 commit comments

Comments
 (0)
Failed to load comments.