diff --git a/lib/rdoc/parser/ripper_state_lex.rb b/lib/rdoc/parser/ripper_state_lex.rb index b7cec84bfc..2a285b97a4 100644 --- a/lib/rdoc/parser/ripper_state_lex.rb +++ b/lib/rdoc/parser/ripper_state_lex.rb @@ -83,6 +83,15 @@ def on_op(tok, data) when '&&', '||', '+=', '-=', '*=', '**=', '&=', '|=', '^=', '<<=', '>>=', '||=', '&&=' @lex_state = EXPR_BEG + when '::' + case @lex_state + when EXPR_ARG, EXPR_CMDARG + @lex_state = EXPR_DOT + when EXPR_FNAME, EXPR_DOT + @lex_state = EXPR_ARG + else + @lex_state = EXPR_BEG + end else case @lex_state when EXPR_FNAME, EXPR_DOT @@ -109,8 +118,10 @@ def on_kw(tok, data) else @lex_state = EXPR_BEG end - when 'begin' + when 'begin', 'case', 'when' @lex_state = EXPR_BEG + when 'return', 'break' + @lex_state = EXPR_MID else if @lex_state == EXPR_FNAME @lex_state = EXPR_END @@ -245,7 +256,7 @@ def on_const(tok, data) case @lex_state when EXPR_FNAME @lex_state = EXPR_ENDFN - when EXPR_CLASS + when EXPR_CLASS, EXPR_CMDARG, EXPR_MID @lex_state = EXPR_ARG else @lex_state = EXPR_CMDARG diff --git a/test/test_rdoc_parser_ruby.rb b/test/test_rdoc_parser_ruby.rb index e28112fbee..833ed2cc74 100644 --- a/test/test_rdoc_parser_ruby.rb +++ b/test/test_rdoc_parser_ruby.rb @@ -306,6 +306,37 @@ def sum(n) assert_equal @top_level, sum.file end + def test_parse_redefined_op_with_constant + klass = RDoc::NormalClass.new 'Foo' + klass.parent = @top_level + + comment = RDoc::Comment.new '', @top_level + + util_parser <