mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-15 01:17:27 +00:00
Preserve whitespace at the end of doc comments
Whitespace can have special meaning in markdown. For instance ending a line with three spaces will render a new line. Note that this behavior diverges from RLS. Fixes #1997
This commit is contained in:
parent
46b63c462d
commit
1438f38eb6
2 changed files with 27 additions and 4 deletions
|
@ -173,7 +173,7 @@ fn test_doc_comment_single_line_block_strips_suffix_whitespace() {
|
||||||
.ok()
|
.ok()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let module = file.syntax().descendants().find_map(Module::cast).unwrap();
|
let module = file.syntax().descendants().find_map(Module::cast).unwrap();
|
||||||
assert_eq!("this is mod foo", module.doc_comment_text().unwrap());
|
assert_eq!("this is mod foo ", module.doc_comment_text().unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -191,7 +191,27 @@ fn test_doc_comment_multi_line_block_strips_suffix() {
|
||||||
.ok()
|
.ok()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let module = file.syntax().descendants().find_map(Module::cast).unwrap();
|
let module = file.syntax().descendants().find_map(Module::cast).unwrap();
|
||||||
assert_eq!(" this\n is\n mod foo", module.doc_comment_text().unwrap());
|
assert_eq!(
|
||||||
|
" this\n is\n mod foo\n ",
|
||||||
|
module.doc_comment_text().unwrap()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_comments_preserve_trailing_whitespace() {
|
||||||
|
let file = SourceFile::parse(
|
||||||
|
r#"
|
||||||
|
/// Representation of a Realm.
|
||||||
|
/// In the specification these are called Realm Records.
|
||||||
|
struct Realm {}"#,
|
||||||
|
)
|
||||||
|
.ok()
|
||||||
|
.unwrap();
|
||||||
|
let def = file.syntax().descendants().find_map(StructDef::cast).unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
"Representation of a Realm. \nIn the specification these are called Realm Records.",
|
||||||
|
def.doc_comment_text().unwrap()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -120,7 +120,7 @@ pub trait DocCommentsOwner: AstNode {
|
||||||
has_comments = true;
|
has_comments = true;
|
||||||
let prefix_len = comment.prefix().len();
|
let prefix_len = comment.prefix().len();
|
||||||
|
|
||||||
let line = comment.text().as_str();
|
let line: &str = comment.text().as_str();
|
||||||
|
|
||||||
// Determine if the prefix or prefix + 1 char is stripped
|
// Determine if the prefix or prefix + 1 char is stripped
|
||||||
let pos =
|
let pos =
|
||||||
|
@ -136,7 +136,10 @@ pub trait DocCommentsOwner: AstNode {
|
||||||
line.len()
|
line.len()
|
||||||
};
|
};
|
||||||
|
|
||||||
line[pos..end].trim_end().to_owned()
|
// Note that we do not trim the end of the line here
|
||||||
|
// since whitespace can have special meaning at the end
|
||||||
|
// of a line in markdown.
|
||||||
|
line[pos..end].to_owned()
|
||||||
})
|
})
|
||||||
.join("\n");
|
.join("\n");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue