Being able to suggest relevant recommendations to software developers is a promising approach to increase the quality of developed source code and to decrease the software industry’s dependency on highly skilled programmers. Although today’s software systems are composed of a diversity of software artifacts, source code arguably still remains the most up-to-date software artifact, and therefore the most reliable data source. This chapter discusses and compares, in a structured and detailed fashion, a variety of approaches that have been proposed to provide recommendations to software developers, based on source code analysis. Taking inspiration from an existing taxonomy of tools that mine software repositories, we provide a taxonomy for source code based recommendation systems, and classify a selection of such tools according to that taxonomy. From that classification, we identify lessons learned regarding the appropriateness of such tools and the way in which these tools can be validated. We identify some under-explored techniques and combinations of techniques, problems that have not yet been sufficiently tackled, and suggest guidelines to validate future approaches, thus identifying interesting opportunities for future research.