mitsuhiko / insta

A snapshot testing library for rust
https://insta.rs
Apache License 2.0
2.16k stars 98 forks source link

Newline proposal #457

Open max-sixty opened 7 months ago

max-sixty commented 7 months ago

There's been some recent changes on how insta handles newlines. IIUC, we now just trim them from the start and end of every snapshot; this avoids showing incorrect diffs and inline snapshots failing to discriminate between newlines in the code and newlines in the snapshot.

I think there's an approach that would handle this well, but not confident and wanted to socialize it in case I'm missing something:

This way, I don't think there can be any ambiguity.

[^1]: this generally means "is only one line", though very long single lines could start on the next line and become multiline

max-sixty commented 4 months ago

One issue I didn't consider above is that some autoformatters & editors attempt to ensure there's exactly one new line at the end of non-empty files (for example end-of-file-fixer). Some options:

mitsuhiko commented 4 months ago

One option would also just be to make the start/end marker be a problem of the formatter and say that if this is relevant, we encourage/provide support to format blessed markers into the snapshot.

max-sixty commented 3 months ago

https://github.com/mitsuhiko/insta/pull/506 does the "Finish with a YAML-like ---" option.

We'd need to adjust the assertion code to check for newlines. And would also need a transition period where snapshots with different newlines pass with a warning that they won't in the future.

One option would also just be to make the start/end marker be a problem of the formatter and say that if this is relevant, we encourage/provide support to format blessed markers into the snapshot.

Is the "formatter" here yaml / json / ron? I think that could be fine but newlines are often an issue with blocks of text, which are likely using assert_snapshot. And we control yaml now!