Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change correctly handles the case where
[newline_2, newline_1]is merged intonewline_3. However, it breaks the case where[newline_1, newline_2]is merged, as the decomposition is no longer its inverse.The root cause is the ambiguous merging in
_apply_token_matches(lines 373-382) where both[newline_1, newline_2]and[newline_2, newline_1]are merged intonewline_3. The decomposition here in_find_mm_placeholderscan only be the inverse of one of these, making the transformation lossy and causing one of the cases to fail.A more robust fix would be to make the merging unambiguous. For example, by only merging
[newline_2, newline_1]intonewline_3in_apply_token_matchesand removing the merge for[newline_1, newline_2].Specifically, you could remove lines 373-377 in
_apply_token_matches:With that change, your change here to decompose
newline_3into[newline_2, newline_1]would be correct and not break other cases. Without changing_apply_token_matches, this PR trades one bug for another.