Avoid ICE on #![doc(test(...)]
with literal parameter
This commit is contained in:
parent
39c03fb652
commit
33eef8221d
3 changed files with 19 additions and 6 deletions
|
@ -214,6 +214,8 @@ passes_doc_keyword_only_impl =
|
||||||
passes_doc_test_takes_list =
|
passes_doc_test_takes_list =
|
||||||
`#[doc(test(...)]` takes a list of attributes
|
`#[doc(test(...)]` takes a list of attributes
|
||||||
|
|
||||||
|
passes_doc_test_literal = `#![doc(test(...)]` does not take a literal
|
||||||
|
|
||||||
passes_doc_test_unknown =
|
passes_doc_test_unknown =
|
||||||
unknown `doc(test)` attribute `{$path}`
|
unknown `doc(test)` attribute `{$path}`
|
||||||
|
|
||||||
|
|
|
@ -944,21 +944,28 @@ impl CheckAttrVisitor<'_> {
|
||||||
let mut is_valid = true;
|
let mut is_valid = true;
|
||||||
if let Some(metas) = meta.meta_item_list() {
|
if let Some(metas) = meta.meta_item_list() {
|
||||||
for i_meta in metas {
|
for i_meta in metas {
|
||||||
match i_meta.name_or_empty() {
|
match (i_meta.name_or_empty(), i_meta.meta_item()) {
|
||||||
sym::attr | sym::no_crate_inject => {}
|
(sym::attr | sym::no_crate_inject, _) => {}
|
||||||
_ => {
|
(_, Some(m)) => {
|
||||||
self.tcx.emit_spanned_lint(
|
self.tcx.emit_spanned_lint(
|
||||||
INVALID_DOC_ATTRIBUTES,
|
INVALID_DOC_ATTRIBUTES,
|
||||||
hir_id,
|
hir_id,
|
||||||
i_meta.span(),
|
i_meta.span(),
|
||||||
errors::DocTestUnknown {
|
errors::DocTestUnknown {
|
||||||
path: rustc_ast_pretty::pprust::path_to_string(
|
path: rustc_ast_pretty::pprust::path_to_string(&m.path),
|
||||||
&i_meta.meta_item().unwrap().path,
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
is_valid = false;
|
is_valid = false;
|
||||||
}
|
}
|
||||||
|
(_, None) => {
|
||||||
|
self.tcx.emit_spanned_lint(
|
||||||
|
INVALID_DOC_ATTRIBUTES,
|
||||||
|
hir_id,
|
||||||
|
i_meta.span(),
|
||||||
|
errors::DocTestLiteral,
|
||||||
|
);
|
||||||
|
is_valid = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -281,6 +281,10 @@ pub struct DocTestUnknown {
|
||||||
pub path: String,
|
pub path: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(LintDiagnostic)]
|
||||||
|
#[diag(passes_doc_test_literal)]
|
||||||
|
pub struct DocTestLiteral;
|
||||||
|
|
||||||
#[derive(LintDiagnostic)]
|
#[derive(LintDiagnostic)]
|
||||||
#[diag(passes_doc_test_takes_list)]
|
#[diag(passes_doc_test_takes_list)]
|
||||||
pub struct DocTestTakesList;
|
pub struct DocTestTakesList;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue