1<?xml version="1.0" ?> 2<notes> 3<em>CScout</em> is a source code analyzer and refactoring browser for 4collections of C programs. 5It can process workspaces of multiple projects (we define a project 6as a collection of C source files that are linked together) 7mapping the complexity introduced 8by the C preprocessor back into the original C source code files. 9<em>CScout</em> takes advantage of modern hardware advances (fast processors 10and large memory capacities) to analyze C source code beyond the level 11of detail and accuracy provided by current compilers, linkers, and 12other source code analyzers. 13The analysis CScout performs takes into account the identifier scopes 14introduced by the C preprocessor and the C language proper scopes and 15namespaces. 16<p> 17<em>CScout</em> has already been applied on 18<ul> 19<li> Projects of tens of thousands of lines, 20like the apache web server. 21<li> Projects above a million lines of code, 22like the Linux (4.3MLOC), the FreeBSD (4.7MLOC) and the Windows Research 23(0.9MLOC) kernels 24<li> The complete 25<a href="http://cm.bell-labs.com/who/bwk/index.html">one true awk</a> 26source code (6600 lines - including a yacc grammar), 27without modifying a single byte of the source code. 28</ul> 29<p> 30CScout as a source code analyzer can: 31<ul> 32<li> annotate source code with hyperlinks to each identifier 33<li> list files that would be affected by changing a specific identifier 34<li> determine whether a given identifier belongs to the application 35or to an external library based on the accessibility and location of the 36header files that declare or define it 37<li> locate unused identifiers taking into account inter-project 38dependencies 39<li> create static call graphs that include the use of function-like macros 40<li> perform queries for identifiers based on their namespace, 41scope, reachability, and regular expressions of their name and the 42filename(s) they are found in, 43<li> perform queries for files, based on their metrics, or properties 44of the identifiers they contain 45<li> perform queries for functions and function like-macros, 46based on their metrics, their type and scope, the names of callers and callees, 47and the files they are declared in 48<li> monitor and report superfluously included header files 49<li> visually identify parts of files that were skipped during 50preprocessing 51<li> provide accurate metrics on functions, identifiers, and files 52</ul> 53 54<p> 55More importantly, 56<em>CScout</em> helps you in refactoring code by 57identifying dead objects to remove, and 58automatically performing accurate global <em>rename identifier</em> 59refactorings, 60and various function argument refactorings. 61<em>CScout</em> will automatically rename identifiers 62<ul> 63<li> taking into account the namespace of each identifier: a renaming of 64a structure tag, member, or a statement label will not affect variables 65with the same name 66<li> respecting the scope of the renamed identifier: a rename can affect 67multiple files, or variables within a single block, exactly matching 68the semantics the C compiler would enforce 69<li> across multiple projects when the same identifier is defined in 70common shared include files 71<li> occuring in macro bodies and <em>parts</em> of other identifiers, 72when these are created through the C preprocessor's token concatenation 73feature 74</ul> 75Furthermore, <em>CScout</em> allows you to refactor the arguments 76of functions and macros, introducing new arguments, deleting existing ones, 77or changing their order. 78</notes> 79