2 #include "DiffPrinter.h"
4 #include "llvm/Support/FormatAdapters.h"
7 using namespace llvm::pdb;
11 Colorize(raw_ostream &OS, DiffResult Result) : OS(OS) {
15 case DiffResult::IDENTICAL:
16 OS.changeColor(raw_ostream::Colors::GREEN, false);
18 case DiffResult::EQUIVALENT:
19 OS.changeColor(raw_ostream::Colors::YELLOW, true);
22 OS.changeColor(raw_ostream::Colors::RED, false);
36 DiffPrinter::DiffPrinter(uint32_t Indent, StringRef Header,
37 uint32_t PropertyWidth, uint32_t FieldWidth,
38 bool Result, bool Fields, raw_ostream &Stream)
39 : PrintResult(Result), PrintValues(Fields), Indent(Indent),
40 PropertyWidth(PropertyWidth), FieldWidth(FieldWidth), OS(Stream) {
45 DiffPrinter::~DiffPrinter() {}
47 uint32_t DiffPrinter::tableWidth() const {
52 W += PropertyWidth + 1;
61 W += 2 * (FieldWidth + 1);
66 void DiffPrinter::printFullRow(StringRef Text) {
68 printValue(Text, DiffResult::UNSPECIFIED, AlignStyle::Center,
69 tableWidth() - 2, true);
73 void DiffPrinter::printSeparatorRow() {
75 OS << formatv("{0}", fmt_repeat('-', PropertyWidth));
78 OS << formatv("{0}", fmt_repeat('-', 3));
82 OS << formatv("{0}", fmt_repeat('-', FieldWidth));
84 OS << formatv("{0}", fmt_repeat('-', FieldWidth));
89 void DiffPrinter::printHeaderRow() {
91 OS << formatv("{0}", fmt_repeat('-', tableWidth() - 1));
94 void DiffPrinter::newLine(char InitialChar) {
96 OS.indent(Indent) << InitialChar;
99 void DiffPrinter::printExplicit(StringRef Property, DiffResult C,
100 StringRef Left, StringRef Right) {
102 printValue(Property, DiffResult::UNSPECIFIED, AlignStyle::Right,
103 PropertyWidth, true);
105 printValue(Left, C, AlignStyle::Center, FieldWidth, false);
106 printValue(Right, C, AlignStyle::Center, FieldWidth, false);
110 void DiffPrinter::printResult(DiffResult Result) {
114 case DiffResult::DIFFERENT:
115 printValue("D", Result, AlignStyle::Center, 3, true);
117 case DiffResult::EQUIVALENT:
118 printValue("E", Result, AlignStyle::Center, 3, true);
120 case DiffResult::IDENTICAL:
121 printValue("I", Result, AlignStyle::Center, 3, true);
123 case DiffResult::UNSPECIFIED:
124 printValue(" ", Result, AlignStyle::Center, 3, true);
129 void DiffPrinter::printValue(StringRef Value, DiffResult C, AlignStyle Style,
130 uint32_t Width, bool Force) {
131 if (!Force && !PrintValues)
134 if (Style == AlignStyle::Right)
137 std::string FormattedItem =
138 formatv("{0}", fmt_align(Value, Style, Width)).str();
139 if (C != DiffResult::UNSPECIFIED) {
140 Colorize Color(OS, C);
144 if (Style == AlignStyle::Right)