-
-
Notifications
You must be signed in to change notification settings - Fork 75
/
scoper.php
140 lines (116 loc) · 4.96 KB
/
scoper.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
declare(strict_types=1);
use Isolated\Symfony\Component\Finder\Finder;
use Nette\Utils\Strings;
require __DIR__ . '/vendor/autoload.php';
$timestamp = (new DateTime('now'))->format('Ym');
use Symplify\EasyCodingStandard\Application\Version\StaticVersionResolver;
// excluding polyfills in generic way
// @see https://github.com/humbug/php-scoper/blob/cb23986d9309a10eaa284242f2169723af4e4a7e/docs/further-reading.md#further-reading
$polyfillsBootstraps = array_map(
static fn (SplFileInfo $fileInfo) => $fileInfo->getPathname(),
iterator_to_array(
Finder::create()
->files()
->in(__DIR__ . '/vendor/symfony/polyfill-*')
->name('bootstrap*.php'),
false,
),
);
$polyfillsStubs = array_map(
static fn (SplFileInfo $fileInfo) => $fileInfo->getPathname(),
iterator_to_array(
Finder::create()
->files()
->in(__DIR__ . '/vendor/symfony/polyfill-*/Resources/stubs')
->name('*.php'),
false,
),
);
// see https://github.com/humbug/php-scoper
return [
'prefix' => 'ECSPrefix' . $timestamp,
// excluded
'exclude-namespaces' => [
'#^Symplify\\\\EasyCodingStandard#',
'#^Symplify\\\\CodingStandard#',
'#^PhpCsFixer#',
'#^PHP_CodeSniffer#',
'#^Symfony\\\\Polyfill#',
],
'exclude-constants' => [
// Symfony global constants
'#^SYMFONY\_[\p{L}_]+$#',
// TOKENS from code sniffer - https://github.com/symplify/easy-coding-standard/blob/main/vendor/squizlabs/php_codesniffer/src/Util/Tokens.php
'#^T_(.*?)#',
'PHP_CODESNIFFER_CBF',
'PHP_CODESNIFFER_VERBOSITY',
],
'expose-constants' => ['__ECS_RUNNING__'],
'expose-functions' => ['u', 'b', 's', 'trigger_deprecation'],
'exclude-files' => [...$polyfillsBootstraps, ...$polyfillsStubs],
// expose
'expose-classes' => ['Normalizer'],
'patchers' => [
static function (string $filePath, string $prefix, string $content): string {
if (! \str_ends_with(
$filePath,
'vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalInternalClassFixer.php',
)) {
return $content;
}
// php-cs-fixer uses partial namespaces, that are only strings - should be kept untouched
// ref.: https://github.com/easy-coding-standard/easy-coding-standard/issues/91
return str_replace([
$prefix . '\\\\ORM\\\\Entity',
$prefix . '\\\\ORM\\\\Mapping\\\\Entity',
$prefix . '\\\\Mapping\\\\Entity',
$prefix . '\\\\ODM\\\\Document',
], ['ORM\\Entity', 'ORM\\Mapping\\Entity', 'Mapping\\Entity', 'ODM\\Document'], $content);
},
static function (string $filePath, string $prefix, string $content): string {
if (! \str_ends_with(
$filePath,
'vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/OperatorLinebreakFixer.php'
)) {
return $content;
}
// PHP Code Sniffer and php-cs-fixer use different type, so both are compatible
// remove type, to allow string|int constants for token emulation
$content = str_replace('array_map(static function (int $id)', 'array_map(static function ($id)', $content);
return str_replace('static fn (int $id)', 'static fn ($id)', $content);
},
static function (string $filePath, string $prefix, string $content): string {
if (! \str_ends_with($filePath, 'vendor/symfony/deprecation-contracts/function.php')) {
return $content;
}
// comment out
return str_replace('@\trigger_', '// @\trigger_', $content);
},
// fixes https://github.com/symplify/symplify/issues/3205
function (string $filePath, string $prefix, string $content): string {
if (
! str_ends_with($filePath, 'src/Testing/PHPUnit/AbstractCheckerTestCase.php') &&
! str_ends_with($filePath, 'src/Testing/PHPUnit/AbstractTestCase.php')
) {
return $content;
}
return Strings::replace(
$content,
'#' . $prefix . '\\\\PHPUnit\\\\Framework\\\\TestCase#',
'PHPUnit\Framework\TestCase'
);
},
// add static versions constant values
function (string $filePath, string $prefix, string $content): string {
if (! str_ends_with($filePath, 'src/Application/Version/StaticVersionResolver.php')) {
return $content;
}
$releaseDateTime = StaticVersionResolver::resolverReleaseDateTime();
return strtr($content, [
'@package_version@' => StaticVersionResolver::resolvePackageVersion(),
'@release_date@' => $releaseDateTime->format('Y-m-d H:i:s'),
]);
},
],
];