Skip to content

Commit 956e9d8

Browse files
authored
Merge pull request #490 from aycabta/fix-opassign
Fix opassign
2 parents 0a09ee1 + f820ad9 commit 956e9d8

File tree

2 files changed

+96
-1
lines changed

2 files changed

+96
-1
lines changed

lib/rdoc/ruby_lex.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -883,7 +883,8 @@ def lex_int2
883883
identify_quotation
884884
elsif peek(0) == '='
885885
getc
886-
Token(TkOPASGN, :%)
886+
@lex_state = :EXPR_BEG
887+
Token(TkOPASGN, '%')
887888
elsif @lex_state == :EXPR_ARG and @space_seen and peek(0) !~ /\s/
888889
identify_quotation
889890
else

test/test_rdoc_ruby_lex.rb

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,100 @@ def test_class_tokenize_heredoc_CR_NL
213213
assert_equal expected, tokens
214214
end
215215

216+
def test_class_tokenize_opassign
217+
tokens = RDoc::RubyLex.tokenize <<'RUBY', nil
218+
a %= b
219+
a /= b
220+
a -= b
221+
a += b
222+
a |= b
223+
a &= b
224+
a >>= b
225+
a <<= b
226+
a *= b
227+
a &&= b
228+
a ||= b
229+
a **= b
230+
RUBY
231+
232+
expected = [
233+
@TK::TkIDENTIFIER.new( 0, 1, 0, "a"),
234+
@TK::TkSPACE .new( 1, 1, 1, " "),
235+
@TK::TkOPASGN .new( 2, 1, 2, "%"),
236+
@TK::TkSPACE .new( 4, 1, 4, " "),
237+
@TK::TkIDENTIFIER.new( 5, 1, 5, "b"),
238+
@TK::TkNL .new( 6, 1, 6, "\n"),
239+
@TK::TkIDENTIFIER.new( 7, 2, 0, "a"),
240+
@TK::TkSPACE .new( 8, 2, 1, " "),
241+
@TK::TkOPASGN .new( 9, 2, 2, "/"),
242+
@TK::TkSPACE .new( 11, 2, 4, " "),
243+
@TK::TkIDENTIFIER.new( 12, 2, 5, "b"),
244+
@TK::TkNL .new( 13, 2, 7, "\n"),
245+
@TK::TkIDENTIFIER.new( 14, 3, 0, "a"),
246+
@TK::TkSPACE .new( 15, 3, 1, " "),
247+
@TK::TkOPASGN .new( 16, 3, 2, "-"),
248+
@TK::TkSPACE .new( 18, 3, 4, " "),
249+
@TK::TkIDENTIFIER.new( 19, 3, 5, "b"),
250+
@TK::TkNL .new( 20, 3, 14, "\n"),
251+
@TK::TkIDENTIFIER.new( 21, 4, 0, "a"),
252+
@TK::TkSPACE .new( 22, 4, 1, " "),
253+
@TK::TkOPASGN .new( 23, 4, 2, "+"),
254+
@TK::TkSPACE .new( 25, 4, 4, " "),
255+
@TK::TkIDENTIFIER.new( 26, 4, 5, "b"),
256+
@TK::TkNL .new( 27, 4, 21, "\n"),
257+
@TK::TkIDENTIFIER.new( 28, 5, 0, "a"),
258+
@TK::TkSPACE .new( 29, 5, 1, " "),
259+
@TK::TkOPASGN .new( 30, 5, 2, "|"),
260+
@TK::TkSPACE .new( 32, 5, 4, " "),
261+
@TK::TkIDENTIFIER.new( 33, 5, 5, "b"),
262+
@TK::TkNL .new( 34, 5, 28, "\n"),
263+
@TK::TkIDENTIFIER.new( 35, 6, 0, "a"),
264+
@TK::TkSPACE .new( 36, 6, 1, " "),
265+
@TK::TkOPASGN .new( 37, 6, 2, "&"),
266+
@TK::TkSPACE .new( 39, 6, 4, " "),
267+
@TK::TkIDENTIFIER.new( 40, 6, 5, "b"),
268+
@TK::TkNL .new( 41, 6, 35, "\n"),
269+
@TK::TkIDENTIFIER.new( 42, 7, 0, "a"),
270+
@TK::TkSPACE .new( 43, 7, 1, " "),
271+
@TK::TkOPASGN .new( 44, 7, 2, ">>"),
272+
@TK::TkSPACE .new( 47, 7, 5, " "),
273+
@TK::TkIDENTIFIER.new( 48, 7, 6, "b"),
274+
@TK::TkNL .new( 49, 7, 42, "\n"),
275+
@TK::TkIDENTIFIER.new( 50, 8, 0, "a"),
276+
@TK::TkSPACE .new( 51, 8, 1, " "),
277+
@TK::TkOPASGN .new( 52, 8, 2, "<<"),
278+
@TK::TkSPACE .new( 55, 8, 5, " "),
279+
@TK::TkIDENTIFIER.new( 56, 8, 6, "b"),
280+
@TK::TkNL .new( 57, 8, 50, "\n"),
281+
@TK::TkIDENTIFIER.new( 58, 9, 0, "a"),
282+
@TK::TkSPACE .new( 59, 9, 1, " "),
283+
@TK::TkOPASGN .new( 60, 9, 2, "*"),
284+
@TK::TkSPACE .new( 62, 9, 4, " "),
285+
@TK::TkIDENTIFIER.new( 63, 9, 5, "b"),
286+
@TK::TkNL .new( 64, 9, 58, "\n"),
287+
@TK::TkIDENTIFIER.new( 65, 10, 0, "a"),
288+
@TK::TkSPACE .new( 66, 10, 1, " "),
289+
@TK::TkOPASGN .new( 67, 10, 2, "&&"),
290+
@TK::TkSPACE .new( 70, 10, 5, " "),
291+
@TK::TkIDENTIFIER.new( 71, 10, 6, "b"),
292+
@TK::TkNL .new( 72, 10, 65, "\n"),
293+
@TK::TkIDENTIFIER.new( 73, 11, 0, "a"),
294+
@TK::TkSPACE .new( 74, 11, 1, " "),
295+
@TK::TkOPASGN .new( 75, 11, 2, "||"),
296+
@TK::TkSPACE .new( 78, 11, 5, " "),
297+
@TK::TkIDENTIFIER.new( 79, 11, 6, "b"),
298+
@TK::TkNL .new( 80, 11, 73, "\n"),
299+
@TK::TkIDENTIFIER.new( 81, 12, 0, "a"),
300+
@TK::TkSPACE .new( 82, 12, 1, " "),
301+
@TK::TkOPASGN .new( 83, 12, 2, "**"),
302+
@TK::TkSPACE .new( 86, 12, 5, " "),
303+
@TK::TkIDENTIFIER.new( 87, 12, 6, "b"),
304+
@TK::TkNL .new( 88, 12, 81, "\n"),
305+
]
306+
307+
assert_equal expected, tokens
308+
end
309+
216310
def test_class_tokenize_heredoc_call
217311
tokens = RDoc::RubyLex.tokenize <<-'RUBY', nil
218312
string = <<-STRING.chomp

0 commit comments

Comments
 (0)