  The way developers edit day-to-day code tends to be repetitive, often using
existing code elements. Many researchers have tried to automate repetitive code
changes by learning from specific change templates which are applied to limited
scope. The advancement of deep neural networks and the availability of vast
open-source evolutionary data opens up the possibility of automatically
learning those templates from the wild. However, deep neural network based
modeling for code changes and code in general introduces some specific problems
that needs specific attention from research community. For instance, compared
to natural language, source code vocabulary can be significantly larger.
Further, good changes in code do not break its syntactic structure. Thus,
deploying state-of-the-art neural network models without adapting the methods
to the source code domain yields sub-optimal results. To this end, we propose a
novel tree-based neural network system to model source code changes and learn
code change patterns from the wild. Specifically, we propose a tree-based
neural machine translation model to learn the probability distribution of
changes in code. We realize our model with a change suggestion engine, CODIT,
and train the model with more than 24k real-world changes and evaluate it on 5k
patches. Our evaluation shows the effectiveness of CODITin learning and
suggesting patches. CODIT can also learn specific bug fix pattern from bug
fixing patches and can fix 25 bugs out of 80 bugs in Defects4J.
