标签: clang-format

控制clang格式的Objective-C块参数换行符

我试图弄清楚当有一个块作为参数时,阻止clang格式添加换行符.

例如,我想要这个:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(500 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    NSLog(@"here");
});
Run Code Online (Sandbox Code Playgroud)

不是这个:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(500 * NSEC_PER_SEC)),
               dispatch_get_main_queue(),
               ^{
                 NSLog(@"here");
               });
Run Code Online (Sandbox Code Playgroud)

为了解决问题,我还希望将多个块参数分解为:

[self method:argument success:^(NSString* result) {
    // Do stuff
} failure:^(NSError *error) {
    // Do other stuff
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题吗?是否有可能使用clang格式?

我的.clang格式

objective-c clang-format

7
推荐指数
0
解决办法
172
查看次数

未找到可执行文件;请配置 clang-可执行文件

Clang 格式在 VSCode Linux (Ubuntu) 中不起作用。在 VSCode 中安装后clang-format,我尝试调用它,但出现以下错误:

executable not found; please configure clang-executable. 
Clang-format is available under '/home/alex/.vscode/extensions/ms-vscode.cpptools-0.10.3/LLVM/bin/clang-format'
Run Code Online (Sandbox Code Playgroud)

clang-format visual-studio-code

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

如何告诉 clang-format 不要在一行上制作短 lambda 表达式?

#include <iostream>\n\nint main()\n{\n    auto func = []() { \n        std::cout << "hello, world" << std::endl; \n    };\n    func();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想以这种方式保留我的短 lambda 表达式。但 clang-format 总是使其在一行上。

\n\n
auto func = []() { std::cout << "hello, world" << std::endl; };\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已阅读文档,但找不到正确的设置。这是我的配置\xef\xbc\x9a

\n\n
BasedOnStyle:   LLVM\nLanguage:   Cpp\nAccessModifierOffset:   -4\nAlignAfterOpenBracket:  Align\nAlignConsecutiveAssignments:    true\nAlignConsecutiveDeclarations:   true\nAlignEscapedNewlines: Left\nAlignOperands:  true\nAlignTrailingComments:  true\nAllowAllParametersOfDeclarationOnNextLine:  true\nAllowShortBlocksOnASingleLine:  false\nAllowShortCaseLabelsOnASingleLine:  false\nAllowShortFunctionsOnASingleLine:   Empty\nAllowShortIfStatementsOnASingleLine:    true\nAllowShortLoopsOnASingleLine:   false\nAlwaysBreakAfterDefinitionReturnType:   None\nAlwaysBreakAfterReturnType: None\nAlwaysBreakBeforeMultilineStrings:  false\nAlwaysBreakTemplateDeclarations:    false\nBinPackArguments:   false\nBinPackParameters:  false\nBraceWrapping:   \n  AfterClass:   true\n  AfterControlStatement: true   \n  AfterEnum: true   \n  AfterFunction:    true\n  AfterNamespace:   false\n  AfterObjCDeclaration: false\n  AfterStruct:  true\n  AfterUnion: …
Run Code Online (Sandbox Code Playgroud)

clang-format

7
推荐指数
1
解决办法
2075
查看次数

使用clang-format保留完整函数的短lambda用作中间参数

我想用clang-format格式化代码,并完整保留lambda用作中间函数参数:

void f()
{
    func(this, [this] { return false; }, this);
}
Run Code Online (Sandbox Code Playgroud)

我尝试用clang格式9.0进行的所有操作都将参数包装到下一行,即:

void f()
{
    func(
        this, [this] { return false; }, this);
}
Run Code Online (Sandbox Code Playgroud)

如果没有第一个或/和最后一个参数,则即使内置-style='WebKit'选项也可以提供所需的结果:

void f()
{
    func([this] { return false; }, this); // ok
    func(this, [this] { return false; }); // ok 
    func([this] { return false; });       // ok 
}
Run Code Online (Sandbox Code Playgroud)

自LLVM 8.0起,似乎有所更改(损坏),因为7.1可根据需要工作。

c++ lambda clang-format

7
推荐指数
1
解决办法
190
查看次数

问:我可以将 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-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
查看次数

防止 clang-format 在模板实例化中插入换行符

我遇到的问题是 clang-format 太容易在模板实例化参数中插入换行符。

例如,这个:

return std::is_trivially_constructible_v<T> && std::is_trivially_destructible_v<T>;
Run Code Online (Sandbox Code Playgroud)

变成:

return std::is_trivially_constructible_v<
           T> && std::is_trivially_destructible_v<T>;
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这真的让我很恼火。如果可能的话,有没有办法让它更喜欢将模板实例化参数保留在同一行?

例如,这样的事情会很棒:

return std::is_trivially_constructible_v<T>
    && std::is_trivially_destructible_v<T>;
Run Code Online (Sandbox Code Playgroud)

c++ templates line-breaks clang-format

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

在 Visual Studio 2022 中保存时如何应用格式?

我已.clang-format在项目中放置了一个文件,并且可以使用Ctrl+K, Ctrl+D. 我还在 下配置并启用了“保存时运行代码清理配置文件” Options -> Text Editor -> Code Cleanup。但是当我保存文件时,格式不会应用。

我有什么遗漏的吗?

先感谢您!

编辑:由于 C++ 似乎不可能(截至 2022 年 6 月),我现在将使用VS2022 的扩展“保存格式”,与 Sedenion 的建议相比,它具有更多功能。

c++ visual-studio clang-format visual-studio-2022

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

在一行上获取 clang-format 格式的 require-expression

这是我的代码:

if constexpr (requires { { N::uuid() } -> std::convertible_to<score::uuid_t>; })
Run Code Online (Sandbox Code Playgroud)

clang-format (14, 15) 坚持将其格式化为 5 行:

if constexpr (requires {
                {
                  N::uuid()
                  } -> std::convertible_to<score::uuid_t>;
              })
Run Code Online (Sandbox Code Playgroud)

这太疯狂了,我怎样才能确保它保持在一行上而不必注释每一行?

c++ code-formatting clang-format c++20

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