High-Fidelity Metaprogramming with Separator Syntax Trees Rodin T. A. Aarssen Tijs van der Storm Centrum Wiskunde & Informatica Centrum Wiskunde & Informatica Amsterdam, The Netherlands Amsterdam, The Netherlands Eindhoven University of Technology University of Groningen Eindhoven, The Netherlands Groningen, The Netherlands
[email protected] [email protected] Abstract Manipulation (PEPM ’20), January 20, 2020, New Orleans, LA, USA. Many metaprogramming tasks, such as refactorings, auto- ACM, New York, NY, USA, 11 pages. https://doi.org/10.1145/3372884. mated bug fixing, or large-scale software renovation, require 3373162 high-fidelity source code transformations – transformations which preserve comments and layout as much as possible. 1 Introduction Abstract syntax trees (ASTs) typically abstract from such Many metaprogramming tasks require high-fidelity source details, and hence would require pretty printing, destroying code transformations: transformations that preserve as much the original program layout. Concrete syntax trees (CSTs) layout (comments, indentation, whitespace, etc.) of the input preserve all layout information, but transformation systems as possible. Typical examples include: or parsers that support CSTs are rare and can be cumbersome to use. • Automated refactorings [12]; In this paper we present separator syntax trees (SSTs), a • Mass maintenance scenarios [14]; lightweight syntax tree format, that sits between AST and • Automated bug fixing [10]. CSTs, in terms of the amount of information they preserve. High-fidelity metaprogramming further promotes end- SSTs extend ASTs by recording textual layout information user scripting of source code transformations, where pro- separating AST nodes. This information can be used to re- grammers not only apply standard refactorings and restruc- construct the textual code after parsing, but can largely be turings offered by mainstream IDEs or dedicated tools (such ignored when implementing high-fidelity transformations.