Can Uncrustify align colons in Objective-C method

2019-01-17 05:02发布

问题:

I am using uncrustify 0.52. When I run it against Objective-C files, it wants to convert method invocations like this:

[NSApp beginSheet:startTimerDialog
   modalForWindow:nil
    modalDelegate:nil
   didEndSelector:nil
      contextInfo:nil];

to this:

[NSApp beginSheet:startTimerDialog
 modalForWindow:nil
 modalDelegate:nil
 didEndSelector:nil
 contextInfo:nil];

I prefer the first version, with the colons aligned. Is there an option in the uncrustify config file that can support what I want, or does uncrustify just not support aligned colons?

If uncrustify can't align the colons, is there a way to prevent it from de-aligning the colons that I've aligned myself?

Update:

mmc notes that this feature was available in the Uncrustify svn repository as of build 1581. It is in uncrustify 0.54. Set align_oc_msg_colon = true in your config file to enable it.

Further Update

For people who find this answer in the future: The name of the preference in the .cfg file has been changed. It is now align_oc_msg_colon_span= 1 to get the behavior described above. There is also now a align_oc_decl_colon = true that will do the name thing for multi-line declarations.

回答1:

I played around with this for some time last night, and (although I don't think that this deserves the bounty) the answer to both your questions is "no, current versions (.53) of Uncrustify do not do this."

I even investigated writing a patch to do exactly this (because I really want it, too) and after looking at the Uncrustify source, and concluded it would take far more time than I had available to figure out where to insert the patch to accomplish "multi-line message parameter colon alignment" rather than "multi-line message left alignment" It does seem that there has been some improvements to Objective-C parsing in recent patches.

I was so hoping someone would answer this question. I really wanted to know, too.

NOTE: For people who find this answer in the future: The name of the preference in the .cfg file has been changed. It is now align_oc_msg_colon_span = 1 to get the behavior described above. There is also now a align_oc_decl_colon that will do the name thing for multi-line declarations.



回答2:

Did you try:

align_var_def_colon=true