aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/display/function_signature.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/display/function_signature.rs')
-rw-r--r--crates/ra_ide_api/src/display/function_signature.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/crates/ra_ide_api/src/display/function_signature.rs b/crates/ra_ide_api/src/display/function_signature.rs
index e21f8378d..9075ca443 100644
--- a/crates/ra_ide_api/src/display/function_signature.rs
+++ b/crates/ra_ide_api/src/display/function_signature.rs
@@ -17,6 +17,7 @@ pub enum CallableKind {
17 Function, 17 Function,
18 StructConstructor, 18 StructConstructor,
19 VariantConstructor, 19 VariantConstructor,
20 Macro,
20} 21}
21 22
22/// Contains information about a function signature 23/// Contains information about a function signature
@@ -123,6 +124,26 @@ impl FunctionSignature {
123 .with_doc_opt(variant.docs(db)), 124 .with_doc_opt(variant.docs(db)),
124 ) 125 )
125 } 126 }
127
128 pub(crate) fn from_macro(db: &db::RootDatabase, macro_def: hir::MacroDef) -> Option<Self> {
129 let node: ast::MacroCall = macro_def.source(db).ast;
130
131 let params = vec![];
132
133 Some(
134 FunctionSignature {
135 kind: CallableKind::Macro,
136 visibility: None,
137 name: node.name().map(|n| n.text().to_string()),
138 ret_type: None,
139 parameters: params,
140 generic_parameters: vec![],
141 where_predicates: vec![],
142 doc: None,
143 }
144 .with_doc_opt(macro_def.docs(db)),
145 )
146 }
126} 147}
127 148
128impl From<&'_ ast::FnDef> for FunctionSignature { 149impl From<&'_ ast::FnDef> for FunctionSignature {
@@ -167,6 +188,7 @@ impl Display for FunctionSignature {
167 CallableKind::Function => write!(f, "fn {}", name)?, 188 CallableKind::Function => write!(f, "fn {}", name)?,
168 CallableKind::StructConstructor => write!(f, "struct {}", name)?, 189 CallableKind::StructConstructor => write!(f, "struct {}", name)?,
169 CallableKind::VariantConstructor => write!(f, "{}", name)?, 190 CallableKind::VariantConstructor => write!(f, "{}", name)?,
191 CallableKind::Macro => write!(f, "{}!", name)?,
170 } 192 }
171 } 193 }
172 194