@@ -796,13 +796,19 @@ def visit_else_node(node)
796
796
# "foo #{bar}"
797
797
# ^^^^^^
798
798
def visit_embedded_statements_node ( node )
799
- visit ( node . statements )
799
+ statements = visit ( node . statements )
800
+
801
+ bounds ( node . location )
802
+ on_string_embexpr ( statements )
800
803
end
801
804
802
805
# "foo #@bar"
803
806
# ^^^^^
804
807
def visit_embedded_variable_node ( node )
805
- raise NoMethodError , __method__
808
+ variable = visit ( node . variable )
809
+
810
+ bounds ( node . location )
811
+ on_string_dvar ( variable )
806
812
end
807
813
808
814
# Visit an EnsureNode node.
@@ -1123,22 +1129,37 @@ def visit_interpolated_match_last_line_node(node)
1123
1129
# /foo #{bar}/
1124
1130
# ^^^^^^^^^^^^
1125
1131
def visit_interpolated_regular_expression_node ( node )
1126
- raise NoMethodError , __method__
1132
+ bounds ( node . parts . first . location )
1133
+ parts =
1134
+ node . parts . inject ( on_regexp_new ) do |content , part |
1135
+ on_regexp_add ( content , visit_string_content ( part ) )
1136
+ end
1137
+
1138
+ bounds ( node . location )
1139
+ on_regexp_literal ( parts )
1127
1140
end
1128
1141
1129
1142
# "foo #{bar}"
1130
1143
# ^^^^^^^^^^^^
1131
1144
def visit_interpolated_string_node ( node )
1132
- contents = visit_string_contents ( node . parts )
1145
+ bounds ( node . parts . first . location )
1146
+ parts =
1147
+ node . parts . inject ( on_string_content ) do |content , part |
1148
+ on_string_add ( content , visit_string_content ( part ) )
1149
+ end
1133
1150
1134
1151
bounds ( node . location )
1135
- on_string_literal ( contents )
1152
+ on_string_literal ( parts )
1136
1153
end
1137
1154
1138
1155
# :"foo #{bar}"
1139
1156
# ^^^^^^^^^^^^^
1140
1157
def visit_interpolated_symbol_node ( node )
1141
- contents = visit_string_contents ( node . parts )
1158
+ bounds ( node . parts . first . location )
1159
+ parts =
1160
+ node . parts . inject ( on_string_content ) do |content , part |
1161
+ on_string_add ( content , visit_string_content ( part ) )
1162
+ end
1142
1163
1143
1164
bounds ( node . location )
1144
1165
on_dyna_symbol ( contents )
@@ -1147,24 +1168,23 @@ def visit_interpolated_symbol_node(node)
1147
1168
# `foo #{bar}`
1148
1169
# ^^^^^^^^^^^^
1149
1170
def visit_interpolated_x_string_node ( node )
1150
- raise NoMethodError , __method__
1171
+ bounds ( node . parts . first . location )
1172
+ parts =
1173
+ node . parts . inject ( on_xstring_new ) do |content , part |
1174
+ on_xstring_add ( content , visit_string_content ( part ) )
1175
+ end
1176
+
1177
+ bounds ( node . location )
1178
+ on_xstring_literal ( parts )
1151
1179
end
1152
1180
1153
- # Visit the contents of a string-like node.
1154
- private def visit_string_contents ( parts )
1155
- parts . inject ( on_string_content ) do |content , part |
1156
- on_string_add (
1157
- content ,
1158
- case part
1159
- when StringNode
1160
- bounds ( part . content_loc )
1161
- on_tstring_content ( part . content )
1162
- when EmbeddedStatementsNode
1163
- on_string_embexpr ( visit ( part ) )
1164
- else
1165
- raise
1166
- end
1167
- )
1181
+ # Visit an individual part of a string-like node.
1182
+ private def visit_string_content ( part )
1183
+ if part . is_a? ( StringNode )
1184
+ bounds ( part . content_loc )
1185
+ on_tstring_content ( part . content )
1186
+ else
1187
+ visit ( part )
1168
1188
end
1169
1189
end
1170
1190
0 commit comments