aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/docs.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/docs.rs')
-rw-r--r--crates/ra_hir/src/docs.rs35
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 @@
1use ra_syntax::ast;
2
3use crate::HirDatabase;
4
5#[derive(Debug, Clone)]
6pub struct Documentation(String);
7
8impl 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
18impl Into<String> for Documentation {
19 fn into(self) -> String {
20 self.contents().into()
21 }
22}
23
24pub trait Docs {
25 fn docs(&self, db: &impl HirDatabase) -> Option<Documentation>;
26}
27
28pub(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}