Refactoring is the practice of improving software quality without altering its behavior.
Developers intuitively refactor their code for multiple purposes: improving program comprehension, removing duplicate code, reducing complexity, dealing with technical debt, and removing code smells.
Refactoring duplicate code consists in taking a code fragment and moving it to create a new method, while replacing all instances of that fragment with a call to this newly created method.
This refactoring is known as Extract Method.
The goal of this project is to aid developers with just-in-time refactoring of duplicate code.
Unlike the existing approaches that follow a posterior approach of removing accumulated duplicate code, we aim at increasing the awareness of developers while writing their code, i.e., removing duplicate code as soon as it is introduced in their code base.