2014-02-23 10 views
21

Ich kann nicht herausfinden, ob es möglich ist Klirren-Format zu konfigurieren bricht immer, wenn die Parameter nicht passen, das heißt:Clang-Format: immer brechen wenn Params nicht passen?

// Try this first: 
SomeCall(aaa, bbb, ccc); 

// If doesn't fit, try this: 
SomeCall(
    aaa, bbb, ccc); 

// If still doesn't fit, do NOT try this: 
SomeCall(aaa, bbb, 
     ccc); 

// and NOT this: 
SomeCall(aaa, 
     bbb, 
     ccc); 

// but immediately do this: 
SomeCall(
    aaa, 
    bbb, 
    ccc); 

Bisher habe ich festgestellt, dass es nicht möglich ist, dies mit Klappern zu tun -Format 3.4. Ist es richtig?

+0

Auch brauchen wir Clang-Format-Tag, aber ich kann nicht hinzufügen. –

+1

Ich brauche fast die gleiche Art von Formatierung. Wenn ich in mehrere Zeilen einbringe, möchte ich das erste Argument in die nächste Zeile mit einem einzigen Einrückung setzen – TimW

+0

Es formatiert [@KevlinHenney] (https://twitter.com/KevlinHenney) Erwähnungen in Reaktion auf eine der [Sieben Ineffektiven Codierung Gewohnheiten vieler Programmierer] (http://www.slideshare.net/Kevlin/seven-ineffective-coding-habits-of-many-programmers-45312038/20). –

Antwort

1

Ich habe leider nur Zugriff auf clang-format 3.8.0 ("clang-format version 3.8.0 (tags/RELEASE_380/final)"), so kann ich für Release 3.4 nicht einfach testen.

Es gibt ein Handbuch für die neueste Version clang-format verfügbar here, dass ich nicht weiß, ob Sie gefunden haben oder nicht. Es verbindet sich mit der Liste von Clang-Format Style Options. Dort gibt es eine Stiloption, die den Titel Ihrer Frage wiedergibt: AlignAfterOpenBracket: AlwaysBreak, Immer nach einer offenen Klammer brechen, wenn die Parameter nicht in eine einzige Zeile passen.

Um dies zu nutzen, legen Sie die folgenden in Ihrer ~/.clang-format Datei:

AlignAfterOpenBracket: AlwaysBreak 

Nach einigen Tests, scheint es, dass es genau das tut, was Sie es, fast tun möchte.

Es formatiert

SomeCall(aaa, bbb, ccc); 

als

SomeCall(
    aaa, bbb, 
    ccc); 

wenn aaa, bbb, ccc nicht auf eine Zeile passt. Es wird nicht zwischen aaa und bbb brechen, bis auch zu lang ist, in diesem Fall bbb und ccc werden auf der gleichen Linie sein. I.e. Es bricht nach der Eröffnung (, aber dann versucht, Zeilen zu füllen. Es wird nicht automatisch alle Kommas unterbrochen.

Betrachtet man corresponding page für clang-format 3.4, scheint es, als ob diese Konfigurationsoption leider nicht da ist. Damit haben Sie zwei Optionen:

  1. Aktualisieren Sie auf eine neuere Version von clang-format.
  2. Nicht.

    AlignAfterOpenBracket: AlwaysBreak 
    BinPackArguments: false 
    BinPackParameters: false 
    

    Siehe https://clang.llvm.org/docs/ClangFormatStyleOptions.html für eine vollständige Erklärung der Optionen:

1

In neuerer Version von Klirren-Format, kann dies jetzt mit erreicht werden.