aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/display.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/display.rs')
-rw-r--r--crates/ra_ide_api/src/display.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/crates/ra_ide_api/src/display.rs b/crates/ra_ide_api/src/display.rs
new file mode 100644
index 000000000..60fa72f1b
--- /dev/null
+++ b/crates/ra_ide_api/src/display.rs
@@ -0,0 +1,51 @@
1use super::*;
2use std::fmt::{self, Display};
3
4impl Display for FunctionSignature {
5 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6 if let Some(t) = &self.visibility {
7 write!(f, "{} ", t)?;
8 }
9
10 if let Some(name) = &self.name {
11 write!(f, "fn {}", name)?;
12 }
13
14 if !self.generic_parameters.is_empty() {
15 write!(f, "<")?;
16 write_joined(f, &self.generic_parameters, ", ")?;
17 write!(f, ">")?;
18 }
19
20 write!(f, "(")?;
21 write_joined(f, &self.parameters, ", ")?;
22 write!(f, ")")?;
23
24 if let Some(t) = &self.ret_type {
25 write!(f, " -> {}", t)?;
26 }
27
28 if !self.where_predicates.is_empty() {
29 write!(f, "\nwhere ")?;
30 write_joined(f, &self.where_predicates, ",\n ")?;
31 }
32
33 Ok(())
34 }
35}
36
37fn write_joined<T: Display>(
38 f: &mut fmt::Formatter,
39 items: impl IntoIterator<Item = T>,
40 sep: &str,
41) -> fmt::Result {
42 let mut first = true;
43 for e in items {
44 if !first {
45 write!(f, "{}", sep)?;
46 }
47 first = false;
48 write!(f, "{}", e)?;
49 }
50 Ok(())
51}