aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2018-10-31 19:41:24 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2018-10-31 19:41:24 +0000
commit55ebe6380aef233fff86b7e6cead361787bf1f65 (patch)
tree9ed060e4738a0504ddfd146649b9cf8a2f2fac40 /crates/ra_syntax
parentdfba29e4fb66457d101db295e3c356a932ac005e (diff)
parent74320945b664916005d263552194201cbe9a52bc (diff)
Merge #167
167: Attempt to extract useful comments from function signatures r=matklad a=kjeremy I'm trying to extract useful function comments for signature info. This will also be useful for hover. This is a WIP (and actually works pretty well!) but I don't think it's the right approach long term so some guidance would be appreciated so that we could also get comments for say types and variable instances etc. Currently `test_fn_signature_with_simple_doc` fails due to a bug in `extend` but we probably shouldn't use this approach anyway. Maybe comments should be attached to nodes somehow? I'm also thinking that maybe the markdown bits should live in the language server. Thoughts? Co-authored-by: Jeremy A. Kolb <[email protected]>
Diffstat (limited to 'crates/ra_syntax')
-rw-r--r--crates/ra_syntax/src/ast/generated.rs1
-rw-r--r--crates/ra_syntax/src/ast/mod.rs18
-rw-r--r--crates/ra_syntax/src/grammar.ron1
3 files changed, 20 insertions, 0 deletions
diff --git a/crates/ra_syntax/src/ast/generated.rs b/crates/ra_syntax/src/ast/generated.rs
index d0cd060d3..b6a15dbdc 100644
--- a/crates/ra_syntax/src/ast/generated.rs
+++ b/crates/ra_syntax/src/ast/generated.rs
@@ -864,6 +864,7 @@ impl<'a> AstNode<'a> for FnDef<'a> {
864impl<'a> ast::NameOwner<'a> for FnDef<'a> {} 864impl<'a> ast::NameOwner<'a> for FnDef<'a> {}
865impl<'a> ast::TypeParamsOwner<'a> for FnDef<'a> {} 865impl<'a> ast::TypeParamsOwner<'a> for FnDef<'a> {}
866impl<'a> ast::AttrsOwner<'a> for FnDef<'a> {} 866impl<'a> ast::AttrsOwner<'a> for FnDef<'a> {}
867impl<'a> ast::DocCommentsOwner<'a> for FnDef<'a> {}
867impl<'a> FnDef<'a> { 868impl<'a> FnDef<'a> {
868 pub fn param_list(self) -> Option<ParamList<'a>> { 869 pub fn param_list(self) -> Option<ParamList<'a>> {
869 super::child_opt(self) 870 super::child_opt(self)
diff --git a/crates/ra_syntax/src/ast/mod.rs b/crates/ra_syntax/src/ast/mod.rs
index c033263a1..3aa11b9dd 100644
--- a/crates/ra_syntax/src/ast/mod.rs
+++ b/crates/ra_syntax/src/ast/mod.rs
@@ -65,6 +65,24 @@ pub trait AttrsOwner<'a>: AstNode<'a> {
65 } 65 }
66} 66}
67 67
68pub trait DocCommentsOwner<'a>: AstNode<'a> {
69 fn doc_comments(self) -> AstChildren<'a, Comment<'a>> { children(self) }
70
71 /// Returns the textual content of a doc comment block as a single string.
72 /// That is, strips leading `///` and joins lines
73 fn doc_comment_text(self) -> String {
74 self.doc_comments()
75 .map(|comment| {
76 let prefix = comment.prefix();
77 let trimmed = comment.text().as_str()
78 .trim()
79 .trim_start_matches(prefix)
80 .trim_start();
81 trimmed.to_owned()
82 }).join("\n")
83 }
84}
85
68impl<'a> FnDef<'a> { 86impl<'a> FnDef<'a> {
69 pub fn has_atom_attr(&self, atom: &str) -> bool { 87 pub fn has_atom_attr(&self, atom: &str) -> bool {
70 self.attrs().filter_map(|x| x.as_atom()).any(|x| x == atom) 88 self.attrs().filter_map(|x| x.as_atom()).any(|x| x == atom)
diff --git a/crates/ra_syntax/src/grammar.ron b/crates/ra_syntax/src/grammar.ron
index c1c215e0d..6951db010 100644
--- a/crates/ra_syntax/src/grammar.ron
+++ b/crates/ra_syntax/src/grammar.ron
@@ -251,6 +251,7 @@ Grammar(
251 "NameOwner", 251 "NameOwner",
252 "TypeParamsOwner", 252 "TypeParamsOwner",
253 "AttrsOwner", 253 "AttrsOwner",
254 "DocCommentsOwner"
254 ], 255 ],
255 options: [ "ParamList", ["body", "Block"], "RetType" ], 256 options: [ "ParamList", ["body", "Block"], "RetType" ],
256 ), 257 ),