Clam-Format-BinPackArguments funktionieren nicht wie erwartet

8

clang-format hat 2 Optionen namens BinPackParameters und %Code%. Sie scheinen zu steuern, wie Funktionsdeklarationen und Funktionsaufrufe eingerückt werden.

BinPackArguments scheint das erwartete Ergebnis für eine Funktionsdeklaration zu liefern, aber BinPackParameters scheint nicht so zu funktionieren, wie man es für einen Funktionsaufruf erwarten würde.

Hier ist eine einfache Testdatei:

%Vor%

Und so ist es formatiert:

%Vor%

Meine BinPackArguments -Datei ist wie folgt:

%Vor%

Meine Version im Clang-Format ist: .clang-format

Wenn sowohl 3.6.0 (tags/RELEASE_360/final) als auch BinPackParameters falsch sind, hätte ich erwartet, dass ich den gleichen Einzug für den Funktionsaufruf bekomme, wie ich es für die Funktionsdeklaration bekomme.

Irgendeine Idee, was ich falsch mache?

    
Lefteris 05.05.2015, 15:44
quelle

3 Antworten

1

Versuchen Sie, ColumnLimit auf 0 zu setzen. Es sieht so aus, als ob diese Option "überschreibt" oder eine höhere Priorität als die Optionen BinPackParameters und BinPackArguments hat.

    
Konstantin 15.05.2015 22:03
quelle
1

Ich glaube nicht, dass Sie irgendetwas falsch machen. Was passiert, ist, dass das clang-Format erkennt, dass die Zeile, in der Sie die Funktion aufrufen, länger ist als Ihr Spaltenlimit (80 Zeichen in Ihren Einstellungen). Ihr AlignAfterOpenBracket wird auf false gesetzt, so dass das clang-Format die Argumente in einer neuen Zeile platziert (Beachten Sie, dass AlignAfterOpenBracket zusätzliche Möglichkeiten in späteren Versionen des clang-Formats erhalten hat).

Sie haben beide BinPack... -Einstellungen auf "false" gesetzt, es gibt jedoch eine zusätzliche Einstellung, die die Funktionsdeklaration gegenüber dem Funktionsaufruf AllowAllParametersOfDeclarationOnNextLine (in Ihrem Beispiel auf false gesetzt) ​​steuert. Bei der Funktionsdeklaration werden alle Parameter in separaten Zeilen angezeigt, wenn sie nicht in die gleiche Zeile wie der Funktionsname passen. Für den Funktionsaufruf gibt es keine entsprechende Einstellung.

In Ihrem Fall werden die Argumente, die Sie der Funktion geben, in der nächsten Zeile nach dem Funktionsnamen platziert. Die Länge der zweiten Zeile ist & lt; 80, also macht clang-format nichts mehr damit. Wenn die Argumentenzeile länger als Ihr Spaltenlimit gewesen wäre, hätte das Clang-Format sie in separaten Zeilen platziert.

Die Antwort lautet also, dass es ab Version 3.9 keine Möglichkeit mehr gibt, das clang-Format so zu konfigurieren, dass jedes Argument in einer eigenen Zeile steht, wenn sie in eine Zeile passen.

    
villintehaspam 17.01.2016 19:27
quelle
0

BinPack * -Optionen, die auf "false" gesetzt sind, erzwingen, dass Parameter / Argumente entweder alle in einer Zeile oder alle in einer separaten Zeile stehen. Beide Fälle sind erlaubt, aber nicht gemischt, z. zwei Parameter in einer Zeile und der Rest in einer anderen Zeile ist nicht erlaubt.

Das

clang-Format scheint für jeden Fall das Format "Alles in einer Zeile" und "Jede Zeile in einer separaten Zeile" auszuwählen.

    
boorg 16.12.2015 16:19
quelle

Tags und Links