升级程序选项的clang格式

时间:2016-12-22 17:53:57

标签: c++ boost-program-options clang-format

clang-format似乎从这样的块中弄得一团糟:

desc.add_options()("help", "output usage")
      ("inputDirectory", po::value<boost::filesystem::path>()->required(), "The input path")
      ("outputDirectory", po::value<boost::filesystem::path>()->required(), "The output path");

我知道// clang-format off明确没有格式化块,但是有一组配置规则可以让它做一些合理的事吗?

2 个答案:

答案 0 :(得分:0)

不确定是否可以仅通过配置.clang-format选项来处理它。但是,对于boost :: program_options语法,您仍然可以做一些事情。除了链接operator()之外,您还可以创建program_optionso :: options_description对象并在多行中添加选项:

namespace po = boost::program_options;

po::options_description desc;
desc.add_options()("inputDirectory", po::value<boost::filesystem::path>()->required(), "The input path");

现在,即使clang-format破坏了您的格式,我相信它看起来也会比以前更好。如果这对您来说不够好,而格式化却使您不胜其烦,那么我建议您定义一些函数或缩短这些行的方法(在我们的项目中,我们获得了ConfigField结构的向量,其中包含value_semantic,名称等,以及我们通过调用add_options对其进行迭代-它看起来更短)。

恐怕没有其他办法了。

顺便说一句:是的,这是一个老问题,但是没有答案,我们最近也遇到了类似的问题。

答案 1 :(得分:0)

clang-format 不能删除注释,因此在行尾添加注释可以使代码看起来更漂亮,同时保持自动缩进的好处。这对于来自诸如 boost::assign 之类的库的项目特别有用。例如,当以 clang 格式使用 ColumnLimit 100 时:

    group2 = boost::assign::list_of<score_pair>("Norway", list_of(1)(0))("USA", list_of(0)(0))(
        "Andorra", list_of(1)(1));

    // Versus:

    group2 = boost::assign::list_of<score_pair> //
        ("Norway", list_of(1)(0))               //
        ("USA", list_of(0)(0))                  //
        ("Andorra", list_of(1)(1));

使用上面的 desc.add_options 示例,添加换行注释如下:

    desc.add_options()("help", "output usage")                                                 //
        ("inputDirectory", po::value<boost::filesystem::path>()->required(), "The input path") //
        ("outputDirectory", po::value<boost::filesystem::path>()->required(), "The output path");