Skip to content

Commit f836c03

Browse files
committed
feat: blacklist use of namespaces. ban use of Knp timestampable
1 parent 1494d07 commit f836c03

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Markup\Sniffs\Usage;
4+
5+
use PHP_CodeSniffer\Files\File;
6+
use PHP_CodeSniffer\Sniffs\Sniff;
7+
use SlevomatCodingStandard\Helpers\UseStatementHelper;
8+
9+
class NamespaceOverwrittenSniff implements Sniff
10+
{
11+
private const BLACKLIST_NAMESPACES = [
12+
[
13+
'namespace' => 'Knp\\DoctrineBehaviors\\Model\\Timestampable\\Timestampable',
14+
'require_use' => 'Phoenix\\Common\\Database\\Doctrine\\Entity\\Timestampable',
15+
],
16+
];
17+
18+
/**
19+
* @return mixed[]
20+
*/
21+
public function register()
22+
{
23+
return [
24+
T_OPEN_TAG,
25+
];
26+
}
27+
28+
/**
29+
* @param \PHP_CodeSniffer\Files\File $phpcsFile
30+
* @param int $openTagPointer
31+
*/
32+
public function process(File $phpcsFile, $openTagPointer)
33+
{
34+
$useStatements = UseStatementHelper::getUseStatements($phpcsFile, $openTagPointer);
35+
36+
foreach ($useStatements as $useStatement) {
37+
foreach (self::BLACKLIST_NAMESPACES as $namespace) {
38+
if (stripos($useStatement->getFullyQualifiedTypeName(), $namespace['namespace']) !== false) {
39+
$phpcsFile->addError(
40+
sprintf(
41+
"Class is %s overwritten, use %s instead",
42+
$useStatement->getFullyQualifiedTypeName(),
43+
$namespace['require_use']
44+
),
45+
$useStatement->getPointer(),
46+
'BlacklistedNamespace'
47+
);
48+
}
49+
}
50+
}
51+
}
52+
}

Markup/ruleset.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
<property name="spacingBeforeFirst" value="0" />
3939
</properties>
4040
</rule>
41+
<rule ref="Markup.Usage.NamespaceOverwritten.BlacklistedNamespace">
42+
<type>error</type>
43+
</rule>
4144

4245
<!-- Remove unused use statements -->
4346
<rule ref="vendor/slevomat/coding-standard/SlevomatCodingStandard/Sniffs/Namespaces/UnusedUsesSniff.php">

0 commit comments

Comments
 (0)