Merge branch 'CI4-Application' of bitbucket.org:venbainformationtechnology/ria into CI4-Application

This commit is contained in:
VE10-Sanjeev 2024-07-30 10:17:13 +00:00
commit ea38723b18
299 changed files with 4384 additions and 1963 deletions

View File

@ -344,7 +344,10 @@ class Purchaseorder extends BaseController
$data['TotalAmountInWords'] = $this->convertNumber($totalAmt); $data['TotalAmountInWords'] = $this->convertNumber($totalAmt);
$data['RequistionDetails'] = $this->purchaseorder_model->GetPdfRequistionDetails($PONO); $data['RequistionDetails'] = $this->purchaseorder_model->GetPdfRequistionDetails($PONO);
// echo '<pre>';
// print_r($data);
// echo '</pre>';
// die;
$mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', $mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8',
'format' => 'A4', 'format' => 'A4',
'default_font' => 'sans-serif', 'default_font' => 'sans-serif',
@ -380,7 +383,7 @@ $mpdf->use_kwt = true;
// $html = view('pdf_view', $data); // $html = view('pdf_view', $data);
// $mpdf->WriteHTML($html); // Use WriteHTML() method to add body content // $mpdf->WriteHTML($html); // Use WriteHTML() method to add body content
$html = view('po_pdf', $data); $html = view('po_pdf', $data);
//echo $html;die; // echo $html;die;
$mpdf->WriteHTML($html); // Use WriteHTML() method to add body content $mpdf->WriteHTML($html); // Use WriteHTML() method to add body content
// Set HTML footer // Set HTML footer

View File

