for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Solidifier\Visitors\DependencyInjection;
use Solidifier\Parser\Visitors\ContextualVisitor;
use Solidifier\Visitors\PreAnalyze\ObjectTypes;
use PhpParser\Node;
use PhpParser\Node\Param;
use PhpParser\Node\Name;
use Solidifier\Visitors\ObjectType;
use Solidifier\Defects\DependencyUponImplementation;
class InterfaceSegregation extends ContextualVisitor
{
private
$objectTypes,
Only declaring a single property per statement allows you to later on add doc comments more easily.
It is also recommended by PSR2, so it is a common style that many people expect.
$objectTypes
The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using
class A { var $property; }
the property is implicitly global.
To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.
$types;
public function __construct(ObjectTypes $objectTypes)
parent::__construct();
$this->objectTypes = $objectTypes;
$this->types = array();
This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.
To visualize
$a = "a"; $ab = "ab"; $abc = "abc";
will produce issues in the first and second line, while this second example
will produce no issues.
}
public function before(array $nodes)
$this->types = $this->objectTypes->getObjectTypes();
protected function enter(Node $node)
if($node instanceof Param)
if($this->currentMethod !== null)
if($node->type instanceof Name)
$this->checkIfTypeIsAnInterface($node, $node->type);
private function checkIfTypeIsAnInterface(Node $node, Name $type)
$name = (string) $type;
if($type->isFullyQualified() === false)
$name = $this->currentNamespace . '\\' . $name;
if(isset($this->types[$name]))
$objectTypeType= $this->types[$name];
This check looks for improperly formatted assignments.
Every assignment must have exactly one space before and one space after the equals operator.
To illustrate:
will have no issues, while
will report issues in lines 1 and 2.
if($objectTypeType !== ObjectType::TYPE_INTERFACE)
$defect = new DependencyUponImplementation(
$node,
$name,
$objectTypeType,
$this->currentMethod->name
);
$defect->setContext($this->currentMethod);
$this->dispatch($defect);
Only declaring a single property per statement allows you to later on add doc comments more easily.
It is also recommended by PSR2, so it is a common style that many people expect.