Forbid some characters to be used as doc alias
This commit is contained in:
parent
5fae56971d
commit
84cb71c6fa
1 changed files with 27 additions and 7 deletions
|
@ -252,23 +252,42 @@ impl CheckAttrVisitor<'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn doc_alias_str_error(&self, meta: &NestedMetaItem) {
|
||||||
|
self.tcx
|
||||||
|
.sess
|
||||||
|
.struct_span_err(
|
||||||
|
meta.span(),
|
||||||
|
"doc alias attribute expects a string: #[doc(alias = \"0\")]",
|
||||||
|
)
|
||||||
|
.emit();
|
||||||
|
}
|
||||||
|
|
||||||
fn check_doc_alias(&self, attr: &Attribute, hir_id: HirId, target: Target) -> bool {
|
fn check_doc_alias(&self, attr: &Attribute, hir_id: HirId, target: Target) -> bool {
|
||||||
if let Some(mi) = attr.meta() {
|
if let Some(mi) = attr.meta() {
|
||||||
if let Some(list) = mi.meta_item_list() {
|
if let Some(list) = mi.meta_item_list() {
|
||||||
for meta in list {
|
for meta in list {
|
||||||
if meta.has_name(sym::alias) {
|
if meta.has_name(sym::alias) {
|
||||||
if !meta.is_value_str()
|
if !meta.is_value_str() {
|
||||||
|| meta
|
self.doc_alias_str_error(meta);
|
||||||
.value_str()
|
return false;
|
||||||
.map(|s| s.to_string())
|
}
|
||||||
.unwrap_or_else(String::new)
|
let doc_alias =
|
||||||
.is_empty()
|
meta.value_str().map(|s| s.to_string()).unwrap_or_else(String::new);
|
||||||
|
if doc_alias.is_empty() {
|
||||||
|
self.doc_alias_str_error(meta);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if let Some(c) =
|
||||||
|
doc_alias.chars().find(|&c| c == '"' || c == '\'' || c.is_whitespace())
|
||||||
{
|
{
|
||||||
self.tcx
|
self.tcx
|
||||||
.sess
|
.sess
|
||||||
.struct_span_err(
|
.struct_span_err(
|
||||||
meta.span(),
|
meta.span(),
|
||||||
"doc alias attribute expects a string: #[doc(alias = \"0\")]",
|
&format!(
|
||||||
|
"{:?} character isn't allowed in `#[doc(alias = \"...\")]`",
|
||||||
|
c,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
.emit();
|
.emit();
|
||||||
return false;
|
return false;
|
||||||
|
@ -304,6 +323,7 @@ impl CheckAttrVisitor<'tcx> {
|
||||||
&format!("`#[doc(alias = \"...\")]` isn't allowed on {}", err),
|
&format!("`#[doc(alias = \"...\")]` isn't allowed on {}", err),
|
||||||
)
|
)
|
||||||
.emit();
|
.emit();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue