uncrustify

How do I make Uncrustify remove space before ? In a nullable type?


I'd like this line:

private String ?user;

to format to

private String? user;

Here's my uncrustify.cfg

            #
            # My favorite format
            #

            newlines                        = LF        # AUTO (default), CRLF, CR, or LF

            indent_with_tabs        = 0     # 1=indent to level only, 2=indent with tabs
            input_tab_size          = 8     # original tab size
            output_tab_size         = 4     # new tab size
            indent_columns          = output_tab_size
            # indent_label          = 0     # pos: absolute col, neg: relative column
            indent_align_string     = False     # align broken strings

            indent_brace            = 0
            indent_class            = true
            indent_namespace        = true


            nl_start_of_file        = remove
            # nl_start_of_file_min      = 0
            nl_end_of_file          = force
            nl_end_of_file_min      = 1
            nl_max              = 3
            nl_before_block_comment     = 2
            nl_after_func_body      = 2
            nl_after_func_proto_group   = 2

            nl_assign_brace         = add       # "= {" vs "= \n {"
            nl_enum_brace           = add       # "enum {" vs "enum \n {"
            nl_union_brace          = add       # "union {" vs "union \n {"
            nl_struct_brace         = add       # "struct {" vs "struct \n {"
            nl_do_brace         = add       # "do {" vs "do \n {"
            nl_if_brace         = add       # "if () {" vs "if () \n {"
            nl_for_brace            = add       # "for () {" vs "for () \n {"
            nl_func_paren           = remove        
            nl_func_def_paren       = remove    
            nl_func_call_paren      = remove
            nl_func_decl_start      = remove
            nl_func_def_start       = remove
            nl_func_def_start_multi_line    = remove
            nl_func_decl_args       = add
            nl_func_def_args        = add
            nl_func_def_args_multi_line     = false   

            nl_func_decl_end                = remove   
            nl_func_def_end                 = remove   
            nl_else_brace           = add       # "else {" vs "else \n {"
            nl_while_brace          = add       # "while () {" vs "while () \n {"
            nl_switch_brace         = add       # "switch () {" vs "switch () \n {"
            nl_var_def_blk_end_func_top = 1
            nl_before_case          = 1
            nl_fcall_brace          = add       # "foo() {" vs "foo()\n{"
            nl_fdef_brace           = add       # "int foo() {" vs "int foo()\n{"
            nl_after_return         = TRUE
            nl_brace_while          = remove
            nl_brace_else           = add
            nl_squeeze_ifdef        = TRUE
            nl_brace_fparen         = remove
            pos_bool            = trail     # BOOL ops on trailing end

            eat_blanks_before_close_brace   = TRUE
            eat_blanks_after_open_brace = TRUE


            mod_paren_on_return     = ignore        # "return 1;" vs "return (1);"
            mod_full_brace_if       = add       # "if (a) a--;" vs "if (a) { a--; }"
            mod_full_brace_for      = add       # "for () a--;" vs "for () { a--; }"
            mod_full_brace_do       = add       # "do a--; while ();" vs "do { a--; } while ();"
            mod_full_brace_while        = add       # "while (a) a--;" vs "while (a) { a--; }"

            sp_before_byref         = remove
            sp_before_semi          = remove
            sp_cparen_oparen        = remove    # "if (a) {" vs "if (a){"
            sp_brace_fparen         = remove
            sp_cond_colon           = force
            sp_cond_question        = ignore

            sp_balance_nested_parens    = false    # "(a + (b + c))" vs "(a + (b + c))"
            sp_paren_paren          = remove    # space between (( and ))
            sp_return_paren         = force # "return (1);" vs "return(1);"
            sp_sizeof_paren         = force # "sizeof (int)" vs "sizeof(int)"
            sp_before_sparen        = force     # "if (" vs "if("
            sp_after_sparen         = force     # "if () {" vs "if (){"
            sp_after_cast           = force # "(int) a" vs "(int)a"
            sp_inside_braces        = force     # "{ 1 }" vs "{1}"
            sp_inside_braces_struct     = force     # "{ 1 }" vs "{1}"
            sp_inside_braces_enum       = force     # "{ 1 }" vs "{1}"
            sp_inside_paren         = remove
            sp_inside_fparen        = remove
            sp_inside_sparen        = remove
            sp_inside_for           = force
            sp_inside_square        = force
            sp_type_func            = ignore
            sp_assign           = force
            sp_arith            = force
            sp_bool             = force
            sp_compare          = force
            sp_assign           = force
            sp_after_comma          = force
            sp_func_def_paren       = remove    # "int foo (){" vs "int foo(){"
            sp_func_call_paren      = remove    # "foo (" vs "foo("
            sp_func_proto_paren     = remove    # "int foo ();" vs "int foo();"
            sp_func_class_paren     = remove
            sp_before_angle         = remove
            sp_after_angle          = remove
            sp_inside_angle         = remove
            sp_angle_shift          = remove
            sp_sparen_brace         = add
            sp_fparen_brace         = add
            sp_after_ptr_star       = remove
            sp_before_ptr_star      = force
            sp_between_ptr_star     = remove
            sp_return               = force

            align_with_tabs         = FALSE     # use tabs to align
            align_on_tabstop        = FALSE     # align on tabstops
            align_enum_equ_span     = 4
            align_nl_cont           = TRUE
            align_var_def_span      = 1
            align_var_def_thresh        = 12
            align_var_def_inline        = TRUE
            align_var_def_star      = TRUE
            align_var_def_colon     = TRUE
            align_assign_span       = 1
            align_assign_thresh     = 12
            align_struct_init_span      = 3
            align_var_struct_span       = 99
            align_right_cmt_span        = 3
            align_pp_define_span        = 3
            align_pp_define_gap     = 4
            align_number_right      = TRUE
            align_typedef_span      = 5
            align_typedef_gap       = 3

            cmt_star_cont           = TRUE

            #
            # Line Splitting options
            #

            code_width            100            
            # Unsigned Number
            # Try to limit code width to N number of columns

            ls_for_split_full     True  
            # { False, True }
            # Whether to fully split long 'for' statements at semi-colons.

            ls_func_split_full    True
            # { False, True }
            # Whether to fully split long function protos/calls at commas.

            ls_code_width         True
            # { False, True }
            # Whether to split lines as close to code_width as possible and ignore some groupings.

Solution

  • I figured out after I wrote this out that ? is equivalent to a ptr_star

    This fixed it:

    sp_after_ptr_star       = force
    sp_before_ptr_star      = remove