Skip to content

Commit 68bd8f5

Browse files
authored
Merge pull request #480 from aycabta/fix-complex-condition-in-for
Fix complex condition in for/while/until
2 parents a4baf6a + c0efaf5 commit 68bd8f5

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

lib/rdoc/parser/ruby.rb

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2022,31 +2022,25 @@ def scan
20222022
def skip_optional_do_after_expression
20232023
skip_tkspace false
20242024
tk = get_tk
2025-
end_token = get_end_token tk
20262025

20272026
b_nest = 0
20282027
nest = 0
20292028
@scanner.continue = false
20302029

20312030
loop do
20322031
case tk
2033-
when TkSEMICOLON then
2032+
when TkSEMICOLON, TkNL then
20342033
break if b_nest.zero?
20352034
when TkLPAREN, TkfLPAREN then
20362035
nest += 1
2036+
when TkRPAREN then
2037+
nest -= 1
20372038
when TkBEGIN then
20382039
b_nest += 1
20392040
when TkEND then
20402041
b_nest -= 1
20412042
when TkDO
20422043
break if nest.zero?
2043-
when end_token then
2044-
if end_token == TkRPAREN
2045-
nest -= 1
2046-
break if @scanner.lex_state == :EXPR_END and nest.zero?
2047-
else
2048-
break unless @scanner.continue
2049-
end
20502044
when nil then
20512045
break
20522046
end

test/test_rdoc_parser_ruby.rb

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2467,6 +2467,38 @@ class DateTime < Date
24672467
assert_equal :private, date_time_now.visibility, date_time_now.full_name
24682468
end
24692469

2470+
def test_parse_statements_complex_condition_in_for
2471+
util_parser <<RUBY
2472+
class Foo
2473+
def blah()
2474+
for i in (k)...n do
2475+
end
2476+
for i in (k)...n
2477+
end
2478+
end
2479+
end
2480+
RUBY
2481+
2482+
expected = <<EXPTECTED
2483+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">blah</span>()
2484+
<span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> (<span class="ruby-identifier">k</span>)<span class="ruby-operator">...</span><span class="ruby-identifier">n</span> <span class="ruby-keyword">do</span>
2485+
<span class="ruby-keyword">end</span>
2486+
<span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> (<span class="ruby-identifier">k</span>)<span class="ruby-operator">...</span><span class="ruby-identifier">n</span>
2487+
<span class="ruby-keyword">end</span>
2488+
<span class="ruby-keyword">end</span>
2489+
EXPTECTED
2490+
expected = expected.rstrip
2491+
2492+
@parser.scan
2493+
2494+
foo = @top_level.classes.first
2495+
assert_equal 'Foo', foo.full_name
2496+
2497+
blah = foo.method_list.first
2498+
markup_code = blah.markup_code.sub(/^.*\n/, '')
2499+
assert_equal markup_code, expected
2500+
end
2501+
24702502
def test_parse_require_dynamic_string
24712503
content = <<-RUBY
24722504
prefix = 'path'

0 commit comments

Comments
 (0)