Preserve newlines after blocks of comments.

This is an example of output from the formatter now:

  ```
  //// Some module documentation

  // foo
  const a: Int = 42

  // Some comment block
  // For which newlines are respected.
  // Foo

  // Another one

  /// add_one documentation
  pub fn add_one(n: Int) -> Int {
    // n + 1
    n + 1
  }
  ```

  before this commit, comments would all be collapsed into one group
  above the function as:

  ```
  // Some comment block
  // For which newlines are respected.
  // Foo
  // Another one
  /// add_one documentation
  pub fn add_one(n: Int) -> Int {
  ```
This commit is contained in:
KtorZ 2022-12-13 22:08:25 +01:00 committed by Lucas
parent 22a526bb13
commit 431b0cfcf2
2 changed files with 8 additions and 2 deletions

View File

@ -47,7 +47,6 @@ pub fn module(
false
}
Token::EmptyLine => {
println!("{:?}", span);
extra.empty_lines.push(span.start);
false

View File

@ -117,10 +117,17 @@ pub fn lexer() -> impl Parser<char, Vec<(Token, Span)>, Error = ParseError> {
.map_with_span(|token, span| (token, span)),
);
let comments_with_trailing_newline = just("//").ignore_then(
take_until(text::newline())
.then_ignore(text::newline().rewind())
.to(Token::Comment)
.map_with_span(|token, span| (token, span)),
);
choice((
module_comments,
doc_comments,
comments,
choice((comments_with_trailing_newline, comments)),
choice((keyword, int, op, grouping, string))
.or(any().map(Token::Error).validate(|t, span, emit| {
emit(ParseError::expected_input_found(