  Static Analysis tools have rules for several code quality issues and these
rules are created by experts manually. In this paper, we address the problem of
automatic synthesis of code quality rules from examples. We formulate the rule
synthesis problem as synthesizing first order logic formulas over graph
representations of code. We present a new synthesis algorithm RhoSynth that is
based on Integer Linear Programming-based graph alignment for identifying code
elements of interest to the rule. We bootstrap RhoSynth by leveraging code
changes made by developers as the source of positive and negative examples. We
also address rule refinement in which the rules are incrementally improved with
additional user-provided examples. We validate RhoSynth by synthesizing more
than 30 Java code quality rules. These rules have been deployed as part of a
code review system in a company and their precision exceeds 75% based on
developer feedback collected during live code-reviews. Through comparisons with
recent baselines, we show that current state-of-the-art program synthesis
approaches are unable to synthesize most of these rules.
