标签: clang-format

如何使用clang格式控制数组初始值设定项的缩进?

有时clang格式会这样做:

SomeType VariableName[] = {Thing1,
                           Thing2,
                           Thing3}
Run Code Online (Sandbox Code Playgroud)

有时clang格式会这样:

SomeType VariableName[] = {
   Thing1,
   Thing2,
   Thing3}
Run Code Online (Sandbox Code Playgroud)

并且单个字符更改可以使其在之间切换.

有没有办法控制它的作用?

我正在使用最新的git源代码构建,因此可以使用最新的选项.

c++ clang-format

6
推荐指数
1
解决办法
1278
查看次数

准备vim环境以使用clang格式

问题:

E319:抱歉,此版本中没有该命令

问题
当我运行vim环境并尝试重新格式化代码(CTRL + K)时,我在屏幕上收到此警告

环境:
系统:Mac OS X

设置:
Vim:

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Nov 17 2016 20:17:27)
MacOS X (unix) version
Included patches: 1-91
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

python --version: Python 3.5.2
Run Code Online (Sandbox Code Playgroud)

我所做的

谢谢,

c++ macos vim clang clang-format

6
推荐指数
1
解决办法
5768
查看次数

什么是正确的“.clang-format”位置?

我无法理解 clang-format 手册中的以下文本:

.clang-format file located in one of the parent
directories of the source file (or current
directory for stdin).
Run Code Online (Sandbox Code Playgroud)

“标准输入的当前目录”是什么意思?它是当前目录还是标准输入?

是否可以通过完整路径指定 .clang 格式的位置?

clang clang-format

6
推荐指数
1
解决办法
2560
查看次数

如何让clang格式的c++ long for循环分成三行?

我希望任何长的for 循环都能自动分成三行;喜欢:

    for (auto origin = backup_to_origins[peer].begin();
         origin != backup_to_origins[peer].end(); 
         origin++)
Run Code Online (Sandbox Code Playgroud)

但是 google 风格的 clang-format 将其格式化为两行:

    for (auto origin = backup_to_origins[peer].begin();
         origin != backup_to_origins[peer].end(); origin++)
Run Code Online (Sandbox Code Playgroud)

BinPackArguments选项将每个 for 循环分成三行,包括短行,这不是我想要的。

基于线宽,我只希望占用超过X字符数量的循环被分成三行。<=X字符的循环,它们可以保留在一行上。我怎样才能做到这一点?

c++ clang-format

6
推荐指数
1
解决办法
239
查看次数

clang 格式可以格式化 C/C++ 函数以在逗号之前打破参数列表吗?

我注意到你可以做到这一点。

来自https://clang.llvm.org/docs/ClangFormatStyleOptions.html#

BCIS_BeforeComma(在配置中:BeforeComma)在冒号和逗号之前中断构造函数初始值设定项,并将逗号与冒号对齐。

得到以下效果

Constructor()
    : initializer1()
    , initializer2()
Run Code Online (Sandbox Code Playgroud)

我想同样能够打破

foo(a,b,c,d,e)
Run Code Online (Sandbox Code Playgroud)

foo
  ( a
  , b
  , c
  , d
  , e
  );
Run Code Online (Sandbox Code Playgroud)

这可能吗?

C/C++的resharper 格式化程序似乎有这样一个选项。Prefer wrap before ","在页面上搜索。

c c++ clang-format

6
推荐指数
0
解决办法
431
查看次数