@ -3193,10 +3193,13 @@ if (!empty($getlogpodtl)) {
</div> </div>
</div> </div>
</div> </div>
<!-- --------------------------------------- -->
<!-- --------------------------------------- -->
<div class="col-md-12" style="padding:0px;"> <div class="col-md-12" style="padding:0px;">
<div class="col-md-12"> <div class="col-md-12">
<div class="col-md-4"></div>
<div class="col-md-4"> <div class="col-md-4">
<label>Discount Type </label> <label>Discount Type </label>
<div> <div>
@ -3225,29 +3228,10 @@ if (!empty($getlogpodtl)) {
?> ?>
</div> </div>
</div> </div>
<div class="col-md-2">
<label>CGST In %</label>
<div class="form-group">
<?php
$data = array('name' => 'ViewCGST', 'value' => set_value('tViewCGST'), 'id' => 'ViewCGST', 'class' => 'form-control num', 'onkeypress' => 'return isNumberKey(event);', 'onchange' => 'calculateCST(0);', 'readonly' => 'true',);
echo form_input($data);
?>
</div>
</div>
<div class="col-md-2">
<label>CGST Amt <?php echo "($INRSYM)" ?></label>
<div class="form-group">
<?php
$data = array('name' => 'ViewAfterCGST', 'value' => set_value('ViewAfterCGST'), 'id' => 'ViewAfterCGST', 'class' => 'form-control num', 'readonly' => 'true');
echo form_input($data);
?>
</div>
</div>
</div> </div>
<div class="col-md-12" style="text-align:left;"> <div class="col-md-12" style="text-align:left;">
<div class="col-md-4"></div>
<div class="col-md-4"> <div class="col-md-4">
<label>Packaging Type </label> <label>Packaging Type </label>
<div> <div>
@ -3276,51 +3260,11 @@ if (!empty($getlogpodtl)) {
?> ?>
</div> </div>
</div> </div>
<div id="SGSTViewModel">
<div class="col-md-2">
<label>SGST In %</label>
<div class="form-group">
<?php
$data = array('name' => 'ViewSGST', 'value' => set_value('ViewSGST'), 'id' => 'ViewSGST', 'class' => 'form-control num', 'onkeypress' => 'return isNumberKey(event);', 'onchange' => 'calculateGST(0);', 'readonly' => 'true');
echo form_input($data);
?>
</div>
</div>
<div class="col-md-2">
<label>SGST Amt <?php echo "($INRSYM)" ?></label>
<div class="form-group">
<?php
$data = array('name' => 'ViewAfterSGST', 'value' => set_value('ViewAfterSGST'), 'id' => 'ViewAfterSGST', 'class' => 'form-control num', 'readonly' => 'true');
echo form_input($data);
?>
</div>
</div>
</div>
<div id="IGSTViewModel" style="display:none;">
<div class="col-md-2">
<label>IGST In %</label>
<div class="form-group">
<?php
$data = array('name' => 'ViewIGST', 'value' => set_value('tViewIGST'), 'id' => 'ViewIGST', 'class' => 'form-control num', 'onkeypress' => 'return isNumberKey(event);', 'onchange' => ' calculateGST(0);', 'readonly' => 'true',);
echo form_input($data);
?>
</div>
</div>
<div class="col-md-2">
<label>IGST Amt <?php echo "($INRSYM)" ?></label>
<div class="form-group">
<?php
$data = array('name' => 'ViewAfterIGST', 'value' => set_value('ViewAfterIGST'), 'id' => 'ViewAfterIGST', 'class' => 'form-control num', 'readonly' => 'true');
echo form_input($data);
?>
</div>
</div>
</div>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
<div class="col-md-2"> <div class="col-md-4"></div>
<div class="col-md-4">
<label>Freight Type </label> <label>Freight Type </label>
<div> <div>
<?php <?php
@ -3366,6 +3310,76 @@ if (!empty($getlogpodtl)) {
?> ?>
</div> </div>
</div> </div>
</div>
<div class="col-md-12">
<div class="col-md-8"></div>
<div class="col-md-2">
<label>CGST In %</label>
<div class="form-group">
<?php
$data = array('name' => 'ViewCGST', 'value' => set_value('tViewCGST'), 'id' => 'ViewCGST', 'class' => 'form-control num', 'onkeypress' => 'return isNumberKey(event);', 'onchange' => 'calculateCST(0);', 'readonly' => 'true',);
echo form_input($data);
?>
</div>
</div>
<div class="col-md-2">
<label>CGST Amt <?php echo "($INRSYM)" ?></label>
<div class="form-group">
<?php
$data = array('name' => 'ViewAfterCGST', 'value' => set_value('ViewAfterCGST'), 'id' => 'ViewAfterCGST', 'class' => 'form-control num', 'readonly' => 'true');
echo form_input($data);
?>
</div>
</div>
</div>
<div class="col-md-12">
<div class="col-md-8"></div>
<div id="SGSTViewModel">
<div class="col-md-2">
<label>SGST In %</label>
<div class="form-group">
<?php
$data = array('name' => 'ViewSGST', 'value' => set_value('ViewSGST'), 'id' => 'ViewSGST', 'class' => 'form-control num', 'onkeypress' => 'return isNumberKey(event);', 'onchange' => 'calculateGST(0);', 'readonly' => 'true');
echo form_input($data);
?>
</div>
</div>
<div class="col-md-2">
<label>SGST Amt <?php echo "($INRSYM)" ?></label>
<div class="form-group">
<?php
$data = array('name' => 'ViewAfterSGST', 'value' => set_value('ViewAfterSGST'), 'id' => 'ViewAfterSGST', 'class' => 'form-control num', 'readonly' => 'true');
echo form_input($data);
?>
</div>
</div>
</div>
<div id="IGSTViewModel" style="display:none;">
<div class="col-md-2">
<label>IGST In %</label>
<div class="form-group">
<?php
$data = array('name' => 'ViewIGST', 'value' => set_value('tViewIGST'), 'id' => 'ViewIGST', 'class' => 'form-control num', 'onkeypress' => 'return isNumberKey(event);', 'onchange' => ' calculateGST(0);', 'readonly' => 'true',);
echo form_input($data);
?>
</div>
</div>
<div class="col-md-2">
<label>IGST Amt <?php echo "($INRSYM)" ?></label>
<div class="form-group">
<?php
$data = array('name' => 'ViewAfterIGST', 'value' => set_value('ViewAfterIGST'), 'id' => 'ViewAfterIGST', 'class' => 'form-control num', 'readonly' => 'true');
echo form_input($data);
?>
</div>
</div>
</div>
</div>
<div class="col-md-12">
<div class="col-md-8"></div>
<div class="col-md-4"> <div class="col-md-4">
<label> Insurance <?php echo "($INRSYM)" ?> (if Any)</label> <label> Insurance <?php echo "($INRSYM)" ?> (if Any)</label>
<div class="form-group"> <div class="form-group">
@ -3375,12 +3389,10 @@ if (!empty($getlogpodtl)) {
?> ?>
</div> </div>
</div> </div>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
<div class="col-md-8"></div>
<div class="col-md-4"> <label><?php echo "Total Order Amt ($INRSYM)"; ?></label> <div class="col-md-4"> <label><?php echo "Total Order Amt ($INRSYM)"; ?></label>
<div class="form-group"> <div class="form-group">
<?php <?php

View File

@ -4,6 +4,10 @@ All notable changes to this library will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v1.8.0](https://github.com/CodeIgniter/coding-standard/compare/v1.7.16...v1.8.0) - 2024-06-16
- Enable rules for PHP 8.1 (#20)
## [v1.7.16](https://github.com/CodeIgniter/coding-standard/compare/v1.7.15...v1.7.16) - 2024-05-18 ## [v1.7.16](https://github.com/CodeIgniter/coding-standard/compare/v1.7.15...v1.7.16) - 2024-05-18
- Disable `php_unit_attributes` for now - Disable `php_unit_attributes` for now

View File

@ -19,15 +19,15 @@
"slack": "https://codeigniterchat.slack.com" "slack": "https://codeigniterchat.slack.com"
}, },
"require": { "require": {
"php": "^7.4 || ^8.0", "php": "^8.1",
"ext-tokenizer": "*", "ext-tokenizer": "*",
"friendsofphp/php-cs-fixer": "^3.50", "friendsofphp/php-cs-fixer": "^3.50",
"nexusphp/cs-config": "<=3.18.0" "nexusphp/cs-config": "^3.19.0"
}, },
"require-dev": { "require-dev": {
"nexusphp/tachycardia": "^1.3", "nexusphp/tachycardia": "^2.1",
"phpstan/phpstan": "^1.0", "phpstan/phpstan": "^1.0",
"phpunit/phpunit": "^9.5" "phpunit/phpunit": "^10.5"
}, },
"minimum-stability": "dev", "minimum-stability": "dev",
"prefer-stable": true, "prefer-stable": true,

View File

@ -243,7 +243,7 @@ final class CodeIgniter4 extends AbstractRuleset
'attribute_placement' => 'standalone', 'attribute_placement' => 'standalone',
], ],
'method_chaining_indentation' => true, 'method_chaining_indentation' => true,
'modernize_strpos' => false, // requires 8.0+ 'modernize_strpos' => true,
'modernize_types_casting' => true, 'modernize_types_casting' => true,
'multiline_comment_opening_closing' => true, 'multiline_comment_opening_closing' => true,
'multiline_string_to_heredoc' => false, 'multiline_string_to_heredoc' => false,
@ -344,13 +344,13 @@ final class CodeIgniter4 extends AbstractRuleset
'normalize_index_brace' => true, 'normalize_index_brace' => true,
'not_operator_with_space' => false, 'not_operator_with_space' => false,
'not_operator_with_successor_space' => true, 'not_operator_with_successor_space' => true,
'nullable_type_declaration' => false, // requires 8.0+ 'nullable_type_declaration' => ['syntax' => 'question_mark'],
'nullable_type_declaration_for_default_null_value' => true, 'nullable_type_declaration_for_default_null_value' => true,
'numeric_literal_separator' => false, 'numeric_literal_separator' => false,
'object_operator_without_whitespace' => true, 'object_operator_without_whitespace' => true,
'octal_notation' => false, // requires 8.1+ 'octal_notation' => false, // requires 8.1+
'operator_linebreak' => ['only_booleans' => true, 'position' => 'beginning'], 'operator_linebreak' => ['only_booleans' => true, 'position' => 'beginning'],
'ordered_attributes' => false, // requires 8.0+ 'ordered_attributes' => ['order' => [], 'sort_algorithm' => 'alpha'],
'ordered_class_elements' => [ 'ordered_class_elements' => [
'order' => [ 'order' => [
'use_trait', 'use_trait',
@ -366,10 +366,14 @@ final class CodeIgniter4 extends AbstractRuleset
'imports_order' => ['class', 'function', 'const'], 'imports_order' => ['class', 'function', 'const'],
'case_sensitive' => false, 'case_sensitive' => false,
], ],
'ordered_interfaces' => false, 'ordered_interfaces' => false,
'ordered_traits' => false, 'ordered_traits' => false,
'ordered_types' => false, // requires 8.0+ 'ordered_types' => [
'php_unit_attributes' => false, // requires 8.1+ 'null_adjustment' => 'always_last',
'sort_algorithm' => 'alpha',
'case_sensitive' => false,
],
'php_unit_attributes' => true,
'php_unit_construct' => [ 'php_unit_construct' => [
'assertions' => [ 'assertions' => [
'assertSame', 'assertSame',
@ -689,7 +693,7 @@ final class CodeIgniter4 extends AbstractRuleset
], ],
]; ];
$this->requiredPHPVersion = 70400; $this->requiredPHPVersion = 80100;
$this->autoActivateIsRiskyAllowed = true; $this->autoActivateIsRiskyAllowed = true;
} }

View File

@ -3,6 +3,41 @@ CHANGELOG for PHP CS Fixer
This file contains changelogs for stable releases only. This file contains changelogs for stable releases only.
Changelog for v3.59.3
---------------------
* refactor: refactor to templated trait+interface (#7988)
Changelog for v3.59.2
---------------------
* fix: "list" is reserved type (#8087)
* chore: add missing type in method prototype (#8088)
* CI: bump Ubuntu version (#8086)
* deps: bump infection to unblock PHPUnit 11, and few more as chore (#8083)
Changelog for v3.59.1
---------------------
* fix: Bump React's JSON decoder buffer size (#8068)
* docs: options - handle enums in dicts (#8082)
Changelog for v3.59.0
---------------------
* feat(Docker): Multi-arch build (support for `arm64`) (#8079)
* feat: `@PhpCsFixer` ruleset - normalise implicit backslashes in single quoted strings (#7965)
* feat: `SimpleToComplexStringVariableFixer` - support variable being an array (#8064)
* fix: Look up for PHPDoc's variable name by only chars allowed in the variables (#8062)
* fix: Update `PhpUnitTestCaseStaticMethodCallsFixer::STATIC_METHODS` (#8073)
* fix: `native_constant_invocation` - array constants with native constant names (#8008)
* chore: update PHPStan (#8060)
* CI: Update PHPStan to 1.11.4 (#8074)
* docs: don't expose list as config type for dicts (#8081)
* docs: Make wording in `final_class` docs less dismissive (#8065)
* docs: Update 1-bug_report.yml (#8067)
* DX: Remove version from Docker Compose files (#8061)
Changelog for v3.58.1 Changelog for v3.58.1
--------------------- ---------------------

View File

@ -46,16 +46,16 @@
"symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
}, },
"require-dev": { "require-dev": {
"facile-it/paraunit": "^1.3 || ^2.0", "facile-it/paraunit": "^1.3 || ^2.3",
"infection/infection": "^0.27.11", "infection/infection": "^0.29.5",
"justinrainbow/json-schema": "^5.2", "justinrainbow/json-schema": "^5.2",
"keradus/cli-executor": "^2.1", "keradus/cli-executor": "^2.1",
"mikey179/vfsstream": "^1.6.11", "mikey179/vfsstream": "^1.6.11",
"php-coveralls/php-coveralls": "^2.7", "php-coveralls/php-coveralls": "^2.7",
"php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/accessible-object": "^1.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5",
"phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2",
"symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0" "symfony/yaml": "^5.4 || ^6.0 || ^7.0"
}, },
@ -66,7 +66,10 @@
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"PhpCsFixer\\": "src/" "PhpCsFixer\\": "src/"
} },
"exclude-from-classmap": [
"src/Fixer/Internal/*"
]
}, },
"autoload-dev": { "autoload-dev": {
"psr-4": { "psr-4": {

View File

@ -26,6 +26,17 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @internal * @internal
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* scalar_types?: bool,
* union_types?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* scalar_types: bool,
* union_types: bool
* }
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*/ */
abstract class AbstractDoctrineAnnotationFixer extends AbstractFixer implements ConfigurableFixerInterface abstract class AbstractDoctrineAnnotationFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
@ -53,7 +64,7 @@ abstract class AbstractDoctrineAnnotationFixer extends AbstractFixer implements
$doctrineAnnotationTokens = DoctrineAnnotationTokens::createFromDocComment( $doctrineAnnotationTokens = DoctrineAnnotationTokens::createFromDocComment(
$docCommentToken, $docCommentToken,
$this->configuration['ignored_tags'] $this->configuration['ignored_tags'] // @phpstan-ignore-line
); );
$this->fixAnnotations($doctrineAnnotationTokens); $this->fixAnnotations($doctrineAnnotationTokens);
@ -71,15 +82,6 @@ abstract class AbstractDoctrineAnnotationFixer extends AbstractFixer implements
return new FixerConfigurationResolver([ return new FixerConfigurationResolver([
(new FixerOptionBuilder('ignored_tags', 'List of tags that must not be treated as Doctrine Annotations.')) (new FixerOptionBuilder('ignored_tags', 'List of tags that must not be treated as Doctrine Annotations.'))
->setAllowedTypes(['string[]']) ->setAllowedTypes(['string[]'])
->setAllowedValues([static function (array $values): bool {
foreach ($values as $value) {
if (!\is_string($value)) {
return false;
}
}
return true;
}])
->setDefault([ ->setDefault([
// PHPDocumentor 1 // PHPDocumentor 1
'abstract', 'abstract',

View File

@ -14,19 +14,11 @@ declare(strict_types=1);
namespace PhpCsFixer; namespace PhpCsFixer;
use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException;
use PhpCsFixer\ConfigurationException\InvalidForEnvFixerConfigurationException;
use PhpCsFixer\ConfigurationException\RequiredFixerConfigurationException; use PhpCsFixer\ConfigurationException\RequiredFixerConfigurationException;
use PhpCsFixer\Console\Application;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\FixerInterface; use PhpCsFixer\Fixer\FixerInterface;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\DeprecatedFixerOption;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\InvalidOptionsForEnvException;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
use Symfony\Component\OptionsResolver\Exception\ExceptionInterface;
use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
@ -35,21 +27,11 @@ use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
*/ */
abstract class AbstractFixer implements FixerInterface abstract class AbstractFixer implements FixerInterface
{ {
/**
* @var null|array<string, mixed>
*/
protected $configuration;
/** /**
* @var WhitespacesFixerConfig * @var WhitespacesFixerConfig
*/ */
protected $whitespacesConfig; protected $whitespacesConfig;
/**
* @var null|FixerConfigurationResolverInterface
*/
private $configurationDefinition;
public function __construct() public function __construct()
{ {
if ($this instanceof ConfigurableFixerInterface) { if ($this instanceof ConfigurableFixerInterface) {
@ -67,7 +49,7 @@ abstract class AbstractFixer implements FixerInterface
final public function fix(\SplFileInfo $file, Tokens $tokens): void final public function fix(\SplFileInfo $file, Tokens $tokens): void
{ {
if ($this instanceof ConfigurableFixerInterface && null === $this->configuration) { if ($this instanceof ConfigurableFixerInterface && property_exists($this, 'configuration') && null === $this->configuration) {
throw new RequiredFixerConfigurationException($this->getName(), 'Configuration is required.'); throw new RequiredFixerConfigurationException($this->getName(), 'Configuration is required.');
} }
@ -99,68 +81,6 @@ abstract class AbstractFixer implements FixerInterface
return true; return true;
} }
/**
* @param array<string, mixed> $configuration
*/
public function configure(array $configuration): void
{
if (!$this instanceof ConfigurableFixerInterface) {
throw new \LogicException('Cannot configure using Abstract parent, child not implementing "PhpCsFixer\Fixer\ConfigurableFixerInterface".');
}
foreach ($this->getConfigurationDefinition()->getOptions() as $option) {
if (!$option instanceof DeprecatedFixerOption) {
continue;
}
$name = $option->getName();
if (\array_key_exists($name, $configuration)) {
Utils::triggerDeprecation(new \InvalidArgumentException(sprintf(
'Option "%s" for rule "%s" is deprecated and will be removed in version %d.0. %s',
$name,
$this->getName(),
Application::getMajorVersion() + 1,
str_replace('`', '"', $option->getDeprecationMessage())
)));
}
}
try {
$this->configuration = $this->getConfigurationDefinition()->resolve($configuration);
} catch (MissingOptionsException $exception) {
throw new RequiredFixerConfigurationException(
$this->getName(),
sprintf('Missing required configuration: %s', $exception->getMessage()),
$exception
);
} catch (InvalidOptionsForEnvException $exception) {
throw new InvalidForEnvFixerConfigurationException(
$this->getName(),
sprintf('Invalid configuration for env: %s', $exception->getMessage()),
$exception
);
} catch (ExceptionInterface $exception) {
throw new InvalidFixerConfigurationException(
$this->getName(),
sprintf('Invalid configuration: %s', $exception->getMessage()),
$exception
);
}
}
public function getConfigurationDefinition(): FixerConfigurationResolverInterface
{
if (!$this instanceof ConfigurableFixerInterface) {
throw new \LogicException(sprintf('Cannot get configuration definition using Abstract parent, child "%s" not implementing "PhpCsFixer\Fixer\ConfigurableFixerInterface".', static::class));
}
if (null === $this->configurationDefinition) {
$this->configurationDefinition = $this->createConfigurationDefinition();
}
return $this->configurationDefinition;
}
public function setWhitespacesConfig(WhitespacesFixerConfig $config): void public function setWhitespacesConfig(WhitespacesFixerConfig $config): void
{ {
if (!$this instanceof WhitespacesAwareFixerInterface) { if (!$this instanceof WhitespacesAwareFixerInterface) {
@ -172,15 +92,6 @@ abstract class AbstractFixer implements FixerInterface
abstract protected function applyFix(\SplFileInfo $file, Tokens $tokens): void; abstract protected function applyFix(\SplFileInfo $file, Tokens $tokens): void;
protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
{
if (!$this instanceof ConfigurableFixerInterface) {
throw new \LogicException('Cannot create configuration definition using Abstract parent, child not implementing "PhpCsFixer\Fixer\ConfigurableFixerInterface".');
}
throw new \LogicException('Not implemented.');
}
private function getDefaultWhitespacesFixerConfig(): WhitespacesFixerConfig private function getDefaultWhitespacesFixerConfig(): WhitespacesFixerConfig
{ {
static $defaultWhitespacesFixerConfig = null; static $defaultWhitespacesFixerConfig = null;

View File

@ -18,6 +18,7 @@ use PhpCsFixer\DocBlock\Annotation;
use PhpCsFixer\DocBlock\DocBlock; use PhpCsFixer\DocBlock\DocBlock;
use PhpCsFixer\DocBlock\TypeExpression; use PhpCsFixer\DocBlock\TypeExpression;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -31,9 +32,22 @@ use PhpCsFixer\Tokenizer\Tokens;
* @internal * @internal
* *
* @phpstan-type _CommonTypeInfo array{commonType: string, isNullable: bool} * @phpstan-type _CommonTypeInfo array{commonType: string, isNullable: bool}
* @phpstan-type _AutogeneratedInputConfiguration array{
* scalar_types?: bool,
* union_types?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* scalar_types: bool,
* union_types: bool
* }
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*/ */
abstract class AbstractPhpdocToTypeDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface abstract class AbstractPhpdocToTypeDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const REGEX_CLASS = '(?:\\\?+'.TypeExpression::REGEX_IDENTIFIER private const REGEX_CLASS = '(?:\\\?+'.TypeExpression::REGEX_IDENTIFIER
.'(\\\\'.TypeExpression::REGEX_IDENTIFIER.')*+)'; .'(\\\\'.TypeExpression::REGEX_IDENTIFIER.')*+)';

View File

@ -44,7 +44,7 @@ use Symfony\Component\Console\Output\OutputInterface;
final class Application extends BaseApplication final class Application extends BaseApplication
{ {
public const NAME = 'PHP CS Fixer'; public const NAME = 'PHP CS Fixer';
public const VERSION = '3.58.1'; public const VERSION = '3.59.3';
public const VERSION_CODENAME = '7th Gear'; public const VERSION_CODENAME = '7th Gear';
private ToolInfo $toolInfo; private ToolInfo $toolInfo;

View File

@ -24,6 +24,7 @@ use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\DeprecatedFixerInterface; use PhpCsFixer\Fixer\DeprecatedFixerInterface;
use PhpCsFixer\Fixer\ExperimentalFixerInterface; use PhpCsFixer\Fixer\ExperimentalFixerInterface;
use PhpCsFixer\Fixer\FixerInterface; use PhpCsFixer\Fixer\FixerInterface;
use PhpCsFixer\Fixer\InternalFixerInterface;
use PhpCsFixer\FixerConfiguration\AliasedFixerOption; use PhpCsFixer\FixerConfiguration\AliasedFixerOption;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\DeprecatedFixerOption; use PhpCsFixer\FixerConfiguration\DeprecatedFixerOption;
@ -192,6 +193,13 @@ final class DescribeCommand extends Command
$output->writeln(''); $output->writeln('');
} }
if ($fixer instanceof InternalFixerInterface) {
$output->writeln('<error>Fixer applying this rule is INTERNAL.</error>.');
$output->writeln('It is expected to be used only on PHP CS Fixer project itself.');
$output->writeln('');
}
if ($fixer->isRisky()) { if ($fixer->isRisky()) {
$output->writeln('<error>Fixer applying this rule is RISKY.</error>'); $output->writeln('<error>Fixer applying this rule is RISKY.</error>');

View File

@ -171,14 +171,17 @@ final class Annotation
} }
/** /**
* @return null|string
*
* @internal * @internal
*/ */
public function getVariableName() public function getVariableName(): ?string
{ {
$type = preg_quote($this->getTypesContent() ?? '', '/'); $type = preg_quote($this->getTypesContent() ?? '', '/');
$regex = "/@{$this->tag->getName()}\\s+({$type}\\s*)?(&\\s*)?(\\.{3}\\s*)?(?<variable>\\$.+?)(?:[\\s*]|$)/"; $regex = sprintf(
'/@%s\s+(%s\s*)?(&\s*)?(\.{3}\s*)?(?<variable>\$%s)(?:.*|$)/',
$this->tag->getName(),
$type,
TypeExpression::REGEX_IDENTIFIER
);
if (Preg::match($regex, $this->lines[0]->getContent(), $matches)) { if (Preg::match($regex, $this->lines[0]->getContent(), $matches)) {
return $matches['variable']; return $matches['variable'];

View File

@ -167,7 +167,7 @@ final class FixerDocumentGenerator
if (null === $allowed) { if (null === $allowed) {
$allowedKind = 'Allowed types'; $allowedKind = 'Allowed types';
$allowed = array_map( $allowed = array_map(
static fn (string $value): string => '``'.(str_ends_with($value, '[]') ? sprintf('list<%s>', substr($value, 0, -2)) : $value).'``', static fn (string $value): string => '``'.Utils::convertArrayTypeToList($value).'``',
$option->getAllowedTypes(), $option->getAllowedTypes(),
); );
} else { } else {

View File

@ -138,6 +138,7 @@ abstract class AbstractPhpUnitFixer extends AbstractFixer
} }
} }
$doc = $this->makeDocBlockMultiLineIfNeeded($doc, $tokens, $docBlockIndex, $annotation); $doc = $this->makeDocBlockMultiLineIfNeeded($doc, $tokens, $docBlockIndex, $annotation);
$lines = $this->addInternalAnnotation($doc, $tokens, $docBlockIndex, $annotation); $lines = $this->addInternalAnnotation($doc, $tokens, $docBlockIndex, $annotation);
$lines = implode('', $lines); $lines = implode('', $lines);

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Alias;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -31,9 +32,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Vladimir Reznichenko <kalessil@gmail.com> * @author Vladimir Reznichenko <kalessil@gmail.com>
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* sets?: list<'@all'|'@exif'|'@ftp'|'@IMAP'|'@internal'|'@ldap'|'@mbreg'|'@mysqli'|'@oci'|'@odbc'|'@openssl'|'@pcntl'|'@pg'|'@posix'|'@snmp'|'@sodium'|'@time'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* sets: list<'@all'|'@exif'|'@ftp'|'@IMAP'|'@internal'|'@ldap'|'@mbreg'|'@mysqli'|'@oci'|'@odbc'|'@openssl'|'@pcntl'|'@pg'|'@posix'|'@snmp'|'@sodium'|'@time'>
* }
*/ */
final class NoAliasFunctionsFixer extends AbstractFixer implements ConfigurableFixerInterface final class NoAliasFunctionsFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const SETS = [ private const SETS = [
'@internal' => [ '@internal' => [
'diskfreespace' => 'disk_free_space', 'diskfreespace' => 'disk_free_space',
@ -160,23 +173,6 @@ final class NoAliasFunctionsFixer extends AbstractFixer implements ConfigurableF
*/ */
private array $aliases = []; private array $aliases = [];
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->aliases = [];
foreach ($this->configuration['sets'] as $set) {
if ('@all' === $set) {
$this->aliases = array_merge(...array_values(self::SETS));
break;
}
$this->aliases = array_merge($this->aliases, self::SETS[$set]);
}
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -240,6 +236,21 @@ mbereg_search_getregs();
return true; return true;
} }
protected function configurePostNormalisation(): void
{
$this->aliases = [];
foreach ($this->configuration['sets'] as $set) {
if ('@all' === $set) {
$this->aliases = array_merge(...array_values(self::SETS));
break;
}
$this->aliases = array_merge($this->aliases, self::SETS[$set]);
}
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
$functionsAnalyzer = new FunctionsAnalyzer(); $functionsAnalyzer = new FunctionsAnalyzer();

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Alias;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -28,21 +29,26 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Sullivan Senechal <soullivaneuh@gmail.com> * @author Sullivan Senechal <soullivaneuh@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* use?: 'echo'|'print'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* use: 'echo'|'print'
* }
*/ */
final class NoMixedEchoPrintFixer extends AbstractFixer implements ConfigurableFixerInterface final class NoMixedEchoPrintFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var T_ECHO|T_PRINT * @var T_ECHO|T_PRINT
*/ */
private int $candidateTokenType; private int $candidateTokenType;
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->candidateTokenType = 'echo' === $this->configuration['use'] ? T_PRINT : T_ECHO;
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -69,6 +75,11 @@ final class NoMixedEchoPrintFixer extends AbstractFixer implements ConfigurableF
return $tokens->isTokenKindFound($this->candidateTokenType); return $tokens->isTokenKindFound($this->candidateTokenType);
} }
protected function configurePostNormalisation(): void
{
$this->candidateTokenType = 'echo' === $this->configuration['use'] ? T_PRINT : T_ECHO;
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
foreach ($tokens as $index => $token) { foreach ($tokens as $index => $token) {

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Alias;
use PhpCsFixer\AbstractFunctionReferenceFixer; use PhpCsFixer\AbstractFunctionReferenceFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -29,9 +30,21 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
/** /**
* @author Vladimir Reznichenko <kalessil@gmail.com> * @author Vladimir Reznichenko <kalessil@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* replacements?: array<string, string>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* replacements: array<string, string>
* }
*/ */
final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer implements ConfigurableFixerInterface final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<string, array<int, int>> * @var array<string, array<int, int>>
*/ */
@ -43,11 +56,6 @@ final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer imple
'random_int' => [0, 2], 'random_int' => [0, 2],
]; ];
public function configure(array $configuration): void
{
parent::configure($configuration);
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -119,7 +127,7 @@ final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer imple
{ {
return new FixerConfigurationResolver([ return new FixerConfigurationResolver([
(new FixerOptionBuilder('replacements', 'Mapping between replaced functions with the new ones.')) (new FixerOptionBuilder('replacements', 'Mapping between replaced functions with the new ones.'))
->setAllowedTypes(['array']) ->setAllowedTypes(['array<string, string>'])
->setAllowedValues([static function (array $value): bool { ->setAllowedValues([static function (array $value): bool {
foreach ($value as $functionName => $replacement) { foreach ($value as $functionName => $replacement) {
if (!\array_key_exists($functionName, self::$argumentCounts)) { if (!\array_key_exists($functionName, self::$argumentCounts)) {
@ -128,14 +136,6 @@ final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer imple
$functionName $functionName
)); ));
} }
if (!\is_string($replacement)) {
throw new InvalidOptionsException(sprintf(
'Replacement for function "%s" must be a string, "%s" given.',
$functionName,
get_debug_type($replacement)
));
}
} }
return true; return true;

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ArrayNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -30,21 +31,26 @@ use PhpCsFixer\Tokenizer\Tokens;
* @author Gregor Harlan <gharlan@web.de> * @author Gregor Harlan <gharlan@web.de>
* @author Sebastiaan Stok <s.stok@rollerscapes.net> * @author Sebastiaan Stok <s.stok@rollerscapes.net>
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* syntax?: 'long'|'short'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* syntax: 'long'|'short'
* }
*/ */
final class ArraySyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface final class ArraySyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var CT::T_ARRAY_SQUARE_BRACE_OPEN|T_ARRAY * @var CT::T_ARRAY_SQUARE_BRACE_OPEN|T_ARRAY
*/ */
private $candidateTokenKind; private $candidateTokenKind;
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->resolveCandidateTokenKind();
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -76,6 +82,11 @@ final class ArraySyntaxFixer extends AbstractFixer implements ConfigurableFixerI
return $tokens->isTokenKindFound($this->candidateTokenKind); return $tokens->isTokenKindFound($this->candidateTokenKind);
} }
protected function configurePostNormalisation(): void
{
$this->resolveCandidateTokenKind();
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
for ($index = $tokens->count() - 1; 0 <= $index; --$index) { for ($index = $tokens->count() - 1; 0 <= $index; --$index) {

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ArrayNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -27,9 +28,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Adam Marczuk <adam@marczuk.info> * @author Adam Marczuk <adam@marczuk.info>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* after_heredoc?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* after_heredoc: bool
* }
*/ */
final class NoWhitespaceBeforeCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface final class NoWhitespaceBeforeCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ArrayNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -29,9 +30,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Adam Marczuk <adam@marczuk.info> * @author Adam Marczuk <adam@marczuk.info>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* ensure_single_space?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* ensure_single_space: bool
* }
*/ */
final class WhitespaceAfterCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface final class WhitespaceAfterCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\AttributeNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -28,9 +29,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author HypeMC <hypemc@gmail.com> * @author HypeMC <hypemc@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* use_parentheses?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* use_parentheses: bool
* }
*/ */
final class AttributeEmptyParenthesesFixer extends AbstractFixer implements ConfigurableFixerInterface final class AttributeEmptyParenthesesFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
use PhpCsFixer\AbstractProxyFixer; use PhpCsFixer\AbstractProxyFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\ControlStructure\ControlStructureBracesFixer; use PhpCsFixer\Fixer\ControlStructure\ControlStructureBracesFixer;
use PhpCsFixer\Fixer\ControlStructure\ControlStructureContinuationPositionFixer; use PhpCsFixer\Fixer\ControlStructure\ControlStructureContinuationPositionFixer;
use PhpCsFixer\Fixer\DeprecatedFixerInterface; use PhpCsFixer\Fixer\DeprecatedFixerInterface;
@ -37,9 +38,29 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
* *
* @deprecated * @deprecated
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* allow_single_line_anonymous_class_with_empty_body?: bool,
* allow_single_line_closure?: bool,
* position_after_anonymous_constructs?: 'next'|'same',
* position_after_control_structures?: 'next'|'same',
* position_after_functions_and_oop_constructs?: 'next'|'same'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* allow_single_line_anonymous_class_with_empty_body: bool,
* allow_single_line_closure: bool,
* position_after_anonymous_constructs: 'next'|'same',
* position_after_control_structures: 'next'|'same',
* position_after_functions_and_oop_constructs: 'next'|'same'
* }
*/ */
final class BracesFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface, DeprecatedFixerInterface final class BracesFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface, DeprecatedFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */
@ -152,10 +173,8 @@ class Foo
return array_keys($this->proxyFixers); return array_keys($this->proxyFixers);
} }
public function configure(array $configuration): void protected function configurePostNormalisation(): void
{ {
parent::configure($configuration);
$this->getBracesPositionFixer()->configure([ $this->getBracesPositionFixer()->configure([
'control_structures_opening_brace' => $this->translatePositionOption($this->configuration['position_after_control_structures']), 'control_structures_opening_brace' => $this->translatePositionOption($this->configuration['position_after_control_structures']),
'functions_opening_brace' => $this->translatePositionOption($this->configuration['position_after_functions_and_oop_constructs']), 'functions_opening_brace' => $this->translatePositionOption($this->configuration['position_after_functions_and_oop_constructs']),
@ -243,6 +262,9 @@ class Foo
return $this->controlStructureContinuationPositionFixer; return $this->controlStructureContinuationPositionFixer;
} }
/**
* @return BracesPositionFixer::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END|BracesPositionFixer::SAME_LINE
*/
private function translatePositionOption(string $option): string private function translatePositionOption(string $option): string
{ {
return self::LINE_NEXT === $option return self::LINE_NEXT === $option

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\Indentation; use PhpCsFixer\Fixer\Indentation;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
@ -30,8 +31,33 @@ use PhpCsFixer\Tokenizer\Token;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
use PhpCsFixer\Tokenizer\TokensAnalyzer; use PhpCsFixer\Tokenizer\TokensAnalyzer;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* allow_single_line_anonymous_functions?: bool,
* allow_single_line_empty_anonymous_classes?: bool,
* anonymous_classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
* anonymous_functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
* classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
* control_structures_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
* functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* allow_single_line_anonymous_functions: bool,
* allow_single_line_empty_anonymous_classes: bool,
* anonymous_classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
* anonymous_functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
* classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
* control_structures_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
* functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line'
* }
*/
final class BracesPositionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class BracesPositionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
use Indentation; use Indentation;
/** /**
@ -144,6 +170,41 @@ $bar = function () { $result = true;
return -2; return -2;
} }
/** @protected */
public function createConfigurationDefinition(): FixerConfigurationResolverInterface
{
return new FixerConfigurationResolver([
(new FixerOptionBuilder('control_structures_opening_brace', 'The position of the opening brace of control structures body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::SAME_LINE)
->getOption(),
(new FixerOptionBuilder('functions_opening_brace', 'The position of the opening brace of functions body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END)
->getOption(),
(new FixerOptionBuilder('anonymous_functions_opening_brace', 'The position of the opening brace of anonymous functions body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::SAME_LINE)
->getOption(),
(new FixerOptionBuilder('classes_opening_brace', 'The position of the opening brace of classes body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END)
->getOption(),
(new FixerOptionBuilder('anonymous_classes_opening_brace', 'The position of the opening brace of anonymous classes body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::SAME_LINE)
->getOption(),
(new FixerOptionBuilder('allow_single_line_empty_anonymous_classes', 'Allow anonymous classes to have opening and closing braces on the same line.'))
->setAllowedTypes(['bool'])
->setDefault(true)
->getOption(),
(new FixerOptionBuilder('allow_single_line_anonymous_functions', 'Allow anonymous functions to have opening and closing braces on the same line.'))
->setAllowedTypes(['bool'])
->setDefault(true)
->getOption(),
]);
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
$classyTokens = Token::getClassyTokenKinds(); $classyTokens = Token::getClassyTokenKinds();
@ -338,40 +399,6 @@ $bar = function () { $result = true;
} }
} }
protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
{
return new FixerConfigurationResolver([
(new FixerOptionBuilder('control_structures_opening_brace', 'The position of the opening brace of control structures body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::SAME_LINE)
->getOption(),
(new FixerOptionBuilder('functions_opening_brace', 'The position of the opening brace of functions body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END)
->getOption(),
(new FixerOptionBuilder('anonymous_functions_opening_brace', 'The position of the opening brace of anonymous functions body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::SAME_LINE)
->getOption(),
(new FixerOptionBuilder('classes_opening_brace', 'The position of the opening brace of classes body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END)
->getOption(),
(new FixerOptionBuilder('anonymous_classes_opening_brace', 'The position of the opening brace of anonymous classes body.'))
->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
->setDefault(self::SAME_LINE)
->getOption(),
(new FixerOptionBuilder('allow_single_line_empty_anonymous_classes', 'Allow anonymous classes to have opening and closing braces on the same line.'))
->setAllowedTypes(['bool'])
->setDefault(true)
->getOption(),
(new FixerOptionBuilder('allow_single_line_anonymous_functions', 'Allow anonymous functions to have opening and closing braces on the same line.'))
->setAllowedTypes(['bool'])
->setDefault(true)
->getOption(),
]);
}
private function findParenthesisEnd(Tokens $tokens, int $structureTokenIndex): int private function findParenthesisEnd(Tokens $tokens, int $structureTokenIndex): int
{ {
$nextIndex = $tokens->getNextMeaningfulToken($structureTokenIndex); $nextIndex = $tokens->getNextMeaningfulToken($structureTokenIndex);

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
use PhpCsFixer\AbstractProxyFixer; use PhpCsFixer\AbstractProxyFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\DeprecatedFixerInterface; use PhpCsFixer\Fixer\DeprecatedFixerInterface;
use PhpCsFixer\Fixer\Indentation; use PhpCsFixer\Fixer\Indentation;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
@ -25,9 +26,33 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
/** /**
* @deprecated * @deprecated
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* allow_single_line_anonymous_functions?: bool,
* allow_single_line_empty_anonymous_classes?: bool,
* anonymous_classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
* anonymous_functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
* classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
* control_structures_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
* functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* allow_single_line_anonymous_functions: bool,
* allow_single_line_empty_anonymous_classes: bool,
* anonymous_classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
* anonymous_functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
* classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
* control_structures_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
* functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line'
* }
*/ */
final class CurlyBracesPositionFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface, WhitespacesAwareFixerInterface final class CurlyBracesPositionFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
use Indentation; use Indentation;
/** /**
@ -61,13 +86,6 @@ final class CurlyBracesPositionFixer extends AbstractProxyFixer implements Confi
); );
} }
public function configure(array $configuration): void
{
$this->bracesPositionFixer->configure($configuration);
parent::configure($configuration);
}
/** /**
* {@inheritdoc} * {@inheritdoc}
* *
@ -86,6 +104,14 @@ final class CurlyBracesPositionFixer extends AbstractProxyFixer implements Confi
]; ];
} }
/**
* @param _AutogeneratedInputConfiguration $configuration
*/
protected function configurePreNormalisation(array $configuration): void
{
$this->bracesPositionFixer->configure($configuration);
}
protected function createProxyFixers(): array protected function createProxyFixers(): array
{ {
return [ return [

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -27,8 +28,21 @@ use PhpCsFixer\Tokenizer\Analyzer\AttributeAnalyzer;
use PhpCsFixer\Tokenizer\CT; use PhpCsFixer\Tokenizer\CT;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* elements?: list<'arguments'|'array'|'array_destructuring'|'group_import'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* elements: list<'arguments'|'array'|'array_destructuring'|'group_import'>
* }
*/
final class NoTrailingCommaInSinglelineFixer extends AbstractFixer implements ConfigurableFixerInterface final class NoTrailingCommaInSinglelineFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -95,7 +109,6 @@ final class NoTrailingCommaInSinglelineFixer extends AbstractFixer implements Co
private function shouldBeCleared(Tokens $tokens, int $openIndex): bool private function shouldBeCleared(Tokens $tokens, int $openIndex): bool
{ {
/** @var list<string> $elements */
$elements = $this->configuration['elements']; $elements = $this->configuration['elements'];
if ($tokens[$openIndex]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) { if ($tokens[$openIndex]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) {

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -30,9 +31,21 @@ use PhpCsFixer\Tokenizer\Tokens;
* Removes Zero-width space (ZWSP), Non-breaking space (NBSP) and other invisible unicode symbols. * Removes Zero-width space (ZWSP), Non-breaking space (NBSP) and other invisible unicode symbols.
* *
* @author Ivan Boprzenkov <ivan.borzenkov@gmail.com> * @author Ivan Boprzenkov <ivan.borzenkov@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* use_escape_sequences_in_strings?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* use_escape_sequences_in_strings: bool
* }
*/ */
final class NonPrintableCharacterFixer extends AbstractFixer implements ConfigurableFixerInterface final class NonPrintableCharacterFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<string, array{string, string}> * @var array<string, array{string, string}>
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -35,9 +36,23 @@ use PhpCsFixer\Tokenizer\Tokens;
* *
* @author Marvin Heilemann <marvin.heilemann+github@googlemail.com> * @author Marvin Heilemann <marvin.heilemann+github@googlemail.com>
* @author Greg Korba <greg@codito.dev> * @author Greg Korba <greg@codito.dev>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* override_existing?: bool,
* strategy?: 'no_separator'|'use_separator'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* override_existing: bool,
* strategy: 'no_separator'|'use_separator'
* }
*/ */
final class NumericLiteralSeparatorFixer extends AbstractFixer implements ConfigurableFixerInterface final class NumericLiteralSeparatorFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public const STRATEGY_USE_SEPARATOR = 'use_separator'; public const STRATEGY_USE_SEPARATOR = 'use_separator';
public const STRATEGY_NO_SEPARATOR = 'no_separator'; public const STRATEGY_NO_SEPARATOR = 'no_separator';

View File

@ -17,6 +17,7 @@ namespace PhpCsFixer\Fixer\Basic;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\DocBlock\TypeExpression; use PhpCsFixer\DocBlock\TypeExpression;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -35,9 +36,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
* @author Bram Gotink <bram@gotink.me> * @author Bram Gotink <bram@gotink.me>
* @author Graham Campbell <hello@gjcampbell.co.uk> * @author Graham Campbell <hello@gjcampbell.co.uk>
* @author Kuba Werłos <werlos@gmail.com> * @author Kuba Werłos <werlos@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* dir?: null|string
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* dir: null|string
* }
*/ */
final class PsrAutoloadingFixer extends AbstractFixer implements ConfigurableFixerInterface final class PsrAutoloadingFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -64,21 +77,6 @@ class InvalidName {}
); );
} }
public function configure(array $configuration): void
{
parent::configure($configuration);
if (null !== $this->configuration['dir']) {
$realpath = realpath($this->configuration['dir']);
if (false === $realpath) {
throw new \InvalidArgumentException(sprintf('Failed to resolve configured directory "%s".', $this->configuration['dir']));
}
$this->configuration['dir'] = $realpath;
}
}
public function isCandidate(Tokens $tokens): bool public function isCandidate(Tokens $tokens): bool
{ {
return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds());
@ -130,6 +128,19 @@ class InvalidName {}
return !Preg::match('{[/\\\](stub|fixture)s?[/\\\]}i', $file->getRealPath()); return !Preg::match('{[/\\\](stub|fixture)s?[/\\\]}i', $file->getRealPath());
} }
protected function configurePostNormalisation(): void
{
if (null !== $this->configuration['dir']) {
$realpath = realpath($this->configuration['dir']);
if (false === $realpath) {
throw new \InvalidArgumentException(sprintf('Failed to resolve configured directory "%s".', $this->configuration['dir']));
}
$this->configuration['dir'] = $realpath;
}
}
protected function createConfigurationDefinition(): FixerConfigurationResolverInterface protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
{ {
return new FixerConfigurationResolver([ return new FixerConfigurationResolver([

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Casing;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -29,9 +30,21 @@ use PhpCsFixer\Tokenizer\Tokens;
* Fixer for constants case. * Fixer for constants case.
* *
* @author Pol Dellaiera <pol.dellaiera@protonmail.com> * @author Pol Dellaiera <pol.dellaiera@protonmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* case?: 'lower'|'upper'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* case: 'lower'|'upper'
* }
*/ */
final class ConstantCaseFixer extends AbstractFixer implements ConfigurableFixerInterface final class ConstantCaseFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* Hold the function that will be used to convert the constants. * Hold the function that will be used to convert the constants.
* *
@ -39,19 +52,6 @@ final class ConstantCaseFixer extends AbstractFixer implements ConfigurableFixer
*/ */
private $fixFunction; private $fixFunction;
public function configure(array $configuration): void
{
parent::configure($configuration);
if ('lower' === $this->configuration['case']) {
$this->fixFunction = static fn (string $content): string => strtolower($content);
}
if ('upper' === $this->configuration['case']) {
$this->fixFunction = static fn (string $content): string => strtoupper($content);
}
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -68,6 +68,17 @@ final class ConstantCaseFixer extends AbstractFixer implements ConfigurableFixer
return $tokens->isTokenKindFound(T_STRING); return $tokens->isTokenKindFound(T_STRING);
} }
protected function configurePostNormalisation(): void
{
if ('lower' === $this->configuration['case']) {
$this->fixFunction = static fn (string $content): string => strtolower($content);
}
if ('upper' === $this->configuration['case']) {
$this->fixFunction = static fn (string $content): string => strtoupper($content);
}
}
protected function createConfigurationDefinition(): FixerConfigurationResolverInterface protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
{ {
return new FixerConfigurationResolver([ return new FixerConfigurationResolver([

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\CastNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -27,9 +28,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* space?: 'none'|'single'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* space: 'none'|'single'
* }
*/ */
final class CastSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface final class CastSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const INSIDE_CAST_SPACE_REPLACE_MAP = [ private const INSIDE_CAST_SPACE_REPLACE_MAP = [
' ' => '', ' ' => '',
"\t" => '', "\t" => '',

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -45,9 +46,21 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
* elements: non-empty-list<_Element> * elements: non-empty-list<_Element>
* } * }
* @phpstan-type _Element array{token: Token, type: string, index: int, start?: int, end?: int} * @phpstan-type _Element array{token: Token, type: string, index: int, start?: int, end?: int}
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* elements?: array<string, string>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* elements: array<string, string>
* }
*/ */
final class ClassAttributesSeparationFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class ClassAttributesSeparationFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */
@ -65,17 +78,6 @@ final class ClassAttributesSeparationFixer extends AbstractFixer implements Conf
*/ */
private array $classElementTypes = []; private array $classElementTypes = [];
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->classElementTypes = []; // reset previous configuration
foreach ($this->configuration['elements'] as $elementType => $spacing) {
$this->classElementTypes[$elementType] = $spacing;
}
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -172,6 +174,15 @@ class Sample
return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds());
} }
protected function configurePostNormalisation(): void
{
$this->classElementTypes = []; // reset previous configuration
foreach ($this->configuration['elements'] as $elementType => $spacing) {
$this->classElementTypes[$elementType] = $spacing;
}
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
foreach ($this->getElementsByClass($tokens) as $class) { foreach ($this->getElementsByClass($tokens) as $class) {
@ -199,7 +210,7 @@ class Sample
{ {
return new FixerConfigurationResolver([ return new FixerConfigurationResolver([
(new FixerOptionBuilder('elements', 'Dictionary of `const|method|property|trait_import|case` => `none|one|only_if_meta` values.')) (new FixerOptionBuilder('elements', 'Dictionary of `const|method|property|trait_import|case` => `none|one|only_if_meta` values.'))
->setAllowedTypes(['string[]']) ->setAllowedTypes(['array<string, string>'])
->setAllowedValues([static function (array $option): bool { ->setAllowedValues([static function (array $option): bool {
foreach ($option as $type => $spacing) { foreach ($option as $type => $spacing) {
$supportedTypes = ['const', 'method', 'property', 'trait_import', 'case']; $supportedTypes = ['const', 'method', 'property', 'trait_import', 'case'];

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -33,9 +34,29 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
* *
* @phpstan-type _ClassExtendsInfo array{start: int, numberOfExtends: int, multiLine: bool} * @phpstan-type _ClassExtendsInfo array{start: int, numberOfExtends: int, multiLine: bool}
* @phpstan-type _ClassImplementsInfo array{start: int, numberOfImplements: int, multiLine: bool} * @phpstan-type _ClassImplementsInfo array{start: int, numberOfImplements: int, multiLine: bool}
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* inline_constructor_arguments?: bool,
* multi_line_extends_each_single_line?: bool,
* single_item_single_line?: bool,
* single_line?: bool,
* space_before_parenthesis?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* inline_constructor_arguments: bool,
* multi_line_extends_each_single_line: bool,
* single_item_single_line: bool,
* single_line: bool,
* space_before_parenthesis: bool
* }
*/ */
final class ClassDefinitionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class ClassDefinitionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -39,7 +39,7 @@ class MyApp {}
.'If you want to subclass a class, mark the parent class as abstract and create two child classes, one empty if necessary: you\'ll gain much more fine grained type-hinting. ' .'If you want to subclass a class, mark the parent class as abstract and create two child classes, one empty if necessary: you\'ll gain much more fine grained type-hinting. '
.'If you need to mock a standalone class, create an interface, or maybe it\'s a value-object that shouldn\'t be mocked at all. ' .'If you need to mock a standalone class, create an interface, or maybe it\'s a value-object that shouldn\'t be mocked at all. '
.'If you need to extend a standalone class, create an interface and use the Composite pattern. ' .'If you need to extend a standalone class, create an interface and use the Composite pattern. '
.'If you aren\'t ready yet for serious OOP, go with FinalInternalClassFixer, it\'s fine.', .'If these rules are too strict for you, you can use `FinalInternalClassFixer` instead.',
'Risky when subclassing non-abstract classes.' 'Risky when subclassing non-abstract classes.'
); );
} }

View File

@ -18,6 +18,7 @@ use PhpCsFixer\AbstractFixer;
use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException;
use PhpCsFixer\DocBlock\DocBlock; use PhpCsFixer\DocBlock\DocBlock;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -34,9 +35,29 @@ use Symfony\Component\OptionsResolver\Options;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* annotation_exclude?: list<string>,
* annotation_include?: list<string>,
* consider_absent_docblock_as_internal_class?: bool,
* exclude?: list<string>,
* include?: list<string>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* annotation_exclude: array<string, string>,
* annotation_include: array<string, string>,
* consider_absent_docblock_as_internal_class: bool,
* exclude: array<string, string>,
* include: array<string, string>
* }
*/ */
final class FinalInternalClassFixer extends AbstractFixer implements ConfigurableFixerInterface final class FinalInternalClassFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const DEFAULTS = [ private const DEFAULTS = [
'include' => [ 'include' => [
'internal', 'internal',
@ -61,13 +82,6 @@ final class FinalInternalClassFixer extends AbstractFixer implements Configurabl
$this->checkAttributes = \PHP_VERSION_ID >= 8_00_00; $this->checkAttributes = \PHP_VERSION_ID >= 8_00_00;
} }
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->assertConfigHasNoConflicts();
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -108,6 +122,11 @@ final class FinalInternalClassFixer extends AbstractFixer implements Configurabl
return true; return true;
} }
protected function configurePostNormalisation(): void
{
$this->assertConfigHasNoConflicts();
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
$tokensAnalyzer = new TokensAnalyzer($tokens); $tokensAnalyzer = new TokensAnalyzer($tokens);
@ -131,7 +150,7 @@ final class FinalInternalClassFixer extends AbstractFixer implements Configurabl
{ {
$annotationsAsserts = [static function (array $values): bool { $annotationsAsserts = [static function (array $values): bool {
foreach ($values as $value) { foreach ($values as $value) {
if (!\is_string($value) || '' === $value) { if ('' === $value) {
return false; return false;
} }
} }
@ -321,8 +340,7 @@ final class FinalInternalClassFixer extends AbstractFixer implements Configurabl
private function assertConfigHasNoConflicts(): void private function assertConfigHasNoConflicts(): void
{ {
foreach (['include', 'exclude'] as $newConfigKey) { foreach (['include' => 'annotation_include', 'exclude' => 'annotation_exclude'] as $newConfigKey => $oldConfigKey) {
$oldConfigKey = 'annotation_'.$newConfigKey;
$defaults = []; $defaults = [];
foreach (self::DEFAULTS[$newConfigKey] as $foo) { foreach (self::DEFAULTS[$newConfigKey] as $foo) {
@ -337,14 +355,14 @@ final class FinalInternalClassFixer extends AbstractFixer implements Configurabl
} }
if ($oldConfigIsSet) { if ($oldConfigIsSet) {
$this->configuration[$newConfigKey] = $this->configuration[$oldConfigKey]; $this->configuration[$newConfigKey] = $this->configuration[$oldConfigKey]; // @phpstan-ignore-line crazy mapping, to be removed while cleaning up deprecated options
$this->checkAttributes = false; // run in old mode $this->checkAttributes = false; // run in old mode
} }
// if ($newConfigIsSet) - only new config is set, all good // if ($newConfigIsSet) - only new config is set, all good
// if (!$newConfigIsSet && !$oldConfigIsSet) - both are set as to default values, all good // if (!$newConfigIsSet && !$oldConfigIsSet) - both are set as to default values, all good
unset($this->configuration[$oldConfigKey]); unset($this->configuration[$oldConfigKey]); // @phpstan-ignore-line crazy mapping, to be removed while cleaning up deprecated options
} }
$intersect = array_intersect_assoc($this->configuration['include'], $this->configuration['exclude']); $intersect = array_intersect_assoc($this->configuration['include'], $this->configuration['exclude']);

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -28,9 +29,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author Filippo Tessarotto <zoeslam@gmail.com> * @author Filippo Tessarotto <zoeslam@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* private_methods?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* private_methods: bool
* }
*/ */
final class NoUnneededFinalMethodFixer extends AbstractFixer implements ConfigurableFixerInterface final class NoUnneededFinalMethodFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -40,9 +41,25 @@ use PhpCsFixer\Utils;
* name: string, * name: string,
* end: int, * end: int,
* } * }
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* case_sensitive?: bool,
* order?: list<string>,
* sort_algorithm?: 'alpha'|'none'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* case_sensitive: bool,
* order: list<string>,
* sort_algorithm: 'alpha'|'none'
* }
*/ */
final class OrderedClassElementsFixer extends AbstractFixer implements ConfigurableFixerInterface final class OrderedClassElementsFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** @internal */ /** @internal */
public const SORT_ALPHA = 'alpha'; public const SORT_ALPHA = 'alpha';
@ -110,50 +127,6 @@ final class OrderedClassElementsFixer extends AbstractFixer implements Configura
*/ */
private array $typePosition; private array $typePosition;
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->typePosition = [];
$position = 0;
foreach ($this->configuration['order'] as $type) {
$this->typePosition[$type] = $position++;
}
foreach (self::$typeHierarchy as $type => $parents) {
if (isset($this->typePosition[$type])) {
continue;
}
if (null === $parents) {
$this->typePosition[$type] = null;
continue;
}
foreach ($parents as $parent) {
if (isset($this->typePosition[$parent])) {
$this->typePosition[$type] = $this->typePosition[$parent];
continue 2;
}
}
$this->typePosition[$type] = null;
}
$lastPosition = \count($this->configuration['order']);
foreach ($this->typePosition as &$pos) {
if (null === $pos) {
$pos = $lastPosition;
}
$pos *= 10; // last digit is used by phpunit method ordering
}
}
public function isCandidate(Tokens $tokens): bool public function isCandidate(Tokens $tokens): bool
{ {
return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds());
@ -255,6 +228,48 @@ Custom values:
return 65; return 65;
} }
protected function configurePostNormalisation(): void
{
$this->typePosition = [];
$position = 0;
foreach ($this->configuration['order'] as $type) {
$this->typePosition[$type] = $position++;
}
foreach (self::$typeHierarchy as $type => $parents) {
if (isset($this->typePosition[$type])) {
continue;
}
if (null === $parents) {
$this->typePosition[$type] = null;
continue;
}
foreach ($parents as $parent) {
if (isset($this->typePosition[$parent])) {
$this->typePosition[$type] = $this->typePosition[$parent];
continue 2;
}
}
$this->typePosition[$type] = null;
}
$lastPosition = \count($this->configuration['order']);
foreach ($this->typePosition as &$pos) {
if (null === $pos) {
$pos = $lastPosition;
}
$pos *= 10; // last digit is used by phpunit method ordering
}
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
for ($i = 1, $count = $tokens->count(); $i < $count; ++$i) { for ($i = 1, $count = $tokens->count(); $i < $count; ++$i) {
@ -294,7 +309,7 @@ Custom values:
return true; return true;
} }
if (\is_string($value) && 'method:' === substr($value, 0, 7)) { if ('method:' === substr($value, 0, 7)) {
return true; return true;
} }
} }

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -27,9 +28,25 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Dave van der Brugge <dmvdbrugge@gmail.com> * @author Dave van der Brugge <dmvdbrugge@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* case_sensitive?: bool,
* direction?: 'ascend'|'descend',
* order?: 'alpha'|'length'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* case_sensitive: bool,
* direction: 'ascend'|'descend',
* order: 'alpha'|'length'
* }
*/ */
final class OrderedInterfacesFixer extends AbstractFixer implements ConfigurableFixerInterface final class OrderedInterfacesFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** @internal */ /** @internal */
public const OPTION_DIRECTION = 'direction'; public const OPTION_DIRECTION = 'direction';

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -25,8 +26,21 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
use PhpCsFixer\Tokenizer\CT; use PhpCsFixer\Tokenizer\CT;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* case_sensitive?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* case_sensitive: bool
* }
*/
final class OrderedTraitsFixer extends AbstractFixer implements ConfigurableFixerInterface final class OrderedTraitsFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -34,9 +35,25 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author John Paul E. Balandan, CPA <paulbalandan@gmail.com> * @author John Paul E. Balandan, CPA <paulbalandan@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* case_sensitive?: bool,
* null_adjustment?: 'always_first'|'always_last'|'none',
* sort_algorithm?: 'alpha'|'none'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* case_sensitive: bool,
* null_adjustment: 'always_first'|'always_last'|'none',
* sort_algorithm: 'alpha'|'none'
* }
*/ */
final class OrderedTypesFixer extends AbstractFixer implements ConfigurableFixerInterface final class OrderedTypesFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
@ -35,9 +36,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
* *
* @author Javier Spagnoletti <phansys@gmail.com> * @author Javier Spagnoletti <phansys@gmail.com>
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* elements?: list<'const'|'property'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* elements: list<'const'|'property'>
* }
*/ */
final class SingleClassElementPerStatementFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class SingleClassElementPerStatementFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function isCandidate(Tokens $tokens): bool public function isCandidate(Tokens $tokens): bool
{ {
return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds());

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -32,9 +33,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
* Fixer for rules defined in PSR2 ¶4.3, ¶4.5. * Fixer for rules defined in PSR2 ¶4.3, ¶4.5.
* *
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* elements?: list<'const'|'method'|'property'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* elements: list<'const'|'method'|'property'>
* }
*/ */
final class VisibilityRequiredFixer extends AbstractFixer implements ConfigurableFixerInterface final class VisibilityRequiredFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Comment;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -31,9 +32,21 @@ use PhpCsFixer\Utils;
/** /**
* @author Kuba Werłos <werlos@gmail.com> * @author Kuba Werłos <werlos@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* ignored_tags?: list<string>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* ignored_tags: list<string>
* }
*/ */
final class CommentToPhpdocFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class CommentToPhpdocFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var list<string> * @var list<string>
*/ */
@ -74,10 +87,8 @@ final class CommentToPhpdocFixer extends AbstractFixer implements ConfigurableFi
); );
} }
public function configure(array $configuration): void protected function configurePostNormalisation(): void
{ {
parent::configure($configuration);
$this->ignoredTags = array_map( $this->ignoredTags = array_map(
static fn (string $tag): string => strtolower($tag), static fn (string $tag): string => strtolower($tag),
$this->configuration['ignored_tags'] $this->configuration['ignored_tags']

View File

@ -17,6 +17,7 @@ namespace PhpCsFixer\Fixer\Comment;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -31,9 +32,27 @@ use Symfony\Component\OptionsResolver\Options;
/** /**
* @author Antonio J. García Lagar <aj@garcialagar.es> * @author Antonio J. García Lagar <aj@garcialagar.es>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* comment_type?: 'PHPDoc'|'comment',
* header: string,
* location?: 'after_declare_strict'|'after_open',
* separate?: 'both'|'bottom'|'none'|'top'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* comment_type: 'PHPDoc'|'comment',
* header: string,
* location: 'after_declare_strict'|'after_open',
* separate: 'both'|'bottom'|'none'|'top'
* }
*/ */
final class HeaderCommentFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class HeaderCommentFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Comment;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -29,9 +30,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Filippo Tessarotto <zoeslam@gmail.com> * @author Filippo Tessarotto <zoeslam@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* comment_types?: list<'asterisk'|'hash'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* comment_types: list<'asterisk'|'hash'>
* }
*/ */
final class SingleLineCommentStyleFixer extends AbstractFixer implements ConfigurableFixerInterface final class SingleLineCommentStyleFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var bool * @var bool
*/ */
@ -42,14 +55,6 @@ final class SingleLineCommentStyleFixer extends AbstractFixer implements Configu
*/ */
private $hashEnabled; private $hashEnabled;
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->asteriskEnabled = \in_array('asterisk', $this->configuration['comment_types'], true);
$this->hashEnabled = \in_array('hash', $this->configuration['comment_types'], true);
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -111,6 +116,12 @@ $c = 3;
return $tokens->isTokenKindFound(T_COMMENT); return $tokens->isTokenKindFound(T_COMMENT);
} }
protected function configurePostNormalisation(): void
{
$this->asteriskEnabled = \in_array('asterisk', $this->configuration['comment_types'], true);
$this->hashEnabled = \in_array('hash', $this->configuration['comment_types'], true);
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
foreach ($tokens as $index => $token) { foreach ($tokens as $index => $token) {

View File

@ -19,6 +19,9 @@ use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @template TFixerInputConfig of array<string, mixed>
* @template TFixerComputedConfig of array<string, mixed>
*/ */
interface ConfigurableFixerInterface extends FixerInterface interface ConfigurableFixerInterface extends FixerInterface
{ {
@ -34,7 +37,7 @@ interface ConfigurableFixerInterface extends FixerInterface
* eg `php_unit_strict` fixer allows to configure which methods should be fixed. * eg `php_unit_strict` fixer allows to configure which methods should be fixed.
* Finally, some fixers need configuration to work, eg `header_comment`. * Finally, some fixers need configuration to work, eg `header_comment`.
* *
* @param array<string, mixed> $configuration configuration depends on Fixer * @param TFixerInputConfig $configuration configuration depends on Fixer
* *
* @throws InvalidFixerConfigurationException * @throws InvalidFixerConfigurationException
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ConstantNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -31,9 +32,29 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
/** /**
* @author Filippo Tessarotto <zoeslam@gmail.com> * @author Filippo Tessarotto <zoeslam@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* exclude?: list<string>,
* fix_built_in?: bool,
* include?: list<string>,
* scope?: 'all'|'namespaced',
* strict?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* exclude: list<string>,
* fix_built_in: bool,
* include: list<string>,
* scope: 'all'|'namespaced',
* strict: bool
* }
*/ */
final class NativeConstantInvocationFixer extends AbstractFixer implements ConfigurableFixerInterface final class NativeConstantInvocationFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<string, true> * @var array<string, true>
*/ */
@ -113,10 +134,8 @@ namespace {
return true; return true;
} }
public function configure(array $configuration): void protected function configurePostNormalisation(): void
{ {
parent::configure($configuration);
$uniqueConfiguredExclude = array_unique($this->configuration['exclude']); $uniqueConfiguredExclude = array_unique($this->configuration['exclude']);
// Case-sensitive constants handling // Case-sensitive constants handling
@ -130,6 +149,7 @@ namespace {
} }
} }
/** @var list<string> */
$constantsToEscape = array_diff( $constantsToEscape = array_diff(
array_unique($constantsToEscape), array_unique($constantsToEscape),
$uniqueConfiguredExclude $uniqueConfiguredExclude
@ -188,7 +208,7 @@ namespace {
{ {
$constantChecker = static function (array $value): bool { $constantChecker = static function (array $value): bool {
foreach ($value as $constantName) { foreach ($value as $constantName) {
if (!\is_string($constantName) || '' === trim($constantName) || trim($constantName) !== $constantName) { if (trim($constantName) !== $constantName) {
throw new InvalidOptionsException(sprintf( throw new InvalidOptionsException(sprintf(
'Each element must be a non-empty, trimmed string, got "%s" instead.', 'Each element must be a non-empty, trimmed string, got "%s" instead.',
get_debug_type($constantName) get_debug_type($constantName)

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -26,8 +27,21 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
use PhpCsFixer\Tokenizer\Analyzer\WhitespacesAnalyzer; use PhpCsFixer\Tokenizer\Analyzer\WhitespacesAnalyzer;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* position?: 'next_line'|'same_line'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* position: 'next_line'|'same_line'
* }
*/
final class ControlStructureContinuationPositionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class ControlStructureContinuationPositionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -26,8 +27,21 @@ use PhpCsFixer\Tokenizer\Token;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
use PhpCsFixer\Tokenizer\TokensAnalyzer; use PhpCsFixer\Tokenizer\TokensAnalyzer;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* style?: 'braces'|'semicolon'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* style: 'braces'|'semicolon'
* }
*/
final class EmptyLoopBodyFixer extends AbstractFixer implements ConfigurableFixerInterface final class EmptyLoopBodyFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const STYLE_BRACES = 'braces'; private const STYLE_BRACES = 'braces';
private const STYLE_SEMICOLON = 'semicolon'; private const STYLE_SEMICOLON = 'semicolon';

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -25,8 +26,21 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
use PhpCsFixer\Tokenizer\Token; use PhpCsFixer\Tokenizer\Token;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* style?: 'for'|'while'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* style: 'for'|'while'
* }
*/
final class EmptyLoopConditionFixer extends AbstractFixer implements ConfigurableFixerInterface final class EmptyLoopConditionFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const STYLE_FOR = 'for'; private const STYLE_FOR = 'for';
private const STYLE_WHILE = 'while'; private const STYLE_WHILE = 'while';

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -27,9 +28,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Eddilbert Macharia <edd.cowan@gmail.com> * @author Eddilbert Macharia <edd.cowan@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* fix_non_monolithic_code?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* fix_non_monolithic_code: bool
* }
*/ */
final class NoAlternativeSyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface final class NoAlternativeSyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -32,9 +33,21 @@ use Symfony\Component\OptionsResolver\Options;
/** /**
* Fixer for rule defined in PSR2 ¶5.2. * Fixer for rule defined in PSR2 ¶5.2.
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* comment_text?: string
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* comment_text: string
* }
*/ */
final class NoBreakCommentFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class NoBreakCommentFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -25,8 +26,21 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
use PhpCsFixer\Tokenizer\Token; use PhpCsFixer\Tokenizer\Token;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* namespaces?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* namespaces: bool
* }
*/
final class NoUnneededBracesFixer extends AbstractFixer implements ConfigurableFixerInterface final class NoUnneededBracesFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -32,9 +33,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
* @author Sullivan Senechal <soullivaneuh@gmail.com> * @author Sullivan Senechal <soullivaneuh@gmail.com>
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
* @author Gregor Harlan <gharlan@web.de> * @author Gregor Harlan <gharlan@web.de>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* statements?: list<'break'|'clone'|'continue'|'echo_print'|'negative_instanceof'|'others'|'return'|'switch_case'|'yield'|'yield_from'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* statements: list<'break'|'clone'|'continue'|'echo_print'|'negative_instanceof'|'others'|'return'|'switch_case'|'yield'|'yield_from'>
* }
*/ */
final class NoUnneededControlParenthesesFixer extends AbstractFixer implements ConfigurableFixerInterface final class NoUnneededControlParenthesesFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var list<int> * @var list<int>
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractProxyFixer; use PhpCsFixer\AbstractProxyFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\DeprecatedFixerInterface; use PhpCsFixer\Fixer\DeprecatedFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -25,9 +26,21 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
/** /**
* @deprecated * @deprecated
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* namespaces?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* namespaces: bool
* }
*/ */
final class NoUnneededCurlyBracesFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface final class NoUnneededCurlyBracesFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private NoUnneededBracesFixer $noUnneededBracesFixer; private NoUnneededBracesFixer $noUnneededBracesFixer;
public function __construct() public function __construct()
@ -49,13 +62,6 @@ final class NoUnneededCurlyBracesFixer extends AbstractProxyFixer implements Con
); );
} }
public function configure(array $configuration): void
{
$this->noUnneededBracesFixer->configure($configuration);
parent::configure($configuration);
}
/** /**
* {@inheritdoc} * {@inheritdoc}
* *
@ -73,6 +79,14 @@ final class NoUnneededCurlyBracesFixer extends AbstractProxyFixer implements Con
]; ];
} }
/**
* @param _AutogeneratedInputConfiguration $configuration
*/
protected function configurePreNormalisation(array $configuration): void
{
$this->noUnneededBracesFixer->configure($configuration);
}
protected function createConfigurationDefinition(): FixerConfigurationResolverInterface protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
{ {
return new FixerConfigurationResolver([ return new FixerConfigurationResolver([

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -36,9 +37,23 @@ use Symfony\Component\OptionsResolver\Options;
* @author Sebastiaan Stok <s.stok@rollerscapes.net> * @author Sebastiaan Stok <s.stok@rollerscapes.net>
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
* @author Kuba Werłos <werlos@gmail.com> * @author Kuba Werłos <werlos@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* after_heredoc?: bool,
* elements?: list<'arguments'|'arrays'|'match'|'parameters'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* after_heredoc: bool,
* elements: list<'arguments'|'arrays'|'match'|'parameters'>
* }
*/ */
final class TrailingCommaInMultilineFixer extends AbstractFixer implements ConfigurableFixerInterface final class TrailingCommaInMultilineFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ControlStructure;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -30,9 +31,27 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author Bram Gotink <bram@gotink.me> * @author Bram Gotink <bram@gotink.me>
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* always_move_variable?: bool,
* equal?: bool|null,
* identical?: bool|null,
* less_and_greater?: bool|null
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* always_move_variable: bool,
* equal: bool|null,
* identical: bool|null,
* less_and_greater: bool|null
* }
*/ */
final class YodaStyleFixer extends AbstractFixer implements ConfigurableFixerInterface final class YodaStyleFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<int|string, Token> * @var array<int|string, Token>
*/ */
@ -48,13 +67,6 @@ final class YodaStyleFixer extends AbstractFixer implements ConfigurableFixerInt
*/ */
private $candidateTypes; private $candidateTypes;
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->resolveConfiguration();
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -119,6 +131,11 @@ return $foo === count($bar);
return $tokens->isAnyTokenKindsFound($this->candidateTypes); return $tokens->isAnyTokenKindsFound($this->candidateTypes);
} }
protected function configurePostNormalisation(): void
{
$this->resolveConfiguration();
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
$this->fixTokens($tokens); $this->fixTokens($tokens);

View File

@ -17,6 +17,8 @@ namespace PhpCsFixer\Fixer\DoctrineAnnotation;
use PhpCsFixer\AbstractDoctrineAnnotationFixer; use PhpCsFixer\AbstractDoctrineAnnotationFixer;
use PhpCsFixer\Doctrine\Annotation\DocLexer; use PhpCsFixer\Doctrine\Annotation\DocLexer;
use PhpCsFixer\Doctrine\Annotation\Tokens; use PhpCsFixer\Doctrine\Annotation\Tokens;
use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -26,9 +28,23 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
/** /**
* Forces the configured operator for assignment in arrays in Doctrine Annotations. * Forces the configured operator for assignment in arrays in Doctrine Annotations.
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* ignored_tags?: list<string>,
* operator?: ':'|'='
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* ignored_tags: list<string>,
* operator: ':'|'='
* }
*/ */
final class DoctrineAnnotationArrayAssignmentFixer extends AbstractDoctrineAnnotationFixer final class DoctrineAnnotationArrayAssignmentFixer extends AbstractDoctrineAnnotationFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -59,8 +75,7 @@ final class DoctrineAnnotationArrayAssignmentFixer extends AbstractDoctrineAnnot
{ {
$options = parent::createConfigurationDefinition()->getOptions(); $options = parent::createConfigurationDefinition()->getOptions();
$operator = new FixerOptionBuilder('operator', 'The operator to use.'); $options[] = (new FixerOptionBuilder('operator', 'The operator to use.'))
$options[] = $operator
->setAllowedValues(['=', ':']) ->setAllowedValues(['=', ':'])
->setDefault('=') ->setDefault('=')
->getOption() ->getOption()

View File

@ -18,6 +18,8 @@ use PhpCsFixer\AbstractDoctrineAnnotationFixer;
use PhpCsFixer\Doctrine\Annotation\DocLexer; use PhpCsFixer\Doctrine\Annotation\DocLexer;
use PhpCsFixer\Doctrine\Annotation\Token; use PhpCsFixer\Doctrine\Annotation\Token;
use PhpCsFixer\Doctrine\Annotation\Tokens; use PhpCsFixer\Doctrine\Annotation\Tokens;
use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -27,9 +29,23 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
/** /**
* Adds braces to Doctrine annotations when missing. * Adds braces to Doctrine annotations when missing.
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* ignored_tags?: list<string>,
* syntax?: 'with_braces'|'without_braces'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* ignored_tags: list<string>,
* syntax: 'with_braces'|'without_braces'
* }
*/ */
final class DoctrineAnnotationBracesFixer extends AbstractDoctrineAnnotationFixer final class DoctrineAnnotationBracesFixer extends AbstractDoctrineAnnotationFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -17,6 +17,8 @@ namespace PhpCsFixer\Fixer\DoctrineAnnotation;
use PhpCsFixer\AbstractDoctrineAnnotationFixer; use PhpCsFixer\AbstractDoctrineAnnotationFixer;
use PhpCsFixer\Doctrine\Annotation\DocLexer; use PhpCsFixer\Doctrine\Annotation\DocLexer;
use PhpCsFixer\Doctrine\Annotation\Tokens; use PhpCsFixer\Doctrine\Annotation\Tokens;
use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -25,8 +27,23 @@ use PhpCsFixer\FixerDefinition\FixerDefinition;
use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
use PhpCsFixer\Preg; use PhpCsFixer\Preg;
final class DoctrineAnnotationIndentationFixer extends AbstractDoctrineAnnotationFixer /**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* ignored_tags?: list<string>,
* indent_mixed_lines?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* ignored_tags: list<string>,
* indent_mixed_lines: bool
* }
*/
final class DoctrineAnnotationIndentationFixer extends AbstractDoctrineAnnotationFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -18,6 +18,8 @@ use PhpCsFixer\AbstractDoctrineAnnotationFixer;
use PhpCsFixer\Doctrine\Annotation\DocLexer; use PhpCsFixer\Doctrine\Annotation\DocLexer;
use PhpCsFixer\Doctrine\Annotation\Token; use PhpCsFixer\Doctrine\Annotation\Token;
use PhpCsFixer\Doctrine\Annotation\Tokens; use PhpCsFixer\Doctrine\Annotation\Tokens;
use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -28,9 +30,37 @@ use PhpCsFixer\Preg;
/** /**
* Fixes spaces around commas and assignment operators in Doctrine annotations. * Fixes spaces around commas and assignment operators in Doctrine annotations.
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* after_argument_assignments?: bool|null,
* after_array_assignments_colon?: bool|null,
* after_array_assignments_equals?: bool|null,
* around_commas?: bool,
* around_parentheses?: bool,
* before_argument_assignments?: bool|null,
* before_array_assignments_colon?: bool|null,
* before_array_assignments_equals?: bool|null,
* ignored_tags?: list<string>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* after_argument_assignments: bool|null,
* after_array_assignments_colon: bool|null,
* after_array_assignments_equals: bool|null,
* around_commas: bool,
* around_parentheses: bool,
* before_argument_assignments: bool|null,
* before_array_assignments_colon: bool|null,
* before_array_assignments_equals: bool|null,
* ignored_tags: list<string>
* }
*/ */
final class DoctrineAnnotationSpacesFixer extends AbstractDoctrineAnnotationFixer final class DoctrineAnnotationSpacesFixer extends AbstractDoctrineAnnotationFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\FunctionNotation;
use PhpCsFixer\AbstractFopenFlagFixer; use PhpCsFixer\AbstractFopenFlagFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -25,8 +26,21 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
use PhpCsFixer\Tokenizer\Token; use PhpCsFixer\Tokenizer\Token;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* b_mode?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* b_mode: bool
* }
*/
final class FopenFlagsFixer extends AbstractFopenFlagFixer implements ConfigurableFixerInterface final class FopenFlagsFixer extends AbstractFopenFlagFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\FunctionNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -30,9 +31,25 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
* Fixer for rules defined in PSR2 generally (¶1 and ¶6). * Fixer for rules defined in PSR2 generally (¶1 and ¶6).
* *
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* closure_fn_spacing?: 'none'|'one',
* closure_function_spacing?: 'none'|'one',
* trailing_comma_single_line?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* closure_fn_spacing: 'none'|'one',
* closure_function_spacing: 'none'|'one',
* trailing_comma_single_line: bool
* }
*/ */
final class FunctionDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface final class FunctionDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\FunctionNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -30,9 +31,27 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Kuanhung Chen <ericj.tw@gmail.com> * @author Kuanhung Chen <ericj.tw@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* after_heredoc?: bool,
* attribute_placement?: 'ignore'|'same_line'|'standalone',
* keep_multiple_spaces_after_comma?: bool,
* on_multiline?: 'ensure_fully_multiline'|'ensure_single_line'|'ignore'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* after_heredoc: bool,
* attribute_placement: 'ignore'|'same_line'|'standalone',
* keep_multiple_spaces_after_comma: bool,
* on_multiline: 'ensure_fully_multiline'|'ensure_single_line'|'ignore'
* }
*/ */
final class MethodArgumentSpaceFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class MethodArgumentSpaceFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\FunctionNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -31,9 +32,27 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
/** /**
* @author Andreas Möller <am@localheinz.com> * @author Andreas Möller <am@localheinz.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* exclude?: list<string>,
* include?: list<string>,
* scope?: 'all'|'namespaced',
* strict?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* exclude: list<string>,
* include: list<string>,
* scope: 'all'|'namespaced',
* strict: bool
* }
*/ */
final class NativeFunctionInvocationFixer extends AbstractFixer implements ConfigurableFixerInterface final class NativeFunctionInvocationFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */
@ -61,13 +80,6 @@ final class NativeFunctionInvocationFixer extends AbstractFixer implements Confi
*/ */
private $functionFilter; private $functionFilter;
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->functionFilter = $this->getFunctionFilter();
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -181,6 +193,11 @@ $c = get_class($d);
return true; return true;
} }
protected function configurePostNormalisation(): void
{
$this->functionFilter = $this->getFunctionFilter();
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
if ('all' === $this->configuration['scope']) { if ('all' === $this->configuration['scope']) {
@ -205,7 +222,7 @@ $c = get_class($d);
->setAllowedTypes(['string[]']) ->setAllowedTypes(['string[]'])
->setAllowedValues([static function (array $value): bool { ->setAllowedValues([static function (array $value): bool {
foreach ($value as $functionName) { foreach ($value as $functionName) {
if (!\is_string($functionName) || '' === trim($functionName) || trim($functionName) !== $functionName) { if ('' === trim($functionName) || trim($functionName) !== $functionName) {
throw new InvalidOptionsException(sprintf( throw new InvalidOptionsException(sprintf(
'Each element must be a non-empty, trimmed string, got "%s" instead.', 'Each element must be a non-empty, trimmed string, got "%s" instead.',
get_debug_type($functionName) get_debug_type($functionName)
@ -221,7 +238,7 @@ $c = get_class($d);
->setAllowedTypes(['string[]']) ->setAllowedTypes(['string[]'])
->setAllowedValues([static function (array $value): bool { ->setAllowedValues([static function (array $value): bool {
foreach ($value as $functionName) { foreach ($value as $functionName) {
if (!\is_string($functionName) || '' === trim($functionName) || trim($functionName) !== $functionName) { if ('' === trim($functionName) || trim($functionName) !== $functionName) {
throw new InvalidOptionsException(sprintf( throw new InvalidOptionsException(sprintf(
'Each element must be a non-empty, trimmed string, got "%s" instead.', 'Each element must be a non-empty, trimmed string, got "%s" instead.',
get_debug_type($functionName) get_debug_type($functionName)

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\FunctionNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -33,9 +34,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author HypeMC <hypemc@gmail.com> * @author HypeMC <hypemc@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* use_nullable_type_declaration?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* use_nullable_type_declaration: bool
* }
*/ */
final class NullableTypeDeclarationForDefaultNullValueFixer extends AbstractFixer implements ConfigurableFixerInterface final class NullableTypeDeclarationForDefaultNullValueFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\FunctionNotation;
use PhpCsFixer\AbstractPhpdocToTypeDeclarationFixer; use PhpCsFixer\AbstractPhpdocToTypeDeclarationFixer;
use PhpCsFixer\DocBlock\Annotation; use PhpCsFixer\DocBlock\Annotation;
use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ExperimentalFixerInterface; use PhpCsFixer\Fixer\ExperimentalFixerInterface;
use PhpCsFixer\FixerDefinition\CodeSample; use PhpCsFixer\FixerDefinition\CodeSample;
use PhpCsFixer\FixerDefinition\FixerDefinition; use PhpCsFixer\FixerDefinition\FixerDefinition;
@ -25,8 +26,19 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Jan Gantzert <jan@familie-gantzert.de> * @author Jan Gantzert <jan@familie-gantzert.de>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* scalar_types?: bool,
* union_types?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* scalar_types: bool,
* union_types: bool
* }
*/ */
final class PhpdocToParamTypeFixer extends AbstractPhpdocToTypeDeclarationFixer implements ExperimentalFixerInterface final class PhpdocToParamTypeFixer extends AbstractPhpdocToTypeDeclarationFixer implements ConfigurableFixerInterface, ExperimentalFixerInterface
{ {
private const TYPE_CHECK_TEMPLATE = '<?php function f(%s $x) {}'; private const TYPE_CHECK_TEMPLATE = '<?php function f(%s $x) {}';

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\FunctionNotation;
use PhpCsFixer\AbstractPhpdocToTypeDeclarationFixer; use PhpCsFixer\AbstractPhpdocToTypeDeclarationFixer;
use PhpCsFixer\DocBlock\Annotation; use PhpCsFixer\DocBlock\Annotation;
use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ExperimentalFixerInterface; use PhpCsFixer\Fixer\ExperimentalFixerInterface;
use PhpCsFixer\FixerDefinition\CodeSample; use PhpCsFixer\FixerDefinition\CodeSample;
use PhpCsFixer\FixerDefinition\FixerDefinition; use PhpCsFixer\FixerDefinition\FixerDefinition;
@ -25,8 +26,19 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @phpstan-import-type _CommonTypeInfo from AbstractPhpdocToTypeDeclarationFixer * @phpstan-import-type _CommonTypeInfo from AbstractPhpdocToTypeDeclarationFixer
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* scalar_types?: bool,
* union_types?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* scalar_types: bool,
* union_types: bool
* }
*/ */
final class PhpdocToPropertyTypeFixer extends AbstractPhpdocToTypeDeclarationFixer implements ExperimentalFixerInterface final class PhpdocToPropertyTypeFixer extends AbstractPhpdocToTypeDeclarationFixer implements ConfigurableFixerInterface, ExperimentalFixerInterface
{ {
private const TYPE_CHECK_TEMPLATE = '<?php class A { private %s $b; }'; private const TYPE_CHECK_TEMPLATE = '<?php class A { private %s $b; }';

View File

@ -15,6 +15,7 @@ declare(strict_types=1);
namespace PhpCsFixer\Fixer\FunctionNotation; namespace PhpCsFixer\Fixer\FunctionNotation;
use PhpCsFixer\AbstractPhpdocToTypeDeclarationFixer; use PhpCsFixer\AbstractPhpdocToTypeDeclarationFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ExperimentalFixerInterface; use PhpCsFixer\Fixer\ExperimentalFixerInterface;
use PhpCsFixer\FixerDefinition\CodeSample; use PhpCsFixer\FixerDefinition\CodeSample;
use PhpCsFixer\FixerDefinition\FixerDefinition; use PhpCsFixer\FixerDefinition\FixerDefinition;
@ -27,8 +28,19 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Filippo Tessarotto <zoeslam@gmail.com> * @author Filippo Tessarotto <zoeslam@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* scalar_types?: bool,
* union_types?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* scalar_types: bool,
* union_types: bool
* }
*/ */
final class PhpdocToReturnTypeFixer extends AbstractPhpdocToTypeDeclarationFixer implements ExperimentalFixerInterface final class PhpdocToReturnTypeFixer extends AbstractPhpdocToTypeDeclarationFixer implements ConfigurableFixerInterface, ExperimentalFixerInterface
{ {
private const TYPE_CHECK_TEMPLATE = '<?php function f(): %s {}'; private const TYPE_CHECK_TEMPLATE = '<?php function f(): %s {}';

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\FunctionNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -28,9 +29,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* space_before?: 'none'|'one'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* space_before: 'none'|'one'
* }
*/ */
final class ReturnTypeDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface final class ReturnTypeDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -17,6 +17,7 @@ namespace PhpCsFixer\Fixer\Import;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\DocBlock\TypeExpression; use PhpCsFixer\DocBlock\TypeExpression;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -40,9 +41,25 @@ use PhpCsFixer\Tokenizer\Tokens;
* @author Greg Korba <greg@codito.dev> * @author Greg Korba <greg@codito.dev>
* @author SpacePossum <possumfromspace@gmail.com> * @author SpacePossum <possumfromspace@gmail.com>
* @author Michael Vorisek <https://github.com/mvorisek> * @author Michael Vorisek <https://github.com/mvorisek>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* import_symbols?: bool,
* leading_backslash_in_global_namespace?: bool,
* phpdoc_tags?: list<string>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* import_symbols: bool,
* leading_backslash_in_global_namespace: bool,
* phpdoc_tags: list<string>
* }
*/ */
final class FullyQualifiedStrictTypesFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class FullyQualifiedStrictTypesFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const REGEX_CLASS = '(?:\\\?+'.TypeExpression::REGEX_IDENTIFIER private const REGEX_CLASS = '(?:\\\?+'.TypeExpression::REGEX_IDENTIFIER
.'(\\\\'.TypeExpression::REGEX_IDENTIFIER.')*+)'; .'(\\\\'.TypeExpression::REGEX_IDENTIFIER.')*+)';

View File

@ -18,6 +18,7 @@ use PhpCsFixer\AbstractFixer;
use PhpCsFixer\DocBlock\Annotation; use PhpCsFixer\DocBlock\Annotation;
use PhpCsFixer\DocBlock\DocBlock; use PhpCsFixer\DocBlock\DocBlock;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -38,9 +39,25 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author Gregor Harlan <gharlan@web.de> * @author Gregor Harlan <gharlan@web.de>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* import_classes?: bool|null,
* import_constants?: bool|null,
* import_functions?: bool|null
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* import_classes: bool|null,
* import_constants: bool|null,
* import_functions: bool|null
* }
*/ */
final class GlobalNamespaceImportFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class GlobalNamespaceImportFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private ImportProcessor $importProcessor; private ImportProcessor $importProcessor;
public function __construct() public function __construct()

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Import;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -33,9 +34,21 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
/** /**
* @author Volodymyr Kupriienko <vldmr.kuprienko@gmail.com> * @author Volodymyr Kupriienko <vldmr.kuprienko@gmail.com>
* @author Greg Korba <greg@codito.dev> * @author Greg Korba <greg@codito.dev>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* group_types?: list<string>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* group_types: list<string>
* }
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*/ */
final class GroupImportFixer extends AbstractFixer implements ConfigurableFixerInterface final class GroupImportFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** @internal */ /** @internal */
public const GROUP_CLASSY = 'classy'; public const GROUP_CLASSY = 'classy';

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Import;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -44,9 +45,25 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
* importType: self::IMPORT_TYPE_*, * importType: self::IMPORT_TYPE_*,
* group: bool, * group: bool,
* } * }
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* case_sensitive?: bool,
* imports_order?: list<string>|null,
* sort_algorithm?: 'alpha'|'length'|'none'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* case_sensitive: bool,
* imports_order: list<string>|null,
* sort_algorithm: 'alpha'|'length'|'none'
* }
*/ */
final class OrderedImportsFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class OrderedImportsFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Import;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -33,9 +34,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
* Fixer for rules defined in PSR2 ¶3. * Fixer for rules defined in PSR2 ¶3.
* *
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* group_to_single_imports?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* group_to_single_imports: bool
* }
*/ */
final class SingleImportPerStatementFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class SingleImportPerStatementFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\LanguageConstruct;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -27,9 +28,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* space?: 'none'|'single'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* space: 'none'|'single'
* }
*/ */
final class DeclareEqualNormalizeFixer extends AbstractFixer implements ConfigurableFixerInterface final class DeclareEqualNormalizeFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\LanguageConstruct;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -29,9 +30,25 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Jules Pietri <jules@heahprod.com> * @author Jules Pietri <jules@heahprod.com>
* @author Kuba Werłos <werlos@gmail.com> * @author Kuba Werłos <werlos@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* mute_deprecation_error?: bool,
* noise_remaining_usages?: bool,
* noise_remaining_usages_exclude?: list<string>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* mute_deprecation_error: bool,
* noise_remaining_usages: bool,
* noise_remaining_usages_exclude: list<string>
* }
*/ */
final class ErrorSuppressionFixer extends AbstractFixer implements ConfigurableFixerInterface final class ErrorSuppressionFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\LanguageConstruct;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -28,8 +29,21 @@ use PhpCsFixer\Tokenizer\CT;
use PhpCsFixer\Tokenizer\Token; use PhpCsFixer\Tokenizer\Token;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* functions?: list<'get_called_class'|'get_class'|'get_class_this'|'php_sapi_name'|'phpversion'|'pi'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* functions: list<'get_called_class'|'get_class'|'get_class_this'|'php_sapi_name'|'phpversion'|'pi'>
* }
*/
final class FunctionToConstantFixer extends AbstractFixer implements ConfigurableFixerInterface final class FunctionToConstantFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<string, list<Token>> * @var array<string, list<Token>>
*/ */
@ -68,17 +82,6 @@ final class FunctionToConstantFixer extends AbstractFixer implements Configurabl
parent::__construct(); parent::__construct();
} }
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->functionsFixMap = [];
foreach ($this->configuration['functions'] as $key) {
$this->functionsFixMap[$key] = self::$availableFunctions[$key];
}
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -118,6 +121,15 @@ final class FunctionToConstantFixer extends AbstractFixer implements Configurabl
return true; return true;
} }
protected function configurePostNormalisation(): void
{
$this->functionsFixMap = [];
foreach ($this->configuration['functions'] as $key) {
$this->functionsFixMap[$key] = self::$availableFunctions[$key];
}
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
$functionAnalyzer = new FunctionsAnalyzer(); $functionAnalyzer = new FunctionsAnalyzer();

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\LanguageConstruct;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -33,9 +34,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author John Paul E. Balandan, CPA <paulbalandan@gmail.com> * @author John Paul E. Balandan, CPA <paulbalandan@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* syntax?: 'question_mark'|'union'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* syntax: 'question_mark'|'union'
* }
*/ */
final class NullableTypeDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface final class NullableTypeDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const OPTION_SYNTAX_UNION = 'union'; private const OPTION_SYNTAX_UNION = 'union';
private const OPTION_SYNTAX_QUESTION_MARK = 'question_mark'; private const OPTION_SYNTAX_QUESTION_MARK = 'question_mark';
@ -88,10 +101,8 @@ class ValueObject
return 2; return 2;
} }
public function configure(array $configuration): void protected function configurePostNormalisation(): void
{ {
parent::configure($configuration);
$this->candidateTokenKind = self::OPTION_SYNTAX_QUESTION_MARK === $this->configuration['syntax'] $this->candidateTokenKind = self::OPTION_SYNTAX_QUESTION_MARK === $this->configuration['syntax']
? CT::T_TYPE_ALTERNATION // `|` -> `?` ? CT::T_TYPE_ALTERNATION // `|` -> `?`
: CT::T_NULLABLE_TYPE; // `?` -> `|` : CT::T_NULLABLE_TYPE; // `?` -> `|`

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\LanguageConstruct;
use PhpCsFixer\AbstractProxyFixer; use PhpCsFixer\AbstractProxyFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\DeprecatedFixerInterface; use PhpCsFixer\Fixer\DeprecatedFixerInterface;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
@ -30,9 +31,21 @@ use PhpCsFixer\Tokenizer\CT;
* @author Andreas Möller <am@localheinz.com> * @author Andreas Möller <am@localheinz.com>
* *
* @deprecated * @deprecated
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* constructs?: list<'abstract'|'as'|'attribute'|'break'|'case'|'catch'|'class'|'clone'|'comment'|'const'|'const_import'|'continue'|'do'|'echo'|'else'|'elseif'|'enum'|'extends'|'final'|'finally'|'for'|'foreach'|'function'|'function_import'|'global'|'goto'|'if'|'implements'|'include'|'include_once'|'instanceof'|'insteadof'|'interface'|'match'|'named_argument'|'namespace'|'new'|'open_tag_with_echo'|'php_doc'|'php_open'|'print'|'private'|'protected'|'public'|'readonly'|'require'|'require_once'|'return'|'static'|'switch'|'throw'|'trait'|'try'|'type_colon'|'use'|'use_lambda'|'use_trait'|'var'|'while'|'yield'|'yield_from'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* constructs: list<'abstract'|'as'|'attribute'|'break'|'case'|'catch'|'class'|'clone'|'comment'|'const'|'const_import'|'continue'|'do'|'echo'|'else'|'elseif'|'enum'|'extends'|'final'|'finally'|'for'|'foreach'|'function'|'function_import'|'global'|'goto'|'if'|'implements'|'include'|'include_once'|'instanceof'|'insteadof'|'interface'|'match'|'named_argument'|'namespace'|'new'|'open_tag_with_echo'|'php_doc'|'php_open'|'print'|'private'|'protected'|'public'|'readonly'|'require'|'require_once'|'return'|'static'|'switch'|'throw'|'trait'|'try'|'type_colon'|'use'|'use_lambda'|'use_trait'|'var'|'while'|'yield'|'yield_from'>
* }
*/ */
final class SingleSpaceAfterConstructFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface final class SingleSpaceAfterConstructFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<string, null|int> * @var array<string, null|int>
*/ */
@ -114,19 +127,6 @@ final class SingleSpaceAfterConstructFixer extends AbstractProxyFixer implements
return array_keys($this->proxyFixers); return array_keys($this->proxyFixers);
} }
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->singleSpaceAroundConstructFixer->configure([
'constructs_contain_a_single_space' => [
'yield_from',
],
'constructs_preceded_by_a_single_space' => [],
'constructs_followed_by_a_single_space' => $this->configuration['constructs'],
]);
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -175,6 +175,17 @@ yield from baz();
return parent::getPriority(); return parent::getPriority();
} }
protected function configurePostNormalisation(): void
{
$this->singleSpaceAroundConstructFixer->configure([
'constructs_contain_a_single_space' => [
'yield_from',
],
'constructs_preceded_by_a_single_space' => [],
'constructs_followed_by_a_single_space' => $this->configuration['constructs'],
]);
}
protected function createProxyFixers(): array protected function createProxyFixers(): array
{ {
return [$this->singleSpaceAroundConstructFixer]; return [$this->singleSpaceAroundConstructFixer];

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\LanguageConstruct;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -31,9 +32,25 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Andreas Möller <am@localheinz.com> * @author Andreas Möller <am@localheinz.com>
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* constructs_contain_a_single_space?: list<'yield_from'>,
* constructs_followed_by_a_single_space?: list<'abstract'|'as'|'attribute'|'break'|'case'|'catch'|'class'|'clone'|'comment'|'const'|'const_import'|'continue'|'do'|'echo'|'else'|'elseif'|'enum'|'extends'|'final'|'finally'|'for'|'foreach'|'function'|'function_import'|'global'|'goto'|'if'|'implements'|'include'|'include_once'|'instanceof'|'insteadof'|'interface'|'match'|'named_argument'|'namespace'|'new'|'open_tag_with_echo'|'php_doc'|'php_open'|'print'|'private'|'protected'|'public'|'readonly'|'require'|'require_once'|'return'|'static'|'switch'|'throw'|'trait'|'try'|'type_colon'|'use'|'use_lambda'|'use_trait'|'var'|'while'|'yield'|'yield_from'>,
* constructs_preceded_by_a_single_space?: list<'as'|'use_lambda'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* constructs_contain_a_single_space: list<'yield_from'>,
* constructs_followed_by_a_single_space: list<'abstract'|'as'|'attribute'|'break'|'case'|'catch'|'class'|'clone'|'comment'|'const'|'const_import'|'continue'|'do'|'echo'|'else'|'elseif'|'enum'|'extends'|'final'|'finally'|'for'|'foreach'|'function'|'function_import'|'global'|'goto'|'if'|'implements'|'include'|'include_once'|'instanceof'|'insteadof'|'interface'|'match'|'named_argument'|'namespace'|'new'|'open_tag_with_echo'|'php_doc'|'php_open'|'print'|'private'|'protected'|'public'|'readonly'|'require'|'require_once'|'return'|'static'|'switch'|'throw'|'trait'|'try'|'type_colon'|'use'|'use_lambda'|'use_trait'|'var'|'while'|'yield'|'yield_from'>,
* constructs_preceded_by_a_single_space: list<'as'|'use_lambda'>
* }
*/ */
final class SingleSpaceAroundConstructFixer extends AbstractFixer implements ConfigurableFixerInterface final class SingleSpaceAroundConstructFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<string, null|int> * @var array<string, null|int>
*/ */
@ -132,59 +149,6 @@ final class SingleSpaceAroundConstructFixer extends AbstractFixer implements Con
*/ */
private array $fixTokenMapPrecededByASingleSpace = []; private array $fixTokenMapPrecededByASingleSpace = [];
public function configure(array $configuration): void
{
parent::configure($configuration);
if (\defined('T_MATCH')) { // @TODO: drop condition when PHP 8.0+ is required
self::$tokenMapFollowedByASingleSpace['match'] = T_MATCH;
}
if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required
self::$tokenMapFollowedByASingleSpace['readonly'] = T_READONLY;
}
if (\defined('T_ENUM')) { // @TODO: drop condition when PHP 8.1+ is required
self::$tokenMapFollowedByASingleSpace['enum'] = T_ENUM;
}
$this->fixTokenMapContainASingleSpace = [];
foreach ($this->configuration['constructs_contain_a_single_space'] as $key) {
if (null !== self::$tokenMapContainASingleSpace[$key]) {
$this->fixTokenMapContainASingleSpace[$key] = self::$tokenMapContainASingleSpace[$key];
}
}
$this->fixTokenMapPrecededByASingleSpace = [];
foreach ($this->configuration['constructs_preceded_by_a_single_space'] as $key) {
if (null !== self::$tokenMapPrecededByASingleSpace[$key]) {
$this->fixTokenMapPrecededByASingleSpace[$key] = self::$tokenMapPrecededByASingleSpace[$key];
}
}
$this->fixTokenMapFollowedByASingleSpace = [];
foreach ($this->configuration['constructs_followed_by_a_single_space'] as $key) {
if (null !== self::$tokenMapFollowedByASingleSpace[$key]) {
$this->fixTokenMapFollowedByASingleSpace[$key] = self::$tokenMapFollowedByASingleSpace[$key];
}
}
if (isset($this->fixTokenMapFollowedByASingleSpace['public'])) {
$this->fixTokenMapFollowedByASingleSpace['constructor_public'] = CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC;
}
if (isset($this->fixTokenMapFollowedByASingleSpace['protected'])) {
$this->fixTokenMapFollowedByASingleSpace['constructor_protected'] = CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED;
}
if (isset($this->fixTokenMapFollowedByASingleSpace['private'])) {
$this->fixTokenMapFollowedByASingleSpace['constructor_private'] = CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE;
}
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -274,6 +238,57 @@ yield from baz();
return $tokens->isAnyTokenKindsFound($tokenKinds) && !$tokens->hasAlternativeSyntax(); return $tokens->isAnyTokenKindsFound($tokenKinds) && !$tokens->hasAlternativeSyntax();
} }
protected function configurePostNormalisation(): void
{
if (\defined('T_MATCH')) { // @TODO: drop condition when PHP 8.0+ is required
self::$tokenMapFollowedByASingleSpace['match'] = T_MATCH;
}
if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required
self::$tokenMapFollowedByASingleSpace['readonly'] = T_READONLY;
}
if (\defined('T_ENUM')) { // @TODO: drop condition when PHP 8.1+ is required
self::$tokenMapFollowedByASingleSpace['enum'] = T_ENUM;
}
$this->fixTokenMapContainASingleSpace = [];
foreach ($this->configuration['constructs_contain_a_single_space'] as $key) {
if (null !== self::$tokenMapContainASingleSpace[$key]) {
$this->fixTokenMapContainASingleSpace[$key] = self::$tokenMapContainASingleSpace[$key];
}
}
$this->fixTokenMapPrecededByASingleSpace = [];
foreach ($this->configuration['constructs_preceded_by_a_single_space'] as $key) {
if (null !== self::$tokenMapPrecededByASingleSpace[$key]) {
$this->fixTokenMapPrecededByASingleSpace[$key] = self::$tokenMapPrecededByASingleSpace[$key];
}
}
$this->fixTokenMapFollowedByASingleSpace = [];
foreach ($this->configuration['constructs_followed_by_a_single_space'] as $key) {
if (null !== self::$tokenMapFollowedByASingleSpace[$key]) {
$this->fixTokenMapFollowedByASingleSpace[$key] = self::$tokenMapFollowedByASingleSpace[$key];
}
}
if (isset($this->fixTokenMapFollowedByASingleSpace['public'])) {
$this->fixTokenMapFollowedByASingleSpace['constructor_public'] = CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC;
}
if (isset($this->fixTokenMapFollowedByASingleSpace['protected'])) {
$this->fixTokenMapFollowedByASingleSpace['constructor_protected'] = CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED;
}
if (isset($this->fixTokenMapFollowedByASingleSpace['private'])) {
$this->fixTokenMapFollowedByASingleSpace['constructor_private'] = CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE;
}
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
$tokenKindsContainASingleSpace = array_values($this->fixTokenMapContainASingleSpace); $tokenKindsContainASingleSpace = array_values($this->fixTokenMapContainASingleSpace);

View File

@ -17,6 +17,7 @@ namespace PhpCsFixer\Fixer\ListNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -27,25 +28,26 @@ use PhpCsFixer\Tokenizer\CT;
use PhpCsFixer\Tokenizer\Token; use PhpCsFixer\Tokenizer\Token;
use PhpCsFixer\Tokenizer\Tokens; use PhpCsFixer\Tokenizer\Tokens;
/**
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* syntax?: 'long'|'short'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* syntax: 'long'|'short'
* }
*/
final class ListSyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface final class ListSyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var null|int * @var null|int
*/ */
private $candidateTokenKind; private $candidateTokenKind;
/**
* @param array{syntax: 'long'|'short'} $configuration
*
* @throws InvalidFixerConfigurationException
*/
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->candidateTokenKind = 'long' === $this->configuration['syntax'] ? CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN : T_LIST;
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -77,6 +79,14 @@ final class ListSyntaxFixer extends AbstractFixer implements ConfigurableFixerIn
return $tokens->isTokenKindFound($this->candidateTokenKind); return $tokens->isTokenKindFound($this->candidateTokenKind);
} }
/**
* @throws InvalidFixerConfigurationException
*/
protected function configurePostNormalisation(): void
{
$this->candidateTokenKind = 'long' === $this->configuration['syntax'] ? CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN : T_LIST;
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
for ($index = $tokens->count() - 1; 0 <= $index; --$index) { for ($index = $tokens->count() - 1; 0 <= $index; --$index) {

View File

@ -17,6 +17,7 @@ namespace PhpCsFixer\Fixer\NamespaceNotation;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -31,9 +32,23 @@ use Symfony\Component\OptionsResolver\Options;
/** /**
* @author Graham Campbell <hello@gjcampbell.co.uk> * @author Graham Campbell <hello@gjcampbell.co.uk>
* @author Greg Korba <greg@codito.dev> * @author Greg Korba <greg@codito.dev>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* max_line_breaks?: int,
* min_line_breaks?: int
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* max_line_breaks: int,
* min_line_breaks: int
* }
*/ */
final class BlankLinesBeforeNamespaceFixer extends AbstractFixer implements WhitespacesAwareFixerInterface, ConfigurableFixerInterface final class BlankLinesBeforeNamespaceFixer extends AbstractFixer implements WhitespacesAwareFixerInterface, ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Operator;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -32,9 +33,23 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* default?: 'align'|'align_by_scope'|'align_single_space'|'align_single_space_by_scope'|'align_single_space_minimal'|'align_single_space_minimal_by_scope'|'at_least_single_space'|'no_space'|'single_space'|null,
* operators?: array<string, ?string>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* default: 'align'|'align_by_scope'|'align_single_space'|'align_single_space_by_scope'|'align_single_space_minimal'|'align_single_space_minimal_by_scope'|'at_least_single_space'|'no_space'|'single_space'|null,
* operators: array<string, ?string>
* }
*/ */
final class BinaryOperatorSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface final class BinaryOperatorSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */
@ -177,13 +192,6 @@ final class BinaryOperatorSpacesFixer extends AbstractFixer implements Configura
*/ */
private array $operators = []; private array $operators = [];
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->operators = $this->resolveOperatorsFromConfig();
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -320,6 +328,11 @@ $array = [
return true; return true;
} }
protected function configurePostNormalisation(): void
{
$this->operators = $this->resolveOperatorsFromConfig();
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
$this->tokensAnalyzer = new TokensAnalyzer($tokens); $this->tokensAnalyzer = new TokensAnalyzer($tokens);
@ -358,7 +371,7 @@ $array = [
->setAllowedValues(self::$allowedValues) ->setAllowedValues(self::$allowedValues)
->getOption(), ->getOption(),
(new FixerOptionBuilder('operators', 'Dictionary of `binary operator` => `fix strategy` values that differ from the default strategy. Supported are: '.Utils::naturalLanguageJoinWithBackticks(self::SUPPORTED_OPERATORS).'.')) (new FixerOptionBuilder('operators', 'Dictionary of `binary operator` => `fix strategy` values that differ from the default strategy. Supported are: '.Utils::naturalLanguageJoinWithBackticks(self::SUPPORTED_OPERATORS).'.'))
->setAllowedTypes(['array']) ->setAllowedTypes(['array<string, ?string>'])
->setAllowedValues([static function (array $option): bool { ->setAllowedValues([static function (array $option): bool {
foreach ($option as $operator => $value) { foreach ($option as $operator => $value) {
if (!\in_array($operator, self::SUPPORTED_OPERATORS, true)) { if (!\in_array($operator, self::SUPPORTED_OPERATORS, true)) {

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Operator;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -27,9 +28,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* spacing?: 'none'|'one'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* spacing: 'none'|'one'
* }
*/ */
final class ConcatSpaceFixer extends AbstractFixer implements ConfigurableFixerInterface final class ConcatSpaceFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Operator;
use PhpCsFixer\Fixer\AbstractIncrementOperatorFixer; use PhpCsFixer\Fixer\AbstractIncrementOperatorFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -29,9 +30,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author Gregor Harlan <gharlan@web.de> * @author Gregor Harlan <gharlan@web.de>
* @author Kuba Werłos <werlos@gmail.com> * @author Kuba Werłos <werlos@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* style?: 'post'|'pre'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* style: 'post'|'pre'
* }
*/ */
final class IncrementStyleFixer extends AbstractIncrementOperatorFixer implements ConfigurableFixerInterface final class IncrementStyleFixer extends AbstractIncrementOperatorFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Operator;
use PhpCsFixer\AbstractProxyFixer; use PhpCsFixer\AbstractProxyFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\DeprecatedFixerInterface; use PhpCsFixer\Fixer\DeprecatedFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerDefinition\FixerDefinition; use PhpCsFixer\FixerDefinition\FixerDefinition;
@ -25,9 +26,23 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
* *
* @deprecated * @deprecated
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* anonymous_class?: bool,
* named_class?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* anonymous_class: bool,
* named_class: bool
* }
*/ */
final class NewWithBracesFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface final class NewWithBracesFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private NewWithParenthesesFixer $newWithParenthesesFixer; private NewWithParenthesesFixer $newWithParenthesesFixer;
public function __construct() public function __construct()
@ -59,13 +74,6 @@ final class NewWithBracesFixer extends AbstractProxyFixer implements Configurabl
return $this->newWithParenthesesFixer->getPriority(); return $this->newWithParenthesesFixer->getPriority();
} }
public function configure(array $configuration): void
{
$this->newWithParenthesesFixer->configure($configuration);
parent::configure($configuration);
}
public function getSuccessorsNames(): array public function getSuccessorsNames(): array
{ {
return [ return [
@ -73,6 +81,14 @@ final class NewWithBracesFixer extends AbstractProxyFixer implements Configurabl
]; ];
} }
/**
* @param _AutogeneratedInputConfiguration $configuration
*/
protected function configurePreNormalisation(array $configuration): void
{
$this->newWithParenthesesFixer->configure($configuration);
}
protected function createProxyFixers(): array protected function createProxyFixers(): array
{ {
return [ return [

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Operator;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -28,9 +29,23 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* anonymous_class?: bool,
* named_class?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* anonymous_class: bool,
* named_class: bool
* }
*/ */
final class NewWithParenthesesFixer extends AbstractFixer implements ConfigurableFixerInterface final class NewWithParenthesesFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -64,6 +79,21 @@ final class NewWithParenthesesFixer extends AbstractFixer implements Configurabl
return $tokens->isTokenKindFound(T_NEW); return $tokens->isTokenKindFound(T_NEW);
} }
/** @protected */
public function createConfigurationDefinition(): FixerConfigurationResolverInterface
{
return new FixerConfigurationResolver([
(new FixerOptionBuilder('named_class', 'Whether named classes should be followed by parentheses.'))
->setAllowedTypes(['bool'])
->setDefault(true)
->getOption(),
(new FixerOptionBuilder('anonymous_class', 'Whether anonymous classes should be followed by parentheses.'))
->setAllowedTypes(['bool'])
->setDefault(true)
->getOption(),
]);
}
protected function applyFix(\SplFileInfo $file, Tokens $tokens): void protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
{ {
static $nextTokenKinds = null; static $nextTokenKinds = null;
@ -155,20 +185,6 @@ final class NewWithParenthesesFixer extends AbstractFixer implements Configurabl
} }
} }
protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
{
return new FixerConfigurationResolver([
(new FixerOptionBuilder('named_class', 'Whether named classes should be followed by parentheses.'))
->setAllowedTypes(['bool'])
->setDefault(true)
->getOption(),
(new FixerOptionBuilder('anonymous_class', 'Whether anonymous classes should be followed by parentheses.'))
->setAllowedTypes(['bool'])
->setDefault(true)
->getOption(),
]);
}
private function ensureParenthesesAt(Tokens $tokens, int $index): void private function ensureParenthesesAt(Tokens $tokens, int $index): void
{ {
$token = $tokens[$index]; $token = $tokens[$index];

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Operator;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -32,9 +33,21 @@ use PhpCsFixer\Tokenizer\Tokens;
* end: int, * end: int,
* type: self::STR_*, * type: self::STR_*,
* } * }
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* juggle_simple_strings?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* juggle_simple_strings: bool
* }
*/ */
final class NoUselessConcatOperatorFixer extends AbstractFixer implements ConfigurableFixerInterface final class NoUselessConcatOperatorFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const STR_DOUBLE_QUOTE = 0; private const STR_DOUBLE_QUOTE = 0;
private const STR_DOUBLE_QUOTE_VAR = 1; private const STR_DOUBLE_QUOTE_VAR = 1;
private const STR_SINGLE_QUOTE = 2; private const STR_SINGLE_QUOTE = 2;

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Operator;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -32,9 +33,23 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Kuba Werłos <werlos@gmail.com> * @author Kuba Werłos <werlos@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* only_booleans?: bool,
* position?: 'beginning'|'end'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* only_booleans: bool,
* position: 'beginning'|'end'
* }
*/ */
final class OperatorLinebreakFixer extends AbstractFixer implements ConfigurableFixerInterface final class OperatorLinebreakFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
private const BOOLEAN_OPERATORS = [[T_BOOLEAN_AND], [T_BOOLEAN_OR], [T_LOGICAL_AND], [T_LOGICAL_OR], [T_LOGICAL_XOR]]; private const BOOLEAN_OPERATORS = [[T_BOOLEAN_AND], [T_BOOLEAN_OR], [T_LOGICAL_AND], [T_LOGICAL_OR], [T_LOGICAL_XOR]];
private string $position = 'beginning'; private string $position = 'beginning';
@ -68,10 +83,13 @@ function foo() {
); );
} }
public function configure(array $configuration): void public function isCandidate(Tokens $tokens): bool
{ {
parent::configure($configuration); return true;
}
protected function configurePostNormalisation(): void
{
$this->position = $this->configuration['position']; $this->position = $this->configuration['position'];
$this->operators = self::BOOLEAN_OPERATORS; $this->operators = self::BOOLEAN_OPERATORS;
@ -80,11 +98,6 @@ function foo() {
} }
} }
public function isCandidate(Tokens $tokens): bool
{
return true;
}
protected function createConfigurationDefinition(): FixerConfigurationResolverInterface protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
{ {
return new FixerConfigurationResolver([ return new FixerConfigurationResolver([

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Operator;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -28,9 +29,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author Gregor Harlan <gharlan@web.de> * @author Gregor Harlan <gharlan@web.de>
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* only_dec_inc?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* only_dec_inc: bool
* }
*/ */
final class UnaryOperatorSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface final class UnaryOperatorSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\PhpTag;
use PhpCsFixer\AbstractFixer; use PhpCsFixer\AbstractFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -27,9 +28,25 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Michele Locati <michele@locati.it> * @author Michele Locati <michele@locati.it>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* format?: 'long'|'short',
* long_function?: 'echo'|'print',
* shorten_simple_statements_only?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* format: 'long'|'short',
* long_function: 'echo'|'print',
* shorten_simple_statements_only: bool
* }
*/ */
final class EchoTagSyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface final class EchoTagSyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** @internal */ /** @internal */
public const OPTION_FORMAT = 'format'; public const OPTION_FORMAT = 'format';

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\PhpUnit;
use PhpCsFixer\Fixer\AbstractPhpUnitFixer; use PhpCsFixer\Fixer\AbstractPhpUnitFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -29,9 +30,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* assertions?: list<'assertEquals'|'assertNotEquals'|'assertNotSame'|'assertSame'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* assertions: list<'assertEquals'|'assertNotEquals'|'assertNotSame'|'assertSame'>
* }
*/ */
final class PhpUnitConstructFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface final class PhpUnitConstructFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function isRisky(): bool public function isRisky(): bool
{ {
return true; return true;

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\PhpUnit;
use PhpCsFixer\Fixer\AbstractPhpUnitFixer; use PhpCsFixer\Fixer\AbstractPhpUnitFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -29,9 +30,23 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Kuba Werłos <werlos@gmail.com> * @author Kuba Werłos <werlos@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* prefix?: string,
* suffix?: string
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* prefix: string,
* suffix: string
* }
*/ */
final class PhpUnitDataProviderNameFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface final class PhpUnitDataProviderNameFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\PhpUnit;
use PhpCsFixer\Fixer\AbstractPhpUnitFixer; use PhpCsFixer\Fixer\AbstractPhpUnitFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -29,9 +30,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author Kuba Werłos <werlos@gmail.com> * @author Kuba Werłos <werlos@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* force?: bool
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* force: bool
* }
*/ */
final class PhpUnitDataProviderStaticFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface final class PhpUnitDataProviderStaticFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\PhpUnit;
use PhpCsFixer\Fixer\AbstractPhpUnitFixer; use PhpCsFixer\Fixer\AbstractPhpUnitFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -30,9 +31,21 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* target?: '3.0'|'3.5'|'5.0'|'5.6'|'newest'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* target: '3.0'|'3.5'|'5.0'|'5.6'|'newest'
* }
*/ */
final class PhpUnitDedicateAssertFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface final class PhpUnitDedicateAssertFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<string, array{positive: string, negative: false|string, argument_count?: int, swap_arguments?: true}|true> * @var array<string, array{positive: string, negative: false|string, argument_count?: int, swap_arguments?: true}|true>
*/ */
@ -113,10 +126,61 @@ final class PhpUnitDedicateAssertFixer extends AbstractPhpUnitFixer implements C
*/ */
private array $functions = []; private array $functions = [];
public function configure(array $configuration): void public function isRisky(): bool
{ {
parent::configure($configuration); return true;
}
public function getDefinition(): FixerDefinitionInterface
{
return new FixerDefinition(
'PHPUnit assertions like `assertInternalType`, `assertFileExists`, should be used over `assertTrue`.',
[
new CodeSample(
'<?php
final class MyTest extends \PHPUnit_Framework_TestCase
{
public function testSomeTest()
{
$this->assertTrue(is_float( $a), "my message");
$this->assertTrue(is_nan($a));
}
}
'
),
new CodeSample(
'<?php
final class MyTest extends \PHPUnit_Framework_TestCase
{
public function testSomeTest()
{
$this->assertTrue(is_dir($a));
$this->assertTrue(is_writable($a));
$this->assertTrue(is_readable($a));
}
}
',
['target' => PhpUnitTargetVersion::VERSION_5_6]
),
],
null,
'Fixer could be risky if one is overriding PHPUnit\'s native methods.'
);
}
/**
* {@inheritdoc}
*
* Must run before NoUnusedImportsFixer, PhpUnitDedicateAssertInternalTypeFixer.
* Must run after ModernizeStrposFixer, NoAliasFunctionsFixer, PhpUnitConstructFixer.
*/
public function getPriority(): int
{
return -9;
}
protected function configurePostNormalisation(): void
{
// assertions added in 3.0: assertArrayNotHasKey assertArrayHasKey assertFileNotExists assertFileExists assertNotNull, assertNull // assertions added in 3.0: assertArrayNotHasKey assertArrayHasKey assertFileNotExists assertFileExists assertNotNull, assertNull
$this->functions = [ $this->functions = [
'array_key_exists', 'array_key_exists',
@ -171,59 +235,6 @@ final class PhpUnitDedicateAssertFixer extends AbstractPhpUnitFixer implements C
} }
} }
public function isRisky(): bool
{
return true;
}
public function getDefinition(): FixerDefinitionInterface
{
return new FixerDefinition(
'PHPUnit assertions like `assertInternalType`, `assertFileExists`, should be used over `assertTrue`.',
[
new CodeSample(
'<?php
final class MyTest extends \PHPUnit_Framework_TestCase
{
public function testSomeTest()
{
$this->assertTrue(is_float( $a), "my message");
$this->assertTrue(is_nan($a));
}
}
'
),
new CodeSample(
'<?php
final class MyTest extends \PHPUnit_Framework_TestCase
{
public function testSomeTest()
{
$this->assertTrue(is_dir($a));
$this->assertTrue(is_writable($a));
$this->assertTrue(is_readable($a));
}
}
',
['target' => PhpUnitTargetVersion::VERSION_5_6]
),
],
null,
'Fixer could be risky if one is overriding PHPUnit\'s native methods.'
);
}
/**
* {@inheritdoc}
*
* Must run before NoUnusedImportsFixer, PhpUnitDedicateAssertInternalTypeFixer.
* Must run after ModernizeStrposFixer, NoAliasFunctionsFixer, PhpUnitConstructFixer.
*/
public function getPriority(): int
{
return -9;
}
protected function applyPhpUnitClassFix(Tokens $tokens, int $startIndex, int $endIndex): void protected function applyPhpUnitClassFix(Tokens $tokens, int $startIndex, int $endIndex): void
{ {
$argumentsAnalyzer = new ArgumentsAnalyzer(); $argumentsAnalyzer = new ArgumentsAnalyzer();

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\PhpUnit;
use PhpCsFixer\Fixer\AbstractPhpUnitFixer; use PhpCsFixer\Fixer\AbstractPhpUnitFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -28,9 +29,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author Filippo Tessarotto <zoeslam@gmail.com> * @author Filippo Tessarotto <zoeslam@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* target?: '7.5'|'newest'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* target: '7.5'|'newest'
* }
*/ */
final class PhpUnitDedicateAssertInternalTypeFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface final class PhpUnitDedicateAssertInternalTypeFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<string, string> * @var array<string, string>
*/ */

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\PhpUnit;
use PhpCsFixer\Fixer\AbstractPhpUnitFixer; use PhpCsFixer\Fixer\AbstractPhpUnitFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@ -30,32 +31,26 @@ use PhpCsFixer\Tokenizer\Tokens;
/** /**
* @author Dariusz Rumiński <dariusz.ruminski@gmail.com> * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* target?: '5.2'|'5.6'|'8.4'|'newest'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* target: '5.2'|'5.6'|'8.4'|'newest'
* }
*/ */
final class PhpUnitExpectationFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface final class PhpUnitExpectationFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @var array<string, string> * @var array<string, string>
*/ */
private array $methodMap = []; private array $methodMap = [];
public function configure(array $configuration): void
{
parent::configure($configuration);
$this->methodMap = [
'setExpectedException' => 'expectExceptionMessage',
];
if (PhpUnitTargetVersion::fulfills($this->configuration['target'], PhpUnitTargetVersion::VERSION_5_6)) {
$this->methodMap['setExpectedExceptionRegExp'] = 'expectExceptionMessageRegExp';
}
if (PhpUnitTargetVersion::fulfills($this->configuration['target'], PhpUnitTargetVersion::VERSION_8_4)) {
$this->methodMap['setExpectedExceptionRegExp'] = 'expectExceptionMessageMatches';
$this->methodMap['expectExceptionMessageRegExp'] = 'expectExceptionMessageMatches';
}
}
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(
@ -157,6 +152,22 @@ final class MyTest extends \PHPUnit_Framework_TestCase
return true; return true;
} }
protected function configurePostNormalisation(): void
{
$this->methodMap = [
'setExpectedException' => 'expectExceptionMessage',
];
if (PhpUnitTargetVersion::fulfills($this->configuration['target'], PhpUnitTargetVersion::VERSION_5_6)) {
$this->methodMap['setExpectedExceptionRegExp'] = 'expectExceptionMessageRegExp';
}
if (PhpUnitTargetVersion::fulfills($this->configuration['target'], PhpUnitTargetVersion::VERSION_8_4)) {
$this->methodMap['setExpectedExceptionRegExp'] = 'expectExceptionMessageMatches';
$this->methodMap['expectExceptionMessageRegExp'] = 'expectExceptionMessageMatches';
}
}
protected function createConfigurationDefinition(): FixerConfigurationResolverInterface protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
{ {
return new FixerConfigurationResolver([ return new FixerConfigurationResolver([

View File

@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\PhpUnit;
use PhpCsFixer\Fixer\AbstractPhpUnitFixer; use PhpCsFixer\Fixer\AbstractPhpUnitFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
use PhpCsFixer\FixerConfiguration\AllowedValueSubset; use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
@ -29,9 +30,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
/** /**
* @author Gert de Pagter <BackEndTea@gmail.com> * @author Gert de Pagter <BackEndTea@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* types?: list<'abstract'|'final'|'normal'>
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* types: list<'abstract'|'final'|'normal'>
* }
*/ */
final class PhpUnitInternalClassFixer extends AbstractPhpUnitFixer implements WhitespacesAwareFixerInterface, ConfigurableFixerInterface final class PhpUnitInternalClassFixer extends AbstractPhpUnitFixer implements WhitespacesAwareFixerInterface, ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
public function getDefinition(): FixerDefinitionInterface public function getDefinition(): FixerDefinitionInterface
{ {
return new FixerDefinition( return new FixerDefinition(

View File

@ -18,6 +18,7 @@ use PhpCsFixer\DocBlock\DocBlock;
use PhpCsFixer\DocBlock\Line; use PhpCsFixer\DocBlock\Line;
use PhpCsFixer\Fixer\AbstractPhpUnitFixer; use PhpCsFixer\Fixer\AbstractPhpUnitFixer;
use PhpCsFixer\Fixer\ConfigurableFixerInterface; use PhpCsFixer\Fixer\ConfigurableFixerInterface;
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@ -32,9 +33,21 @@ use PhpCsFixer\Utils;
/** /**
* @author Filippo Tessarotto <zoeslam@gmail.com> * @author Filippo Tessarotto <zoeslam@gmail.com>
*
* @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
*
* @phpstan-type _AutogeneratedInputConfiguration array{
* case?: 'camel_case'|'snake_case'
* }
* @phpstan-type _AutogeneratedComputedConfiguration array{
* case: 'camel_case'|'snake_case'
* }
*/ */
final class PhpUnitMethodCasingFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface final class PhpUnitMethodCasingFixer extends AbstractPhpUnitFixer implements ConfigurableFixerInterface
{ {
/** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
use ConfigurableFixerTrait;
/** /**
* @internal * @internal
*/ */

Some files were not shown because too many files have changed in this diff Show More