[英]Clang-format: How to avoid new line breaks
使用 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;
}
對於第一種情況,您需要:
AlignOperands: Align
PenaltyBreakAssignment: 6
第一個應該是直截了當的; 這正是你想要的。 第二個是需要調整 clang-format 以不喜歡破壞分配並將右手操作數放在單行上。 您可能需要嘗試不同的值,因為這與其他懲罰有關。 6 是通過您的示例代碼的最低懲罰。
對於第二種情況,您可以進一步提高懲罰,同時降低相互沖突的懲罰。 “賦值”懲罰似乎在這里適用,盡管從技術上講它不是賦值而是復制初始化:
PenaltyBreakAssignment: 20
PenaltyBreakBeforeFirstCallParameter: 0
對於它的價值,這些懲罰默認為 2 分配和 19 首次調用參數至少在我測試的 clang-format 版本中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.