簡體   English   中英

Clang 格式:如何避免換行符

[英]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格式文件


更新

現在我使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM