mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-27 05:03:31 +00:00
fix spacing of data provider
This commit is contained in:
parent
3e284b0511
commit
9c92126265
|
@ -1,45 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Rector\BetterPhpDocParser\Printer;
|
|
||||||
|
|
||||||
use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
|
|
||||||
use Rector\AttributeAwarePhpDoc\Ast\PhpDoc\AttributeAwareParamTagValueNode;
|
|
||||||
|
|
||||||
final class PatternFactory
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private const TYPE_PATTERN = '[\w\\\\\[\]\(\)\{\}\:\?\$\-\,\&|<>\s]+';
|
|
||||||
|
|
||||||
public function createSpacePattern(PhpDocTagNode $phpDocTagNode): string
|
|
||||||
{
|
|
||||||
$spacePattern = preg_quote($phpDocTagNode->name, '#') . '(?<space>\s+)';
|
|
||||||
|
|
||||||
// we have to match exact @param space, in case of multiple @param s
|
|
||||||
if ($phpDocTagNode->value instanceof AttributeAwareParamTagValueNode) {
|
|
||||||
/** @var AttributeAwareParamTagValueNode $paramTagValueNode */
|
|
||||||
$paramTagValueNode = $phpDocTagNode->value;
|
|
||||||
|
|
||||||
// type could be changed, so better keep it here
|
|
||||||
$spacePattern .= self::TYPE_PATTERN;
|
|
||||||
|
|
||||||
if ($paramTagValueNode->parameterName !== '') {
|
|
||||||
$spacePattern .= '\s+';
|
|
||||||
if ($paramTagValueNode->isReference()) {
|
|
||||||
$spacePattern .= '&';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($paramTagValueNode->isVariadic) {
|
|
||||||
$spacePattern .= '...';
|
|
||||||
}
|
|
||||||
|
|
||||||
$spacePattern .= preg_quote($paramTagValueNode->parameterName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return '#' . $spacePattern . '#';
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -64,18 +64,18 @@ final class PhpDocInfoPrinter
|
||||||
private $multilineSpaceFormatPreserver;
|
private $multilineSpaceFormatPreserver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var PatternFactory
|
* @var SpacePatternFactory
|
||||||
*/
|
*/
|
||||||
private $patternFactory;
|
private $spacePatternFactory;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
OriginalSpacingRestorer $originalSpacingRestorer,
|
OriginalSpacingRestorer $originalSpacingRestorer,
|
||||||
MultilineSpaceFormatPreserver $multilineSpaceFormatPreserver,
|
MultilineSpaceFormatPreserver $multilineSpaceFormatPreserver,
|
||||||
PatternFactory $patternFactory
|
SpacePatternFactory $spacePatternFactory
|
||||||
) {
|
) {
|
||||||
$this->originalSpacingRestorer = $originalSpacingRestorer;
|
$this->originalSpacingRestorer = $originalSpacingRestorer;
|
||||||
$this->multilineSpaceFormatPreserver = $multilineSpaceFormatPreserver;
|
$this->multilineSpaceFormatPreserver = $multilineSpaceFormatPreserver;
|
||||||
$this->patternFactory = $patternFactory;
|
$this->spacePatternFactory = $spacePatternFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -356,7 +356,7 @@ final class PhpDocInfoPrinter
|
||||||
private function resolveTagSpaceSeparator(PhpDocTagNode $phpDocTagNode): string
|
private function resolveTagSpaceSeparator(PhpDocTagNode $phpDocTagNode): string
|
||||||
{
|
{
|
||||||
$originalContent = $this->phpDocInfo->getOriginalContent();
|
$originalContent = $this->phpDocInfo->getOriginalContent();
|
||||||
$spacePattern = $this->patternFactory->createSpacePattern($phpDocTagNode);
|
$spacePattern = $this->spacePatternFactory->createSpacePattern($phpDocTagNode);
|
||||||
|
|
||||||
$matches = Strings::match($originalContent, $spacePattern);
|
$matches = Strings::match($originalContent, $spacePattern);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Rector\BetterPhpDocParser\Printer;
|
||||||
|
|
||||||
|
use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
|
||||||
|
use Rector\AttributeAwarePhpDoc\Ast\PhpDoc\AttributeAwareGenericTagValueNode;
|
||||||
|
use Rector\AttributeAwarePhpDoc\Ast\PhpDoc\AttributeAwareParamTagValueNode;
|
||||||
|
|
||||||
|
final class SpacePatternFactory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private const TYPE_PATTERN = '[\w\\\\\[\]\(\)\{\}\:\?\$\-\,\&|<>\s]+';
|
||||||
|
|
||||||
|
public function createSpacePattern(PhpDocTagNode $phpDocTagNode): string
|
||||||
|
{
|
||||||
|
$spacePattern = preg_quote($phpDocTagNode->name, '#') . '(?<space>\s+)';
|
||||||
|
|
||||||
|
// we have to match exact @param space, in case of multiple @param s
|
||||||
|
if ($phpDocTagNode->value instanceof AttributeAwareParamTagValueNode) {
|
||||||
|
$spacePattern = $this->createSpacePatternForParamTagValueNode($phpDocTagNode->value, $spacePattern);
|
||||||
|
} elseif ($phpDocTagNode->value instanceof AttributeAwareGenericTagValueNode) {
|
||||||
|
$originalValue = $phpDocTagNode->value->getAttribute('original_value') ?? $phpDocTagNode->value->value;
|
||||||
|
|
||||||
|
// break by line break, to prevent false content positive
|
||||||
|
$originalValueParts = explode(PHP_EOL, $originalValue);
|
||||||
|
if (isset($originalValueParts[0])) {
|
||||||
|
$originalValue = $originalValueParts[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
$spacePattern .= preg_quote($originalValue, '#');
|
||||||
|
}
|
||||||
|
|
||||||
|
return '#' . $spacePattern . '#';
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createSpacePatternForParamTagValueNode(
|
||||||
|
AttributeAwareParamTagValueNode $attributeAwareParamTagValueNode,
|
||||||
|
string $spacePattern
|
||||||
|
): string {
|
||||||
|
// type could be changed, so better keep it here
|
||||||
|
$spacePattern .= self::TYPE_PATTERN;
|
||||||
|
|
||||||
|
if ($attributeAwareParamTagValueNode->parameterName !== '') {
|
||||||
|
$spacePattern .= '\s+';
|
||||||
|
if ($attributeAwareParamTagValueNode->isReference()) {
|
||||||
|
$spacePattern .= '&';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($attributeAwareParamTagValueNode->isVariadic) {
|
||||||
|
$spacePattern .= '...';
|
||||||
|
}
|
||||||
|
|
||||||
|
$spacePattern .= preg_quote($attributeAwareParamTagValueNode->parameterName, '#');
|
||||||
|
}
|
||||||
|
return $spacePattern;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
|
||||||
|
* @license https://opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2015-2016 Zend Technologies USA Inc. (https://www.zend.com/)
|
||||||
|
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||||
|
*/
|
|
@ -0,0 +1,5 @@
|
||||||
|
/**
|
||||||
|
* @see https://book.cakephp.org/2/en/models/associations-linking-models-together.html#relationship-types
|
||||||
|
* hasOne => one to one
|
||||||
|
* hasMany => one to many
|
||||||
|
*/
|
|
@ -0,0 +1,4 @@
|
||||||
|
/**
|
||||||
|
* @todo decouple to NodeAnalyzer
|
||||||
|
* Matches array like...
|
||||||
|
*/
|
|
@ -10,6 +10,7 @@ use PhpParser\Node\Identifier;
|
||||||
use PhpParser\Node\Stmt\Class_;
|
use PhpParser\Node\Stmt\Class_;
|
||||||
use PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode;
|
use PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode;
|
||||||
use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
|
use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode;
|
||||||
|
use Rector\AttributeAwarePhpDoc\Ast\PhpDoc\AttributeAwareGenericTagValueNode;
|
||||||
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
|
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
|
||||||
use Rector\Core\Rector\AbstractPHPUnitRector;
|
use Rector\Core\Rector\AbstractPHPUnitRector;
|
||||||
use Rector\Core\RectorDefinition\CodeSample;
|
use Rector\Core\RectorDefinition\CodeSample;
|
||||||
|
@ -120,7 +121,13 @@ PHP
|
||||||
}
|
}
|
||||||
|
|
||||||
$newMethodName = $this->createNewMethodName($oldMethodName);
|
$newMethodName = $this->createNewMethodName($oldMethodName);
|
||||||
$dataProviderTag->value->value = $newMethodName;
|
|
||||||
|
// @todo create @dataProvider custom tag!
|
||||||
|
/** @var AttributeAwareGenericTagValueNode $genericTagValueNode */
|
||||||
|
$genericTagValueNode = $dataProviderTag->value;
|
||||||
|
// change value - keep original for format preserving
|
||||||
|
$genericTagValueNode->setAttribute('original_value', $genericTagValueNode->value);
|
||||||
|
$genericTagValueNode->value = $newMethodName;
|
||||||
|
|
||||||
$oldMethodName = trim($oldMethodName, '()');
|
$oldMethodName = trim($oldMethodName, '()');
|
||||||
$newMethodName = trim($newMethodName, '()');
|
$newMethodName = trim($newMethodName, '()');
|
||||||
|
|
Loading…
Reference in New Issue
Block a user