Release Notes



  • Update LLVM/Clang to 3.3
  • Use clang_rt.profile library for testing
  • Apply Hamcrest concept in all test cases
  • Update build system settings to support more unix-list platforms, including FreeBSD
  • Redesign the RuleBase interface and introduce RuleCarrier
  • Redesign the RuleConfiguration by using std::map
  • Improvement to RuleCarrier by following Law of Demeter


  • Add references
  • Add unit tests for existing metrics
  • Take care of extern “C”


  • Introduce AST matcher rules
  • Add references
  • Improvement to StdUtil
  • Rule scaffolding
  • Reporter scaffolding
  • Reconsider priorities for certain rules
  • Suppress warnings for
    • unused method parameters
    • unused local variables
    • high cyclomatic complexity
    • high npath complexity
    • high ncss value
  • Improvement to Existing Rules
    • support __objc_bool in related rules
    • improvement to redundant conditional operator rule
    • improvement to parameter reassignment rule
    • improvement to unused local variable rule
    • improvement to dead code rule
    • improvement to double negative rule
    • Fix #10 - CollapsableIfStatementsRule false positives
    • Fix #16 - MissingBreakInSwitchStatementRule false positive
    • Fix #34 - False unused local variable warning with try/catch
  • New Rules
    • misplaced null/nill check
    • broken null/nil check
    • redundant nil check
    • short variable name
    • long variable name
    • too many fields
    • too many methods
    • too many parameters
    • avoid branching statement as last in loop
    • jumbled incrementer
    • objective-c number literals
    • objective-c boxed literals
    • objective-c container literals
    • objective-c object subscripting


  • Extract reporters module from core module
  • Add PMDReporter
  • Add XMLReporter
  • Add JSONReporter


  • Extract ClangTooling related frontend code to this module from core module


  • Support more major compilers
  • Parse xcodebuild log for CURRENT_WORKING_FOLDER
  • Push source out of CURRENT_WORKING_FOLDER to the bottom of the list
  • Support custom xocdebuild log path
  • Add support to certain projects with white space in their project name or file path


  • Automatically delete all builds when buildRelease
  • Extract testAll from ci
  • Extract buildAll from ci



  • Update LLVM/Clang to 3.2, and switch from libClang to libTooling
  • Completely redesign the project
    • Use libTooling for AST generation
    • Add metrics system
    • Better rule system
    • Introduce results analysis
    • Better reporters system
  • New command line interface
  • HTML report has a better UI design


  • Add NCSS metric
  • Add statement depth metric


  • Add BitwiseOperatorInConditionalRule
  • Add BrokenOddnessCheckRule
  • Add CollapsibleIfStatementsRule
  • Add ConstantConditionalOperatorRule
  • Add DoubleNegativeRule
  • Add ForLoopShouldBeWhileLoopRule
  • Add GotoStatementRule
  • Add MultipleUnaryOperatorRule
  • Add ReturnFromFinallyBlockRule
  • Add ThrowExceptionFromFinallyBlockRule
  • Add DefaultLabelNotLastInSwitchStatementRule
  • Add InvertedLogicRule
  • Add MissingBreakInSwitchStatementRule
  • Add NonCaseLabelInSwitchStatementRule
  • Add ParameterReassignmentRule
  • Add SwitchStatementsShouldHaveDefaultRule
  • Add TooFewBranchesInSwitchStatementRule
  • Add EmptyCatchStatementRule
  • Add EmptyDoWhileStatementRule
  • Add EmptyElseBlockRule
  • Add EmptyFinallyStatementRule
  • Add EmptyForStatementRule
  • Add EmptySwitchStatementRule
  • Add EmptyTryStatementRule
  • Add EmptyWhileStatementRule
  • Add RedundantConditionalOperatorRule
  • Add UnnecessaryElseStatementRule
  • Add UselessParenthesesRule
  • Add LongClassRule
  • Add LongLineRule
  • Add NcssMethodCountRule
  • Add NestedBlockDepthRule


  • Initial release


  • Initial release


  • Added benchmark, use -stats to show
  • Smarter tree traversing policy, change traversing policy based on current node type
  • Extract Driver logic from main.cpp to separate class
  • Load clang header files by default, there is no need to put it into the header search path manually
  • Enable automatic reference counting (ARC) with -fobjc-arc flag
  • Automated PackageMaker for pkg installer generation
  • Code formatting


  • Add description to violations


  • Refactoring: aggressively extract methods
  • Update LLVM/Clang to 3.1svn


  • Command line options to configure input/output, compiler’s behaviors, rules’ thresholds and report formats
  • HTML report supported
  • Rule configurations supported
  • Fixed the false-positive for parameters in a block implementation


  • Check AST nodes which are declared within the current file being inspected
  • Separate unused method parameter rule from unused local variable rule
  • For unused local variable, ignore global variables that is not in a block
  • Use clang_visitChildrenWithBlock to make the code cleaner and easier to understand
  • Fix the false positive for unused method parameter in a pure C function
  • Fix the crash when there is no rule dylib in the folder specified
  • Use lcov to replace zcov as code coverage generation framework


  • Treat warnings as violations
  • Adopt new CursorExtractionUtil using awesome __block feature to replace old TestCursorUtil
  • New build configuration for libclang
  • New rules
    • Long parameter list
    • Long method
    • Unreachable code
    • Constant if statement
    • If statement with negated condition
    • Redundant if statement
    • Redundant local variable
    • NPath complexity


  • Initial academic research release