Semistructured Merge with Language-Specific Syntactic Separators
<|reference_start|>Semistructured Merge with Language-Specific Syntactic Separators: Structured merge tools exploit programming language syntactic structure to enhance merge accuracy by reducing spurious conflicts reported by unstructured tools. By creating and handling full ASTs, structured tools are language-specific and harder to implement. They can also be computationally expensive when merging large files.To reduce these drawbacks, semistructured merge tools work with partial ASTs that use strings to represent lower level syntactic structures such as method bodies, and rely on unstructured tools to merge them. This, however, results in merge accuracy loss. To improve accuracy without compromising semistructured merge benefits, we propose a tool that leverages language-specific syntactic separators to infer structure without parsing. We still resort to an unstructured tool to merge lower level structures, but only after preprocessing the code so that text in between separators such as curly braces appear in separate lines. This way we emulate the capabilities of structured merge tools while avoiding their drawbacks. By comparing our tool with a robust implementation of semistructured merge, we find that our tool substantially reduces the number of spurious conflicts. We also observe significant but less substantial reductions on the overall number of reported conflicts, and of files with conflicts. However, similar to structured tools, our tool lets more merge conflicts go undetected. Our tool shows significant improvements over unstructured tools widely used in practice. Finally we observe that exploiting language-specific syntactic separators introduces unique textual alignment challenges.<|reference_end|>
@article{cavalcanti2024semistructured,
    title={Semistructured Merge with Language-Specific Syntactic Separators},
    author={Guilherme Cavalcanti, Paulo Borba, Leonardo dos Anjos and Jonatas
  Clementino},
    journal={arXiv preprint arXiv:2407.18888},
    year={2024},
    archivePrefix={arXiv},
    eprint={2407.18888},
    primaryClass={cs.SE}
}