mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 16:44:01 +02:00
[ruby/irb] Fix undef and alias indent
(https://github.com/ruby/irb/pull/838)
a641746b18
This commit is contained in:
parent
f73ae05819
commit
fd44b42fb3
3 changed files with 49 additions and 1 deletions
|
@ -12,6 +12,8 @@ module IRB
|
|||
skip = false
|
||||
last_tok, state, args = opens.last
|
||||
case state
|
||||
when :in_alias_undef
|
||||
skip = t.event == :on_kw
|
||||
when :in_unquoted_symbol
|
||||
unless IGNORE_TOKENS.include?(t.event)
|
||||
opens.pop
|
||||
|
@ -130,6 +132,10 @@ module IRB
|
|||
opens.pop
|
||||
opens << [t, nil]
|
||||
end
|
||||
when 'alias'
|
||||
opens << [t, :in_alias_undef, 2]
|
||||
when 'undef'
|
||||
opens << [t, :in_alias_undef, 1]
|
||||
when 'elsif', 'else', 'when'
|
||||
opens.pop
|
||||
opens << [t, nil]
|
||||
|
@ -174,6 +180,10 @@ module IRB
|
|||
pending_heredocs.reverse_each { |t| opens << [t, nil] }
|
||||
pending_heredocs = []
|
||||
end
|
||||
if opens.last && opens.last[1] == :in_alias_undef && !IGNORE_TOKENS.include?(t.event) && t.event != :on_heredoc_end
|
||||
tok, state, arg = opens.pop
|
||||
opens << [tok, state, arg - 1] if arg >= 1
|
||||
end
|
||||
yield t, opens if block_given?
|
||||
end
|
||||
opens.map(&:first) + pending_heredocs.reverse
|
||||
|
|
|
@ -290,7 +290,7 @@ module IRB
|
|||
when :on_embdoc_beg
|
||||
indent_level = 0
|
||||
else
|
||||
indent_level += 1
|
||||
indent_level += 1 unless t.tok == 'alias' || t.tok == 'undef'
|
||||
end
|
||||
end
|
||||
indent_level
|
||||
|
|
|
@ -280,6 +280,44 @@ module TestIRB
|
|||
end
|
||||
end
|
||||
|
||||
def test_undef_alias
|
||||
codes = [
|
||||
'undef foo',
|
||||
'alias foo bar',
|
||||
'undef !',
|
||||
'alias + -',
|
||||
'alias $a $b',
|
||||
'undef do',
|
||||
'alias do do',
|
||||
'undef :do',
|
||||
'alias :do :do',
|
||||
'undef :"#{alias do do}"',
|
||||
'alias :"#{undef do}" do',
|
||||
'alias do :"#{undef do}"'
|
||||
]
|
||||
code_with_comment = <<~EOS
|
||||
undef #
|
||||
#
|
||||
do #
|
||||
alias #
|
||||
#
|
||||
do #
|
||||
#
|
||||
do #
|
||||
EOS
|
||||
code_with_heredoc = <<~EOS
|
||||
<<~A; alias
|
||||
A
|
||||
:"#{<<~A}"
|
||||
A
|
||||
do
|
||||
EOS
|
||||
[*codes, code_with_comment, code_with_heredoc].each do |code|
|
||||
opens = IRB::NestingParser.open_tokens(IRB::RubyLex.ripper_lex_without_warning('(' + code + "\nif"))
|
||||
assert_equal(%w[( if], opens.map(&:tok))
|
||||
end
|
||||
end
|
||||
|
||||
def test_case_in
|
||||
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
|
||||
pend 'This test requires ruby version that supports case-in syntax'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue