草庐IT

java - 如何在使用 uncrustify 格式化程序的 java lambda 表达式后正确缩进?

coder 2024-04-05 原文

我正在使用带有 atom-beautify 和 uncrustify 的 atom 来格式化我的 java 文件。我希望 lambda 表达式的缩进仅在左大括号 () -> { 之后缩进一层。我试过调整 indent_continue 属性,但是当我将它设置为零时它变得很疯狂。 (使用 4 个空格进行缩进)

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

最佳答案

在我的系统上,Ubuntu 16.10 和 Atom 1.14.1(其他版本相同),我通过更新到最新的 uncrustify 版本 0.64 解决了这个问题。

因为我不热衷于从源代码重新构建 uncrustify,所以我提取了一个 ubuntu:17.04 的 docker 镜像,安装了 uncrustify 并从 /usr/复制了编译好的二进制文件docker 容器中的 bin/uncrustify 代替我主机的 /usr/bin/uncrustify
这对我来说非常有效,现在缩进符合预期。

关于java - 如何在使用 uncrustify 格式化程序的 java lambda 表达式后正确缩进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41868364/

有关java - 如何在使用 uncrustify 格式化程序的 java lambda 表达式后正确缩进?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  7. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  8. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  9. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  10. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

随机推荐