diff options
| author | LeSeulArtichaut <leseulartichaut@gmail.com> | 2021-02-06 16:38:14 +0100 |
|---|---|---|
| committer | LeSeulArtichaut <leseulartichaut@gmail.com> | 2021-02-08 19:51:28 +0100 |
| commit | 2a67e2e323d8b559f153f0cc95cb79ac2a60d5de (patch) | |
| tree | 9cf33de4f479584e608707d4f47b8af06d7a97a8 /src | |
| parent | 921ec4b3fca17cc777766c240038d7d50ba98e0d (diff) | |
| download | rust-2a67e2e323d8b559f153f0cc95cb79ac2a60d5de.tar.gz rust-2a67e2e323d8b559f153f0cc95cb79ac2a60d5de.zip | |
Revert "Get rid of custom pretty-printing in rustdoc"
This reverts commit 31375d2074aeed0c6f173aa200f0bd3bf6d36756.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/clean/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustdoc/clean/utils.rs | 70 |
2 files changed, 71 insertions, 1 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 331bb2a73f9..4d0d7e75aec 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -961,7 +961,7 @@ impl<'a> Clean<Arguments> for (&'a [hir::Ty<'a>], hir::BodyId) { .iter() .enumerate() .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), }) .collect(), diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs index 2c829c49953..ef59e13f8fb 100644 --- a/src/librustdoc/clean/utils.rs +++ b/src/librustdoc/clean/utils.rs @@ -195,6 +195,25 @@ crate fn strip_path(path: &Path) -> Path { 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>) { let tcx = cx.tcx; @@ -232,6 +251,57 @@ 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(..) => panic!( + "tried to get argument name from PatKind::Range, \ + which is not allowed in function arguments" + ), + 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 { match n.val { ty::ConstKind::Unevaluated(def, _, promoted) => { |
