I am using atom with atom-beautify and uncrustify to format my java files. I want the indentation of a lambda expression to only indent one level after an open brace, () -> {
. I have tried adjusting the indent_continue
property, but it goes crazy when I set it to zero. (using 4 spaces for indenting)
when indent_continue = 0
, this happens:
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
}
}
when indent_continue = 4
, it double indents:
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
}
}
Desired result:
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
}
}
Current 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
Version Information:
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
On my system, Ubuntu 16.10 and Atom 1.14.1 (other versions were the same), I solved this by updating to latest uncrustify version 0.64.
Since I was not keen for re-building uncrustify from source, I pulled a docker image of ubuntu:17.04, installed uncrustify to it and copied the compiled-and-ready-to-use binary from /usr/bin/uncrustify
in the docker container in place of my host machine's /usr/bin/uncrustify
.
This worked perfectly for me and indentation is now as expected.