diff options
Diffstat (limited to 'crates/ra_hir/src/docs.rs')
-rw-r--r-- | crates/ra_hir/src/docs.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs new file mode 100644 index 000000000..330d8f8f4 --- /dev/null +++ b/crates/ra_hir/src/docs.rs | |||
@@ -0,0 +1,35 @@ | |||
1 | use ra_syntax::ast; | ||
2 | |||
3 | use crate::HirDatabase; | ||
4 | |||
5 | #[derive(Debug, Clone)] | ||
6 | pub struct Documentation(String); | ||
7 | |||
8 | impl Documentation { | ||
9 | pub fn new(s: &str) -> Self { | ||
10 | Self(s.into()) | ||
11 | } | ||
12 | |||
13 | pub fn contents(&self) -> &str { | ||
14 | &self.0 | ||
15 | } | ||
16 | } | ||
17 | |||
18 | impl Into<String> for Documentation { | ||
19 | fn into(self) -> String { | ||
20 | self.contents().into() | ||
21 | } | ||
22 | } | ||
23 | |||
24 | pub trait Docs { | ||
25 | fn docs(&self, db: &impl HirDatabase) -> Option<Documentation>; | ||
26 | } | ||
27 | |||
28 | pub(crate) fn docs_from_ast(node: &impl ast::DocCommentsOwner) -> Option<Documentation> { | ||
29 | let comments = node.doc_comment_text(); | ||
30 | if comments.is_empty() { | ||
31 | None | ||
32 | } else { | ||
33 | Some(Documentation::new(&comments)) | ||
34 | } | ||
35 | } | ||