mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 22:34:45 +00:00
Keep trailing comments at the end of a file
This commit is contained in:
parent
bd5b9700ca
commit
f3dd9e411f
2 changed files with 34 additions and 13 deletions
|
@ -5,7 +5,6 @@ extern crate roc_fmt;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test_fmt {
|
mod test_fmt {
|
||||||
use bumpalo::collections::String;
|
|
||||||
use bumpalo::Bump;
|
use bumpalo::Bump;
|
||||||
use roc_fmt::annotation::{Formattable, Newlines, Parens};
|
use roc_fmt::annotation::{Formattable, Newlines, Parens};
|
||||||
use roc_fmt::def::fmt_def;
|
use roc_fmt::def::fmt_def;
|
||||||
|
@ -49,7 +48,6 @@ mod test_fmt {
|
||||||
fn module_formats_to(src: &str, expected: &str) {
|
fn module_formats_to(src: &str, expected: &str) {
|
||||||
let arena = Bump::new();
|
let arena = Bump::new();
|
||||||
let src = src.trim_end();
|
let src = src.trim_end();
|
||||||
let expected = expected.trim_end();
|
|
||||||
|
|
||||||
match module::parse_header(&arena, State::new(src.as_bytes())) {
|
match module::parse_header(&arena, State::new(src.as_bytes())) {
|
||||||
Ok((actual, state)) => {
|
Ok((actual, state)) => {
|
||||||
|
@ -2571,19 +2569,35 @@ mod test_fmt {
|
||||||
fn single_line_interface() {
|
fn single_line_interface() {
|
||||||
module_formats_same(indoc!(
|
module_formats_same(indoc!(
|
||||||
r#"
|
r#"
|
||||||
interface Foo exposes [] imports []
|
interface Foo exposes [] imports []"#
|
||||||
"#
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn defs_with_trailing_comment() {
|
||||||
|
// TODO: make the formatter add a space between '42' and # below:
|
||||||
|
module_formats_to(
|
||||||
|
indoc!(
|
||||||
|
r#"
|
||||||
|
interface Foo exposes [] imports []
|
||||||
|
a = 42 # Yay greetings"#
|
||||||
|
),
|
||||||
|
indoc!(
|
||||||
|
r#"
|
||||||
|
interface Foo exposes [] imports []
|
||||||
|
a = 42# Yay greetings
|
||||||
|
"#
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn multiline_interface() {
|
fn multiline_interface() {
|
||||||
module_formats_same(indoc!(
|
module_formats_same(indoc!(
|
||||||
r#"
|
r#"
|
||||||
interface Foo
|
interface Foo
|
||||||
exposes []
|
exposes []
|
||||||
imports []
|
imports []"#
|
||||||
"#
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2593,8 +2607,7 @@ mod test_fmt {
|
||||||
r#"
|
r#"
|
||||||
interface Foo
|
interface Foo
|
||||||
exposes [ Bar, Baz, a, b ]
|
exposes [ Bar, Baz, a, b ]
|
||||||
imports []
|
imports []"#
|
||||||
"#
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2604,8 +2617,7 @@ mod test_fmt {
|
||||||
r#"
|
r#"
|
||||||
interface Foo
|
interface Foo
|
||||||
exposes [ Bar, Baz, a, b ]
|
exposes [ Bar, Baz, a, b ]
|
||||||
imports [ Blah, Thing.{ foo, bar }, Stuff ]
|
imports [ Blah, Thing.{ foo, bar }, Stuff ]"#
|
||||||
"#
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2613,8 +2625,7 @@ mod test_fmt {
|
||||||
fn single_line_app() {
|
fn single_line_app() {
|
||||||
module_formats_same(indoc!(
|
module_formats_same(indoc!(
|
||||||
r#"
|
r#"
|
||||||
app "Foo" packages { base: "platform" } imports [] provides [ main ] to base
|
app "Foo" packages { base: "platform" } imports [] provides [ main ] to base"#
|
||||||
"#
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -363,6 +363,16 @@ fn eat_line_comment<'a>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We made it to the end of the bytes. This means there's a comment without a trailing newline.
|
||||||
|
let delta = (col - initial_col) as usize;
|
||||||
|
let comment = unsafe { std::str::from_utf8_unchecked(&initial[..delta]) };
|
||||||
|
|
||||||
|
if is_doc_comment {
|
||||||
|
comments_and_newlines.push(CommentOrNewline::DocComment(comment));
|
||||||
|
} else {
|
||||||
|
comments_and_newlines.push(CommentOrNewline::LineComment(comment));
|
||||||
|
}
|
||||||
|
|
||||||
Good {
|
Good {
|
||||||
row,
|
row,
|
||||||
col,
|
col,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue