Skip to content

Commit 8802960

Browse files
Fix comment handling in DeleteKey (#7121)
1 parent 035e067 commit 8802960

2 files changed

Lines changed: 46 additions & 2 deletions

File tree

rewrite-toml/src/main/java/org/openrewrite/toml/DeleteKey.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,13 @@
2222
import org.openrewrite.Option;
2323
import org.openrewrite.Recipe;
2424
import org.openrewrite.TreeVisitor;
25+
import org.openrewrite.toml.tree.Comment;
26+
import org.openrewrite.toml.tree.Space;
2527
import org.openrewrite.toml.tree.Toml;
28+
import org.openrewrite.toml.tree.TomlRightPadded;
29+
30+
import java.util.ArrayList;
31+
import java.util.List;
2632

2733
@Value
2834
@EqualsAndHashCode(callSuper = false)
@@ -45,6 +51,46 @@ public TreeVisitor<?, ExecutionContext> getVisitor() {
4551
Toml.KeyValue kv = super.visitKeyValue(keyValue, ctx);
4652
return matcher.matches(getCursor()) ? null : kv;
4753
}
54+
55+
@Override
56+
public Toml.Table visitTable(Toml.Table table, ExecutionContext ctx) {
57+
Toml.Table t = table;
58+
t = t.withPrefix(visitSpace(t.getPrefix(), ctx));
59+
t = t.withMarkers(visitMarkers(t.getMarkers(), ctx));
60+
61+
List<TomlRightPadded<Toml>> original = t.getPadding().getValues();
62+
List<TomlRightPadded<Toml>> result = new ArrayList<>(original.size());
63+
boolean changed = false;
64+
boolean prevDeleted = false;
65+
66+
for (TomlRightPadded<Toml> rp : original) {
67+
Toml visited = visit(rp.getElement(), ctx);
68+
if (visited == null) {
69+
prevDeleted = changed = true;
70+
continue;
71+
}
72+
if (prevDeleted) {
73+
visited = visited.withPrefix(
74+
stripInlineCommentFromDeletedLine(visited.getPrefix()));
75+
prevDeleted = false;
76+
}
77+
TomlRightPadded<Toml> newRp = visited == rp.getElement() ? rp : rp.withElement(visited);
78+
if (newRp != rp) changed = true;
79+
result.add(newRp);
80+
}
81+
return changed ? t.getPadding().withValues(result) : t;
82+
}
83+
84+
private Space stripInlineCommentFromDeletedLine(Space prefix) {
85+
List<Comment> comments = prefix.getComments();
86+
if (prefix.getWhitespace().contains("\n") || comments.isEmpty()) {
87+
return prefix;
88+
}
89+
return Space.build(
90+
comments.get(0).getSuffix(),
91+
new ArrayList<>(comments.subList(1, comments.size()))
92+
);
93+
}
4894
};
4995
}
5096
}

rewrite-toml/src/test/java/org/openrewrite/toml/DeleteKeyTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.openrewrite.toml;
1717

18-
import org.junit.jupiter.api.Disabled;
1918
import org.junit.jupiter.api.Test;
2019
import org.openrewrite.DocumentExample;
2120
import org.openrewrite.test.RewriteTest;
@@ -225,7 +224,6 @@ void deleteKeyWithArrayValue() {
225224
);
226225
}
227226

228-
@Disabled
229227
@Test
230228
void preserveComments() {
231229
rewriteRun(

0 commit comments

Comments
 (0)