SPELL: Synthesis of Programmatic Edits using LLMs
Daniel Ramos, Catarina Gamboa, Inês Lynce, Vasco Manquinho, Ruben Martins, Claire Le Goues
TL;DR
Spell tackles the costly problem of API library migration by extracting actionable migration knowledge from LLMs and grounding it in a reusable PolyglotPiranha DSL. It uses a two-phase pipeline—data distillation to produce validated migration examples, and agentic synthesis to convert those examples into executable transformation scripts—without requiring historical migration corpora. In experiments on Python libraries, Spell generates rich migration exemplars and achieves 61.6% one-shot script-correctness across nine tasks, outperforming Melt. The approach yields maintainable, testable migration assets that can be applied at scale in real-world repositories, bridging LLM capabilities with industrial-grade code transformation tools.
Abstract
Library migration is a common but error-prone task in software development. Developers may need to replace one library with another due to reasons like changing requirements or licensing changes. Migration typically entails updating and rewriting source code manually. While automated migration tools exist, most rely on mining examples from real-world projects that have already undergone similar migrations. However, these data are scarce, and collecting them for arbitrary pairs of libraries is difficult. Moreover, these migration tools often miss out on leveraging modern code transformation infrastructure. In this paper, we present a new approach to automated API migration that sidesteps the limitations described above. Instead of relying on existing migration data or using LLMs directly for transformation, we use LLMs to extract migration examples. Next, we use an Agent to generalize those examples to reusable transformation scripts in PolyglotPiranha, a modern code transformation tool. Our method distills latent migration knowledge from LLMs into structured, testable, and repeatable migration logic, without requiring preexisting corpora or manual engineering effort. Experimental results across Python libraries show that our system can generate diverse migration examples and synthesize transformation scripts that generalize to real-world codebases.
