Automatic refactorings for Scala programs

Scala is a programming language that combines the object-oriented and functional programming paradigms. Dependent types, higherorder functions and implicit conversions bring new ideas and challenges when implementing code refactoring. In this paper, we give an overview of the automatic refactorings for Scala programs offered by the IntelliJ IDEA programming environment. We consider the main differences between well-known automatic refactorings implemented for Scala with their Java analogues, and give short descriptions of the pitfalls encountered and underlying techniques. Finally, we provide a short survey of refactorings that have not yet been implemented, but might be useful for practical software development in Scala.