  JavaScript (JS) is one of the most popular programming languages due to its
flexibility and versatility, but maintaining JS code is tedious and
error-prone. In our research, we conducted an empirical study to characterize
the relationship between co-changed software entities (e.g., functions and
variables), and built a machine learning (ML)-based approach to recommend
additional entity to edit given developers' code changes. Specifically, we
first crawled 14,747 commits in 10 open-source projects; for each commit, we
created one or more change dependency graphs (CDGs) to model the
referencer-referencee relationship between co-changed entities. Next, we
extracted the common subgraphs between CDGs to locate recurring co-change
patterns between entities. Finally, based on those patterns, we extracted code
features from co-changed entities and trained an ML model that recommends
entities-to-change given a program commit. According to our empirical
investigation, (1) three recurring patterns commonly exist in all projects; (2)
80%--90% of co-changed function pairs either invoke the same function(s),
access the same variable(s), or contain similar statement(s); (3) our ML-based
approach CoRec recommended entity changes with high accuracy (73%--78%). CoRec
complements prior work because it suggests changes based on program syntax,
textual similarity, as well as software history; it achieved higher accuracy
than two existing tools in our evaluation.
