File tree 5 files changed +43
-6
lines changed
5 files changed +43
-6
lines changed Original file line number Diff line number Diff line change @@ -211,6 +211,8 @@ passes_doc_keyword_not_mod =
211
211
passes_doc_keyword_only_impl =
212
212
`#[doc(keyword = "...")]` should be used on impl blocks
213
213
214
+ passes_doc_test_literal = `#![doc(test(...)]` does not take a literal
215
+
214
216
passes_doc_test_takes_list =
215
217
`#[doc(test(...)]` takes a list of attributes
216
218
Original file line number Diff line number Diff line change @@ -944,21 +944,28 @@ impl CheckAttrVisitor<'_> {
944
944
let mut is_valid = true ;
945
945
if let Some ( metas) = meta. meta_item_list ( ) {
946
946
for i_meta in metas {
947
- match i_meta. name_or_empty ( ) {
948
- sym:: attr | sym:: no_crate_inject => { }
949
- _ => {
947
+ match ( i_meta. name_or_empty ( ) , i_meta . meta_item ( ) ) {
948
+ ( sym:: attr | sym:: no_crate_inject, _ ) => { }
949
+ ( _ , Some ( m ) ) => {
950
950
self . tcx . emit_spanned_lint (
951
951
INVALID_DOC_ATTRIBUTES ,
952
952
hir_id,
953
953
i_meta. span ( ) ,
954
954
errors:: DocTestUnknown {
955
- path : rustc_ast_pretty:: pprust:: path_to_string (
956
- & i_meta. meta_item ( ) . unwrap ( ) . path ,
957
- ) ,
955
+ path : rustc_ast_pretty:: pprust:: path_to_string ( & m. path ) ,
958
956
} ,
959
957
) ;
960
958
is_valid = false ;
961
959
}
960
+ ( _, None ) => {
961
+ self . tcx . emit_spanned_lint (
962
+ INVALID_DOC_ATTRIBUTES ,
963
+ hir_id,
964
+ i_meta. span ( ) ,
965
+ errors:: DocTestLiteral ,
966
+ ) ;
967
+ is_valid = false ;
968
+ }
962
969
}
963
970
}
964
971
} else {
Original file line number Diff line number Diff line change @@ -281,6 +281,10 @@ pub struct DocTestUnknown {
281
281
pub path : String ,
282
282
}
283
283
284
+ #[ derive( LintDiagnostic ) ]
285
+ #[ diag( passes_doc_test_literal) ]
286
+ pub struct DocTestLiteral ;
287
+
284
288
#[ derive( LintDiagnostic ) ]
285
289
#[ diag( passes_doc_test_takes_list) ]
286
290
pub struct DocTestTakesList ;
Original file line number Diff line number Diff line change
1
+ #![ deny( warnings) ]
2
+
3
+ #![ doc( test( "" ) ) ]
4
+ //~^ ERROR `#![doc(test(...)]` does not take a literal
5
+ //~^^ WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
6
+
7
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error: `#![doc(test(...)]` does not take a literal
2
+ --> $DIR/doc-test-literal.rs:3:13
3
+ |
4
+ LL | #![doc(test(""))]
5
+ | ^^
6
+ |
7
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
8
+ = note: for more information, see issue #82730 <https://github.com/rust-lang/rust/issues/82730>
9
+ note: the lint level is defined here
10
+ --> $DIR/doc-test-literal.rs:1:9
11
+ |
12
+ LL | #![deny(warnings)]
13
+ | ^^^^^^^^
14
+ = note: `#[deny(invalid_doc_attributes)]` implied by `#[deny(warnings)]`
15
+
16
+ error: aborting due to previous error
17
+
You can’t perform that action at this time.
0 commit comments