Skip to content

Commit bfad0ed

Browse files
committed
chore: cherry-pick structarmed.php from 4.8 to develop and use baseline config
1 parent cc882d6 commit bfad0ed

2 files changed

Lines changed: 63 additions & 29 deletions

File tree

‎structarmed-baseline.php‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
return [
6+
[
7+
'rule' => 'base_classes.must_be_abstract',
8+
'message' => 'Extended class [CodeIgniter\Config\BaseService] must be declared abstract or instantiated',
9+
'file' => 'system/Config/BaseService.php',
10+
'class' => 'CodeIgniter\Config\BaseService',
11+
'layer' => 'Source',
12+
],
13+
[
14+
'rule' => 'base_classes.must_be_abstract',
15+
'message' => 'Extended class [CodeIgniter\Debug\Toolbar\Collectors\BaseCollector] must be declared abstract or instantiated',
16+
'file' => 'system/Debug/Toolbar/Collectors/BaseCollector.php',
17+
'class' => 'CodeIgniter\Debug\Toolbar\Collectors\BaseCollector',
18+
'layer' => 'Source',
19+
],
20+
];

‎structarmed.php‎

Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,39 @@
1010
* For the full copyright and license information, please view
1111
* the LICENSE file that was distributed with this source code.
1212
*/
13-
use Boundwize\StructArmed\Rule\Rules\Function_\MustHaveReturnTypeFunctionRule;
13+
14+
use Boundwize\StructArmed\Architecture;
15+
use Boundwize\StructArmed\Preset\Preset;
1416
use Boundwize\StructArmed\Preset\Presets\CodeQualityPreset;
17+
use Boundwize\StructArmed\Preset\Presets\Psr4Preset;
18+
use Boundwize\StructArmed\Rule\Rules\Class_\ExtendedClassMustBeAbstractOrInstantiatedRule;
19+
use Boundwize\StructArmed\Rule\Rules\Function_\MustHaveReturnTypeFunctionRule;
1520
use CodeIgniter\Cache\ResponseCache;
21+
use CodeIgniter\Database\BaseResult;
22+
use CodeIgniter\DataCaster\DataCaster;
23+
use CodeIgniter\DataConverter\DataConverter;
24+
use CodeIgniter\Entity\Cast\CastInterface;
25+
use CodeIgniter\Entity\Cast\URICast;
26+
use CodeIgniter\Entity\Entity;
27+
use CodeIgniter\Entity\Exceptions\CastException;
1628
use CodeIgniter\HTTP\CLIRequest;
29+
use CodeIgniter\HTTP\DownloadResponse;
1730
use CodeIgniter\HTTP\Header;
1831
use CodeIgniter\HTTP\IncomingRequest;
32+
use CodeIgniter\HTTP\RedirectResponse;
33+
use CodeIgniter\HTTP\Response;
1934
use CodeIgniter\HTTP\ResponseInterface;
20-
use CodeIgniter\DataCaster\DataCaster;
21-
use CodeIgniter\Entity\Cast\CastInterface;
22-
use CodeIgniter\Entity\Exceptions\CastException;
23-
use CodeIgniter\DataConverter\DataConverter;
24-
use CodeIgniter\Entity\Entity;
25-
use CodeIgniter\Entity\Cast\URICast;
35+
use CodeIgniter\HTTP\ResponseTrait;
36+
use CodeIgniter\HTTP\SSEResponse;
37+
use CodeIgniter\HTTP\StreamResponse;
2638
use CodeIgniter\HTTP\URI;
2739
use CodeIgniter\Log\Handlers\ChromeLoggerHandler;
28-
use CodeIgniter\Security\CheckPhpIni;
29-
use CodeIgniter\View\Table;
30-
use CodeIgniter\Database\BaseResult;
31-
use CodeIgniter\View\Plugins;
32-
use CodeIgniter\HTTP\ResponseTrait;
3340
use CodeIgniter\Pager\PagerInterface;
34-
use CodeIgniter\HTTP\Response;
35-
use CodeIgniter\HTTP\RedirectResponse;
36-
use CodeIgniter\HTTP\DownloadResponse;
41+
use CodeIgniter\Security\CheckPhpIni;
3742
use CodeIgniter\Validation\Validation;
43+
use CodeIgniter\View\Plugins;
3844
use CodeIgniter\View\RendererInterface;
39-
use Boundwize\StructArmed\Architecture;
40-
use Boundwize\StructArmed\Preset\Preset;
41-
use Boundwize\StructArmed\Preset\Presets\Psr4Preset;
45+
use CodeIgniter\View\Table;
4246

