Skip to content

Commit 02cc5cd

Browse files
authored
Merge pull request #890 from PHPCSStandards/feature/693-sq1665-ruleset-deprecate-use-of-old-array-format
Ruleset: hard deprecate use of the old property array format
2 parents 2ebcaed + e725729 commit 02cc5cd

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

src/Ruleset.php

+8-1
Original file line numberDiff line numberDiff line change
@@ -1219,7 +1219,14 @@ private function processRule($rule, $newSniffs, $depth=0)
12191219
}
12201220

12211221
$printValue = rtrim($printValue, ',');
1222-
} else {
1222+
} else if (isset($prop['value']) === true) {
1223+
$message = 'Passing an array of values to a property using a comma-separated string'.PHP_EOL;
1224+
$message .= 'was deprecated in PHP_CodeSniffer 3.3.0. Support will be removed in PHPCS 4.0.0.'.PHP_EOL;
1225+
$message .= "The deprecated syntax was used for property \"$name\"".PHP_EOL;
1226+
$message .= "for sniff \"$code\".".PHP_EOL;
1227+
$message .= 'Pass array values via <element [key="..." ]value="..."> nodes instead.';
1228+
$this->msgCache->add($message, MessageCollector::DEPRECATED);
1229+
12231230
$value = (string) $prop['value'];
12241231
$printValue = $value;
12251232
if ($value !== '') {

tests/Core/Ruleset/PropertyTypeHandlingTest.php

+33-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,35 @@ final class PropertyTypeHandlingTest extends TestCase
3838
const SNIFF_CLASS = 'Fixtures\\TestStandard\\Sniffs\\SetProperty\\PropertyTypeHandlingSniff';
3939

4040

41+
/**
42+
* Verify a deprecation notice is shown when an array property is set from the ruleset using a comma-separated string.
43+
*
44+
* Support for this format was (soft) deprecated in PHPCS 3.3.0.
45+
*
46+
* @return void
47+
*/
48+
public function testUsingOldSchoolArrayFormatShowsDeprecationNotice()
49+
{
50+
$regex = '`^(';
51+
$regex .= 'DEPRECATED: Passing an array of values to a property using a comma-separated string\R';
52+
$regex .= 'was deprecated in PHP_CodeSniffer 3\.3\.0\. Support will be removed in PHPCS 4\.0\.0\.\R';
53+
$regex .= 'The deprecated syntax was used for property "expectsOldSchool(?:EmptyArray|ArrayWith(?:Extended|Only)?(?:KeysAnd)?Values)"\R';
54+
$regex .= 'for sniff "';
55+
$regex .= '(?:\./tests/Core/Ruleset/Fixtures/TestStandard/Sniffs/SetProperty/PropertyTypeHandlingSniff\.php|TestStandard\.SetProperty\.PropertyTypeHandling)';
56+
$regex .= '"\.\R';
57+
$regex .= 'Pass array values via <element \[key="\.\.\." \]value="\.\.\."> nodes instead\.\R';
58+
$regex .= '){14}\R$`';
59+
60+
$this->expectOutputRegex($regex);
61+
62+
// Set up the ruleset.
63+
$standard = __DIR__.'/PropertyTypeHandlingTest.xml';
64+
$config = new ConfigDouble(["--standard=$standard"]);
65+
new Ruleset($config);
66+
67+
}//end testUsingOldSchoolArrayFormatShowsDeprecationNotice()
68+
69+
4170
/**
4271
* Test the value type handling for properties set via a ruleset.
4372
*
@@ -234,6 +263,9 @@ public static function dataArrayPropertyExtending()
234263
/**
235264
* Test Helper.
236265
*
266+
* Note: the deprecations for using comma-separated string to pass an array, are silenced in this helper
267+
* as that's not what's being tested here.
268+
*
237269
* @see self::testTypeHandlingWhenSetViaRuleset()
238270
*
239271
* @return \PHP_CodeSniffer\Sniffs\Sniff
@@ -245,7 +277,7 @@ private function getSniffObjectForRuleset()
245277
if (isset($sniffObject) === false) {
246278
// Set up the ruleset.
247279
$standard = __DIR__.'/PropertyTypeHandlingTest.xml';
248-
$config = new ConfigDouble(["--standard=$standard"]);
280+
$config = new ConfigDouble(["--standard=$standard", '-q']);
249281
$ruleset = new Ruleset($config);
250282

251283
// Verify that our target sniff has been registered.

0 commit comments

Comments
 (0)