在双冒号之前的clang格式中断

时间:2019-12-12 00:54:19

标签: c++ namespaces format clang-format

我目前正在基于代码的基础上逐步应用clang格式,并提出了一个场景,它给出的结果与::的换行位置不是我们真正想要的结果。

>
// Manual format was.
bool
foo::MyLongClassName::MyLongFunctionName(
  const Type1& Argument1,
  const Type2& Argument2);

// After clang format.
bool foo::MyLongClassName::
  MyLongFunctionName(const Type1& Argument1,
                     const Type2& Argument2);

我的同事有评论评论:

  

我总是喜欢将函数名放在双冒号旁边,因为这使搜索方法实现变得容易。

有没有一种方法可以获取clang格式来更改换行发生的一侧?

例如因此它的输出类似于:

// After clang format.
bool foo::MyLongClassName
::MyLongFunctionName(const Type1& Argument1,
                     const Type2& Argument2);

1 个答案:

答案 0 :(得分:0)

目前,我的解决方法是应用后clang格式的hack来手动移动双冒号,同时遍历文件行并运行perl regex。

  # Hack - fix breaking after scoping operator, instead we want the
  # break to be before the scoping operator so we move it down a line.
  if ($line =~ /^.+::$/ &&
      $lines[$lineNo + 1] =~ /^  [A-Z].+$/)
  {
    $line = substr($line, 0, -2);
    $lines[$lineNo + 1] = "::".substr($lines[$lineNo + 1], 2);
  }