1. A computer-implemented method comprising: receiving a snapshot S of a code base of source code and a different snapshot T of the code base, each snapshot comprising source code files, each source code file having a path; receiving data representing first violations in the snapshot S and second violations in the snapshot T, each violation having a respective location in its snapshot, each violation having a respective type; and determining pairs of matching violations, each pair of matching violations including a first violation and a corresponding second violation that have the same type; wherein determining the pairs of matching violations comprises performing two or more matching processes, including: performing a first matching process, the first matching process determining first pairs of matching violations according to a first matching algorithm; performing a second matching process, the second matching process determining second pairs of matching violations according to a second matching algorithm from violations not matched by the first matching process; and including the first pairs of matching violations and the second pairs of matching violations in the determined pairs of matching violations.