LibDiff: Add Diff::write_unified for formatting unified hunks

This commit is contained in:
Shannon Booth 2023-06-27 20:55:50 +12:00 committed by Andrew Kaster
parent f690807c5a
commit a4e50deeea
Notes: sideshowbarker 2024-07-17 10:31:19 +09:00
2 changed files with 22 additions and 0 deletions

View file

@ -24,6 +24,27 @@ DeprecatedString generate_only_additions(StringView text)
return builder.to_deprecated_string();
}
ErrorOr<void> write_unified(Hunk const& hunk, Stream& stream, ColorOutput color_output)
{
TRY(stream.write_formatted("{}\n", hunk.location));
if (color_output == ColorOutput::Yes) {
for (auto const& line : hunk.lines) {
if (line.operation == Line::Operation::Addition)
TRY(stream.write_formatted("\033[32;1m{}\033[0m\n", line));
else if (line.operation == Line::Operation::Removal)
TRY(stream.write_formatted("\033[31;1m{}\033[0m\n", line));
else
TRY(stream.write_formatted("{}\n", line));
}
} else {
for (auto const& line : hunk.lines)
TRY(stream.write_formatted("{}\n", line));
}
return {};
}
ErrorOr<void> write_normal(Hunk const& hunk, Stream& stream, ColorOutput color_output)
{
// Source line(s)

View file

@ -20,6 +20,7 @@ enum class ColorOutput {
No,
};
ErrorOr<void> write_unified(Hunk const& hunk, Stream& stream, ColorOutput color_output = ColorOutput::No);
ErrorOr<void> write_normal(Hunk const& hunk, Stream& stream, ColorOutput color_output = ColorOutput::No);
}