@@ -12,7 +12,7 @@ class OneTimeRewriter : public SyntaxRewriter<TDerived> {
1212 public:
1313 enum State {
1414 SKIP_TO_START,
15- REMOVAL_ALLOWED ,
15+ REWRITE_ALLOWED ,
1616 REGISTER_CHILD,
1717 EXIT_REWRITE_POINT,
1818 REGISTER_SUCCESSOR,
@@ -30,7 +30,7 @@ class OneTimeRewriter : public SyntaxRewriter<TDerived> {
3030 SourceRange rewritePointChildren;
3131 SourceRange rewritePointSuccessor;
3232
33- State state = REMOVAL_ALLOWED ;
33+ State state = REWRITE_ALLOWED ;
3434
3535 // As an optimization we do minimization in quasi-sorted way:
3636 // first minimize nodes at least 1024 lines long, then 512, and so on
@@ -58,7 +58,7 @@ class OneTimeRewriter : public SyntaxRewriter<TDerived> {
5858 template <typename T>
5959 void visit (T&& node, bool isNodeRemovable = true ) {
6060 if (state == SKIP_TO_START && node.sourceRange () == startPoint) {
61- state = REMOVAL_ALLOWED ;
61+ state = REWRITE_ALLOWED ;
6262 }
6363
6464 if (state == REGISTER_CHILD && node.sourceRange () != SourceRange::NoLocation &&
@@ -96,17 +96,23 @@ class OneTimeRewriter : public SyntaxRewriter<TDerived> {
9696 template <typename T>
9797 bool shouldRemove (const T& node, bool isNodeRemovable) {
9898 unsigned len = std::ranges::count (node.toString (), ' \n ' ) + 1 ;
99- return state == REMOVAL_ALLOWED && isNodeRemovable && len >= linesLowerLimit &&
99+ return state == REWRITE_ALLOWED && isNodeRemovable && len >= linesLowerLimit &&
100100 len < linesUpperLimit;
101101 }
102102
103103 template <typename T>
104104 bool shouldRemove (const SyntaxList<T>& list) {
105105 unsigned len = std::ranges::count (list.toString (), ' \n ' ) + 1 ;
106- return state == REMOVAL_ALLOWED && list.getChildCount () && len >= linesLowerLimit &&
106+ return state == REWRITE_ALLOWED && list.getChildCount () && len >= linesLowerLimit &&
107107 len < linesUpperLimit;
108108 }
109109
110+ template <typename T>
111+ bool shouldReplace (const T& node) {
112+ unsigned len = std::ranges::count (node.toString (), ' \n ' ) + 1 ;
113+ return state == REWRITE_ALLOWED && len >= linesLowerLimit && len < linesUpperLimit;
114+ }
115+
110116 template <typename T>
111117 void logType () {
112118 std::cerr << STRINGIZE_NODE_TYPE (T) << " \n " ;
@@ -140,12 +146,14 @@ class OneTimeRewriter : public SyntaxRewriter<TDerived> {
140146
141147 template <typename TOrig, typename TNew>
142148 void replaceNode (const TOrig& originalNode, TNew& newNode) {
143- logType<TOrig>();
144- std::cerr << prefixLines (originalNode.toString (), " -" ) << " \n " ;
145- std::cerr << prefixLines (newNode.toString (), " +" ) << " \n " ;
146- DERIVED->replace (originalNode, newNode);
147- rewritePoint = originalNode.sourceRange ();
148- state = REGISTER_CHILD;
149+ if (shouldReplace (originalNode)) {
150+ logType<TOrig>();
151+ std::cerr << prefixLines (originalNode.toString (), " -" ) << " \n " ;
152+ std::cerr << prefixLines (newNode.toString (), " +" ) << " \n " ;
153+ DERIVED->replace (originalNode, newNode);
154+ rewritePoint = originalNode.sourceRange ();
155+ state = REGISTER_CHILD;
156+ }
149157 }
150158
151159 std::shared_ptr<SyntaxTree> transform (const std::shared_ptr<SyntaxTree> tree,
0 commit comments