зеркало из https://github.com/github/ruby.git
[ruby/irb] Fix newline depth with multiple braces
This commit fixes the check_newline_depth_difference method to multiple open braces on one line into account. Before this change we were subtracting from the depth in check_newline_depth_difference on every open brace. This is the right thing to do if the opening and closing brace are on the same line. For example in a method definition we have an opening and closing parentheses we want to add 1 to our depth, and then remove it. ``` def foo() end ``` However this isn't the correct behavior when the brace spans multiple lines. If a brace spans multiple lines we don't want to subtract from check_newline_depth_difference and we want to treat the braces the same way as we do `end` and allow check_corresponding_token_depth to pop the correct depth. Example of bad behavior: ``` def foo() [ ] puts 'bar' end ``` Example of desired behavior: ``` def foo() [ ] puts 'bar' end ``` https://github.com/ruby/irb/commit/7dc8af01e0
This commit is contained in:
Родитель
440013b2fa
Коммит
9994eb8a5e
|
@ -317,11 +317,13 @@ class RubyLex
|
|||
|
||||
def check_newline_depth_difference
|
||||
depth_difference = 0
|
||||
open_brace_on_line = 0
|
||||
@tokens.each_with_index do |t, index|
|
||||
case t[1]
|
||||
when :on_ignored_nl, :on_nl, :on_comment
|
||||
if index != (@tokens.size - 1)
|
||||
depth_difference = 0
|
||||
open_brace_on_line = 0
|
||||
end
|
||||
next
|
||||
when :on_sp
|
||||
|
@ -330,8 +332,9 @@ class RubyLex
|
|||
case t[1]
|
||||
when :on_lbracket, :on_lbrace, :on_lparen
|
||||
depth_difference += 1
|
||||
open_brace_on_line += 1
|
||||
when :on_rbracket, :on_rbrace, :on_rparen
|
||||
depth_difference -= 1
|
||||
depth_difference -= 1 if open_brace_on_line > 0
|
||||
when :on_kw
|
||||
next if index > 0 and @tokens[index - 1][3].allbits?(Ripper::EXPR_FNAME)
|
||||
case t[2]
|
||||
|
|
|
@ -73,7 +73,22 @@ module TestIRB
|
|||
lines = []
|
||||
input_with_correct_indents.each do |row|
|
||||
lines << row.content
|
||||
assert_indenting(lines, row.current_line_spaces, false)
|
||||
assert_indenting(lines, row.new_line_spaces, true)
|
||||
end
|
||||
end
|
||||
|
||||
def test_braces_on_thier_own_line
|
||||
input_with_correct_indents = [
|
||||
Row.new(%q(if true), nil, 2),
|
||||
Row.new(%q( [), nil, 4),
|
||||
Row.new(%q( ]), 2, 2),
|
||||
Row.new(%q(end), 0, 0),
|
||||
]
|
||||
|
||||
lines = []
|
||||
input_with_correct_indents.each do |row|
|
||||
lines << row.content
|
||||
assert_indenting(lines, row.current_line_spaces, false)
|
||||
assert_indenting(lines, row.new_line_spaces, true)
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче