2015-05-07 10 views
13

Nel tentativo di impostare un file in formato .clang per un progetto utilizzando Objective-C, ho incontrato un problema in cui, anche con 0 larghezza massima della linea, lungo Objective- I metodi C vengono tagliati in più righe. Ad esempio, questo:clang-format: interrompi i metodi lunghi su

AFHTTPRequestOperation *returnOperation = [self POST:endpoint parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
     [formData appendPartWithFormData:[[secureStore valueForKey:storeKey] dataUsingEncoding:NSUTF8StringEncoding] name:tokenKey]; 
     if ([provider isEqualToString:kTwitterKey]) { 
      [formData appendPartWithFormData:[[secureStore twitterSecretToken] dataUsingEncoding:NSUTF8StringEncoding] name:kTwitterSecretKey]; 
      [formData appendPartWithFormData:[email dataUsingEncoding:NSUTF8StringEncoding] name:kEmailKey]; 
     } 
     [formData appendPartWithFormData:[[secureStore token] dataUsingEncoding:NSUTF8StringEncoding] name:tokenKey]; 
    } success:^(AFHTTPRequestOperation *operation, NSDictionary *response) { 
     [secureStore setToken:response[kTokenKey]]; 
     if (completionHandler) { 
      completionHandler(nil, response); 
     } 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     if (completionHandler) { 
      completionHandler(error, nil); 
     } 
    }]; 

ottiene trasformato in questo:

AFHTTPRequestOperation *returnOperation = [self POST:endpoint 
     parameters:nil 
     constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
      [formData appendPartWithFormData:[[secureStore valueForKey:storeKey] dataUsingEncoding:NSUTF8StringEncoding] name:tokenKey]; 
      if ([provider isEqualToString:kTwitterKey]) { 
       [formData appendPartWithFormData:[[secureStore twitterSecretToken] dataUsingEncoding:NSUTF8StringEncoding] name:kTwitterSecretKey]; 
       [formData appendPartWithFormData:[email dataUsingEncoding:NSUTF8StringEncoding] name:kEmailKey]; 
      } 
      [formData appendPartWithFormData:[[secureStore token] dataUsingEncoding:NSUTF8StringEncoding] name:kTokenKey]; 
     } 
     success:^(AFHTTPRequestOperation *operation, NSDictionary *response) { 
      [secureStore setToken:response[kTokenKey]]; 
      if (completionHandler) { 
       completionHandler(nil, response); 
      } 
     } 
     failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      if (completionHandler) { 
       completionHandler(error, nil); 
      } 
     }]; 

mi piacerebbe lasciare la scissione di metodi in più righe per lo sviluppatore, ma hanno ancora il controllo di formattazione per il corretto posizionamento brace , per esempio. Anche i suggerimenti su come risolvere quella strana impronta interiore sarebbero apprezzati.

Modifica: Ecco il mio file in formato .clang, se qualcuno è interessato. Sto tentando di replicare principalmente gli stili Objective-C del New York Times.

--- 
Language: Cpp 
AccessModifierOffset: -2 
AlignAfterOpenBracket: false 
AlignEscapedNewlinesLeft: false 
AlignOperands: false 
AlignTrailingComments: true 
AllowAllParametersOfDeclarationOnNextLine: false 
AllowShortBlocksOnASingleLine: false 
AllowShortCaseLabelsOnASingleLine: false 
AllowShortFunctionsOnASingleLine: false 
AllowShortIfStatementsOnASingleLine: false 
AllowShortLoopsOnASingleLine: false 
AlwaysBreakAfterDefinitionReturnType: false 
AlwaysBreakBeforeMultilineStrings: false 
AlwaysBreakTemplateDeclarations: false 
BinPackArguments: true 
BinPackParameters: true 
BreakBeforeBinaryOperators: false 
BreakBeforeBraces: Stroustrup 
BreakBeforeTernaryOperators: false 
BreakConstructorInitializersBeforeComma: false 
ColumnLimit: 0 
CommentPragmas: '^ IWYU pragma:' 
ConstructorInitializerAllOnOneLineOrOnePerLine: false 
ConstructorInitializerIndentWidth: 4 
ContinuationIndentWidth: 4 
Cpp11BracedListStyle: true 
DerivePointerAlignment: false 
ExperimentalAutoDetectBinPacking: false 
IndentCaseLabels: true 
IndentWrappedFunctionNames: false 
IndentWidth: 4 
KeepEmptyLinesAtTheStartOfBlocks: false 
MaxEmptyLinesToKeep: 1 
NamespaceIndentation: None 
ObjCBlockIndentWidth: 4 
ObjCSpaceAfterProperty: true 
ObjCSpaceBeforeProtocolList: false 
PenaltyBreakBeforeFirstCallParameter: 0 
PenaltyBreakComment: 0 
PenaltyBreakFirstLessLess: 0 
PenaltyBreakString: 0 
PenaltyExcessCharacter: 0 
PenaltyReturnTypeOnItsOwnLine: 0 
PointerAlignment: Right 
SpaceAfterCStyleCast: false 
SpaceBeforeAssignmentOperators: true 
SpaceBeforeParens: ControlStatements 
SpaceInEmptyParentheses: false 
SpacesBeforeTrailingComments: 1 
SpacesInAngles: false 
SpacesInContainerLiterals: true 
SpacesInCStyleCastParentheses: false 
SpacesInParentheses: false 
SpacesInSquareBrackets: false 
Standard: Cpp11 
TabWidth: 8 
UseTab: Never 
+1

Ho lo stesso problema anche! La parte strana è: ha funzionato perfettamente con l'impostazione di ColumnLimit a 0 un po 'di tempo fa. Ora ho anche questo pasticcio multi-linea forzato, che mi sta facendo impazzire! – tobihagemann

+0

Ho notato la stessa cosa, sembra che clang-format 3.7 abbia un comportamento diverso in cui pone le newline - sto anche cercando una soluzione per questo, ma temporaneamente sono passato a una versione precedente di clang-format - se usi Xcode in formato clang, allora il commit funzionerà come prima https://github.com/travisjeffery/ClangFormat-Xcode/tree/c8343aa596bf96c8afa5cc4bfc3728227ace1224 – SomeGuy

+0

Possiamo tenere traccia del bug segnalato su questo su ClangFormat-Xcode qui: https://github.com/travisjeffery/ClangFormat-Xcode/issues/81 –

risposta

2

Sto utilizzando la seguente configurazione che non rompere il metodo lunga

BasedOnStyle: LLVM 
IndentWidth: 4 
AllowShortIfStatementsOnASingleLine: true 
IndentCaseLabels: false 
ColumnLimit: 0 

e si può ottenere l'impostazione LLVM utilizzando il comando

clang-format -style=llvm -dump-config > .clang-format 
+0

'ColumnLimit' ha fatto il lavoro! – Paschalis

+0

anche impostando 'AlwaysBreakBeforeMultilineStrings' su false manterrà le tue chiamate di funzione, macro, ecc. Che chiamano letterali da rottura! – Paschalis

+0

@Paschalis Nella mia macchina, il formato predefinito di llvm clang ha già impostato 'AlwaysBreakBeforeMultilineStrings: false' –

Problemi correlati