style online objective-c formatting clang clang-format

objective-c - style - clang format online



¿Qué opciones de formato de clang controlan el formato de los parámetros de llamada de método? (3)

Busqué en el código fuente del formato Clang donde se realiza el formateo de las expresiones del método object-c y lo encontré aquí: http://llvm.org/svn/llvm-project/cfe/trunk/lib/Format/ContinuationIndenter.cpp

El código:

// 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;

Como puede ver, el comportamiento solo está controlado por la opción de configuración ColumnLimit. Podría establecerlo en 0 para suprimir los saltos de línea. Desafortunadamente, esto tiene, por supuesto, impacto en el formato completo.

Con respecto al problema con la sangría faltante dentro de los bloques: no pude reproducir eso con el último complemento de Visual Studio (SVN r203967). ¿Quizás has jugado con ContinuationIndentWidth?

Sé que las personas tienen diferentes opiniones sobre cómo formatear las llamadas de método en Objective-C, es decir,

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

vs

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

¿Qué opciones en mi archivo de formato .clang utilizo para controlar esta sangría? (Si no lo quiero, colones para alinear, etc)

Además, ¿soy yo o este formateador ignora los bloques? Observe cómo la instrucción if para el bloque de éxito no está sangrada, ni la función NSLog en el bloque de falla.

[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); }];


Mi variable ColumnLimit es cero. Las llamadas a métodos se formatean así:

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

Me gustaría formatearlos de la siguiente manera sin cambiar la variable ColumnLimit:

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

Parece que no hay una opción de configuración de clang para lograr esto. Sin embargo, encontré una solución que funciona para mí:

Si agrego // y un salto de línea justo después del primer parámetro (scanViewController aquí), el formateo del código con un clang produce el resultado deseado:

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

Esto significa que el formato de clang pone todos los parámetros en líneas separadas y alinea los dos puntos.


Tuve el mismo problema: quería deshabilitar la alineación de dos puntos en métodos con parámetros de bloque.

Finalmente, lo resolví cambiando su comportamiento en el código fuente de Clang-Format :
Cambié BreakBeforeParamater = true a BreakBeforeParameter = false en todas partes en ContinuationIndenter.cpp (Gracias a @Matthias por referencia al código).

Esta solución no es hermosa pero funciona. Ahora, Clang-Format no divide los parámetros de ObjC en nuevas líneas.

Puedes descargar la herramienta modificada desde Dropbox .

PD. El código original fue clonado a partir de este repositorio: http://llvm.org/git/clang.git