|
@@ -24,13 +24,19 @@ use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
|
|
|
final class NoTrailingCommaInSinglelineFixerTest extends AbstractFixerTestCase
|
|
|
{
|
|
|
/**
|
|
|
+ * @param array<string, mixed> $configuration
|
|
|
+ *
|
|
|
* @dataProvider provideFixCases
|
|
|
*/
|
|
|
- public function testFix(string $expected, ?string $input = null): void
|
|
|
+ public function testFix(string $expected, ?string $input = null, array $configuration = []): void
|
|
|
{
|
|
|
+ $this->fixer->configure($configuration);
|
|
|
$this->doTest($expected, $input);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @return iterable<array{string, null|string, 2?: array{elements?: array<string>}}>
|
|
|
+ */
|
|
|
public static function provideFixCases(): iterable
|
|
|
{
|
|
|
yield [
|
|
@@ -47,93 +53,95 @@ final class NoTrailingCommaInSinglelineFixerTest extends AbstractFixerTestCase
|
|
|
'<?php $a = [1,[1,[1,[1,[1,[1,[1,[1]],[1,[1,[1,[1,[1,[1,[1,[1]]]]]]]]]]]]]];',
|
|
|
'<?php $a = [1,[1,[1,[1,[1,[1,[1,[1,],],[1,[1,[1,[1,[1,[1,[1,[1,],],],],],],],],],],],],],];',
|
|
|
];
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @dataProvider provideFixNoTrailingCommaInSinglelineFunctionCallCases
|
|
|
- */
|
|
|
- public function testFixNoTrailingCommaInSinglelineFunctionCall(string $expected, string $input = null): void
|
|
|
- {
|
|
|
- $this->fixer->configure(['elements' => ['arguments']]);
|
|
|
|
|
|
- $this->doTest($expected, $input);
|
|
|
- }
|
|
|
-
|
|
|
- public static function provideFixNoTrailingCommaInSinglelineFunctionCallCases(): iterable
|
|
|
- {
|
|
|
yield 'simple var' => [
|
|
|
'<?php $a(1);',
|
|
|
'<?php $a(1,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield '&' => [
|
|
|
'<?php $a = &foo($a);',
|
|
|
'<?php $a = &foo($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'open' => [
|
|
|
'<?php foo($a);',
|
|
|
'<?php foo($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield '=' => [
|
|
|
'<?php $b = foo($a);',
|
|
|
'<?php $b = foo($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield '.' => [
|
|
|
'<?php $c = $b . foo($a);',
|
|
|
'<?php $c = $b . foo($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield '(' => [
|
|
|
'<?php (foo($a/* 1X */ /* 2 */ ));',
|
|
|
'<?php (foo($a /* 1X */ , /* 2 */ ));',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield '\\' => [
|
|
|
'<?php \foo($a);',
|
|
|
'<?php \foo($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'A\\' => [
|
|
|
'<?php A\foo($a);',
|
|
|
'<?php A\foo($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield '\A\\' => [
|
|
|
'<?php \A\foo($a);',
|
|
|
'<?php \A\foo($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield ';' => [
|
|
|
'<?php ; foo($a);',
|
|
|
'<?php ; foo($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield '}' => [
|
|
|
'<?php if ($a) { echo 1;} foo($a);',
|
|
|
'<?php if ($a) { echo 1;} foo($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'test method call' => [
|
|
|
'<?php $o->abc($a);',
|
|
|
'<?php $o->abc($a,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'nested call' => [
|
|
|
'<?php $o->abc($a,foo(1));',
|
|
|
'<?php $o->abc($a,foo(1,));',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'wrapped' => [
|
|
|
'<?php echo (new Process())->getOutput(1);',
|
|
|
'<?php echo (new Process())->getOutput(1,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'dynamic function and method calls' => [
|
|
|
'<?php $b->$a(1); $c("");',
|
|
|
'<?php $b->$a(1,); $c("",);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'static function call' => [
|
|
@@ -145,16 +153,19 @@ $b = isset($foo->bar);
|
|
|
unset($foo->bar,);
|
|
|
$b = isset($foo->bar,);
|
|
|
',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'unset' => [
|
|
|
'<?php A::foo(1);',
|
|
|
'<?php A::foo(1,);',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'anonymous_class construction' => [
|
|
|
'<?php new class(1, 2) {};',
|
|
|
'<?php new class(1, 2,) {};',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'array/property access call' => [
|
|
@@ -194,6 +205,7 @@ ${$e}(1,);
|
|
|
$$e(2,);
|
|
|
$f(0,)(1,);
|
|
|
$g["e"](1,); // foo',
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
|
|
|
yield 'do not fix' => [
|
|
@@ -221,77 +233,51 @@ $g["e"](1,); // foo',
|
|
|
{
|
|
|
}
|
|
|
;',
|
|
|
+ null,
|
|
|
+ ['elements' => ['arguments']],
|
|
|
];
|
|
|
- }
|
|
|
|
|
|
- /**
|
|
|
- * @dataProvider provideFix80NoTrailingCommaInSinglelineFunctionCallFixerCases
|
|
|
- *
|
|
|
- * @requires PHP 8.0
|
|
|
- */
|
|
|
- public function testFix80NoTrailingCommaInSinglelineFunctionCallFixer(string $expected, string $input = null): void
|
|
|
- {
|
|
|
- $this->doTest($expected, $input);
|
|
|
- }
|
|
|
-
|
|
|
- public static function provideFix80NoTrailingCommaInSinglelineFunctionCallFixerCases(): iterable
|
|
|
- {
|
|
|
yield [
|
|
|
- '<?php function foo(
|
|
|
- #[MyAttr(1, 2,)] Type $myParam,
|
|
|
-) {}
|
|
|
-
|
|
|
-$foo1b = function() use ($bar, ) {};
|
|
|
-',
|
|
|
+ '<?php $x = array();',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
- }
|
|
|
|
|
|
- /**
|
|
|
- * @dataProvider provideFix81NoTrailingCommaInSinglelineFunctionCallFixerCases
|
|
|
- *
|
|
|
- * @requires PHP 8.1
|
|
|
- */
|
|
|
- public function testFix81NoTrailingCommaInSinglelineFunctionCallFixer(string $expected, ?string $input = null): void
|
|
|
- {
|
|
|
- $this->doTest($expected, $input);
|
|
|
- }
|
|
|
-
|
|
|
- public static function provideFix81NoTrailingCommaInSinglelineFunctionCallFixerCases(): iterable
|
|
|
- {
|
|
|
yield [
|
|
|
- '<?php $object?->method(1); strlen(...);',
|
|
|
- '<?php $object?->method(1,); strlen(...);',
|
|
|
+ '<?php $x = array("foo");',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @dataProvider provideFixNoTrailingCommaInSinglelineArrayFixerCases
|
|
|
- */
|
|
|
- public function testFixNoTrailingCommaInSinglelineArrayFixer(string $expected, ?string $input = null): void
|
|
|
- {
|
|
|
- $this->fixer->configure(['elements' => ['array']]);
|
|
|
-
|
|
|
- $this->doTest($expected, $input);
|
|
|
- }
|
|
|
-
|
|
|
- public static function provideFixNoTrailingCommaInSinglelineArrayFixerCases(): iterable
|
|
|
- {
|
|
|
- yield ['<?php $x = array();'];
|
|
|
-
|
|
|
- yield ['<?php $x = array("foo");'];
|
|
|
|
|
|
yield [
|
|
|
'<?php $x = array("foo");',
|
|
|
'<?php $x = array("foo", );',
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
- yield ["<?php \$x = array(\n'foo', \n);"];
|
|
|
+ yield [
|
|
|
+ "<?php \$x = array(\n'foo', \n);",
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ["<?php \$x = array('foo', \n);"];
|
|
|
+ yield [
|
|
|
+ "<?php \$x = array('foo', \n);",
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ["<?php \$x = array(array('foo'), \n);", "<?php \$x = array(array('foo',), \n);"];
|
|
|
+ yield [
|
|
|
+ "<?php \$x = array(array('foo'), \n);",
|
|
|
+ "<?php \$x = array(array('foo',), \n);",
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ["<?php \$x = array(array('foo',\n), \n);"];
|
|
|
+ yield [
|
|
|
+ "<?php \$x = array(array('foo',\n), \n);",
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
yield [
|
|
|
'<?php
|
|
@@ -299,6 +285,8 @@ $foo1b = function() use ($bar, ) {};
|
|
|
foo
|
|
|
TWIG
|
|
|
, $twig, );',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
@@ -308,6 +296,8 @@ TWIG
|
|
|
foo
|
|
|
TWIG
|
|
|
, $twig, );',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
@@ -316,6 +306,8 @@ TWIG
|
|
|
foo
|
|
|
TWIG
|
|
|
, $twig, );',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
@@ -325,26 +317,64 @@ TWIG
|
|
|
foo
|
|
|
TWIG
|
|
|
, $twig, );',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
// Short syntax
|
|
|
- yield ['<?php $x = array([]);'];
|
|
|
+ yield [
|
|
|
+ '<?php $x = array([]);',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ['<?php $x = [[]];'];
|
|
|
+ yield [
|
|
|
+ '<?php $x = [[]];',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ['<?php $x = ["foo"];', '<?php $x = ["foo",];'];
|
|
|
+ yield [
|
|
|
+ '<?php $x = ["foo"];',
|
|
|
+ '<?php $x = ["foo",];',
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ['<?php $x = bar(["foo"]);', '<?php $x = bar(["foo",]);'];
|
|
|
+ yield [
|
|
|
+ '<?php $x = bar(["foo"]);',
|
|
|
+ '<?php $x = bar(["foo",]);',
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ["<?php \$x = bar([['foo'],\n]);"];
|
|
|
+ yield [
|
|
|
+ "<?php \$x = bar([['foo'],\n]);",
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ["<?php \$x = ['foo', \n];"];
|
|
|
+ yield [
|
|
|
+ "<?php \$x = ['foo', \n];",
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ['<?php $x = array([]);', '<?php $x = array([],);'];
|
|
|
+ yield [
|
|
|
+ '<?php $x = array([]);',
|
|
|
+ '<?php $x = array([],);',
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ['<?php $x = [[]];', '<?php $x = [[],];'];
|
|
|
+ yield [
|
|
|
+ '<?php $x = [[]];',
|
|
|
+ '<?php $x = [[],];',
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
- yield ['<?php $x = [$y[""]];', '<?php $x = [$y[""],];'];
|
|
|
+ yield [
|
|
|
+ '<?php $x = [$y[""]];',
|
|
|
+ '<?php $x = [$y[""],];',
|
|
|
+ ['elements' => ['array']],
|
|
|
+ ];
|
|
|
|
|
|
yield [
|
|
|
'<?php
|
|
@@ -352,6 +382,8 @@ TWIG
|
|
|
foo
|
|
|
TWIG
|
|
|
, $twig, ];',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
@@ -361,6 +393,8 @@ TWIG
|
|
|
foo
|
|
|
TWIG
|
|
|
, $twig, ];',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
@@ -369,6 +403,8 @@ TWIG
|
|
|
foo
|
|
|
TWIG
|
|
|
, $twig, ];',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
@@ -378,31 +414,22 @@ TWIG
|
|
|
foo
|
|
|
TWIG
|
|
|
, $twig, ];',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
|
'<?php $x = array(...$foo);',
|
|
|
'<?php $x = array(...$foo, );',
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
|
'<?php $x = [...$foo];',
|
|
|
'<?php $x = [...$foo, ];',
|
|
|
+ ['elements' => ['array']],
|
|
|
];
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @dataProvider provideFixNoTrailingCommaInListCallFixerCases
|
|
|
- */
|
|
|
- public function testFixNoTrailingCommaInListCallFixer(string $expected, ?string $input = null): void
|
|
|
- {
|
|
|
- $this->fixer->configure(['elements' => ['array_destructuring']]);
|
|
|
|
|
|
- $this->doTest($expected, $input);
|
|
|
- }
|
|
|
-
|
|
|
- public static function provideFixNoTrailingCommaInListCallFixerCases(): iterable
|
|
|
- {
|
|
|
yield [
|
|
|
'<?php
|
|
|
list($a1, $b) = foo();
|
|
@@ -420,6 +447,7 @@ list($a4, , , , , ) = foo();
|
|
|
list($a5 , $b , ) = foo();
|
|
|
list($a6, /* $b */, $c, ) = foo();
|
|
|
',
|
|
|
+ ['elements' => ['array_destructuring']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
@@ -429,6 +457,8 @@ $a#
|
|
|
,#
|
|
|
#
|
|
|
) = $a;',
|
|
|
+ null,
|
|
|
+ ['elements' => ['array_destructuring']],
|
|
|
];
|
|
|
|
|
|
yield [
|
|
@@ -448,6 +478,47 @@ $a#
|
|
|
[$a11 , $b , ] = foo();
|
|
|
[$a12, /* $b */, $c, ] = foo();
|
|
|
',
|
|
|
+ ['elements' => ['array_destructuring']],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dataProvider provideFix80Cases
|
|
|
+ *
|
|
|
+ * @requires PHP 8.0
|
|
|
+ */
|
|
|
+ public function testFix80(string $expected, string $input = null): void
|
|
|
+ {
|
|
|
+ $this->doTest($expected, $input);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function provideFix80Cases(): iterable
|
|
|
+ {
|
|
|
+ yield [
|
|
|
+ '<?php function foo(
|
|
|
+ #[MyAttr(1, 2,)] Type $myParam,
|
|
|
+) {}
|
|
|
+
|
|
|
+$foo1b = function() use ($bar, ) {};
|
|
|
+',
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @dataProvider provideFix81Cases
|
|
|
+ *
|
|
|
+ * @requires PHP 8.1
|
|
|
+ */
|
|
|
+ public function testFix81(string $expected, ?string $input = null): void
|
|
|
+ {
|
|
|
+ $this->doTest($expected, $input);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function provideFix81Cases(): iterable
|
|
|
+ {
|
|
|
+ yield [
|
|
|
+ '<?php $object?->method(1); strlen(...);',
|
|
|
+ '<?php $object?->method(1,); strlen(...);',
|
|
|
];
|
|
|
}
|
|
|
}
|