It collects the total Lines Of Code(loc), the None Comment Lines Of
Code(ncloc), the Comment Lines Of Code(cloc) and a approximated
Executable Lines Of Code(eloc) for files, classes, interfaces,
methods, properties and function.
The current implementation has a limitation, that affects inline comments.
The following code will suppress one line of code.
function foo() {
foobar(); // Bad behaviour...
}
The same rule applies to class methods. mapi, PLEASE, FIX THIS ISSUE.
/** * Aggregates the required metrics from the registered analyzers. * * @return array(string => mixed) * @throws \RuntimeException If one of the required analyzers isn't set. */ private function collectMetrics() { if ($this->coupling === null) { throw new \RuntimeException('Missing Coupling analyzer.'); } if ($this->cyclomaticComplexity === null) { throw new \RuntimeException('Missing Cyclomatic Complexity analyzer.'); } if ($this->inheritance === null) { throw new \RuntimeException('Missing Inheritance analyzer.'); } if ($this->nodeCount === null) { throw new \RuntimeException('Missing Node Count analyzer.'); } if ($this->nodeLoc === null) { throw new \RuntimeException('Missing Node LOC analyzer.'); } $coupling = $this->coupling->getProjectMetrics(); $cyclomatic = $this->cyclomaticComplexity->getProjectMetrics(); $inheritance = $this->inheritance->getProjectMetrics(); $nodeCount = $this->nodeCount->getProjectMetrics(); $nodeLoc = $this->nodeLoc->getProjectMetrics(); return array('cyclo' => $cyclomatic['ccn2'], 'loc' => $nodeLoc['eloc'], 'nom' => $nodeCount['nom'] + $nodeCount['nof'], 'noc' => $nodeCount['noc'], 'nop' => $nodeCount['nop'], 'ahh' => round($inheritance['ahh'], 3), 'andc' => round($inheritance['andc'], 3), 'fanout' => $coupling['fanout'], 'calls' => $coupling['calls']); }
/** * Creates a ready to use node loc analyzer. * * @return \PDepend\Metrics\Analyzer\NodeLocAnalyzer * @since 1.0.0 */ private function _createAnalyzer() { $analyzer = new NodeLocAnalyzer(); $analyzer->setCache($this->cache); return $analyzer; }