Skip to content

Commit a6f000e

Browse files
authored
Merge pull request #894 from PHPCSStandards/feature/740-ruleset-show-deprecation-sniffs-scanning-js-css-files
Ruleset: hard deprecate $supportedTokenizers set to CSS/JS only
2 parents bb9c425 + bf6c4b2 commit a6f000e

17 files changed

+406
-11
lines changed

src/Ruleset.php

+20
Original file line numberDiff line numberDiff line change
@@ -1489,7 +1489,9 @@ public function populateTokenListeners()
14891489

14901490
$this->sniffCodes[$sniffCode] = $sniffClass;
14911491

1492+
$isDeprecated = false;
14921493
if ($this->sniffs[$sniffClass] instanceof DeprecatedSniff) {
1494+
$isDeprecated = true;
14931495
$this->deprecatedSniffs[$sniffCode] = $sniffClass;
14941496
}
14951497

@@ -1502,6 +1504,24 @@ public function populateTokenListeners()
15021504

15031505
$tokenizers = [];
15041506
$vars = get_class_vars($sniffClass);
1507+
if (empty($vars['supportedTokenizers']) === false
1508+
&& $isDeprecated === false
1509+
&& in_array('PHP', $vars['supportedTokenizers'], true) === false
1510+
) {
1511+
if (in_array('CSS', $vars['supportedTokenizers'], true) === true
1512+
|| in_array('JS', $vars['supportedTokenizers'], true) === true
1513+
) {
1514+
$message = 'Scanning CSS/JS files is deprecated and support will be removed in PHP_CodeSniffer 4.0.'.PHP_EOL;
1515+
} else {
1516+
// Just in case someone has an integration with a custom tokenizer.
1517+
$message = 'Support for custom tokenizers will be removed in PHP_CodeSniffer 4.0.'.PHP_EOL;
1518+
}
1519+
1520+
$message .= 'The %s sniff is listening for %s.';
1521+
$message = sprintf($message, $sniffCode, implode(', ', $vars['supportedTokenizers']));
1522+
$this->msgCache->add($message, MessageCollector::DEPRECATED);
1523+
}
1524+
15051525
if (isset($vars['supportedTokenizers']) === true) {
15061526
foreach ($vars['supportedTokenizers'] as $tokenizer) {
15071527
$tokenizers[$tokenizer] = $tokenizer;

tests/Core/Filters/Filter/AcceptTest.xml

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
<exclude-pattern>*/Other/Main\.php$</exclude-pattern>
99

1010
<rule ref="Generic">
11+
<exclude name="Generic.Debug"/>
12+
1113
<!-- Standard specific directory pattern. -->
1214
<exclude-pattern>/anything/*</exclude-pattern>
1315
<!-- Standard specific file pattern. -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
/**
3+
* Test fixture.
4+
*
5+
* @see \PHP_CodeSniffer\Tests\Core\Ruleset\PopulateTokenListenersSupportedTokenizersTest
6+
*/
7+
8+
namespace Fixtures\TestStandard\Sniffs\SupportedTokenizers;
9+
10+
use PHP_CodeSniffer\Files\File;
11+
use PHP_CodeSniffer\Sniffs\DeprecatedSniff;
12+
use PHP_CodeSniffer\Sniffs\Sniff;
13+
14+
class ImplementsDeprecatedInterfaceSniff implements Sniff, DeprecatedSniff
15+
{
16+
17+
public $supportedTokenizers = [
18+
'CSS',
19+
'JS',
20+
];
21+
22+
public function getDeprecationVersion()
23+
{
24+
return 'v3.4.0';
25+
}
26+
27+
public function getRemovalVersion()
28+
{
29+
return 'v4.0.0';
30+
}
31+
32+
public function getDeprecationMessage()
33+
{
34+
return '';
35+
}
36+
37+
public function register()
38+
{
39+
return [T_WHITESPACE];
40+
}
41+
42+
public function process(File $phpcsFile, $stackPtr)
43+
{
44+
// Do something.
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
/**
3+
* Test fixture.
4+
*
5+
* @see \PHP_CodeSniffer\Tests\Core\Ruleset\PopulateTokenListenersSupportedTokenizersTest
6+
*/
7+
8+
namespace Fixtures\TestStandard\Sniffs\SupportedTokenizers;
9+
10+
use PHP_CodeSniffer\Files\File;
11+
use PHP_CodeSniffer\Sniffs\Sniff;
12+
13+
class ListensForCSSAndJSSniff implements Sniff
14+
{
15+
16+
public $supportedTokenizers = [
17+
'CSS',
18+
'JS',
19+
];
20+
21+
public function register()
22+
{
23+
return [T_WHITESPACE];
24+
}
25+
26+
public function process(File $phpcsFile, $stackPtr)
27+
{
28+
// Do something.
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
/**
3+
* Test fixture.
4+
*
5+
* @see \PHP_CodeSniffer\Tests\Core\Ruleset\PopulateTokenListenersSupportedTokenizersTest
6+
*/
7+
8+
namespace Fixtures\TestStandard\Sniffs\SupportedTokenizers;
9+
10+
use PHP_CodeSniffer\Files\File;
11+
use PHP_CodeSniffer\Sniffs\Sniff;
12+
13+
class ListensForCSSAndUnrecognizedSniff implements Sniff
14+
{
15+
16+
public $supportedTokenizers = [
17+
'CSS',
18+
'Unrecognized',
19+
];
20+
21+
public function register()
22+
{
23+
return [T_WHITESPACE];
24+
}
25+
26+
public function process(File $phpcsFile, $stackPtr)
27+
{
28+
// Do something.
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
/**
3+
* Test fixture.
4+
*
5+
* @see \PHP_CodeSniffer\Tests\Core\Ruleset\PopulateTokenListenersSupportedTokenizersTest
6+
*/
7+
8+
namespace Fixtures\TestStandard\Sniffs\SupportedTokenizers;
9+
10+
use PHP_CodeSniffer\Files\File;
11+
use PHP_CodeSniffer\Sniffs\Sniff;
12+
13+
class ListensForCSSSniff implements Sniff
14+
{
15+
16+
public $supportedTokenizers = ['CSS'];
17+
18+
public function register()
19+
{
20+
return [T_WHITESPACE];
21+
}
22+
23+
public function process(File $phpcsFile, $stackPtr)
24+
{
25+
// Do something.
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
/**
3+
* Test fixture.
4+
*
5+
* @see \PHP_CodeSniffer\Tests\Core\Ruleset\PopulateTokenListenersSupportedTokenizersTest
6+
*/
7+
8+
namespace Fixtures\TestStandard\Sniffs\SupportedTokenizers;
9+
10+
use PHP_CodeSniffer\Files\File;
11+
use PHP_CodeSniffer\Sniffs\Sniff;
12+
13+
class ListensForEmptySniff implements Sniff
14+
{
15+
16+
public $supportedTokenizers = [];
17+
18+
public function register()
19+
{
20+
return [T_WHITESPACE];
21+
}
22+
23+
public function process(File $phpcsFile, $stackPtr)
24+
{
25+
// Do something.
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
/**
3+
* Test fixture.
4+
*
5+
* @see \PHP_CodeSniffer\Tests\Core\Ruleset\PopulateTokenListenersSupportedTokenizersTest
6+
*/
7+
8+
namespace Fixtures\TestStandard\Sniffs\SupportedTokenizers;
9+
10+
use PHP_CodeSniffer\Files\File;
11+
use PHP_CodeSniffer\Sniffs\Sniff;
12+
13+
class ListensForJSSniff implements Sniff
14+
{
15+
16+
public $supportedTokenizers = ['JS'];
17+
18+
public function register()
19+
{
20+
return [T_WHITESPACE];
21+
}
22+
23+
public function process(File $phpcsFile, $stackPtr)
24+
{
25+
// Do something.
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
/**
3+
* Test fixture.
4+
*
5+
* @see \PHP_CodeSniffer\Tests\Core\Ruleset\PopulateTokenListenersSupportedTokenizersTest
6+
*/
7+
8+
namespace Fixtures\TestStandard\Sniffs\SupportedTokenizers;
9+
10+
use PHP_CodeSniffer\Files\File;
11+
use PHP_CodeSniffer\Sniffs\Sniff;
12+
13+
class ListensForPHPAndCSSAndJSSniff implements Sniff
14+
{
15+
16+
public $supportedTokenizers = [
17+
'PHP',
18+
'JS',
19+
'CSS',
20+
];
21+
22+
public function register()
23+
{
24+
return [
25+
T_OPEN_TAG,
26+
T_OPEN_TAG_WITH_ECHO
27+
];
28+
}
29+
30+
public function process(File $phpcsFile, $stackPtr)
31+
{
32+
// Do something.
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
/**
3+
* Test fixture.
4+
*
5+
* @see \PHP_CodeSniffer\Tests\Core\Ruleset\PopulateTokenListenersSupportedTokenizersTest
6+
*/
7+
8+
namespace Fixtures\TestStandard\Sniffs\SupportedTokenizers;
9+
10+
use PHP_CodeSniffer\Files\File;
11+
use PHP_CodeSniffer\Sniffs\Sniff;
12+
13+
class ListensForUnrecognizedTokenizersSniff implements Sniff
14+
{
15+
16+
public $supportedTokenizers = [
17+
'SCSS',
18+
'TypeScript',
19+
];
20+
21+
public function register()
22+
{
23+
return [T_WHITESPACE];
24+
}
25+
26+
public function process(File $phpcsFile, $stackPtr)
27+
{
28+
// Do something.
29+
}
30+
}

0 commit comments

Comments
 (0)