Skip to content

Commit 1564f2f

Browse files
authored
Merge pull request #484 from aycabta/fix-postfix-if-after-escaped-newline
Fix postfix if after escaped newline
2 parents 4a3374e + a7df8f3 commit 1564f2f

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

lib/rdoc/ruby_lex.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ def initialize(content, options)
113113
@indent_stack = []
114114
@lex_state = :EXPR_BEG
115115
@space_seen = false
116+
@escaped_nl = false
116117
@first_in_method_statement = false
117118
@after_question = false
118119

@@ -504,7 +505,7 @@ def lex_init()
504505
@continue = true
505506
else
506507
@continue = false
507-
@lex_state = :EXPR_BEG
508+
@lex_state = :EXPR_BEG unless @escaped_nl
508509
until (@indent_stack.empty? ||
509510
[TkLPAREN, TkLBRACK, TkLBRACE,
510511
TkfLPAREN, TkfLBRACK, TkfLBRACE].include?(@indent_stack.last))
@@ -515,6 +516,7 @@ def lex_init()
515516
@here_readed.clear
516517
tk = Token(TkNL)
517518
end
519+
@escaped_nl = false
518520
tk
519521
end
520522

@@ -885,6 +887,7 @@ def lex_int2
885887
if peek(0) == "\n"
886888
@space_seen = true
887889
@continue = true
890+
@escaped_nl = true
888891
end
889892
Token("\\")
890893
end

test/test_rdoc_ruby_lex.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,44 @@ def test_class_tokenize_string_with_escape
719719
assert_equal expected, tokens
720720
end
721721

722+
def test_class_tokenize_postfix_if_after_escaped_newline
723+
tokens = RDoc::RubyLex.tokenize <<'RUBY', nil
724+
def a
725+
1 if true
726+
1 \
727+
if true
728+
end
729+
RUBY
730+
731+
expected = [
732+
@TK::TkDEF .new( 0, 1, 0, "def"),
733+
@TK::TkSPACE .new( 3, 1, 3, " "),
734+
@TK::TkIDENTIFIER.new( 4, 1, 4, "a"),
735+
@TK::TkNL .new( 5, 1, 5, "\n"),
736+
@TK::TkSPACE .new( 6, 2, 0, " "),
737+
@TK::TkINTEGER .new( 8, 2, 2, "1"),
738+
@TK::TkSPACE .new( 9, 2, 3, " "),
739+
@TK::TkIF_MOD .new(10, 2, 4, "if"),
740+
@TK::TkSPACE .new(12, 2, 6, " "),
741+
@TK::TkTRUE .new(13, 2, 7, "true"),
742+
@TK::TkNL .new(17, 2, 6, "\n"),
743+
@TK::TkSPACE .new(18, 3, 0, " "),
744+
@TK::TkINTEGER .new(20, 3, 2, "1"),
745+
@TK::TkSPACE .new(21, 3, 3, " "),
746+
@TK::TkBACKSLASH .new(22, 3, 4, "\\"),
747+
@TK::TkNL .new(23, 3, 18, "\n"),
748+
@TK::TkSPACE .new(24, 4, 0, " "),
749+
@TK::TkIF_MOD .new(28, 4, 4, "if"),
750+
@TK::TkSPACE .new(30, 4, 6, " "),
751+
@TK::TkTRUE .new(31, 4, 7, "true"),
752+
@TK::TkNL .new(35, 4, 24, "\n"),
753+
@TK::TkEND .new(36, 5, 0, "end"),
754+
@TK::TkNL .new(39, 5, 36, "\n")
755+
]
756+
757+
assert_equal expected, tokens
758+
end
759+
722760
def test_class_tokenize_backtick_with_escape
723761
tokens = RDoc::RubyLex.tokenize <<'RUBY', nil
724762
[

0 commit comments

Comments
 (0)