From 8ac195693fab2d2f7af81012dba6b477ce23130f Mon Sep 17 00:00:00 2001 From: Code Ass Date: Sun, 13 Aug 2017 04:24:43 +0900 Subject: [PATCH 1/2] Fix for symbol detection when nested method When nested method as identifer detected, @lex_state is :EXPR_MID and it becomes :EXPR_END. However, in ":" token processing, TkSYMBEG is generated only when @lex_state is not :EXPR_END. So symbol for nested method becomes TkCOLON as distinct from TkSYMBEG. This commit fixes the behavior. --- lib/rdoc/ruby_lex.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rdoc/ruby_lex.rb b/lib/rdoc/ruby_lex.rb index 7abcc37777..af19d012e8 100644 --- a/lib/rdoc/ruby_lex.rb +++ b/lib/rdoc/ruby_lex.rb @@ -1073,7 +1073,7 @@ def identify_identifier token.concat getc end elsif @lex_state == :EXPR_BEG || @lex_state == :EXPR_DOT || - @lex_state == :EXPR_ARG + @lex_state == :EXPR_ARG || @lex_state == :EXPR_MID @lex_state = :EXPR_ARG else @lex_state = :EXPR_END From faaa7245f81073c7999015bbea618a8c5a492f92 Mon Sep 17 00:00:00 2001 From: Code Ass Date: Sun, 13 Aug 2017 04:32:38 +0900 Subject: [PATCH 2/2] Add test_class_tokenize_symbol_for_nested_method --- test/test_rdoc_ruby_lex.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/test_rdoc_ruby_lex.rb b/test/test_rdoc_ruby_lex.rb index d8a920f42c..9990633091 100644 --- a/test/test_rdoc_ruby_lex.rb +++ b/test/test_rdoc_ruby_lex.rb @@ -520,6 +520,21 @@ def test_class_tokenize_symbol assert_equal expected, tokens end + def test_class_tokenize_symbol_for_nested_method + tokens = RDoc::RubyLex.tokenize 'return untrace_var :name', nil + + expected = [ + @TK::TkRETURN .new( 0, 1, 0, "return"), + @TK::TkSPACE .new( 6, 1, 6, " "), + @TK::TkIDENTIFIER.new( 7, 1, 7, "untrace_var"), + @TK::TkSPACE .new(18, 1, 18, " "), + @TK::TkSYMBOL .new(19, 1, 19, ":name"), + @TK::TkNL .new(24, 1, 24, "\n"), + ] + + assert_equal expected, tokens + end + def test_unary_minus ruby_lex = RDoc::RubyLex.new("-1", nil) assert_equal("-1", ruby_lex.token.value)