Bladeren bron

LibDiff: Add Diff::write_unified for formatting unified hunks

Shannon Booth 2 jaren geleden
bovenliggende
commit
a4e50deeea
2 gewijzigde bestanden met toevoegingen van 22 en 0 verwijderingen
  1. 21 0
      Userland/Libraries/LibDiff/Format.cpp
  2. 1 0
      Userland/Libraries/LibDiff/Format.h

+ 21 - 0
Userland/Libraries/LibDiff/Format.cpp

@@ -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)

+ 1 - 0
Userland/Libraries/LibDiff/Format.h

@@ -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);
 
 }