Skip to content

Commit d751e31

Browse files
committed
Fix regexp literal with :EXPR_END in oneliner
Regexp literal is detected by what @lex_state is :EXPR_BEG or :EXPR_MID. But when regexp literal is after method name in oneliner, @lex_state is :EXPR_END and the regexp literal becomes broken tokens. This commit fixes it.
1 parent 1261ff6 commit d751e31

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

lib/rdoc/parser/ruby.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1502,6 +1502,7 @@ def parse_method_or_yield_parameters(method = nil,
15021502
end
15031503
tk = get_tk
15041504
end
1505+
@scanner.first_in_method_statement = true
15051506

15061507
get_tkread_clean(/\s+/, ' ')
15071508
end

lib/rdoc/ruby_lex.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class Error < RDoc::Error
4545

4646
attr_accessor :continue
4747
attr_accessor :lex_state
48+
attr_accessor :first_in_method_statement
4849
attr_reader :reader
4950

5051
class << self
@@ -112,6 +113,7 @@ def initialize(content, options)
112113
@indent_stack = []
113114
@lex_state = :EXPR_BEG
114115
@space_seen = false
116+
@first_in_method_statement = false
115117

116118
@continue = false
117119
@line = ""
@@ -352,6 +354,7 @@ def token
352354
begin
353355
tk = @OP.match(self)
354356
@space_seen = tk.kind_of?(TkSPACE)
357+
@first_in_method_statement = false if !@space_seen && @first_in_method_statement
355358
rescue SyntaxError => e
356359
raise Error, "syntax error: #{e.message}" if
357360
@exception_on_syntax_error
@@ -727,7 +730,7 @@ def lex_int2
727730
if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
728731
@lex_state = :EXPR_ARG
729732
Token(TkId, op)
730-
elsif @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
733+
elsif @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID || @first_in_method_statement
731734
identify_string(op)
732735
elsif peek(0) == '='
733736
getc

0 commit comments

Comments
 (0)