[Support] Add helper struct indent for adding indentation (#108966)
Add helper struct indent() for adding indentation to raw_ostream.
This commit is contained in:
@@ -769,6 +769,25 @@ public:
|
||||
~buffer_unique_ostream() override { *OS << str(); }
|
||||
};
|
||||
|
||||
// Helper struct to add indentation to raw_ostream. Instead of
|
||||
// OS.indent(6) << "more stuff";
|
||||
// you can use
|
||||
// OS << indent(6) << "more stuff";
|
||||
// which has better ergonomics (and clang-formats better as well).
|
||||
struct indent {
|
||||
unsigned NumSpaces;
|
||||
|
||||
explicit indent(unsigned NumSpaces) : NumSpaces(NumSpaces) {}
|
||||
void operator+=(unsigned N) { NumSpaces += N; }
|
||||
void operator-=(unsigned N) { NumSpaces -= N; }
|
||||
indent operator+(unsigned N) const { return indent(NumSpaces + N); }
|
||||
indent operator-(unsigned N) const { return indent(NumSpaces - N); }
|
||||
};
|
||||
|
||||
inline raw_ostream &operator<<(raw_ostream &OS, const indent &Indent) {
|
||||
return OS.indent(Indent.NumSpaces);
|
||||
}
|
||||
|
||||
class Error;
|
||||
|
||||
/// This helper creates an output stream and then passes it to \p Write.
|
||||
|
||||
@@ -177,6 +177,19 @@ TEST(raw_ostreamTest, Justify) {
|
||||
EXPECT_EQ("none", printToString(center_justify("none", 1), 1));
|
||||
}
|
||||
|
||||
TEST(raw_ostreamTest, Indent) {
|
||||
indent Indent(4);
|
||||
auto Spaces = [](int N) { return std::string(N, ' '); };
|
||||
EXPECT_EQ(Spaces(4), printToString(Indent));
|
||||
EXPECT_EQ("", printToString(indent(0)));
|
||||
EXPECT_EQ(Spaces(5), printToString(Indent + 1));
|
||||
EXPECT_EQ(Spaces(3), printToString(Indent - 1));
|
||||
Indent += 1;
|
||||
EXPECT_EQ(Spaces(5), printToString(Indent));
|
||||
Indent -= 1;
|
||||
EXPECT_EQ(Spaces(4), printToString(Indent));
|
||||
}
|
||||
|
||||
TEST(raw_ostreamTest, FormatHex) {
|
||||
EXPECT_EQ("0x1234", printToString(format_hex(0x1234, 6), 6));
|
||||
EXPECT_EQ("0x001234", printToString(format_hex(0x1234, 8), 8));
|
||||
|
||||
@@ -56,17 +56,6 @@ cl::opt<cl::boolOrDefault>
|
||||
UseColor("use-color", cl::desc("Emit colored output (default=autodetect)"),
|
||||
cl::init(cl::BOU_UNSET));
|
||||
|
||||
struct indent {
|
||||
unsigned distance;
|
||||
indent(unsigned d) : distance(d) {}
|
||||
};
|
||||
|
||||
static raw_ostream &operator <<(raw_ostream &os, const indent &in) {
|
||||
for (unsigned i = 0; i < in.distance; ++i)
|
||||
os << " ";
|
||||
return os;
|
||||
}
|
||||
|
||||
/// Pretty print a tag by replacing tag:yaml.org,2002: with !!.
|
||||
static std::string prettyTag(yaml::Node *N) {
|
||||
std::string Tag = N->getVerbatimTag();
|
||||
|
||||
Reference in New Issue
Block a user