标签: clang-format

如何指定clang格式文件?

我刚刚在Redhat 6机器上构建了clang 5.0.0并尝试运行clang-format.我无法获得样式文件中的-style选项.这是我认为应该工作的一组命令的示例:

./clang-format -style=llvm -dump-config > .llvm-format
./clang-format -style=.llvm-format ~/myFile.cc
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时,我收到以下错误:

Invalid value for -style
Run Code Online (Sandbox Code Playgroud)

当它按预期放在父目录中时,它似乎找到并使用.clang格式.内置类型也有效:

./clang-format -style=Mozilla ~/myFile.cc
Run Code Online (Sandbox Code Playgroud)

那么问题是我无法明确指定要使用的.clang格式文件.这是我的构建问题还是我滥用clang-format oir误解了文档?

c++ llvm clang llvm-clang clang-format

18
推荐指数
2
解决办法
1万
查看次数

使用带有 c++20 概念的 clang-format

我查看了 clang-format 样式选项https://clang.llvm.org/docs/ClangFormatStyleOptions.html但没有看到任何对 c++ 概念和需要子句的引用。通常我可以配置 clang-format 来做我想做的事,但我不知道如何让它很好地处理我的概念和需要条款:

  1. 目前 clang-format 对我的概念做了这个:
template <typename F, typename P, typename T>
concept Accumulate_Fn = Parser<P>&& std::invocable<F, T, parser_t<P>>&&
    std::same_as<T, std::invoke_result_t<F, T, parser_t<P>>>;
Run Code Online (Sandbox Code Playgroud)

但是我想将每个约束放在自己的行上(就像它处理太长的函数参数一样),以便结果如下所示:

template <typename F, typename P, typename T>
concept Accumulate_Fn = Parser<P> &&
                        std::invocable<F, T, parser_t<P>> &&
                        std::same_as<T, std::invoke_result_t<F, T, parser_t<P>>>;
Run Code Online (Sandbox Code Playgroud)
  1. 对于带有 requires 子句的函数,clang-format 目前给了我:
template <Parser P1, Parser P2, typename T, Accumulate_Fn<P1, parser_t<P1>> F>
requires std::same_as<T, parser_t<P1>> constexpr Parser auto
separated_by(P1&& p1, P2&& p2, T&& init, F&& f)
Run Code Online (Sandbox Code Playgroud)

但我想要更接近的东西: …

c++-concepts clang-format c++20

17
推荐指数
1
解决办法
1286
查看次数

clang-format:如何将构造函数的初始值设定项列表的每个元素保留在单独的行上

我有一个这样的 C++ 类:

class A {
public:
    A() :
        m_a(someValue1),
        m_b(someValue2),
        m_c(someValue3)
    {
    }

    // .... other class members

private:
    A m_a;
    B m_b;
    C m_c;
};
Run Code Online (Sandbox Code Playgroud)

使用 clang-format 格式化此代码后,我得到:

class A {
public:
    A() :
        m_a(someValue1), m_b(someValue2), m_c(someValue3)
    {
    }

    // .... other class members

private:
    A m_a;
    B m_b;
    C m_c;
};
Run Code Online (Sandbox Code Playgroud)

即构造函数中的初始化列表被格式化为单行,直到达到他们允许的最大行长度。

我的问题是如何告诉 clang-format 将每个元素保留在自己的行上,就像在格式化之前在我的原始代码中一样?我找不到任何合适的参数。我尝试将参数 AllowShortBlocksOnASingleLine(在我看来是最合适的)设置为 true 和 false,但这对此没有影响。那么有人可以建议如何实现这种格式吗?

这是我的 .clang 格式:

BasedOnStyle: Google
AccessModifierOffset: '-4'
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: 'false'
AlignConsecutiveDeclarations: 'false'
AlignEscapedNewlines: Left
AlignOperands: 'true'
AlignTrailingComments: …
Run Code Online (Sandbox Code Playgroud)

c++ llvm-clang clang-format

16
推荐指数
2
解决办法
5290
查看次数

函数定义之间的换行符

有没有办法在函数定义之间自动插入空格.例如我的初始资料来源是:

