# Ideas https://github.com/metrixplusplus/metrixplusplus/blob/master/IDEAS.md This file captures all the ideas sparked in the past in relation to this project. ## New metrics - Number of casts to void - Count good stuff: const, pure, rodata, static - Numver of dead symbols, files, functions, directories - Detect and count source code within comments and #if 0 - Number of lines suppresed from static analysis, compiler warnings (useful when analysis is separated from new/modified code and untouched code) - check presense of doxygen comments before a region - Number of warnings by unused code detector - number of breaks per case statement (motivation is to enforce break per case) - Number of dead http links in strings and comments - count not empty (pattern based) comments (to evaluate quality of comments to some extent.?) - analysis of names, fucntions include english verbs, object under operation, etc., compliancy with naming conventions - number of throwing exceptions or consider how it is linked with multiple returns and cyclomatic complexity - number of violations to coding style (source from external tool?) - Number of violations to coding standards (against external tool?) - count declaration without initialisation - count default:s per switches (to enforce default case) - inheritance deepness, number of children, number of parent - number of using 'using namespace' statements - volume of changes in commit - size of corresponding *.o file - number of global variables (or extern symbols from binaries?) - number of valgrind warnings - count noname structs, namespaces, enums, classes - Number of components per whole scanned system, size of a component - number of logging statements - number of asserts metric - number of returns or span time between returns, code indent level in case of mutiple returns - fan-in/fan-out (input/output asignments and flows) metric - Number of basic blocks metric - number of variable-members in public headers - number of warnings by static analysis tool - number of warnings by compiler - Max line length metric - radio of length of name of identifier to span time (more spanning variables should be named longer) - Number of changes metric (frequently changing places may require attention to revision approaches) - Number of magic strings metric - Span time, life time metrics - Number of delete, new (malloc/free) operators metric (to enforce none and use smart pointers) - Arguments per function metric - Preprocessor statements metric (differentiate conditional and non-conditional) - Number of statements metric - Simple Coupling metric (number of external identifiers used, number of times used by others) - Code duplication metric (develop own code duplication detector?) - Code coverage metric (integrate with other tools?) - Add a way to collect usage data (Need some sort of feedback on usage trends. Datafile properties would be enough to feedback.) - Exclude header files guards from std.code.lines:preprocessor metric. (To minimise number of false-positives for the metric.) - Maximum number of pointer dereferencing per statement (Ref: Limit the use of pointers. Use no more than two levels of dereferencing per expression. http://spinroot.com/p10/rule9.html) - Average number of assertions per function length (Ref: Use minimally two assertions per function on average. http://spinroot.com/p10/rule5.html) - Metric for gotos, setjmp, longjmp (Inspired by: http://spinroot.com/p10/rule1.html) ## Other - Add default useful views inside the db file. It turned out people browse DB file directly and want to have useful views available when DB file is opened. - Web dashboard to browse trends. - Support for other languages (Python, Matlabm Lua, sh, Ruby, etc..) - Performance profile the tool (Need a way to enable cProfile module via configuration. Plus, need a measurement of time spent per plugin.) - Handle kill signal and kill child process and release database file