Skip to content

Commit f74c4b5

Browse files
authored
Merge pull request #487 from aycabta/support-safe-navigation-operator
Support safe navigation operator
2 parents ef2cfbc + 9ad8761 commit f74c4b5

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

lib/rdoc/ruby_lex.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,16 +668,16 @@ def lex_init()
668668
end
669669
end
670670

671-
@OP.def_rule(".") do
671+
@OP.def_rules(".", "&.") do
672672
|op, io|
673673
@lex_state = :EXPR_BEG
674674
if peek(0) =~ /[0-9]/
675675
ungetc
676676
identify_number
677677
else
678-
# for "obj.if" etc.
678+
# for "obj.if" or "obj&.if" etc.
679679
@lex_state = :EXPR_DOT
680-
Token(TkDOT)
680+
Token(op)
681681
end
682682
end
683683

lib/rdoc/ruby_token.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ def Token(token, value = nil)
401401

402402
[:TkASSIGN, Token, "="],
403403
[:TkDOT, Token, "."],
404+
[:TkSAFENAV, Token, "&."],
404405
[:TkLPAREN, Token, "("], #(exp)
405406
[:TkLBRACK, Token, "["], #[arry]
406407
[:TkLBRACE, Token, "{"], #{hash}

test/test_rdoc_ruby_lex.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,19 @@ def test_class_tokenize_double_colon_is_not_hash_symbol
157157
assert_equal expected, tokens
158158
end
159159

160+
def test_class_tokenize_safe_nav_operator
161+
tokens = RDoc::RubyLex.tokenize 'receiver&.meth', nil
162+
163+
expected = [
164+
@TK::TkIDENTIFIER.new( 0, 1, 0, "receiver"),
165+
@TK::TkSAFENAV .new( 8, 1, 8, "&."),
166+
@TK::TkIDENTIFIER.new(10, 1, 10, "meth"),
167+
@TK::TkNL .new(14, 1, 14, "\n"),
168+
]
169+
170+
assert_equal expected, tokens
171+
end
172+
160173
def test_class_tokenize_hash_rocket
161174
tokens = RDoc::RubyLex.tokenize '{ :class => "foo" }', nil
162175

0 commit comments

Comments
 (0)