2222import org .openrewrite .Option ;
2323import org .openrewrite .Recipe ;
2424import org .openrewrite .TreeVisitor ;
25+ import org .openrewrite .toml .tree .Comment ;
26+ import org .openrewrite .toml .tree .Space ;
2527import 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}
0 commit comments