【问题标题】:Meaning of RawStringFormats and Delimeters 'pb' in clang formatlang 格式中 RawStringFormats 和 Demeters 'pb' 的含义
【发布时间】:2021-06-12 04:15:59
【问题描述】:

我不明白以下内容如何影响 clang 格式文件中的格式化行为:

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

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

对于分隔符来说,“pb”是什么意思?它与“cc”和“cpp”有何不同?

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

【问题讨论】:

    标签: c++ clang-format


    【解决方案1】:

    [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 格式化样式重新格式化它。

    【讨论】:

      【解决方案2】:

      您的设置用于格式化 Google 协议缓冲区 (https://developers.google.com/protocol-buffers) 或短 Protobuf。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-29
        • 2020-04-10
        • 2019-03-25
        • 1970-01-01
        • 2018-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多