You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Uncrustify移除可空类型中问号前的空格?

如何修改Uncrustify配置移除可空类型问号前的空格

需要将以下代码:

private String ?user;

格式化为:

private String? user;

以下是当前的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.

修改方案

在配置文件的空格控制区域(比如和sp_before_byref、sp_before_semi等参数同位置)添加以下配置项:

sp_before_qmark = remove

这个参数专门控制问号(?)前面的空格,设置为remove会强制移除问号前的所有空格,恰好满足将String ?user转为String? user的需求。

添加后重新运行Uncrustify即可生效。


内容的提问来源于stack exchange,提问作者NetHawk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:07:16