2017-01-26 26 views
7

我使用原子與原子美化和uncrustify格式化我的java文件。我想讓一個lambda表達式的縮進只在一個開放大括號後面縮進一級,() -> {。我曾嘗試調整indent_continue屬性,但當我將其設置爲零時,它會變得瘋狂。 (使用4個空格縮進)如何使用uncrustify格式化程序在java lambda表達式之後正確縮進?

indent_continue = 0,發生這種情況:

public class Test { 
    public static void runTest(Runnable code) { code.run(); } 

    public static void main(String[] args) { 
     runTest(() -> { 
        System.out.println("hello"); // <-- look at this line 
       });        // <-- this one too 
    } 
} 

indent_continue = 4,其雙縮進:

public class Test { 
    public static void runTest(Runnable code) { code.run(); } 

    public static void main(String[] args) { 
     runTest(() -> { 
       System.out.println("hello"); // <-- look at this line 
      });        // <-- this one too 
    } 
} 

期望的結果:

public class Test { 
    public static void runTest(Runnable code) { code.run(); } 

    public static void main(String[] args) { 
     runTest(() -> { 
      System.out.println("hello"); // <-- look at this line 
     });        // <-- this one too 
    } 
} 

電流uncrustify .cfg

# -------------------------------------------------------------------------------------------------# 
# Boilerplate: https://github.com/bengardner/uncrustify/blob/master/etc/defaults.cfg    # 
# -------------------------------------------------------------------------------------------------# 


## General 
## ------------------------------------------------------------------------------------------------- 

# The type of line endings 
newlines  = lf  # auto/lf/crlf/cr 

# - 80 limit is completely deprecated 
# - 100 is the new soft limit 
# - 120 is hard limit 
code_width  = 120 

# empty_lines_max = nl_max - 1 
nl_max   = 4 


## UNICODE 
## ------------------------------------------------------------------------------------------------- 
## Ideally ASCII, UTF-8 otherwise 

# If the file contains bytes with values between 128 and 255, but is not UTF-8, then output as UTF-8 
utf8_byte  = false 

# Force the output encoding to UTF-8 
utf8_force  = true 


## Tabs 
## ------------------------------------------------------------------------------------------------- 
## Always use 4 spaces 

input_tab_size   = 4 
output_tab_size   = 4 

indent_with_tabs  = 0 

# Comments that are not a brace level are indented with tabs on a tabstop. 
# Requires indent_with_tabs  = 2. If false, will use spaces. 
indent_cmt_with_tabs = false 

# Whether to use tabs for aligning 
align_with_tabs   = false 

# Whether to keep non-indenting tabs 
align_keep_tabs   = false 

# Whether to bump out to the next tab when aligning 
align_on_tabstop  = false 


## Indenting 
## ------------------------------------------------------------------------------------------------- 

# The number of columns to indent per level. 
# Usually 2, 3, 4, or 8. 
indent_columns   = 4 

# The continuation indent. If non-zero, this overrides the indent of '(' and '=' continuation indents. 
# For FreeBSD, this is set to 4. Negative value is absolute and not increased for each (level 
indent_continue   = 0 


## Spacing 
## ------------------------------------------------------------------------------------------------- 

# Whether to balance spaces inside nested parens 
sp_balance_nested_parens = false 


## Parentheses 
## ------------------------------------------------------------------------------------------------- 

# Controls the indent of a close paren after a newline. 
# 0: Indent to body level 
# 1: Align under the open paren 
# 2: Indent to the brace level 
indent_paren_close  = 2 


## Preprocessor 
## ------------------------------------------------------------------------------------------------- 

# Control indent of preprocessors inside #if blocks at brace level 0 
pp_indent     = remove # ignore/add/remove/force 

# indent by 1 space 
pp_space     = add 
pp_space_count    = 1 

# indent pp at code level 
pp_indent_at_level   = true 
pp_define_at_level   = true 

# Control whether to indent the code between #if, #else and #endif when not at file-level 
pp_if_indent_code   = false 

# # Align macro functions and variables together 
# align_pp_define_together = false 

# The minimum space between label and value of a preprocessor define 
align_pp_define_gap   = 0 

# The span for aligning on '#define' bodies (0=don't align) 
align_pp_define_span  = 2 

# Add or remove space around preprocessor '##' concatenation operator. Default=Add 
sp_pp_concat    = add  # ignore/add/remove/force 

# Add or remove space after preprocessor '#' stringify operator. Also affects the '#@' charizing operator. 
sp_pp_stringify    = ignore # ignore/add/remove/force 

# Add or remove space before preprocessor '#' stringify operator as in '#define x(y) L#y'. 
#sp_before_pp_stringify  = ignore # ignore/add/remove/force 


# Template 
# -------------------------------------------------------------------------------------------------- 

# Add or remove space in 'template <' vs 'template<'. 
# If set to ignore, sp_before_angle is used. 
sp_template_angle = add  # ignore/add/remove/force 

# Add or remove space before '<>' 
sp_before_angle  = remove # ignore/add/remove/force 

# Add or remove space inside '<' and '>' 
sp_inside_angle  = remove # ignore/add/remove/force 

# Add or remove space after '<>' 
sp_after_angle  = add  # ignore/add/remove/force 

# Add or remove space between '<>' and '(' as found in 'new List<byte>();' 
sp_angle_paren  = remove # ignore/add/remove/force 

# Add or remove space between '<>' and a word as in 'List<byte> m;' 
sp_angle_word  = add  # ignore/add/remove/force 

# Add or remove space between '>' and '>' in '>>' (template stuff C++/C# only). Default=Add 
sp_angle_shift  = add  # ignore/add/remove/force 





indent_align_string  = false 

# Whether braces are indented to the body level 
indent_braces   = false 
# Disabled indenting function braces if indent_braces is true 
indent_braces_no_func  = false 
# Disabled indenting class braces if indent_braces is true 
indent_braces_no_class  = false 
# Disabled indenting struct braces if indent_braces is true 
indent_braces_no_struct  = false 
# Indent based on the size of the brace parent, i.e. 'if' => 3 spaces, 'for' => 4 spaces, etc. 
indent_brace_parent  = false 

indent_namespace  = false 
indent_extern  = false 
indent_class  = true 
indent_class_colon  = false 
indent_else_if  = false 
indent_var_def_cont  = true 

indent_func_call_param  = false 
indent_func_def_param  = false 
indent_func_proto_param  = false 
indent_func_class_param  = false 
indent_func_ctor_var_param  = false 
indent_func_param_double  = true 

indent_template_param  = false 
indent_relative_single_line_comments  = false 
indent_col1_comment  = true 
indent_access_spec_body  = false 
indent_paren_nl  = false 
indent_comma_paren  = false 
indent_bool_paren  = false 
indent_first_bool_expr  = false 
indent_square_nl  = false 
indent_preserve_sql  = false 
indent_align_assign  = true 

align_number_left  = true 
align_func_params  = true 
align_same_func_call_params  = false 
align_var_def_colon  = false 
align_var_def_attribute  = true 
align_var_def_inline  = true 
align_right_cmt_mix  = false 
align_on_operator  = false 
align_mix_var_proto  = false 
align_single_line_func  = false 
align_single_line_brace  = false 
align_nl_cont  = false 
align_left_shift  = true 
align_oc_decl_colon  = false 

nl_collapse_empty_body  = true 
nl_assign_leave_one_liners  = true 
nl_class_leave_one_liners  = true 
nl_enum_leave_one_liners  = true 
nl_getset_leave_one_liners  = true 
nl_func_leave_one_liners  = true 
nl_if_leave_one_liners  = true 
nl_multi_line_cond  = true 
nl_multi_line_define  = true 
nl_before_case  = false 
nl_after_case  = false 
nl_after_return  = true 
nl_after_semicolon  = true 
nl_after_brace_open  = false 
nl_after_brace_open_cmt  = false 
nl_after_vbrace_open  = false 
nl_after_vbrace_open_empty  = false 
nl_after_brace_close  = false 
nl_after_vbrace_close  = false 
nl_define_macro  = false 
nl_squeeze_ifdef  = false 
nl_ds_struct_enum_cmt  = false 
nl_ds_struct_enum_close_brace  = false 
nl_create_if_one_liner  = false 
nl_create_for_one_liner  = false 
nl_create_while_one_liner  = false 
ls_for_split_full  = true 
ls_func_split_full  = false 
nl_after_multiline_comment  = true 
eat_blanks_after_open_brace  = true 
eat_blanks_before_close_brace  = true 
mod_full_brace_if_chain  = true 
mod_pawn_semicolon  = false 
mod_full_paren_if_bool  = false 
mod_remove_extra_semicolon  = false 
mod_sort_import  = false 
mod_sort_using  = false 
mod_sort_include  = false 
mod_move_case_break  = false 
mod_remove_empty_return  = true 
cmt_indent_multi  = true 
cmt_c_group  = false 
cmt_c_nl_start  = false 
cmt_c_nl_end  = false 
cmt_cpp_group  = false 
cmt_cpp_nl_start  = false 
cmt_cpp_nl_end  = false 
cmt_cpp_to_c  = false 
cmt_star_cont  = true 
cmt_multi_check_last  = true 
cmt_insert_before_preproc  = false 
indent_sing_line_comments  = 0 
indent_switch_case  = 4 
indent_case_shift  = 0 

align_var_def_star_style  = 0 
align_var_def_amp_style  = 1 
align_assign_span  = 1 
align_assign_thresh  = 8 
align_enum_equ_span  = 3 
align_var_struct_span  = 3 
align_var_struct_gap  = 1 
align_struct_init_span  = 2 
align_right_cmt_span  = 2 
align_right_cmt_gap  = 1 
align_right_cmt_at_col  = 2 

nl_end_of_file_min  = 1 
nl_func_var_def_blk  = 1 
nl_after_func_body  = 2 
nl_after_func_body_one_liner  = 2 
nl_before_block_comment  = 2 
nl_after_struct  = 1 
mod_full_brace_nl  = 1 
mod_add_long_function_closebrace_comment  = 32 
mod_add_long_ifdef_endif_comment  = 10 
mod_add_long_ifdef_else_comment  = 10 
sp_arith  = ignore 
sp_assign  = force 
sp_assign_default  = add 
sp_enum_assign  = force 
sp_bool  = force 
sp_compare  = force 
sp_before_ptr_star  = remove 
sp_before_unnamed_ptr_star  = add 
sp_between_ptr_star  = remove 
sp_after_ptr_star  = add 
sp_after_ptr_star_func  = force 
sp_before_ptr_star_func  = force 
sp_after_type  = force 
sp_before_sparen  = force 
sp_inside_sparen  = remove 
sp_after_sparen  = add 
sp_sparen_brace  = add 
sp_special_semi  = remove 
sp_before_semi  = remove 
sp_before_semi_for_empty  = remove 
sp_after_semi  = add 
sp_after_semi_for_empty  = remove 
sp_after_comma  = force 
sp_before_comma  = remove 
sp_before_case_colon  = remove 
sp_after_operator  = add 
sp_after_operator_sym  = add 
sp_after_cast  = add 
sp_inside_paren_cast  = remove 
sp_sizeof_paren  = remove 
sp_inside_braces_enum  = add 
sp_inside_braces_struct  = add 
sp_inside_braces  = add 
sp_inside_braces_empty  = remove 
sp_func_proto_paren  = remove 
sp_func_def_paren  = remove 
sp_inside_fparens  = remove 
sp_inside_fparen  = remove 
sp_fparen_brace  = add 
sp_func_call_paren  = remove 
sp_func_call_paren_empty  = remove 
sp_func_call_user_paren  = remove 
sp_return_paren  = add 
sp_attribute_paren  = remove 
sp_defined_paren  = remove 
sp_macro  = add 
sp_macro_func  = add 
sp_else_brace  = add 
sp_brace_else  = add 
sp_brace_typedef  = add 
sp_not  = remove 
sp_inv  = remove 
sp_addr  = remove 
sp_member  = remove 
sp_deref  = remove 
sp_sign  = remove 
sp_incdec  = remove 
sp_before_nl_cont  = add 
sp_cond_colon  = force 
sp_cond_question  = force 
sp_cmt_cpp_start  = add 
nl_start_of_file  = remove 
nl_end_of_file  = force 
nl_assign_brace  = remove 
nl_assign_square  = remove 
nl_enum_brace  = remove 
nl_struct_brace  = remove 
nl_union_brace  = remove 
nl_if_brace  = remove 
nl_brace_else  = remove 
nl_elseif_brace  = remove 
nl_else_brace  = remove 
nl_else_if  = remove 
nl_for_brace  = remove 
nl_while_brace  = remove 
nl_do_brace  = remove 
nl_brace_while  = remove 
nl_switch_brace  = remove 
nl_case_colon_brace  = remove 
nl_func_type_name  = remove 
nl_func_proto_type_name  = remove 
nl_func_paren  = remove 
nl_func_def_paren  = remove 
nl_func_decl_empty  = remove 
nl_func_def_empty  = remove 
nl_fdef_brace  = remove 
nl_return_expr  = remove 
pos_arith  = lead 
pos_assign  = trail 
pos_bool  = trail 
pos_conditional  = trail 
pos_comma  = trail 
pos_class_comma  = lead 
pos_class_colon  = lead 
mod_full_brace_do  = remove 
mod_full_brace_for  = remove 
mod_full_brace_function  = force 
mod_full_brace_while  = remove 
mod_paren_on_return  = ignore 

# Misc 
# -------------------------------------------------------------------------------------------------- 

# Allow interpreting '>=' and '>>=' as part of a template in 'void f(list<list<B>>=val);'. 
# If true (default), 'assert(x<0 && y>=3)' will be broken. 
# Improvements to template detection may make this option obsolete. 
tok_split_gte  = false 

版本信息:

Ubuntu 16.04.1 LTS 
Atom : 1.13.0 
Electron: 1.3.13 
Chrome : 52.0.2743.82 
Node : 6.5.0 
uncrustify: 0.59 
atom-beautify: 0.29.17 
+0

我已經使用了與您相同的配置,並且我得到了期望的結果..您使用的uncrustify和atom-beautify的版本是什麼? –

+0

@MaciejKowalski uncrustify:0.59 凌:1.12.6 電子:1.3.9 鉻:52.0.2743.82 節點:6.5.0 – DavidC

+0

@MaciejKowalski我也是在Ubuntu上運行16,不知道如果該事項 – DavidC

回答

1

在我的系統,Ubuntu的16.10和Atom 1.14.1(其他版本都是一樣的),我解決了這個由更新到最新版本uncrustify 0.64。

因爲我並不熱衷於從源代碼重新構建uncrustify,所以我拉了一個Ubuntu的Docker鏡像:17.04,安裝了uncrustify並將編譯後即可使用的二進制從/usr/bin/uncrustify複製到docker容器中代替我的主機的/usr/bin/uncrustify
這對我來說非常合適,縮進現在和預期的一樣。

相關問題