Wie umschließe ich den Strukturinitialisierer im Clang-Format?

Lesezeit: 2 Minuten

Benutzeravatar von ideasman42
Ideengeber42

Nehmen Sie dieses Beispiel, bevor clang-format ausgeführt wird:

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

Nach dem Ausführen gilt das clang-Format wie folgt:

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

Gibt es eine Möglichkeit, nach der geschweiften Klammer vor dem Strukturmitglied einen Zeilenumbruch einzufügen, damit es eher dem ersten Beispiel und nicht dem zweiten entspricht?

  • Die erste Version ist Vor clang-Format läuft. Die Frage ist, wie man dieses Format beibehält und das unangenehme zweite Beispiel verhindert.

    – Ideengeber42

    21. November 2017 um 10:39 Uhr

  • Ich kenne Clang nicht, aber bei AStyle bin ich mir fast sicher, dass es einen Kommentar gibt, den Sie oben auf Ihre Struktur setzen können, um die automatische Formatierung zu deaktivieren. Versuchen Sie zu überprüfen, ob etwas Ähnliches für Clang existiert.

    – Tim

    21. November 2017 um 10:41 Uhr

  • @TimF, gibt es. Sehen Deaktivieren der Formatierung eines Codestücks

    – Ahogen

    29. Dezember 2017 um 1:39 Uhr

  • @TimF, natürlich kann die Formatierung als letztes Mittel bei Bedarf deaktiviert werden. Idealerweise wird die Verwendung jedoch auf ein Minimum beschränkt, und die Formatierung der Struktur in Q ist Standard-C99, nichts Ungewöhnliches.

    – Ideengeber42

    29. Dezember 2017 um 9:47 Uhr

  • Okay, danke dafür. Vielleicht sollte ich eine Feature-Anfrage für eine Option schreiben, um dies zu handhaben …

    – Waffenarsenal

    4. Dezember 2020 um 7:03 Uhr

Benutzeravatar von ideasman42
Ideengeber42

Momentan clang-format hat keine sinnvolle Möglichkeit, dies zu kontrollieren (ab Version 14.0).

Während BreakBeforeBinaryOperators: All erzwingt das Umbrechen (siehe die Antwort von @eric-backus), es wirkt sich auch an vielen anderen Stellen auf die Formatierung aus, unabhängig von der Deklaration von Structs.

Du dürfen Sie können dies jedoch umgehen, indem Sie einfach ein nachgestelltes Komma verwenden.


Vor:

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

Nach:


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! */

Das Wichtigste, was Sie brauchen, ist:

BreakBeforeBinaryOperators: All

Sie könnten stattdessen den allgemeinen Stil auf einstellen WebKitdenn das setzt BreakBeforeBinaryOperators Zu All.

Klar muss das clang-format sehen . als binärer Operator. Ich bin mir nicht sicher, ob es sollenaber das scheint es zu tun.


Ich habe dies mit Clang-Format 6.0.0 getestet. Vermutlich würden neuere Versionen genauso funktionieren, aber ich habe es nicht getestet, also kann ich nicht sicher sein.

1444170cookie-checkWie umschließe ich den Strukturinitialisierer im Clang-Format?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy