diff options
Diffstat (limited to 'crates/ra_ide_api/src/display/function_signature.rs')
-rw-r--r-- | crates/ra_ide_api/src/display/function_signature.rs | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/crates/ra_ide_api/src/display/function_signature.rs b/crates/ra_ide_api/src/display/function_signature.rs index 6555f8619..6b169b3ae 100644 --- a/crates/ra_ide_api/src/display/function_signature.rs +++ b/crates/ra_ide_api/src/display/function_signature.rs | |||
@@ -16,6 +16,7 @@ use crate::{ | |||
16 | pub enum SigKind { | 16 | pub enum SigKind { |
17 | Function, | 17 | Function, |
18 | Struct, | 18 | Struct, |
19 | EnumVariant, | ||
19 | } | 20 | } |
20 | 21 | ||
21 | /// Contains information about a function signature | 22 | /// Contains information about a function signature |
@@ -70,13 +71,46 @@ impl FunctionSignature { | |||
70 | visibility: node.visibility().map(|n| n.syntax().text().to_string()), | 71 | visibility: node.visibility().map(|n| n.syntax().text().to_string()), |
71 | name: node.name().map(|n| n.text().to_string()), | 72 | name: node.name().map(|n| n.text().to_string()), |
72 | ret_type: node.name().map(|n| n.text().to_string()), | 73 | ret_type: node.name().map(|n| n.text().to_string()), |
73 | parameters: /*param_list(node)*/ params, | 74 | parameters: params, |
74 | generic_parameters: generic_parameters(&node), | 75 | generic_parameters: generic_parameters(&node), |
75 | where_predicates: where_predicates(&node), | 76 | where_predicates: where_predicates(&node), |
76 | doc: None, | 77 | doc: None, |
77 | } | 78 | } |
78 | .with_doc_opt(doc) | 79 | .with_doc_opt(doc) |
79 | } | 80 | } |
81 | |||
82 | pub(crate) fn from_enum_variant(db: &db::RootDatabase, variant: hir::EnumVariant) -> Self { | ||
83 | let doc = variant.docs(db); | ||
84 | |||
85 | let parent_name = match variant.parent_enum(db).name(db) { | ||
86 | Some(name) => name.to_string(), | ||
87 | None => "missing".into(), | ||
88 | }; | ||
89 | |||
90 | let name = format!("{}::{}", parent_name, variant.name(db).unwrap()); | ||
91 | |||
92 | let params = variant | ||
93 | .fields(db) | ||
94 | .into_iter() | ||
95 | .map(|field: hir::StructField| { | ||
96 | let name = field.name(db); | ||
97 | let ty = field.ty(db); | ||
98 | format!("{}: {}", name, ty.display(db)) | ||
99 | }) | ||
100 | .collect(); | ||
101 | |||
102 | FunctionSignature { | ||
103 | kind: SigKind::EnumVariant, | ||
104 | visibility: None, | ||
105 | name: Some(name), | ||
106 | ret_type: None, | ||
107 | parameters: params, | ||
108 | generic_parameters: vec![], | ||
109 | where_predicates: vec![], | ||
110 | doc: None, | ||
111 | } | ||
112 | .with_doc_opt(doc) | ||
113 | } | ||
80 | } | 114 | } |
81 | 115 | ||
82 | impl From<&'_ ast::FnDef> for FunctionSignature { | 116 | impl From<&'_ ast::FnDef> for FunctionSignature { |
@@ -120,6 +154,7 @@ impl Display for FunctionSignature { | |||
120 | match self.kind { | 154 | match self.kind { |
121 | SigKind::Function => write!(f, "fn {}", name)?, | 155 | SigKind::Function => write!(f, "fn {}", name)?, |
122 | SigKind::Struct => write!(f, "struct {}", name)?, | 156 | SigKind::Struct => write!(f, "struct {}", name)?, |
157 | SigKind::EnumVariant => write!(f, "{}", name)?, | ||
123 | } | 158 | } |
124 | } | 159 | } |
125 | 160 | ||