我正在使用带有 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/
我正在学习如何使用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
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类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
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
我正在尝试使用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请求没有正确的命名空间。任何人都可以建议我
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t