Skip to content

Commit c769938

Browse files
committed
Fix Nodes.InterpolatedStringNode translation and set new line flag properly
1 parent ba1de41 commit c769938

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

spec/truffle/parsing/fixtures/strings/concatenated_literal.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ast: |
77
StringLiteralNode
88
attributes:
99
encoding = UTF-8
10-
flags = 0
10+
flags = 1
1111
sourceCharIndex = 0
1212
sourceLength = 11
1313
tstring = foobar

spec/truffle/parsing/fixtures/strings/concatenated_literal_frozen.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ast: |
1010
FrozenStringLiteralNode
1111
attributes:
1212
definition = "expression" (ASCII-8BIT)
13-
flags = 0
13+
flags = 1
1414
frozenString = "foobar" (UTF-8)
1515
sourceCharIndex = 30
1616
sourceLength = 11

src/main/java/org/truffleruby/parser/YARPTranslator.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2511,7 +2511,18 @@ private static Nodes.StringNode concatStringNodes(Nodes.InterpolatedStringNode n
25112511
var last = ArrayUtils.getLast(parts);
25122512
int length = last.endOffset() - start;
25132513
short flags = node.isFrozen() ? Nodes.StringFlags.FROZEN : NO_FLAGS;
2514-
return new Nodes.StringNode(flags, concatenated, start, length);
2514+
2515+
// Prism may assign a new-line flag to one of the nested parts instead of the outer String node
2516+
boolean isNewLineFlag = node.hasNewLineFlag();
2517+
for (var part : parts) {
2518+
if (part.hasNewLineFlag()) {
2519+
isNewLineFlag = true;
2520+
}
2521+
}
2522+
2523+
var stringNode = new Nodes.StringNode(flags, concatenated, start, length);
2524+
stringNode.setNewLineFlag(isNewLineFlag);
2525+
return stringNode;
25152526
}
25162527

25172528
/** Translate parts of interpolated String, Symbol or Regexp */

0 commit comments

Comments
 (0)