diff options
Diffstat (limited to 'crates/ra_ide_api/src/display')
-rw-r--r-- | crates/ra_ide_api/src/display/function_signature.rs | 70 |
1 files changed, 41 insertions, 29 deletions
diff --git a/crates/ra_ide_api/src/display/function_signature.rs b/crates/ra_ide_api/src/display/function_signature.rs index 6b169b3ae..736b5d3db 100644 --- a/crates/ra_ide_api/src/display/function_signature.rs +++ b/crates/ra_ide_api/src/display/function_signature.rs | |||
@@ -51,36 +51,46 @@ impl FunctionSignature { | |||
51 | FunctionSignature::from(&ast_node).with_doc_opt(doc) | 51 | FunctionSignature::from(&ast_node).with_doc_opt(doc) |
52 | } | 52 | } |
53 | 53 | ||
54 | pub(crate) fn from_struct(db: &db::RootDatabase, st: hir::Struct) -> Self { | 54 | pub(crate) fn from_struct(db: &db::RootDatabase, st: hir::Struct) -> Option<Self> { |
55 | let doc = st.docs(db); | ||
56 | |||
57 | let node: ast::StructDef = st.source(db).ast; | 55 | let node: ast::StructDef = st.source(db).ast; |
56 | match node.kind() { | ||
57 | ast::StructKind::Named(_) => return None, | ||
58 | _ => (), | ||
59 | }; | ||
58 | 60 | ||
59 | let params = st | 61 | let params = st |
60 | .fields(db) | 62 | .fields(db) |
61 | .into_iter() | 63 | .into_iter() |
62 | .map(|field: hir::StructField| { | 64 | .map(|field: hir::StructField| { |
63 | let name = field.name(db); | ||
64 | let ty = field.ty(db); | 65 | let ty = field.ty(db); |
65 | format!("{}: {}", name, ty.display(db)) | 66 | format!("{}", ty.display(db)) |
66 | }) | 67 | }) |
67 | .collect(); | 68 | .collect(); |
68 | 69 | ||
69 | FunctionSignature { | 70 | Some( |
70 | kind: SigKind::Struct, | 71 | FunctionSignature { |
71 | visibility: node.visibility().map(|n| n.syntax().text().to_string()), | 72 | kind: SigKind::Struct, |
72 | name: node.name().map(|n| n.text().to_string()), | 73 | visibility: node.visibility().map(|n| n.syntax().text().to_string()), |
73 | ret_type: node.name().map(|n| n.text().to_string()), | 74 | name: node.name().map(|n| n.text().to_string()), |
74 | parameters: params, | 75 | ret_type: node.name().map(|n| n.text().to_string()), |
75 | generic_parameters: generic_parameters(&node), | 76 | parameters: params, |
76 | where_predicates: where_predicates(&node), | 77 | generic_parameters: generic_parameters(&node), |
77 | doc: None, | 78 | where_predicates: where_predicates(&node), |
78 | } | 79 | doc: None, |
79 | .with_doc_opt(doc) | 80 | } |
81 | .with_doc_opt(st.docs(db)), | ||
82 | ) | ||
80 | } | 83 | } |
81 | 84 | ||
82 | pub(crate) fn from_enum_variant(db: &db::RootDatabase, variant: hir::EnumVariant) -> Self { | 85 | pub(crate) fn from_enum_variant( |
83 | let doc = variant.docs(db); | 86 | db: &db::RootDatabase, |
87 | variant: hir::EnumVariant, | ||
88 | ) -> Option<Self> { | ||
89 | let node: ast::EnumVariant = variant.source(db).ast; | ||
90 | match node.kind() { | ||
91 | ast::StructKind::Named(_) | ast::StructKind::Unit => return None, | ||
92 | _ => (), | ||
93 | }; | ||
84 | 94 | ||
85 | let parent_name = match variant.parent_enum(db).name(db) { | 95 | let parent_name = match variant.parent_enum(db).name(db) { |
86 | Some(name) => name.to_string(), | 96 | Some(name) => name.to_string(), |
@@ -99,17 +109,19 @@ impl FunctionSignature { | |||
99 | }) | 109 | }) |
100 | .collect(); | 110 | .collect(); |
101 | 111 | ||
102 | FunctionSignature { | 112 | Some( |
103 | kind: SigKind::EnumVariant, | 113 | FunctionSignature { |
104 | visibility: None, | 114 | kind: SigKind::EnumVariant, |
105 | name: Some(name), | 115 | visibility: None, |
106 | ret_type: None, | 116 | name: Some(name), |
107 | parameters: params, | 117 | ret_type: None, |
108 | generic_parameters: vec![], | 118 | parameters: params, |
109 | where_predicates: vec![], | 119 | generic_parameters: vec![], |
110 | doc: None, | 120 | where_predicates: vec![], |
111 | } | 121 | doc: None, |
112 | .with_doc_opt(doc) | 122 | } |
123 | .with_doc_opt(variant.docs(db)), | ||
124 | ) | ||
113 | } | 125 | } |
114 | } | 126 | } |
115 | 127 | ||