Skip to content

Ruleset: hard deprecate use of the old property array format #890

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/Ruleset.php
Original file line number Diff line number Diff line change
Expand Up @@ -1219,7 +1219,14 @@ private function processRule($rule, $newSniffs, $depth=0)
}

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

$value = (string) $prop['value'];
$printValue = $value;
if ($value !== '') {
Expand Down
34 changes: 33 additions & 1 deletion tests/Core/Ruleset/PropertyTypeHandlingTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,35 @@ final class PropertyTypeHandlingTest extends TestCase
const SNIFF_CLASS = 'Fixtures\\TestStandard\\Sniffs\\SetProperty\\PropertyTypeHandlingSniff';


/**
* Verify a deprecation notice is shown when an array property is set from the ruleset using a comma-separated string.
*
* Support for this format was (soft) deprecated in PHPCS 3.3.0.
*
* @return void
*/
public function testUsingOldSchoolArrayFormatShowsDeprecationNotice()
{
$regex = '`^(';
$regex .= 'DEPRECATED: Passing an array of values to a property using a comma-separated string\R';
$regex .= 'was deprecated in PHP_CodeSniffer 3\.3\.0\. Support will be removed in PHPCS 4\.0\.0\.\R';
$regex .= 'The deprecated syntax was used for property "expectsOldSchool(?:EmptyArray|ArrayWith(?:Extended|Only)?(?:KeysAnd)?Values)"\R';
$regex .= 'for sniff "';
$regex .= '(?:\./tests/Core/Ruleset/Fixtures/TestStandard/Sniffs/SetProperty/PropertyTypeHandlingSniff\.php|TestStandard\.SetProperty\.PropertyTypeHandling)';
$regex .= '"\.\R';
$regex .= 'Pass array values via <element \[key="\.\.\." \]value="\.\.\."> nodes instead\.\R';
$regex .= '){14}\R$`';

$this->expectOutputRegex($regex);

// Set up the ruleset.
$standard = __DIR__.'/PropertyTypeHandlingTest.xml';
$config = new ConfigDouble(["--standard=$standard"]);
new Ruleset($config);

}//end testUsingOldSchoolArrayFormatShowsDeprecationNotice()


/**
* Test the value type handling for properties set via a ruleset.
*
Expand Down Expand Up @@ -234,6 +263,9 @@ public static function dataArrayPropertyExtending()
/**
* Test Helper.
*
* Note: the deprecations for using comma-separated string to pass an array, are silenced in this helper
* as that's not what's being tested here.
*
* @see self::testTypeHandlingWhenSetViaRuleset()
*
* @return \PHP_CodeSniffer\Sniffs\Sniff
Expand All @@ -245,7 +277,7 @@ private function getSniffObjectForRuleset()
if (isset($sniffObject) === false) {
// Set up the ruleset.
$standard = __DIR__.'/PropertyTypeHandlingTest.xml';
$config = new ConfigDouble(["--standard=$standard"]);
$config = new ConfigDouble(["--standard=$standard", '-q']);
$ruleset = new Ruleset($config);

// Verify that our target sniff has been registered.
Expand Down