void
func1()
{
    // func1 body.
}
void
func2()
{
    // func2 body.
}
Run Code Online (Sandbox Code Playgroud)

我希望将其重新格式化为:

void
func1()
{
    // func1 body.
}


void
func2()
{
    // func2 body.
}
Run Code Online (Sandbox Code Playgroud)

如果有更多换行符,则应保留固定数量的换行符.

clang-format

15
推荐指数
3
解决办法
2268
查看次数

如何在打开函数括号之前使clang-format添加新行?

我有兴趣为函数添加一个开括号(但不是if语句和其他上下文).例如

void foo()
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

除了Flamewars之外,还有一个很好的理由这样做吗?虽然我对if/else和less块使用相同的开放括号,但我认为在这种情况下,更大的代码单元(函数/方法/类/结构)的可视化组织可以胜过完美的一致性.

此外,我如何让clang-format遵循这种风格?

coding-style clang clang-format

15
推荐指数
2
解决办法
2万
查看次数

clang-format:类声明结束和命名空间关闭之间的空行

我使用clang-format格式化我们的C++代码.我想在类声明和周围命名空间的右括号之间有一个空行,如下所示:

namespace Foo {

class Bar {
};

}
Run Code Online (Sandbox Code Playgroud)

但clang格式将我的代码更改为:

namespace Foo {

class Bar {
};
}
Run Code Online (Sandbox Code Playgroud)

它删除了类声明和命名空间的右括号之间的空行.

我的问题:有没有办法防止clang格式删除空行?

这是我目前的clang格式配置:

Language: Cpp
AccessModifierOffset: -4
AlignAfterOpenBracket: true
AlignConsecutiveAssignments: false
AlignEscapedNewlinesLeft: false
AlignOperands: false
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true
BinPackArguments: true
BinPackParameters: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: false
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 0
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: …
Run Code Online (Sandbox Code Playgroud)

c++ code-formatting clang clang-format

15
推荐指数
1
解决办法
1480
查看次数

clang-format:在lambda函数和extern块的大括号之前中断

我有一个lambda函数格式如下:

auto cb = [](std::string const& _param)
{
    std::cout << _param;
};
Run Code Online (Sandbox Code Playgroud)

我想将开口支撑保持在新线上,但clang-format始终将它放在第一行的末尾.是否可以配置clang-format为遵循上述风格?

我当前配置的相关部分如下所示:

BraceWrapping:                         
  AfterClass:      true   
  AfterControlStatement: true
  AfterEnum:       true
  AfterFunction:   true          
  AfterNamespace:  true                
  AfterStruct:     true
  AfterUnion:      true
  BeforeCatch:     true
  BeforeElse:      true   
  IndentBraces:    true
BreakBeforeBraces: Allman
Run Code Online (Sandbox Code Playgroud)

我也想对extern块做同样的事情:

extern "C"
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11 clang-format

15
推荐指数
2
解决办法
2733
查看次数

我可以告诉 clang-format 不要在算术运算符周围添加空格吗

clang-format 似乎总是在运算符周围添加空格。例如,以下内容:

a = b+c
Run Code Online (Sandbox Code Playgroud)

变成:

a = b + c
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉它不要在+, -, *,周围添加空格/周围添加空格?

我已经知道了SpaceBeforeAssignmentOperators(如此处所示),我正在为操作员寻找类似的东西。

类似的担忧(但方向不同)如何向 clang-format 添加功能?

clang-format

15
推荐指数
0
解决办法
844
查看次数

使用clang格式放置const

clang-format有很多关于空白的配置选项,还有一些关于代码顺序(包括的顺序).是否可以重新排序const限定符,以便将它们放在相应类型的右侧?

示例:声明const int x = 0;应格式化为int const x = 0;.

c++ clang-format

14
推荐指数
2
解决办法
994
查看次数

你能设置clang-format的行长吗?

clang-format打破了80列的界限.有没有办法让止损线?文档在

http://clang.llvm.org/docs/ClangFormatStyleOptions.html

似乎没有解决这个问题.

clang-format

14
推荐指数
2
解决办法
5827
查看次数