Skip to content

Commit

Permalink
Extract creating disallowed objects into respective factories
Browse files Browse the repository at this point in the history
  • Loading branch information
spaze committed Aug 2, 2021
1 parent c98448c commit 0e73b99
Show file tree
Hide file tree
Showing 33 changed files with 189 additions and 102 deletions.
3 changes: 3 additions & 0 deletions extension.neon
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,10 @@ parametersSchema:

services:
- Spaze\PHPStan\Rules\Disallowed\FileHelper
- Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory
- Spaze\PHPStan\Rules\Disallowed\DisallowedConstantFactory
- Spaze\PHPStan\Rules\Disallowed\DisallowedHelper
- Spaze\PHPStan\Rules\Disallowed\DisallowedNamespaceFactory
- Spaze\PHPStan\Rules\Disallowed\DisallowedNamespaceHelper
-
factory: Spaze\PHPStan\Rules\Disallowed\Usages\NamespaceUsages(forbiddenNamespaces: %disallowedNamespaces%)
Expand Down
6 changes: 4 additions & 2 deletions src/Calls/EchoCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use PHPStan\Rules\Rule;
use PHPStan\ShouldNotHappenException;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -29,15 +30,16 @@ class EchoCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
6 changes: 4 additions & 2 deletions src/Calls/EmptyCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use PHPStan\Rules\Rule;
use PHPStan\ShouldNotHappenException;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -29,15 +30,16 @@ class EmptyCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
6 changes: 4 additions & 2 deletions src/Calls/EvalCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use PHPStan\Rules\Rule;
use PHPStan\ShouldNotHappenException;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -29,15 +30,16 @@ class EvalCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
6 changes: 4 additions & 2 deletions src/Calls/ExitDieCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use PHPStan\Rules\Rule;
use PHPStan\ShouldNotHappenException;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -29,15 +30,16 @@ class ExitDieCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
6 changes: 4 additions & 2 deletions src/Calls/FunctionCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use PHPStan\Rules\Rule;
use PHPStan\ShouldNotHappenException;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -30,15 +31,16 @@ class FunctionCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
6 changes: 4 additions & 2 deletions src/Calls/MethodCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use PHPStan\Rules\Rule;
use PHPStan\ShouldNotHappenException;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -32,15 +33,16 @@ class MethodCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
6 changes: 4 additions & 2 deletions src/Calls/NewCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use PHPStan\ShouldNotHappenException;
use PHPStan\Type\ConstantScalarType;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -32,15 +33,16 @@ class NewCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
6 changes: 4 additions & 2 deletions src/Calls/PrintCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use PHPStan\Rules\Rule;
use PHPStan\ShouldNotHappenException;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -29,15 +30,16 @@ class PrintCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
6 changes: 4 additions & 2 deletions src/Calls/ShellExecCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use PHPStan\Rules\Rule;
use PHPStan\ShouldNotHappenException;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -33,15 +34,16 @@ class ShellExecCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
6 changes: 4 additions & 2 deletions src/Calls/StaticCalls.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use PHPStan\Rules\Rule;
use PHPStan\ShouldNotHappenException;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCall;
use Spaze\PHPStan\Rules\Disallowed\DisallowedCallFactory;
use Spaze\PHPStan\Rules\Disallowed\DisallowedHelper;

/**
Expand All @@ -32,15 +33,16 @@ class StaticCalls implements Rule

/**
* @param DisallowedHelper $disallowedHelper
* @param DisallowedCallFactory $disallowedCallFactory
* @param array $forbiddenCalls
* @phpstan-param ForbiddenCallsConfig $forbiddenCalls
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @throws ShouldNotHappenException
*/
public function __construct(DisallowedHelper $disallowedHelper, array $forbiddenCalls)
public function __construct(DisallowedHelper $disallowedHelper, DisallowedCallFactory $disallowedCallFactory, array $forbiddenCalls)
{
$this->disallowedHelper = $disallowedHelper;
$this->disallowedCalls = $this->disallowedHelper->createCallsFromConfig($forbiddenCalls);
$this->disallowedCalls = $disallowedCallFactory->createFromConfig($forbiddenCalls);
}


Expand Down
40 changes: 40 additions & 0 deletions src/DisallowedCallFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php
declare(strict_types = 1);

namespace Spaze\PHPStan\Rules\Disallowed;

use PHPStan\ShouldNotHappenException;

class DisallowedCallFactory
{

/**
* @param array $config
* @phpstan-param ForbiddenCallsConfig $config
* @noinspection PhpUndefinedClassInspection ForbiddenCallsConfig is a type alias defined in PHPStan config
* @return DisallowedCall[]
* @throws ShouldNotHappenException
*/
public function createFromConfig(array $config): array
{
$calls = [];
foreach ($config as $disallowedCall) {
$call = $disallowedCall['function'] ?? $disallowedCall['method'] ?? null;
if (!$call) {
throw new ShouldNotHappenException("Either 'method' or 'function' must be set in configuration items");
}
$disallowedCall = new DisallowedCall(
$call,
$disallowedCall['message'] ?? null,
$disallowedCall['allowIn'] ?? [],
$disallowedCall['allowParamsInAllowed'] ?? [],
$disallowedCall['allowParamsAnywhere'] ?? [],
$disallowedCall['allowExceptParams'] ?? [],
$disallowedCall['allowExceptCaseInsensitiveParams'] ?? []
);
$calls[$disallowedCall->getKey()] = $disallowedCall;
}
return array_values($calls);
}

}
35 changes: 35 additions & 0 deletions src/DisallowedConstantFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php
declare(strict_types = 1);

namespace Spaze\PHPStan\Rules\Disallowed;

use PHPStan\ShouldNotHappenException;

class DisallowedConstantFactory
{

/**
* @param array<array{class?:string, constant?:string, message?:string, allowIn?:string[]}> $config
* @return DisallowedConstant[]
* @throws ShouldNotHappenException
*/
public function createFromConfig(array $config): array
{
$constants = [];
foreach ($config as $disallowedConstant) {
$constant = $disallowedConstant['constant'] ?? null;
if (!$constant) {
throw new ShouldNotHappenException("'constant' must be set in configuration items");
}
$class = $disallowedConstant['class'] ?? null;
$disallowedConstant = new DisallowedConstant(
$class ? "{$class}::{$constant}" : $constant,
$disallowedConstant['message'] ?? null,
$disallowedConstant['allowIn'] ?? []
);
$constants[$disallowedConstant->getConstant()] = $disallowedConstant;
}
return array_values($constants);
}

}
Loading

0 comments on commit 0e73b99

Please sign in to comment.