Rollup merge of #81831 - LeSeulArtichaut:81289-mut-arg, r=camelid
Don't display `mut` in arguments for functions documentation Fixes #81289 by reverting #80799, as requested in https://github.com/rust-lang/rust/pull/81328#issuecomment-766364413. Supersedes #81328. r? ``@camelid`` cc ``@jyn514``
This commit is contained in:
@@ -961,7 +961,7 @@ impl<'a> Clean<Arguments> for (&'a [hir::Ty<'a>], hir::BodyId) {
|
|||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, ty)| Argument {
|
.map(|(i, ty)| Argument {
|
||||||
name: Symbol::intern(&rustc_hir_pretty::param_to_string(&body.params[i])),
|
name: name_from_pat(&body.params[i].pat),
|
||||||
type_: ty.clean(cx),
|
type_: ty.clean(cx),
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
|
|||||||
@@ -195,6 +195,25 @@ crate fn strip_path(path: &Path) -> Path {
|
|||||||
Path { global: path.global, res: path.res, segments }
|
Path { global: path.global, res: path.res, segments }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
crate fn qpath_to_string(p: &hir::QPath<'_>) -> String {
|
||||||
|
let segments = match *p {
|
||||||
|
hir::QPath::Resolved(_, ref path) => &path.segments,
|
||||||
|
hir::QPath::TypeRelative(_, ref segment) => return segment.ident.to_string(),
|
||||||
|
hir::QPath::LangItem(lang_item, ..) => return lang_item.name().to_string(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut s = String::new();
|
||||||
|
for (i, seg) in segments.iter().enumerate() {
|
||||||
|
if i > 0 {
|
||||||
|
s.push_str("::");
|
||||||
|
}
|
||||||
|
if seg.ident.name != kw::PathRoot {
|
||||||
|
s.push_str(&seg.ident.as_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s
|
||||||
|
}
|
||||||
|
|
||||||
crate fn build_deref_target_impls(cx: &DocContext<'_>, items: &[Item], ret: &mut Vec<Item>) {
|
crate fn build_deref_target_impls(cx: &DocContext<'_>, items: &[Item], ret: &mut Vec<Item>) {
|
||||||
let tcx = cx.tcx;
|
let tcx = cx.tcx;
|
||||||
|
|
||||||
@@ -232,6 +251,54 @@ impl ToSource for rustc_span::Span {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
crate fn name_from_pat(p: &hir::Pat<'_>) -> Symbol {
|
||||||
|
use rustc_hir::*;
|
||||||
|
debug!("trying to get a name from pattern: {:?}", p);
|
||||||
|
|
||||||
|
Symbol::intern(&match p.kind {
|
||||||
|
PatKind::Wild => return kw::Underscore,
|
||||||
|
PatKind::Binding(_, _, ident, _) => return ident.name,
|
||||||
|
PatKind::TupleStruct(ref p, ..) | PatKind::Path(ref p) => qpath_to_string(p),
|
||||||
|
PatKind::Struct(ref name, ref fields, etc) => format!(
|
||||||
|
"{} {{ {}{} }}",
|
||||||
|
qpath_to_string(name),
|
||||||
|
fields
|
||||||
|
.iter()
|
||||||
|
.map(|fp| format!("{}: {}", fp.ident, name_from_pat(&fp.pat)))
|
||||||
|
.collect::<Vec<String>>()
|
||||||
|
.join(", "),
|
||||||
|
if etc { ", .." } else { "" }
|
||||||
|
),
|
||||||
|
PatKind::Or(ref pats) => pats
|
||||||
|
.iter()
|
||||||
|
.map(|p| name_from_pat(&**p).to_string())
|
||||||
|
.collect::<Vec<String>>()
|
||||||
|
.join(" | "),
|
||||||
|
PatKind::Tuple(ref elts, _) => format!(
|
||||||
|
"({})",
|
||||||
|
elts.iter()
|
||||||
|
.map(|p| name_from_pat(&**p).to_string())
|
||||||
|
.collect::<Vec<String>>()
|
||||||
|
.join(", ")
|
||||||
|
),
|
||||||
|
PatKind::Box(ref p) => return name_from_pat(&**p),
|
||||||
|
PatKind::Ref(ref p, _) => return name_from_pat(&**p),
|
||||||
|
PatKind::Lit(..) => {
|
||||||
|
warn!(
|
||||||
|
"tried to get argument name from PatKind::Lit, which is silly in function arguments"
|
||||||
|
);
|
||||||
|
return Symbol::intern("()");
|
||||||
|
}
|
||||||
|
PatKind::Range(..) => return kw::Underscore,
|
||||||
|
PatKind::Slice(ref begin, ref mid, ref end) => {
|
||||||
|
let begin = begin.iter().map(|p| name_from_pat(&**p).to_string());
|
||||||
|
let mid = mid.as_ref().map(|p| format!("..{}", name_from_pat(&**p))).into_iter();
|
||||||
|
let end = end.iter().map(|p| name_from_pat(&**p).to_string());
|
||||||
|
format!("[{}]", begin.chain(mid).chain(end).collect::<Vec<_>>().join(", "))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
crate fn print_const(cx: &DocContext<'_>, n: &'tcx ty::Const<'_>) -> String {
|
crate fn print_const(cx: &DocContext<'_>, n: &'tcx ty::Const<'_>) -> String {
|
||||||
match n.val {
|
match n.val {
|
||||||
ty::ConstKind::Unevaluated(def, _, promoted) => {
|
ty::ConstKind::Unevaluated(def, _, promoted) => {
|
||||||
|
|||||||
18
src/test/rustdoc/mut-params.rs
Normal file
18
src/test/rustdoc/mut-params.rs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
// Rustdoc shouldn't display `mut` in function arguments, which are
|
||||||
|
// implementation details. Regression test for #81289.
|
||||||
|
|
||||||
|
#![crate_name = "foo"]
|
||||||
|
|
||||||
|
pub struct Foo;
|
||||||
|
|
||||||
|
// @count foo/struct.Foo.html '//*[@class="impl-items"]//*[@class="method"]' 2
|
||||||
|
// @!has - '//*[@class="impl-items"]//*[@class="method"]' 'mut'
|
||||||
|
impl Foo {
|
||||||
|
pub fn foo(mut self) {}
|
||||||
|
|
||||||
|
pub fn bar(mut bar: ()) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// @count foo/fn.baz.html '//*[@class="rust fn"]' 1
|
||||||
|
// @!has - '//*[@class="rust fn"]' 'mut'
|
||||||
|
pub fn baz(mut foo: Foo) {}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#![crate_name = "foo"]
|
#![crate_name = "foo"]
|
||||||
|
|
||||||
// @has foo/fn.f.html
|
// @has foo/fn.f.html
|
||||||
// @has - '//*[@class="rust fn"]' 'pub fn f(0u8 ...255: u8)'
|
// @has - '//*[@class="rust fn"]' 'pub fn f(_: u8)'
|
||||||
pub fn f(0u8...255: u8) {}
|
pub fn f(0u8...255: u8) {}
|
||||||
|
|||||||
Reference in New Issue
Block a user