作为clang-format仅重新格式化代码的工具,这种格式化是否有可能破坏工作代码或至少改变它的工作方式?是否存在某种合同,它将/不能改变代码的工作方式?
我们有很多代码需要格式化clang-format.这意味着,许多代码行都会改变.不必审查由于a而仅更改的每一行代码clang-format都将是此过程的一个大的简化.
我会说这clang-format不会改变代码的工作方式.另一方面,如果可以保证,我不是百分百肯定.
我无法弄清楚是否可以将clang-format配置为在参数不适合时始终中断,即:
// Try this first:
SomeCall(aaa, bbb, ccc);
// If doesn't fit, try this:
SomeCall(
aaa, bbb, ccc);
// If still doesn't fit, do NOT try this:
SomeCall(aaa, bbb,
ccc);
// and NOT this:
SomeCall(aaa,
bbb,
ccc);
// but immediately do this:
SomeCall(
aaa,
bbb,
ccc);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经得出结论,使用clang-format 3.4不可能做到这一点.这是对的吗?
我想使用clang-format来对齐我的评论,但没有别的.
选项是: AlignTrailingComments (bool).
但是当我运行以下内容时:
clang-format-3.6 -i -style='{AlignTrailingComments: true}' <file>
Run Code Online (Sandbox Code Playgroud)
它执行各种其他格式化选项,我想在未指定时具有默认值.
如何在代码库上只执行一个clang格式化规则?
拥有所有这些默认值后,很难看到单个格式选项对代码的完整影响.我必须解析所有这些其他更改的差异,并确定它是否是我指定实际执行的选项.
我注意到有一个DisableFormat选项,但无论我如何使用它,它都会阻止任何格式化.
clang-format-3.6 -i -style='{AlignTrailingComments: true, DisableFormat: true}'
clang-format-3.6 -i -style='{DisableFormat: true, AlignTrailingComments: true}'
Run Code Online (Sandbox Code Playgroud)
两者都导致clang-format不能在任何地方生成任何代码.
我在项目的根目录中获得了下一个.clang格式的文件:
---
AlignTrailingComments: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
BreakBeforeBinaryOperators: false
IndentWidth: 4
SortIncludes: false
NamespaceIndentation: All
...
Run Code Online (Sandbox Code Playgroud)
当我在我的c ++标题上运行clang-format时出现问题,类会自动缩进,如下所示:
如您所见,标签public和private仅缩进2个空格.但我想要实现的是下面的输出(缩进是手动调整):
这样,代码崩溃变得非常愉快.
我怎么能调整我的.clang格式才能达到这个效果?如果不可能,你将如何修补clang格式的源代码来实现这种期望的行为?
编辑:
我尝试过使用AccessModifierOffset失败,我使用了以下值{-2,0,2,4}:
如您所见,公共块内的语句将不会正确缩进.
EDIT2:
我已经尝试了@Henrique Jung解决方案,这绝对不是我要求的,如果使用这种组合,结果将是这样的:
正如您所看到的,函数内部缩进了8个空格而不是4个,这并不好.
EDIT3:
几个月前我给了赏金,所以我要再试一次,因为这个肯定很有趣.如果我对俚语格式的源代码有足够的了解,我会试一试,不幸的是我没有.
所以我下载,安装并插入了clang格式化插件的路径.我也测试了它,它适用于谷歌(Mozilla等)开箱即用的格式化选项,但我无法使用我的.clang格式文件.(我把我的文件放到与我的源文件相同的文件夹中,将其编码改为UTF-8,也尝试将其放入clang安装文件夹,将文件添加到项目中,将其内容写入其中'{key:value}'但格式化不会发生).那么如何将格式文件提供给chrome格式的扩展名呢?
我的文件内容:
{ BasedOnStyle: "LLVM", IndentWidth: 4 }
Run Code Online (Sandbox Code Playgroud)
我的文件名:nm.clang-format
我正在开发一个c ++项目,我正在使用它#pragma omp.我使用精彩的clang格式来整理,但它总是删除所有预处理器指令的缩进.有没有办法改变这种行为?或者是否有其他格式化工具更值得推荐?或者我应该避免使用这些工具?
通过Clang-Format样式选项进行搜索,我似乎无法找到控制C++属性放置行为的方法.
举一个例子,取这两个声明,第一个不会溢出列限制,第二个声明:
template <typename TChar>
[[gnu::always_inline]]
static ptr<TChar> within_limit(ptr<TChar> first, ptr<TChar> last);
template <typename TChar, typename FApply, typename... FApplyRest>
[[gnu::always_inline]]
static ptr<TChar> overflow(ptr<TChar> first, ptr<TChar> last, const FApply& apply, const FApplyRest&... apply_rest);
Run Code Online (Sandbox Code Playgroud)
无论我如何调整我.clang-format,输出都是这个的一些变体:
[[gnu::always_inline]] static ptr<TChar> within_limit(ptr<TChar> first, ptr<TChar> last);
[[gnu::always_inline]] static ptr<TChar>
overflow(ptr<TChar> first, ptr<TChar> last, const FApply& apply, const FApplyRest&... apply_rest);
Run Code Online (Sandbox Code Playgroud)
将属性与类型放在同一行是相当难以理解的(对我而言),所以我不希望clang-format这样做.使用__attribute__((always_inline))展品的行为相同.在单个列表中指定多个属性([[noreturn, gnu::cold]])会导致重新格式化([[ noreturn, gnu::cold ]]由于我不清楚的原因).格式化程序至少对属性有一些基本的了解.
SO:有没有办法让clang-format属性放在自己的行上(C++相当于BreakAfterJavaFieldAnnotations)?
尝试过的变通方法
使用// clang-format …
我有一个包含这样的行的源文件;
#define ARC_V2_LP_START 0x002
#define ARC_V2_LP_END 0x003
#define ARC_V2_STATUS32 0x00a
Run Code Online (Sandbox Code Playgroud)
所有的值很好地对齐.不幸的是,clang-format会这样做;
#define ARC_V2_LP_START 0x002
#define ARC_V2_LP_END 0x003
#define ARC_V2_STATUS32 0x00a
Run Code Online (Sandbox Code Playgroud)
我找到了AlignConsecutiveDeclarations和AlignConsecutiveAssignments选项,但没有任何可以对齐连续的#defines.是否有可能做到这一点?
我试图使用clang-tools特别是clang-format在vim中进行自动代码格式化,但我找不到这个工具使用apt-get搜索.
以前是否有人遇到过此问题,您有什么建议吗谢谢
我知道人们对如何在Objective-C中格式化方法调用有不同的看法,即
[self presentViewController:scanViewController
animated:YES
completion:nil];
Run Code Online (Sandbox Code Playgroud)
VS
[self presentViewController:scanViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
我使用.clang格式文件中的哪些选项来控制这种缩进?(如果我不想要它,冒号排队等)
还有,这只是我还是这个格式无知的块?注意成功块的if语句不是缩进的,NSLog函数也不是故障块.
[self.client getPath:path
parameters:parameters
success:^(AFHTTPRequestOperation *operation, id responseObject) {
if ([from_id isEqualToString:self.from_id]) {
self.image.image = [UIImage imageWithData:responseObject];
}
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(error.description);
}];
Run Code Online (Sandbox Code Playgroud) clang-format ×10
c++ ×5
clang ×4
c ×2
auto-indent ×1
code-cleanup ×1
formatting ×1
indentation ×1
objective-c ×1
vim ×1