116 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Goal:
 | |
| -----
 | |
|   CppClean attempts to find problems in C++ source that slow development
 | |
|   in large code bases, for example various forms of unused code.
 | |
|   Unused code can be unused functions, methods, data members, types, etc
 | |
|   to unnecessary #include directives.  Unnecessary #includes can cause
 | |
|   considerable extra compiles increasing the edit-compile-run cycle.
 | |
| 
 | |
|   The project home page is:   http://code.google.com/p/cppclean/
 | |
| 
 | |
| 
 | |
| Features:
 | |
| ---------
 | |
|  * Find and print C++ language constructs: classes, methods, functions, etc.
 | |
|  * Find classes with virtual methods, no virtual destructor, and no bases
 | |
|  * Find global/static data that are potential problems when using threads
 | |
|  * Unnecessary forward class declarations
 | |
|  * Unnecessary function declarations
 | |
|  * Undeclared function definitions
 | |
|  * (planned) Find unnecessary header files #included
 | |
|    - No direct reference to anything in the header
 | |
|    - Header is unnecessary if classes were forward declared instead
 | |
|  * (planned) Source files that reference headers not directly #included,
 | |
|    ie, files that rely on a transitive #include from another header
 | |
|  * (planned) Unused members (private, protected, & public) methods and data
 | |
|  * (planned) Store AST in a SQL database so relationships can be queried
 | |
| 
 | |
| AST is Abstract Syntax Tree, a representation of parsed source code.
 | |
| http://en.wikipedia.org/wiki/Abstract_syntax_tree
 | |
| 
 | |
| 
 | |
| System Requirements:
 | |
| --------------------
 | |
|  * Python 2.4 or later (2.3 probably works too)
 | |
|  * Works on Windows (untested), Mac OS X, and Unix
 | |
| 
 | |
| 
 | |
| How to Run:
 | |
| -----------
 | |
|   For all examples, it is assumed that cppclean resides in a directory called
 | |
|   /cppclean.
 | |
| 
 | |
|   To print warnings for classes with virtual methods, no virtual destructor and
 | |
|   no base classes:
 | |
| 
 | |
|       /cppclean/run.sh nonvirtual_dtors.py file1.h file2.h file3.cc ...
 | |
| 
 | |
|   To print all the functions defined in header file(s):
 | |
| 
 | |
|       /cppclean/run.sh functions.py file1.h file2.h ...
 | |
| 
 | |
|   All the commands take multiple files on the command line.  Other programs
 | |
|   include: find_warnings, headers, methods, and types.  Some other programs
 | |
|   are available, but used primarily for debugging.
 | |
| 
 | |
|   run.sh is a simple wrapper that sets PYTHONPATH to /cppclean and then
 | |
|   runs the program in /cppclean/cpp/PROGRAM.py.  There is currently
 | |
|   no equivalent for Windows.  Contributions for a run.bat file
 | |
|   would be greatly appreciated.
 | |
| 
 | |
| 
 | |
| How to Configure:
 | |
| -----------------
 | |
|   You can add a siteheaders.py file in /cppclean/cpp to configure where
 | |
|   to look for other headers (typically -I options passed to a compiler).
 | |
|   Currently two values are supported:  _TRANSITIVE and GetIncludeDirs.
 | |
|   _TRANSITIVE should be set to a boolean value (True or False) indicating
 | |
|   whether to transitively process all header files.  The default is False.
 | |
| 
 | |
|   GetIncludeDirs is a function that takes a single argument and returns
 | |
|   a sequence of directories to include.  This can be a generator or
 | |
|   return a static list.
 | |
| 
 | |
|       def GetIncludeDirs(filename):
 | |
|           return ['/some/path/with/other/headers']
 | |
| 
 | |
|       # Here is a more complicated example.
 | |
|       def GetIncludeDirs(filename):
 | |
|           yield '/path1'
 | |
|           yield os.path.join('/path2', os.path.dirname(filename))
 | |
|           yield '/path3'
 | |
| 
 | |
| 
 | |
| How to Test:
 | |
| ------------
 | |
|   For all examples, it is assumed that cppclean resides in a directory called
 | |
|   /cppclean.  The tests require
 | |
| 
 | |
|   cd /cppclean
 | |
|   make test
 | |
|   # To generate expected results after a change:
 | |
|   make expected
 | |
| 
 | |
| 
 | |
| Current Status:
 | |
| ---------------
 | |
|   The parser works pretty well for header files, parsing about 99% of Google's
 | |
|   header files.  Anything which inspects structure of C++ source files should
 | |
|   work reasonably well.  Function bodies are not transformed to an AST,
 | |
|   but left as tokens.  Much work is still needed on finding unused header files
 | |
|   and storing an AST in a database.
 | |
| 
 | |
| 
 | |
| Non-goals:
 | |
| ----------
 | |
|  * Parsing all valid C++ source
 | |
|  * Handling invalid C++ source gracefully
 | |
|  * Compiling to machine code (or anything beyond an AST)
 | |
| 
 | |
| 
 | |
| Contact:
 | |
| --------
 | |
|   If you used cppclean, I would love to hear about your experiences
 | |
|   cppclean@googlegroups.com.  Even if you don't use cppclean, I'd like to
 | |
|   hear from you.  :-)  (You can contact me directly at:  nnorwitz@gmail.com)
 |