【发布时间】:2021-01-04 20:17:44
【问题描述】:
使用 clang-format 我经常遇到如下问题:
// I want this
umbra_map_ops.flags = UMBRA_MAP_CREATE_SHADOW_ON_TOUCH |
UMBRA_MAP_SHADOW_SHARED_READONLY;
// Formatting gives me this
umbra_map_ops.flags =
UMBRA_MAP_CREATE_SHADOW_ON_TOUCH | UMBRA_MAP_SHADOW_SHARED_READONLY;
// I want this
drmf_status_t status = umbra_read_shadow_memory(
umbra_map, app, sz, &sz, (byte *)result);
// Or this
drmf_status_t status = umbra_read_shadow_memory(umbra_map, app, sz,
&sz, (byte *)result);
// Formatting gives me this
drmf_status_t status =
umbra_read_shadow_memory(umbra_map, app, sz, &sz, (byte *)result);
代码看起来很糟糕。如何摆脱这种行为?
更新
现在我正在使用clang-format: off。但我更喜欢不同的东西。
原码:
static bool
ds_mem_init(client_id_t id)
{
umbra_map_options_t umbra_map_ops;
umbra_map_ops.scale = UMBRA_MAP_SCALE_SAME_1X;
umbra_map_ops.flags = UMBRA_MAP_CREATE_SHADOW_ON_TOUCH | /* clang-format: disable */
UMBRA_MAP_SHADOW_SHARED_READONLY; /* clang-format: disable */
...
}
static dr_signal_action_t
event_signal_instrumentation(void *drcontext, dr_siginfo_t *info)
{
bool res = handle_special_shadow_fault(
drcontext, info->raw_mcontext, info->access_address); /* clang-format: disable */
return res ? DR_SIGNAL_SUPPRESS : DR_SIGNAL_DELIVER;
}
【问题讨论】:
-
值得一提的是,不包括设置不等于忽略它。在这种情况下,您只是使用 Webkit 使用的任何东西。您真的应该只导出 Webkit 的文件,然后查看每个设置。其中许多与其他设置有交互。我也没有和你一样的结果。您的最后一个示例符合您指定的 90 列限制,因此它是单行的。与您的按位 OR 相同,它是单行的。
-
使用您的链接到 clang-format 文件(它应该是问题的一部分),格式化提供了两个一列,您可以在其中抱怨 clang-format 给您的内容。 (我的 WSL2 有 LLVM 7)因为它不一样。如果我将列限制更改为 80,我会得到您显示的结果。请下定决心。
-
@sweenish 这些示例行可能缩进了一些量(在函数内部、内部代码块等)。 OP,您应该提供您想要的确切示例。
-
@Kevin Fair 点。
-
好的,我已经发布了原始代码。我希望找到快速的解决方案,而不是一一检查所有 WebKit 规则
标签: c++ clang-format