在operator =之后中断(以clang格式表示

我在LLVM 7.0.0中使用clang格式,在C++中使用Windows 10.

我有下课

class FooooooooooooooooooC
{
public:
   FooooooooooooooooooC() = default;
   const FooooooooooooooooooC& operator=( const FooooooooooooooooooC& ) = delete;

};
Run Code Online (Sandbox Code Playgroud)

并且在运行clang-format之后它应该是这样的

class FooooooooooooooooooC
{
public:
   FooooooooooooooooooC() = default;
   const FooooooooooooooooooC& operator=(
      const FooooooooooooooooooC& ) = delete;

};
Run Code Online (Sandbox Code Playgroud)

但实际上它在运行clang-format后看起来像这样

class FooooooooooooooooooC
{
public:
   FooooooooooooooooooC() = default;
   const FooooooooooooooooooC& 
   operator=( const FooooooooooooooooooC& ) = delete;

};
Run Code Online (Sandbox Code Playgroud)

我的.clang格式的clang-fromat设置是

---
AccessModifierOffset: -3
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments: true
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false …
Run Code Online (Sandbox Code Playgroud)

c++ llvm operator-keyword clang-format

6
推荐指数
1
解决办法
197
查看次数

问:我可以将 VSCode 配置为从我的主目录中获取 .clang 格式的文件吗?

我想为我的所有项目使用相同的 clang 格式文件,因为我有多个。但是我不想在每个工作区中都有它们,而且我的主目录中已经有一个 clang 格式的文件,我该如何进行这项工作?或者这是不可能的?

我已经看到这个问题: 如何在每个工作区中配置没有 .clang-format 文件的 clang 格式?

但是我的 clang 格式文件大约有 80 行,我只想在家中本地编辑这些内容,而不必在 vscode 中进行更改。

clang-format visual-studio-code vscode-settings

6
推荐指数
2
解决办法
4349
查看次数

clang-format 可以强制支持所有控制语句体吗?

IE浏览器,这个:

if (x > 5)
  return test;
Run Code Online (Sandbox Code Playgroud)

总是会变成:

if (x > 5)
{
  return test;
}
Run Code Online (Sandbox Code Playgroud)

我不是在谈论大括号样式(Allman、GNU、Whiteman 等),我只是说完全有大括号。

有一些东西可以防止/启用单行控制语句,例如:

if (x > 5) return test;

这是AllowShortBlocksOnASingleLine,但这不是我在这里寻找的东西。

如果它适用于 clang 7 那是理想的,但如果不是让我知道。

curly-braces braces clang-format

6
推荐指数
2
解决办法
1007
查看次数

clang 格式:禁用排序包括

在我们的 C++ 项目中,包含的顺序会定期更改。这是一个问题,因为我们正在使用一些需要特定包含顺序的第三方库来避免问题。

我知道,这很糟糕,但我们必须处理它。

不幸的是,我们包含的顺序经常改变,我想这是由于clang-format. 我找到了一个页面,您可以在其中指定一个变量includeCategories。但是,我并不完全了解它是如何工作的。我只是想完全禁用包含的排序。我怎样才能做到这一点?

c++ include clang-format

6
推荐指数
2
解决办法
4172
查看次数

clang-format:中断函数参数而不是函数限定符(noexcept)

我正在寻找一种使用 clang-format(版本 9.0.0)格式化下面的 C++ 代码的方法,这样超过 80 列限制的函数定义在参数声明而不是 C++ 函数限定符之后被破坏,例如noexcept

void scheduler::stop_mark(service &current, service const &stopped) const
    noexcept {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

上面的代码片段显示了我使用LLVM默认样式格式化的代码,下面的代码是我在正确格式化后想要的代码:

void scheduler::stop_mark(service& current,
                          service const& stopped) const noexcept {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

两个片段之间的区别在于,该行在 之后service& current,而不是 之后被断开noexcept

使用LLVM默认样式时,此行为可重现,但我使用以下选项作为参考:

---
BasedOnStyle: LLVM

AlignAfterOpenBracket: Align
AllowAllArgumentsOnNextLine: 'true'
AllowAllConstructorInitializersOnNextLine: 'true'
AllowAllParametersOfDeclarationOnNextLine: 'true'
AllowShortCaseLabelsOnASingleLine: 'false'
AllowShortFunctionsOnASingleLine: Empty
AllowShortLambdasOnASingleLine: Empty
AlwaysBreakTemplateDeclarations: 'Yes'
BinPackArguments: 'true'
BinPackParameters: 'true'
BreakConstructorInitializers: BeforeComma
BreakConstructorInitializersBeforeComma: 'true'
ConstructorInitializerIndentWidth: 2
FixNamespaceComments: 'true' …
Run Code Online (Sandbox Code Playgroud)

c++ llvm clang-format

6
推荐指数
1
解决办法
464
查看次数