Laravel 5.6 updates

Travis config update

Removed HHVM script as Laravel no longer support HHVM after releasing 5.3
This commit is contained in:
Manish Verma
2018-08-06 20:08:55 +05:30
parent 126fbb0255
commit 1ac0f42a58
2464 changed files with 65239 additions and 46734 deletions

View File

@@ -10,12 +10,10 @@
namespace SebastianBergmann\CodeCoverage\Node;
use SebastianBergmann\CodeCoverage\InvalidArgumentException;
/**
* Represents a file in the code coverage information tree.
*/
class File extends AbstractNode
final class File extends AbstractNode
{
/**
* @var array
@@ -60,7 +58,7 @@ class File extends AbstractNode
/**
* @var int
*/
private $numClasses = null;
private $numClasses;
/**
* @var int
@@ -70,7 +68,7 @@ class File extends AbstractNode
/**
* @var int
*/
private $numTraits = null;
private $numTraits;
/**
* @var int
@@ -80,27 +78,17 @@ class File extends AbstractNode
/**
* @var int
*/
private $numMethods = null;
private $numMethods;
/**
* @var int
*/
private $numTestedMethods = null;
private $numTestedMethods;
/**
* @var int
*/
private $numTestedFunctions = null;
/**
* @var array
*/
private $startLines = [];
/**
* @var array
*/
private $endLines = [];
private $numTestedFunctions;
/**
* @var bool
@@ -108,25 +96,12 @@ class File extends AbstractNode
private $cacheTokens;
/**
* Constructor.
*
* @param string $name
* @param AbstractNode $parent
* @param array $coverageData
* @param array $testData
* @param bool $cacheTokens
*
* @throws InvalidArgumentException
* @var array
*/
public function __construct($name, AbstractNode $parent, array $coverageData, array $testData, $cacheTokens)
{
if (!\is_bool($cacheTokens)) {
throw InvalidArgumentException::create(
1,
'boolean'
);
}
private $codeUnitsByLine = [];
public function __construct(string $name, AbstractNode $parent, array $coverageData, array $testData, bool $cacheTokens)
{
parent::__construct($name, $parent);
$this->coverageData = $coverageData;
@@ -138,100 +113,80 @@ class File extends AbstractNode
/**
* Returns the number of files in/under this node.
*
* @return int
*/
public function count()
public function count(): int
{
return 1;
}
/**
* Returns the code coverage data of this node.
*
* @return array
*/
public function getCoverageData()
public function getCoverageData(): array
{
return $this->coverageData;
}
/**
* Returns the test data of this node.
*
* @return array
*/
public function getTestData()
public function getTestData(): array
{
return $this->testData;
}
/**
* Returns the classes of this node.
*
* @return array
*/
public function getClasses()
public function getClasses(): array
{
return $this->classes;
}
/**
* Returns the traits of this node.
*
* @return array
*/
public function getTraits()
public function getTraits(): array
{
return $this->traits;
}
/**
* Returns the functions of this node.
*
* @return array
*/
public function getFunctions()
public function getFunctions(): array
{
return $this->functions;
}
/**
* Returns the LOC/CLOC/NCLOC of this node.
*
* @return array
*/
public function getLinesOfCode()
public function getLinesOfCode(): array
{
return $this->linesOfCode;
}
/**
* Returns the number of executable lines.
*
* @return int
*/
public function getNumExecutableLines()
public function getNumExecutableLines(): int
{
return $this->numExecutableLines;
}
/**
* Returns the number of executed lines.
*
* @return int
*/
public function getNumExecutedLines()
public function getNumExecutedLines(): int
{
return $this->numExecutedLines;
}
/**
* Returns the number of classes.
*
* @return int
*/
public function getNumClasses()
public function getNumClasses(): int
{
if ($this->numClasses === null) {
$this->numClasses = 0;
@@ -252,20 +207,16 @@ class File extends AbstractNode
/**
* Returns the number of tested classes.
*
* @return int
*/
public function getNumTestedClasses()
public function getNumTestedClasses(): int
{
return $this->numTestedClasses;
}
/**
* Returns the number of traits.
*
* @return int
*/
public function getNumTraits()
public function getNumTraits(): int
{
if ($this->numTraits === null) {
$this->numTraits = 0;
@@ -286,20 +237,16 @@ class File extends AbstractNode
/**
* Returns the number of tested traits.
*
* @return int
*/
public function getNumTestedTraits()
public function getNumTestedTraits(): int
{
return $this->numTestedTraits;
}
/**
* Returns the number of methods.
*
* @return int
*/
public function getNumMethods()
public function getNumMethods(): int
{
if ($this->numMethods === null) {
$this->numMethods = 0;
@@ -326,10 +273,8 @@ class File extends AbstractNode
/**
* Returns the number of tested methods.
*
* @return int
*/
public function getNumTestedMethods()
public function getNumTestedMethods(): int
{
if ($this->numTestedMethods === null) {
$this->numTestedMethods = 0;
@@ -337,7 +282,7 @@ class File extends AbstractNode
foreach ($this->classes as $class) {
foreach ($class['methods'] as $method) {
if ($method['executableLines'] > 0 &&
$method['coverage'] == 100) {
$method['coverage'] === 100) {
$this->numTestedMethods++;
}
}
@@ -346,7 +291,7 @@ class File extends AbstractNode
foreach ($this->traits as $trait) {
foreach ($trait['methods'] as $method) {
if ($method['executableLines'] > 0 &&
$method['coverage'] == 100) {
$method['coverage'] === 100) {
$this->numTestedMethods++;
}
}
@@ -358,27 +303,23 @@ class File extends AbstractNode
/**
* Returns the number of functions.
*
* @return int
*/
public function getNumFunctions()
public function getNumFunctions(): int
{
return \count($this->functions);
}
/**
* Returns the number of tested functions.
*
* @return int
*/
public function getNumTestedFunctions()
public function getNumTestedFunctions(): int
{
if ($this->numTestedFunctions === null) {
$this->numTestedFunctions = 0;
foreach ($this->functions as $function) {
if ($function['executableLines'] > 0 &&
$function['coverage'] == 100) {
$function['coverage'] === 100) {
$this->numTestedFunctions++;
}
}
@@ -387,119 +328,45 @@ class File extends AbstractNode
return $this->numTestedFunctions;
}
/**
* Calculates coverage statistics for the file.
*/
protected function calculateStatistics()
private function calculateStatistics(): void
{
$classStack = $functionStack = [];
if ($this->cacheTokens) {
$tokens = \PHP_Token_Stream_CachingFactory::get($this->getPath());
} else {
$tokens = new \PHP_Token_Stream($this->getPath());
}
$this->linesOfCode = $tokens->getLinesOfCode();
foreach (\range(1, $this->linesOfCode['loc']) as $lineNumber) {
$this->codeUnitsByLine[$lineNumber] = [];
}
$this->processClasses($tokens);
$this->processTraits($tokens);
$this->processFunctions($tokens);
$this->linesOfCode = $tokens->getLinesOfCode();
unset($tokens);
for ($lineNumber = 1; $lineNumber <= $this->linesOfCode['loc']; $lineNumber++) {
if (isset($this->startLines[$lineNumber])) {
// Start line of a class.
if (isset($this->startLines[$lineNumber]['className'])) {
if (isset($currentClass)) {
$classStack[] = &$currentClass;
}
$currentClass = &$this->startLines[$lineNumber];
} // Start line of a trait.
elseif (isset($this->startLines[$lineNumber]['traitName'])) {
$currentTrait = &$this->startLines[$lineNumber];
} // Start line of a method.
elseif (isset($this->startLines[$lineNumber]['methodName'])) {
$currentMethod = &$this->startLines[$lineNumber];
} // Start line of a function.
elseif (isset($this->startLines[$lineNumber]['functionName'])) {
if (isset($currentFunction)) {
$functionStack[] = &$currentFunction;
}
$currentFunction = &$this->startLines[$lineNumber];
}
}
foreach (\range(1, $this->linesOfCode['loc']) as $lineNumber) {
if (isset($this->coverageData[$lineNumber])) {
if (isset($currentClass)) {
$currentClass['executableLines']++;
foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) {
$codeUnit['executableLines']++;
}
if (isset($currentTrait)) {
$currentTrait['executableLines']++;
}
if (isset($currentMethod)) {
$currentMethod['executableLines']++;
}
if (isset($currentFunction)) {
$currentFunction['executableLines']++;
}
unset($codeUnit);
$this->numExecutableLines++;
if (\count($this->coverageData[$lineNumber]) > 0) {
if (isset($currentClass)) {
$currentClass['executedLines']++;
foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) {
$codeUnit['executedLines']++;
}
if (isset($currentTrait)) {
$currentTrait['executedLines']++;
}
if (isset($currentMethod)) {
$currentMethod['executedLines']++;
}
if (isset($currentFunction)) {
$currentFunction['executedLines']++;
}
unset($codeUnit);
$this->numExecutedLines++;
}
}
if (isset($this->endLines[$lineNumber])) {
// End line of a class.
if (isset($this->endLines[$lineNumber]['className'])) {
unset($currentClass);
if ($classStack) {
\end($classStack);
$key = \key($classStack);
$currentClass = &$classStack[$key];
unset($classStack[$key]);
}
} // End line of a trait.
elseif (isset($this->endLines[$lineNumber]['traitName'])) {
unset($currentTrait);
} // End line of a method.
elseif (isset($this->endLines[$lineNumber]['methodName'])) {
unset($currentMethod);
} // End line of a function.
elseif (isset($this->endLines[$lineNumber]['functionName'])) {
unset($currentFunction);
if ($functionStack) {
\end($functionStack);
$key = \key($functionStack);
$currentFunction = &$functionStack[$key];
unset($functionStack[$key]);
}
}
}
}
foreach ($this->traits as &$trait) {
@@ -519,11 +386,13 @@ class File extends AbstractNode
$trait['ccn'] += $method['ccn'];
}
unset($method);
if ($trait['executableLines'] > 0) {
$trait['coverage'] = ($trait['executedLines'] /
$trait['executableLines']) * 100;
if ($trait['coverage'] == 100) {
if ($trait['coverage'] === 100) {
$this->numTestedClasses++;
}
} else {
@@ -536,6 +405,8 @@ class File extends AbstractNode
);
}
unset($trait);
foreach ($this->classes as &$class) {
foreach ($class['methods'] as &$method) {
if ($method['executableLines'] > 0) {
@@ -553,11 +424,13 @@ class File extends AbstractNode
$class['ccn'] += $method['ccn'];
}
unset($method);
if ($class['executableLines'] > 0) {
$class['coverage'] = ($class['executedLines'] /
$class['executableLines']) * 100;
if ($class['coverage'] == 100) {
if ($class['coverage'] === 100) {
$this->numTestedClasses++;
}
} else {
@@ -570,6 +443,8 @@ class File extends AbstractNode
);
}
unset($class);
foreach ($this->functions as &$function) {
if ($function['executableLines'] > 0) {
$function['coverage'] = ($function['executedLines'] /
@@ -578,7 +453,7 @@ class File extends AbstractNode
$function['coverage'] = 100;
}
if ($function['coverage'] == 100) {
if ($function['coverage'] === 100) {
$this->numTestedFunctions++;
}
@@ -589,17 +464,16 @@ class File extends AbstractNode
}
}
/**
* @param \PHP_Token_Stream $tokens
*/
protected function processClasses(\PHP_Token_Stream $tokens)
private function processClasses(\PHP_Token_Stream $tokens): void
{
$classes = $tokens->getClasses();
unset($tokens);
$link = $this->getId() . '.html#';
$link = $this->getId() . '.html#';
foreach ($classes as $className => $class) {
if (\strpos($className, 'anonymous') === 0) {
continue;
}
if (!empty($class['package']['namespace'])) {
$className = $class['package']['namespace'] . '\\' . $className;
}
@@ -617,27 +491,27 @@ class File extends AbstractNode
'link' => $link . $class['startLine']
];
$this->startLines[$class['startLine']] = &$this->classes[$className];
$this->endLines[$class['endLine']] = &$this->classes[$className];
foreach ($class['methods'] as $methodName => $method) {
if (\strpos($methodName, 'anonymous') === 0) {
continue;
}
$this->classes[$className]['methods'][$methodName] = $this->newMethod($methodName, $method, $link);
$this->startLines[$method['startLine']] = &$this->classes[$className]['methods'][$methodName];
$this->endLines[$method['endLine']] = &$this->classes[$className]['methods'][$methodName];
foreach (\range($method['startLine'], $method['endLine']) as $lineNumber) {
$this->codeUnitsByLine[$lineNumber] = [
&$this->classes[$className],
&$this->classes[$className]['methods'][$methodName]
];
}
}
}
}
/**
* @param \PHP_Token_Stream $tokens
*/
protected function processTraits(\PHP_Token_Stream $tokens)
private function processTraits(\PHP_Token_Stream $tokens): void
{
$traits = $tokens->getTraits();
unset($tokens);
$link = $this->getId() . '.html#';
$link = $this->getId() . '.html#';
foreach ($traits as $traitName => $trait) {
$this->traits[$traitName] = [
@@ -653,29 +527,33 @@ class File extends AbstractNode
'link' => $link . $trait['startLine']
];
$this->startLines[$trait['startLine']] = &$this->traits[$traitName];
$this->endLines[$trait['endLine']] = &$this->traits[$traitName];
foreach ($trait['methods'] as $methodName => $method) {
if (\strpos($methodName, 'anonymous') === 0) {
continue;
}
$this->traits[$traitName]['methods'][$methodName] = $this->newMethod($methodName, $method, $link);
$this->startLines[$method['startLine']] = &$this->traits[$traitName]['methods'][$methodName];
$this->endLines[$method['endLine']] = &$this->traits[$traitName]['methods'][$methodName];
foreach (\range($method['startLine'], $method['endLine']) as $lineNumber) {
$this->codeUnitsByLine[$lineNumber] = [
&$this->traits[$traitName],
&$this->traits[$traitName]['methods'][$methodName]
];
}
}
}
}
/**
* @param \PHP_Token_Stream $tokens
*/
protected function processFunctions(\PHP_Token_Stream $tokens)
private function processFunctions(\PHP_Token_Stream $tokens): void
{
$functions = $tokens->getFunctions();
unset($tokens);
$link = $this->getId() . '.html#';
$link = $this->getId() . '.html#';
foreach ($functions as $functionName => $function) {
if (\strpos($functionName, 'anonymous') === 0) {
continue;
}
$this->functions[$functionName] = [
'functionName' => $functionName,
'signature' => $function['signature'],
@@ -688,24 +566,16 @@ class File extends AbstractNode
'link' => $link . $function['startLine']
];
$this->startLines[$function['startLine']] = &$this->functions[$functionName];
$this->endLines[$function['endLine']] = &$this->functions[$functionName];
foreach (\range($function['startLine'], $function['endLine']) as $lineNumber) {
$this->codeUnitsByLine[$lineNumber] = [&$this->functions[$functionName]];
}
}
}
/**
* Calculates the Change Risk Anti-Patterns (CRAP) index for a unit of code
* based on its cyclomatic complexity and percentage of code coverage.
*
* @param int $ccn
* @param float $coverage
*
* @return string
*/
protected function crap($ccn, $coverage)
private function crap(int $ccn, float $coverage): string
{
if ($coverage == 0) {
return (string) (\pow($ccn, 2) + $ccn);
if ($coverage === 0) {
return (string) ($ccn ** 2 + $ccn);
}
if ($coverage >= 95) {
@@ -714,18 +584,11 @@ class File extends AbstractNode
return \sprintf(
'%01.2F',
\pow($ccn, 2) * \pow(1 - $coverage / 100, 3) + $ccn
$ccn ** 2 * (1 - $coverage / 100) ** 3 + $ccn
);
}
/**
* @param string $methodName
* @param array $method
* @param string $link
*
* @return array
*/
private function newMethod($methodName, array $method, $link)
private function newMethod(string $methodName, array $method, string $link): array
{
return [
'methodName' => $methodName,