clang 格式中 RawStringFormats 和 Delimeters 'pb' 的含义

Meaning of RawStringFormats and Delimeters 'pb' in clang format

我无法理解以下内容如何影响 clang 格式文件中的格式化行为:

RawStringFormats: 
  - Delimiters:       [pb]
    Language:        TextProto
    BasedOnStyle:    google

这些设置对于 C++ 项目是否正确? (例如,语言不应该是 cpp 吗?)

分隔符的 'pb' 是什么意思,它与 'cc' 和 'cpp' 有何不同?

我试图在 clang 文档中查找信息,但这只会让我更加困惑。

您的设置用于格式化 Google Protocol Buffers (https://developers.google.com/protocol-buffers) 或短 Protobuf。

如果您的 C++ 项目包含 Protobuf 描述,则会应用 'google' 样式格式。

我假设 [pb] 是 Protobuf 的缩写。

[pb] 作为分隔符代表 ProtocolBuffers 或简称 Protobuf。 RawStringFormat 格式化选项专门用作检测和格式化文件中显示为原始字符串的代码片段的提示(对于支持的语言);它使用 DelimitersEnclosingFunctions 来检测并使用指定的格式样式重新格式化它们。

如果您希望将格式应用于文件中的原始字符串,它甚至在 C++ 项目中也很有用。例如,通常使用 protobuf 输入和输出的 C++ 项目的测试代码可能如下所示:

InputProto ConstructInput() {
  InputProto input;
  Input *in = input.mutable_input();
  in->set_id(10);
  in->set_name("Test");
  return in;
}
TEST(TestFoo, ComputesOut) {
OutputProto out;
out.set_result(200);

EXPECT_THAT(
    GetOutput(ConstructInput()),
    EqualsProto(outcome));
}

Protobuf 允许您使用文本格式以更易读的方式编写相同的内容,如下所示:

TEST(TestFoo, ComputesOut) {
EXPECT_THAT(
    GetOutput(PARSE_TEXT_PROTO(R"pb(
        input {
            id: 10
            name: "Test"
        }
      )")),
    EqualsProto(PARSE_TEXT_PROTO(R"pb(
        result: 200
      )"))
    );
}

您的格式化选项会将 pb 定界符内的文本字符串检测为 protobuf 代码,并使用 google 格式化样式重新格式化它。