aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_syntax')
-rw-r--r--crates/ra_syntax/src/ast.rs25
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0037_mod.rs5
-rw-r--r--crates/ra_syntax/tests/data/parser/ok/0037_mod.txt17
3 files changed, 47 insertions, 0 deletions
diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs
index e968c9728..3aaa5edda 100644
--- a/crates/ra_syntax/src/ast.rs
+++ b/crates/ra_syntax/src/ast.rs
@@ -115,6 +115,7 @@ pub trait DocCommentsOwner<'a>: AstNode<'a> {
115 /// That is, strips leading `///` and joins lines 115 /// That is, strips leading `///` and joins lines
116 fn doc_comment_text(self) -> RustString { 116 fn doc_comment_text(self) -> RustString {
117 self.doc_comments() 117 self.doc_comments()
118 .filter(|comment| comment.is_doc_comment())
118 .map(|comment| { 119 .map(|comment| {
119 let prefix = comment.prefix(); 120 let prefix = comment.prefix();
120 let trimmed = comment 121 let trimmed = comment
@@ -206,6 +207,10 @@ impl<'a> Comment<'a> {
206 } 207 }
207 } 208 }
208 209
210 pub fn is_doc_comment(&self) -> bool {
211 self.flavor().is_doc_comment()
212 }
213
209 pub fn prefix(&self) -> &'static str { 214 pub fn prefix(&self) -> &'static str {
210 self.flavor().prefix() 215 self.flavor().prefix()
211 } 216 }
@@ -237,6 +242,13 @@ impl CommentFlavor {
237 Multiline => "/*", 242 Multiline => "/*",
238 } 243 }
239 } 244 }
245
246 pub fn is_doc_comment(&self) -> bool {
247 match self {
248 CommentFlavor::Doc | CommentFlavor::ModuleDoc => true,
249 _ => false,
250 }
251 }
240} 252}
241 253
242impl<'a> Whitespace<'a> { 254impl<'a> Whitespace<'a> {
@@ -469,3 +481,16 @@ impl<'a> PrefixExpr<'a> {
469 } 481 }
470 } 482 }
471} 483}
484
485#[test]
486fn test_doc_comment_of_items() {
487 let file = SourceFileNode::parse(
488 r#"
489 //! doc
490 // non-doc
491 mod foo {}
492 "#,
493 );
494 let module = file.syntax().descendants().find_map(Module::cast).unwrap();
495 assert_eq!("doc", module.doc_comment_text());
496}
diff --git a/crates/ra_syntax/tests/data/parser/ok/0037_mod.rs b/crates/ra_syntax/tests/data/parser/ok/0037_mod.rs
new file mode 100644
index 000000000..7e5a1b835
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0037_mod.rs
@@ -0,0 +1,5 @@
1// https://github.com/rust-analyzer/rust-analyzer/issues/357
2
3//! docs
4// non-docs
5mod foo {} \ No newline at end of file
diff --git a/crates/ra_syntax/tests/data/parser/ok/0037_mod.txt b/crates/ra_syntax/tests/data/parser/ok/0037_mod.txt
new file mode 100644
index 000000000..e11c4a06d
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/ok/0037_mod.txt
@@ -0,0 +1,17 @@
1SOURCE_FILE@[0; 93)
2 COMMENT@[0; 60)
3 WHITESPACE@[60; 62)
4 MODULE@[62; 93)
5 COMMENT@[62; 70)
6 WHITESPACE@[70; 71)
7 COMMENT@[71; 82)
8 WHITESPACE@[82; 83)
9 MOD_KW@[83; 86)
10 WHITESPACE@[86; 87)
11 NAME@[87; 90)
12 IDENT@[87; 90) "foo"
13 WHITESPACE@[90; 91)
14 ITEM_LIST@[91; 93)
15 L_CURLY@[91; 92)
16 R_CURLY@[92; 93)
17