2014-03-05 9 views
17

Ich kenne Leute haben unterschiedliche Meinungen darüber, wie Verfahren zur Formatierung ruft in Objective-C, dhWelche clam-Format-Optionen steuern das Format der Methodenaufrufparameter?

[self presentViewController:scanViewController 
        animated:YES 
       completion:nil]; 

vs

[self presentViewController:scanViewController animated:YES completion:nil]; 

Welche Möglichkeiten in meiner .clang-Format-Datei verwende ich diese Kontrolle Einkerbung? (Wenn ich es nicht will, Doppelpunkte zu richten, etc.)

Auch ist es nur ich oder ist dieser Formatierer ignorant von Blöcken? Beachten Sie, dass die if-Anweisung für den Erfolgsblock weder eingerückt ist noch die NSLog-Funktion im Fehlerblock.

[self.client getPath:path 
    parameters:parameters 
    success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    if ([from_id isEqualToString:self.from_id]) { 
     self.image.image = [UIImage imageWithData:responseObject]; 
    } 
    } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(error.description); 
    }]; 
+0

Ich habe mich entschieden, stattdessen mit uncrustify zu gehen. –

+2

Das Deaktivieren der Doppelpunktausrichtung ist das einzige, was mich im Clam-Format stört. Oder besser noch, die Doppelpunktausrichtung in Methoden mit Blockparametern zu deaktivieren. – user3099609

+0

@ user3099609, wenn Sie noch eine Lösung für dieses Problem benötigen, überprüfen Sie meine Antwort unten. –

Antwort

8

sah ich in das Klirren-Format Quellcode, in dem die Formatierung von Objective-C Methode Ausdrücke getan und fand es hier: http://llvm.org/svn/llvm-project/cfe/trunk/lib/Format/ContinuationIndenter.cpp

Der Code:

// If this '[' opens an ObjC call, determine whether all parameters fit 
// into one line and put one per line if they don't. 
if (Current.Type == TT_ObjCMethodExpr && 
    getLengthToMatchingParen(Current) + State.Column > 
     getColumnLimit(State)) 
    BreakBeforeParameter = true; 

Wie können Sie Das Verhalten wird nur durch die Konfigurationsoption ColumnLimit gesteuert. Sie könnten es auf 0 setzen, um die Zeilenumbrüche zu unterdrücken. Leider hat dies natürlich Auswirkungen auf die vollständige Formatierung.

In Bezug auf das Problem mit der fehlenden Einrückung innerhalb von Blöcken: Ich konnte das nicht mit dem neuesten Visual Studio Plugin (SVN R203967) reproduzieren. Hast du vielleicht mit ContinuationIndentWidth getüftelt?

+2

Ich habe bereits meine ColumnLimit auf 0 gesetzt und ich verwende Xcode mit einem Plugin, um beim Speichern mit der .clang-Format-Datei zu formatieren. –

+0

Oh, Einstellung ColumnLimit auf 0 funktioniert nicht. Sie müssen ColumnLimit auf etwas sehr großes wie 1000 setzen, um Zeilenumbrüche im Methodenausdruck zu vermeiden. In Bezug auf dein zweites Problem, was ist der Inhalt deines .clang-Formats und welche Version des Clang-Formats benutzt du? – Matthias

+2

Hat sich das kürzlich mit dem clang-Format 3.7 geändert? Das Einstellen von ColumnLimit auf 0 hat aufgehört, für mich zu arbeiten, und ich bin wütend, weil es so gut funktioniert hat! : D Die Einstellung von ColumnLimit auf 1000 funktioniert auch nicht! Gibt es einen anderen Weg? – tobihagemann

1

Meine Variable ColumnLimit ist Null. Methodenaufrufe werden wie folgt formatiert:

[self presentViewController:scanViewController animated:YES completion:nil]; 

Ich möchte sie zu formatieren, wie folgt, ohne die ColumnLimit Variable ändert:

[self presentViewController:scanViewController 
       animated:YES 
      completion:nil]; 

Es scheint, dass es keine Klirren Konfigurationsoption um dies zu erreichen. Allerdings fand ich eine Lösung, die funktioniert für mich:

Wenn ich // und einen Zeilenumbruch direkt nach dem ersten Parameter (scanViewController hier) hinzufügen, die Formatierung des Codes mit Klappern erzeugt das gewünschte Ergebnis:

[self presentViewController:scanViewController // 
        animated:YES 
       completion:nil]; 

Das bedeutet, dass die Clang-Formatierung alle Parameter auf separate Zeilen setzt und die Doppelpunkte ausrichtet.

+0

Ich würde wirklich gerne eine Option dafür sehen, an/aus zu sein, ohne mit ColumnLimit ebenso zu verwirren. –

+0

Ich habe keine spezielle Meinung dazu, aber der mit den ausgerichteten Spalten macht jeden Block innerhalb des Aufrufs sehr tief eingerückt (wie Doppelpunkt + indentwidth). Ich möchte wirklich, dass das nicht der Fall ist. – Alper

+0

@StevenHepting, Ich hätte gerne eine Option, um dieses Verhalten zu deaktivieren – pckill

1

Ich hatte das gleiche Problem: Ich wollte Doppelpunktausrichtung in Methoden mit Blockparametern deaktivieren.

Schließlich löste ich es durch sein Verhalten in Clang-Format Quellcode zu ändern:
Ich änderte BreakBeforeParamater = true zu BreakBeforeParameter = false überall in ContinuationIndenter.cpp (Danke für die Bezugnahme auf den Code @Matthias).

Diese Lösung ist nicht schön, aber funktioniert. Im Clang-Format werden die ObjC-Parameter nicht auf neue Zeilen aufgeteilt.

Sie können das modifizierte Werkzeug von Dropbox herunterladen.

PS.Der Originalcode wurde aus diesem Repo geklont: http://llvm.org/git/clang.git

+1

Ich habe jetzt die Version von 'clang-format' aktualisiert, die Sie mit' brew' erhalten, damit es wieder funktioniert. Gib mir Bescheid. –