4347
return Architecture::define()
4448
->skip([
@@ -56,6 +60,8 @@
5660
->layer('Helpers', __DIR__ . '/system/Helpers')
5761
->rule('helpers.functions_must_have_return_type', new MustHaveReturnTypeFunctionRule('Helpers'))
5862

63+
->rule('base_classes.must_be_abstract', new ExtendedClassMustBeAbstractOrInstantiatedRule('Source', '/^CodeIgniter\\\\.*Base.*$/'))
64+
5965
// Resolve CodeIgniter layers from class names because several layers share directories.
6066
->layerPattern('API', '/^CodeIgniter\\\\API\\\\.*$/')
6167
->layerPattern('Cache', '/^CodeIgniter\\\\Cache\\\\.*$/')
@@ -72,11 +78,13 @@
7278
->layerPattern('Filters', '/^CodeIgniter\\\\Filters\\\\Filter.*$/')
7379
->layerPattern('Format', '/^CodeIgniter\\\\Format\\\\.*$/')
7480
->layerPattern('Honeypot', '/^CodeIgniter\\\\.*Honeypot.*$/')
81+
->layerPattern('Input', '/^CodeIgniter\\\\Input\\\\.*$/')
7582
->layerPattern('URI', '/^CodeIgniter\\\\HTTP\\\\URI$/')
7683
->layerPattern('HTTP', '/^CodeIgniter\\\\HTTP\\\\.*$/', '/(Exception|URI)/')
7784
->layerPattern('I18n', '/^CodeIgniter\\\\I18n\\\\.*$/')
7885
->layerPattern('Images', '/^CodeIgniter\\\\Images\\\\.*$/')
7986
->layerPattern('Language', '/^CodeIgniter\\\\Language\\\\.*$/')
87+
->layerPattern('Lock', '/^CodeIgniter\\\\Lock\\\\.*$/')
8088
->layerPattern('Log', '/^CodeIgniter\\\\Log\\\\.*$/')
8189
->layerPattern('Model', '/^CodeIgniter\\\\.*Model$/')
8290
->layerPattern('Modules', '/^CodeIgniter\\\\Modules\\\\.*$/')
@@ -96,26 +104,28 @@
96104
'Controller' => ['HTTP', 'Validation'],
97105
'Cookie' => ['I18n'],
98106
'Database' => ['Entity', 'Events', 'I18n'],
99-
'DataCaster' => ['I18n', 'URI', 'Database'],
107+
'DataCaster' => ['I18n', 'URI', 'Database', 'Encryption'],
100108
'DataConverter' => ['DataCaster'],
101109
'Email' => ['I18n', 'Events'],
102110
'Entity' => ['DataCaster', 'I18n'],
103111
'Files' => ['I18n'],
104112
'Filters' => ['HTTP'],
105113
'Honeypot' => ['Filters', 'HTTP'],
106-
'HTTP' => ['Cookie', 'Files', 'I18n', 'Security', 'URI'],
114+
'HTTP' => ['Cookie', 'Files', 'I18n', 'Input', 'Security', 'URI'],
115+
'Input' => ['I18n'],
107116
'Images' => ['Files', 'I18n'],
117+
'Lock' => ['Cache'],
108118
'Model' => ['Database', 'DataCaster', 'DataConverter', 'Entity', 'I18n', 'Pager', 'Validation'],
109119
'Pager' => ['URI', 'View'],
110120
'Publisher' => ['Files', 'URI'],
111121
// +API = API + its allowed layers; +Controller = Controller + its allowed layers
112-
'RESTful' => ['+API', '+Controller'],
113-
'Router' => ['HTTP', 'I18n'],
114-
'Security' => ['Cookie', 'HTTP', 'I18n', 'Session'],
115-
'Session' => ['Cookie', 'Database', 'HTTP', 'I18n'],
116-
'Throttle' => ['Cache', 'I18n'],
117-
'Validation' => ['Database', 'HTTP', 'Helpers'],
118-
'View' => ['Cache'],
122+
'RESTful' => ['+API', '+Controller'],
123+
'Router' => ['HTTP', 'I18n'],
124+
'Security' => ['Cookie', 'HTTP', 'I18n', 'Session'],
125+
'Session' => ['Cookie', 'Database', 'HTTP', 'I18n'],
126+
'Throttle' => ['Cache', 'I18n'],
127+
'Validation' => ['Database', 'HTTP', 'Helpers', 'I18n', 'Input'],
128+
'View' => ['Cache'],
119129
])
120130
->skipPathsForRuleset(['*test*'])
121131
// Skip violations for class-specific dependencies.
@@ -129,7 +139,7 @@
129139
CastInterface::class,
130140
CastException::class,
131141
])
132-
->skipClassViolation(\CodeIgniter\DataCaster\Exceptions\CastException::class, [
142+
->skipClassViolation(CodeIgniter\DataCaster\Exceptions\CastException::class, [
133143
CastException::class,
134144
])
135145
->skipClassViolation(DataConverter::class, [
@@ -157,4 +167,8 @@
157167
->skipClassViolation(Response::class, [PagerInterface::class])
158168
->skipClassViolation(RedirectResponse::class, [PagerInterface::class])
159169
->skipClassViolation(DownloadResponse::class, [PagerInterface::class])
160-
->skipClassViolation(Validation::class, [RendererInterface::class]);
170+
->skipClassViolation(SSEResponse::class, [PagerInterface::class])
171+
->skipClassViolation(StreamResponse::class, [PagerInterface::class])
172+
->skipClassViolation(Validation::class, [RendererInterface::class])
173+
174+
->baseline(__DIR__ . '/structarmed-baseline.php');

0 commit comments

Comments
 (0)