¿Cómo envolver el inicializador de estructura en formato clang?

2 minutos de lectura

avatar de usuario de ideasman42
ideasman42

Tome este ejemplo antes de que se ejecute el formato clang:

struct ApplicationState app_state = {
    .signal = {
        .use_crash_handler = true,
        .use_abort_handler = true,
    },
    .exit_code_on_error = {
        .python = 0,
    }
};

Después de ejecutarse, el formato clang se aplica de la siguiente manera:

struct ApplicationState app_state = {.signal =
                                             {
                                                     .use_crash_handler = true,
                                                     .use_abort_handler = true,
                                             },
                                     .exit_code_on_error = {
                                             .python = 0,
                                     }};

¿Hay alguna manera de agregar una nueva línea después de la llave, antes del miembro de la estructura para que sea más como el primer ejemplo y no como el segundo?

  • La primera versión es antes de se ejecuta en formato clang. La pregunta es cómo mantener este formato y evitar el incómodo segundo ejemplo.

    – ideasman42

    21 de noviembre de 2017 a las 10:39

  • No sé cómo suena, pero con AStyle estoy casi seguro de que hay un comentario que puedes poner encima de tu estructura para deshabilitar el formato automático. Intente verificar si existe algo similar para clang.

    – Tim

    21 de noviembre de 2017 a las 10:41

  • @TimF, lo hay. Ver Deshabilitar el formateo en una pieza de código

    – ahogen

    29 de diciembre de 2017 a las 1:39

  • @TimF, por supuesto, el formateo se puede desactivar según sea necesario como último recurso. Sin embargo, idealmente, el uso de esto se mantiene al mínimo, y el formato de la estructura en Q es C99 estándar, nada inusual.

    – ideasman42

    29 de diciembre de 2017 a las 9:47

  • Bien, gracias por eso. Tal vez debería escribir una solicitud de función para una opción para manejar esto…

    – Arsenal

    4 de diciembre de 2020 a las 7:03

avatar de usuario de ideasman42
ideasman42

Actualmente clang-format no tiene una forma útil de controlar esto (a partir de la versión 14.0).

Tiempo BreakBeforeBinaryOperators: All fuerza el ajuste (consulte la respuesta de @ eric-backus), también afecta el formato en muchos otros lugares, sin relación con la declaración de estructura.

puede sin embargo, solucione esto simplemente usando una coma final.


Antes:

struct ApplicationState app_state = {.signal =
                                             {
                                                     .use_crash_handler = true,
                                                     .use_abort_handler = true,
                                             },
                                     .exit_code_on_error = {
                                             .python = 0,
                                     }};

Después:


struct ApplicationState app_state = {
    .signal = {
        .use_crash_handler = true,
        .use_abort_handler = true,
    },
    .exit_code_on_error = {
        .python = 0,
    },
};
/*   ^ notice trailing comma on the second last line! */

Lo principal que necesitas es:

BreakBeforeBinaryOperators: All

En su lugar, podría establecer el estilo general en WebKitporque eso establece BreakBeforeBinaryOperators a All.

Claramente, el formato clang debe ver el . como operador binario. no estoy seguro si deberíapero eso es lo que parece hacer.


Probé esto con formato clang 6.0.0. Presumiblemente, las versiones más nuevas funcionarían igual, pero no las he probado, así que no puedo estar seguro.

¿Ha sido útil esta solución?