Próbując skonfigurować plik formatu .clang dla projektu używającego Objective-C, natknąłem się na problem, w którym, nawet przy 0 maksymalnej szerokości linii, długi Objective- Metody C są przecinane na wiele linii. Na przykład w ten sposób:clang-format: Przestań łamać długie metody w górę
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);
}
}];
zostaje przekształcony w ten sposób:
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);
}
}];
Chciałbym pozostawić podział metod na wiele linii do autora, ale wciąż mają kontrolę formatyzatora dla prawidłowego rozmieszczenia nawiasów , na przykład. Sugestie, jak naprawić to dziwne wewnętrzne wcięcie, również będą mile widziane.
Edytuj: Oto mój plik w formacie .clang, jeśli ktoś jest zainteresowany. Próbuję odtworzyć głównie style New York Times Objective-C.
---
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
Mam ten sam problem także! Dziwne jest to, że działało to doskonale z ustawieniem ColumnLimit na 0 przed chwilą. Teraz mam ten wymuszony bałagan wielopłaszczyznowy, który doprowadza mnie do szaleństwa! – tobihagemann
Zauważyłem to samo, wygląda na to, że format clang 3.7 ma inne zachowanie w miejscu, w którym umieszcza znaki nowej linii - szukam również rozwiązania tego problemu, ale tymczasowo przełączyłem się na starszą wersję formatu clang - jeśli używasz Xcode formatu clang to commit zadziała jak przed https://github.com/travisjeffery/ClangFormat-Xcode/tree/c8343aa596bf96c8afa5cc4bfc3728227ace1224 – SomeGuy
Możemy śledzić zgłoszony błąd o tym na ClangFormat-Xcode tutaj: https://github.com/travisjeffery/ClangFormat-Xcode/issues/81 –