Rollup merge of #112081 - obeis:doc-test-literal, r=compiler-errors
Avoid ICE on `#![doc(test(...)]` with literal parameter Close #109066 r? `@compiler-errors`
This commit is contained in:
commit
129a57a9f6
@ -211,6 +211,8 @@ passes_doc_keyword_not_mod =
|
||||
passes_doc_keyword_only_impl =
|
||||
`#[doc(keyword = "...")]` should be used on impl blocks
|
||||
|
||||
passes_doc_test_literal = `#![doc(test(...)]` does not take a literal
|
||||
|
||||
passes_doc_test_takes_list =
|
||||
`#[doc(test(...)]` takes a list of attributes
|
||||
|
||||
|
@ -944,21 +944,28 @@ impl CheckAttrVisitor<'_> {
|
||||
let mut is_valid = true;
|
||||
if let Some(metas) = meta.meta_item_list() {
|
||||
for i_meta in metas {
|
||||
match i_meta.name_or_empty() {
|
||||
sym::attr | sym::no_crate_inject => {}
|
||||
_ => {
|
||||
match (i_meta.name_or_empty(), i_meta.meta_item()) {
|
||||
(sym::attr | sym::no_crate_inject, _) => {}
|
||||
(_, Some(m)) => {
|
||||
self.tcx.emit_spanned_lint(
|
||||
INVALID_DOC_ATTRIBUTES,
|
||||
hir_id,
|
||||
i_meta.span(),
|
||||
errors::DocTestUnknown {
|
||||
path: rustc_ast_pretty::pprust::path_to_string(
|
||||
&i_meta.meta_item().unwrap().path,
|
||||
),
|
||||
path: rustc_ast_pretty::pprust::path_to_string(&m.path),
|
||||
},
|
||||
);
|
||||
is_valid = false;
|
||||
}
|
||||
(_, None) => {
|
||||
self.tcx.emit_spanned_lint(
|
||||
INVALID_DOC_ATTRIBUTES,
|
||||
hir_id,
|
||||
i_meta.span(),
|
||||
errors::DocTestLiteral,
|
||||
);
|
||||
is_valid = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -281,6 +281,10 @@ pub struct DocTestUnknown {
|
||||
pub path: String,
|
||||
}
|
||||
|
||||
#[derive(LintDiagnostic)]
|
||||
#[diag(passes_doc_test_literal)]
|
||||
pub struct DocTestLiteral;
|
||||
|
||||
#[derive(LintDiagnostic)]
|
||||
#[diag(passes_doc_test_takes_list)]
|
||||
pub struct DocTestTakesList;
|
||||
|
7
tests/ui/attributes/doc-test-literal.rs
Normal file
7
tests/ui/attributes/doc-test-literal.rs
Normal file
@ -0,0 +1,7 @@
|
||||
#![deny(warnings)]
|
||||
|
||||
#![doc(test(""))]
|
||||
//~^ ERROR `#![doc(test(...)]` does not take a literal
|
||||
//~^^ WARN this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
|
||||
fn main() {}
|
17
tests/ui/attributes/doc-test-literal.stderr
Normal file
17
tests/ui/attributes/doc-test-literal.stderr
Normal file
@ -0,0 +1,17 @@
|
||||
error: `#![doc(test(...)]` does not take a literal
|
||||
--> $DIR/doc-test-literal.rs:3:13
|
||||
|
|
||||
LL | #![doc(test(""))]
|
||||
| ^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #82730 <https://github.com/rust-lang/rust/issues/82730>
|
||||
note: the lint level is defined here
|
||||
--> $DIR/doc-test-literal.rs:1:9
|
||||
|
|
||||
LL | #![deny(warnings)]
|
||||
| ^^^^^^^^
|
||||
= note: `#[deny(invalid_doc_attributes)]` implied by `#[deny(warnings)]`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
x
Reference in New Issue
Block a user