如何使用clang-format来对齐链式方法调用

时间:2016-09-28 08:52:12

标签: c++ clang-format

我加入了现有项目,我是第一个使用clang格式的团队成员。除了一些烦人的差异外,现有的风格大多匹配。这是一个(另一个是here):

  folly::dynamic makeRequest(const string &response) {
    return folly::dynamic::object()
      ("log_type", "FOO")
      ("src_id", "42")
      ("dst_id", "666")
      ("success", true);
  }

clang-format坚持将其格式化为:

  folly::dynamic makeRequest(const string &token_response) {
    // using longer variable names to highlight using up the whole line lenght
    return folly::dynamic::object()("log_type", "FOO")(
        "src_id", somethingId)("dst_id", whateverId)("success",
                                                     sucess);
  }

在前一种风格中,只要我们每行获得一个方法调用,我就不会强烈地感觉到连续行是如何缩进的。这可能吗?

2 个答案:

答案 0 :(得分:1)

不是最好的解决方案,但你可以通过放置" //"来强制换行。在每一行之后:

return folly::dynamic::object() //
  ("log_type", "FOO") //
  ("src_id", "42") //
  ("dst_id", "666") //
  ("success", true);

答案 1 :(得分:0)

我用过的另一种方法是关闭特定代码块的clang-format

// clang-format off
return folly::dynamic::object()
    ("log_type", "FOO")
    ("src_id", "42")
    ("dst_id", "666")
    ("success", true)
    ;
// clang-format on

如果在链接的方法参数中包含更复杂的逻辑,这可能不是最佳选择(因为您将希望格式化该逻辑),但是如果您只有这样的元组,则比添加空注释更干净。 / p>

这两种方式都绕过了clang格式,但是这种方式更加简洁(imo),并且向未来的开发人员更清楚地表明了您的意图。