<div dir="ltr">This is <i>very</i> cool. So when you ask:<div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span style="font-size:12.8px">0. Does the Clang community like the idea?</span><br style="font-size:12.8px"></blockquote><div><br></div></div><div>My answer is a <b><i>yes</i></b>.</div><div><br></div><div>I have much more to say about this, and I will do so tomorrow.</div><div><br></div><div>Nit: Your Python installation is a few years out of date:</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span style="font-size:12.8px">Python 2.7.5</span></blockquote><div> </div><div>...the latest version of Python 2.7 is 2.7.11, and <a href="https://hg.python.org/cpython/raw-file/53d30ab403f1/Misc/NEWS" target="_blank">has many fixes</a>. </div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><span style="font-size:12.8000001907349px">Sincerely,</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Alexander Riccio</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">--</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">"Change the world or go home."</span><div style="font-size:12.8000001907349px"><a href="http://about.me/ariccio" target="_blank">about.me/ariccio</a></div><div style="font-size:12.8000001907349px"><a href="http://about.me/ariccio" target="_blank"><br></a></div><div style="font-size:12.8000001907349px">If left to my own devices, I will build more.</div><div style="font-size:12.8000001907349px">⁂</div></div></div></div></div></div>
<br><div class="gmail_quote">On Tue, Feb 23, 2016 at 5:10 AM, György Orbán <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
We would like to add CodeChecker (<a href="https://github.com/Ericsson/codechecker" rel="noreferrer" target="_blank">https://github.com/Ericsson/codechecker</a>) analyzer infrastructure.<br>
<br>
This is an alternative tool to scan-build with extended functionality.<br>
Some of the main features are: track issues over time, suppress false positives, detect new issues by comparing multiple analyzer run results,<br>
view and compare results in a web browser or in the command line. A more detailed feature list can be found below (*).<br>
The analyzer infrastructure is built in a way that integrating a new analyzer can be easily done.<br>
We are developing a tool which can be used easily by the developers or by automated continuous integration tools and view the results from multiple analyzers in a common way.<br>
We think it would serve as a good base for displaying and tracking bugs that can be detected by the other clang tools such as clang-tidy which is already supported.<br>
<br>
For example, you can find the analysis results of the LLVM code 3.6.2 and 3.7.1 here: <a href="http://modelserver.inf.elte.hu:5000" rel="noreferrer" target="_blank">http://modelserver.inf.elte.hu:5000</a><br>
<br>
Main questions to the community:<br>
0. Does the Clang community like the idea?<br>
1. CodeChecker has some 3rd party dependencies see below (**), are they acceptable?<br>
2. Is the community satisfied with the CodeChecker name?<br>
<br>
Integration plan:<br>
 0. CodeChecker should use scan-build.py (OSX support) to generate the compilation database instead of the current LD_PRELOAD technique<br>
 1. Migrate CodeChecker testing infrastructure to the current LLVM testing infrastructure<br>
<br>
(*) Most notably it extends the current tool set with the following features:<br>
 - stores the result of multiple large analysis run results efficiently (opposed to scan-build/scan-view static htmls)<br>
 - run multiple analyzers, currently Clang Static Analyzer and Clang-Tidy is supported<br>
 - dynamic web based defect viewer (instead of static html)<br>
 - a SQLite/PostgreSQL based defect storage & management (both are optional, results can be shown on standard output in quickcheck mode)<br>
 - update analyzer results only for modified files (depends on the build system)<br>
 - compare analysis results (new/resolved/unresolved bugs compared to a baseline)<br>
 - filter analysis results (checker name, severity, source file name ...)<br>
 - skip analysis in specific source directories if required<br>
 - suppression of false positives (in config file or in the source)<br>
 - Thrift API based server-client model for storing bugs and viewing results.<br>
 - It is possible to connect multiple bug viewers. Currently a web-based viewer and a command line viewer are provided.<br>
   (command line client is the recommended way to connect into Continuous Integration loops)<br>
<br>
Command line examples of usage can be found here: <a href="https://github.com/Ericsson/codechecker/blob/master/docs/usage.md" rel="noreferrer" target="_blank">https://github.com/Ericsson/codechecker/blob/master/docs/usage.md</a><br>
<br>
CodeChecker supports multiple use cases:<br>
 - Small projects/several source files (quick feedback)<br>
     No database is used, analysis results are shown in on the command line only<br>
 - Medium size projects (~500 files)<br>
     Results are stored in SQLite/PostgreSQL database and can be viewed from command line or web viewer clients<br>
 - Large size projects (>500 files)<br>
     Results are stored in PostgreSQL database and can be viewed from command line or web viewer clients<br>
<br>
There are currently discussions about analyzer tool support in multiple email threads:<br>
<br>
<a href="http://clang-developers.42468.n3.nabble.com/Idea-for-better-invoking-static-analysis-via-command-line-td4049670.html" rel="noreferrer" target="_blank">http://clang-developers.42468.n3.nabble.com/Idea-for-better-invoking-static-analysis-via-command-line-td4049670.html</a><br>
<a href="http://clang-developers.42468.n3.nabble.com/Proposal-Integrate-static-analysis-test-suites-td4048967.html" rel="noreferrer" target="_blank">http://clang-developers.42468.n3.nabble.com/Proposal-Integrate-static-analysis-test-suites-td4048967.html</a><br>
<br>
CodeChecker provides solutions for many problems discussed there:<br>
<br>
 - Problem: Different analyzers provide different output formats (Clang Static Analyzer provides plist/html/command line, Clang-tidy provides command line output only)<br>
   Solution: With Codechecker analyzer results from multiple analyzers can be viewed in a common way for developers or other tools for further result processing.<br>
<br>
 - Problem: CC environment variable overwriting by previous scan-build version (written in perl) is not always a good solution.<br>
   Solution: Compilation database is generated by CodeChecker (currently using the LD_PRELOAD technique, later with scan-build.py for OSX support).<br>
<br>
 - Problem: Analyzer has multiple command line arguments which could be changed by time, the end users should not be affected.<br>
   Solution: CodeChecker hides the clang analyzer specific options from the user. Many options are preconfigured. But forwarding options without modifications to the analyzers is supported.<br>
<br>
 - Problem: Understanding analyzer results might be harder if only command line results are available (currently generated static html sites do not scale and it is hard to manage).<br>
   Solution: Analysis steps can be viewed in command line with quickcheck or in the web viewer (dynamically generated based on the database), which can help to understand the analysis results.<br>
<br>
(**) 3rd party dependencies for various features:<br>
 - Python 2.7.5 (Python Software Foundation) - required to run CodeChecker<br>
 - SQLAlchemy (MIT) - Python SQL toolkit and Object Relational Mapper, for supporting multiple database backends<br>
 - Alembic (MIT) - required for database migration support which is only available for PostgreSQL database<br>
 - pg8000 (BSD) or psycopg2 (LGPL) - at least one database connector is required for PostgreSQL database support (both are supported)<br>
 - Thrift (Apache v2.0) - cross-language service building framework to handle data transfer for report storage and result viewer clients<br>
 - Codemirror (MIT) - view source code in the browser<br>
 - Jsplumb (community edition, MIT) - draw bug paths<br>
 - Marked (BSD) - view documentation for checkers written in markdown (generated dynamically)<br>
 - Dojotoolkit (BSD) - main framework for the web UI<br>
 - Highlightjs (BSD) - required for highlighting the source code<br>
<br>
For further information check out our GitHub (<a href="https://github.com/Ericsson/codechecker" rel="noreferrer" target="_blank">https://github.com/Ericsson/codechecker</a>) page.<br>
<br>
Best Regards,<br>
Gyorgy Orban<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div><br></div></div>