[llvm] 2731be7 - [Support] Add helper struct `indent` for adding indentation (#108966)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 18 08:54:15 PDT 2024
Author: Rahul Joshi
Date: 2024-09-18T08:54:11-07:00
New Revision: 2731be7ac505f9ef2e90b77b84ef0fbe411bf9f5
URL: https://github.com/llvm/llvm-project/commit/2731be7ac505f9ef2e90b77b84ef0fbe411bf9f5
DIFF: https://github.com/llvm/llvm-project/commit/2731be7ac505f9ef2e90b77b84ef0fbe411bf9f5.diff
LOG: [Support] Add helper struct `indent` for adding indentation (#108966)
Add helper struct indent() for adding indentation to raw_ostream.
Added:
Modified:
llvm/include/llvm/Support/raw_ostream.h
llvm/unittests/Support/raw_ostream_test.cpp
llvm/utils/yaml-bench/YAMLBench.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Support/raw_ostream.h b/llvm/include/llvm/Support/raw_ostream.h
index 2570c826502e7c..34f91cbe9551f4 100644
--- a/llvm/include/llvm/Support/raw_ostream.h
+++ b/llvm/include/llvm/Support/raw_ostream.h
@@ -769,6 +769,25 @@ class buffer_unique_ostream : public raw_svector_ostream {
~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.
diff --git a/llvm/unittests/Support/raw_ostream_test.cpp b/llvm/unittests/Support/raw_ostream_test.cpp
index 1c6dfb6260cc04..99aa350adad71d 100644
--- a/llvm/unittests/Support/raw_ostream_test.cpp
+++ b/llvm/unittests/Support/raw_ostream_test.cpp
@@ -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));
diff --git a/llvm/utils/yaml-bench/YAMLBench.cpp b/llvm/utils/yaml-bench/YAMLBench.cpp
index 50e55538a011cb..4dc6caeb6fdbfc 100644
--- a/llvm/utils/yaml-bench/YAMLBench.cpp
+++ b/llvm/utils/yaml-bench/YAMLBench.cpp
@@ -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();
More information about the llvm-commits
mailing list