Spaces:
No application file
No application file
namespace Mautic\CodingStandards\PhpCSFixer; | |
use PhpCsFixer\AbstractFixer; | |
use PhpCsFixer\FixerDefinition\CodeSample; | |
use PhpCsFixer\FixerDefinition\FixerDefinition; | |
use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; | |
use PhpCsFixer\StdinFileInfo; | |
use PhpCsFixer\Tokenizer\Tokens; | |
class NoTablePrefixDefinitionInTestsFixer extends AbstractFixer | |
{ | |
public function getName(): string | |
{ | |
return sprintf('Mautic/%s', parent::getName()); | |
} | |
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void | |
{ | |
$matches = $tokens->findSequence([[T_STRING, 'define'], '(', [T_CONSTANT_ENCAPSED_STRING, "'MAUTIC_TABLE_PREFIX'"]]); | |
if ($matches) { | |
$begin_defined = $tokens->getPrevTokenOfKind(array_key_first($matches), [[T_STRING, 'defined']]); | |
$begin_if = $tokens->getPrevTokenOfKind($begin_defined, [[T_IF, 'if']]); | |
if ($begin_defined) { | |
if ((int) $begin_if >= $begin_defined - 4) { | |
$begin = $begin_if; | |
$end_token = ['}']; | |
} else { | |
$begin = $begin_defined; | |
$end_token = [';']; | |
} | |
$end = $tokens->getNextTokenOfKind(array_key_last($matches), $end_token); | |
foreach (range($begin, $end) as $id) { | |
$tokens->clearAt($id); | |
} | |
$tokens->removeLeadingWhitespace($end); | |
} | |
} | |
} | |
public function isCandidate(Tokens $tokens): bool | |
{ | |
return $tokens->isTokenKindFound(T_CONSTANT_ENCAPSED_STRING); | |
} | |
public function getDefinition(): FixerDefinitionInterface | |
{ | |
return new FixerDefinition( | |
'Test should not define the `MAUTIC_TABLE_PREFIX` const.', | |
[new CodeSample("<?php | |
class ExampleTest { | |
public function setUp(): void | |
{ | |
defined('MAUTIC_TABLE_PREFIX') or define('MAUTIC_TABLE_PREFIX', ''); | |
} | |
} | |
"), | |
new CodeSample("<?php | |
class ExampleTest { | |
public function setUp(): void | |
{ | |
if (!defined('MAUTIC_TABLE_PREFIX')) { | |
define('MAUTIC_TABLE_PREFIX', ''); | |
} | |
} | |
} | |
"), ] | |
); | |
} | |
public function supports(\SplFileInfo $file): bool | |
{ | |
return $file instanceof StdinFileInfo || preg_match('/\/Tests\/.*Test\.php$/', $file->getPathname()); | |
} | |
/** | |
* run before the whitespace cleanup. | |
*/ | |
public function getPriority(): int | |
{ | |
return 1; | |
} | |
} | |