Skip to content

Commit 517299d

Browse files
authored
Merge pull request #2 from Ilyes512/strict
Strict
2 parents 8b0d18e + 1d73d0d commit 517299d

13 files changed

+146
-47
lines changed

.devcontainer/Dockerfile

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
ARG IMAGE_REPO=ghcr.io/ilyes512/php81-fpm
2-
ARG IMAGE_TAG_PHP_VSCODE=vscode-latest
3-
FROM $IMAGE_REPO:$IMAGE_TAG_PHP_VSCODE
1+
ARG IMAGE_REGISTRY_PHP
2+
ARG IMAGE_TAG_PHP_VSCODE
3+
FROM $IMAGE_REGISTRY_PHP:$IMAGE_TAG_PHP_VSCODE
44

55
ARG USERNAME=code
66
ARG USER_UID=1000
@@ -20,4 +20,6 @@ RUN groupadd --gid "$USER_GID" "$USERNAME" \
2020

2121
WORKDIR $WORKSPACE_PATH
2222

23+
ENV PATH=$PATH:${WORKSPACE_PATH}/vendor/bin
24+
2325
CMD ["docker-cmd.sh"]

.devcontainer/devcontainer.json

+15-10
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,19 @@
44
"dockerComposeFile": ["../docker-compose.yml"],
55
"service": "php",
66
"workspaceFolder": "/workspace",
7-
"settings": {
8-
"terminal.integrated.defaultProfile.linux": "bash",
9-
},
10-
"extensions": [
11-
"bmewburn.vscode-intelephense-client",
12-
"redhat.vscode-yaml",
13-
"mehedidracula.php-namespace-resolver",
14-
"editorconfig.editorconfig",
15-
"mhutchie.git-graph"
16-
]
7+
"postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
8+
"customizations": {
9+
"vscode": {
10+
"settings": {
11+
"terminal.integrated.defaultProfile.linux": "bash"
12+
},
13+
"extensions": [
14+
"bmewburn.vscode-intelephense-client",
15+
"redhat.vscode-yaml",
16+
"mehedidracula.php-namespace-resolver",
17+
"EditorConfig.EditorConfig",
18+
"mhutchie.git-graph"
19+
]
20+
}
21+
}
1722
}

.dockerignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*

.editorconfig

+1-4
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,5 @@ trim_trailing_whitespace = true
1111
[*.md]
1212
trim_trailing_whitespace = false
1313

14-
[*.{yml,yaml}]
14+
[{*,*.dist}.{yml,yaml,neon}]
1515
indent_size = 2
16-
17-
[*.j2]
18-
insert_final_newline = false

.env

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
COMPOSE_PROJECT_NAME=code-style
2-
IMAGE_REPO_PHP=ghcr.io/ilyes512/php81-fpm
3-
IMAGE_TAG_PHP_BUILDER=builder-1.0.0
4-
IMAGE_TAG_PHP_VSCODE=vscode-1.0.0
2+
3+
REGISTRY_HOST=ghcr.io
4+
REGISTRY_PATH=ilyes512
5+
6+
IMAGE_REGISTRY_PHP=${REGISTRY_HOST}/${REGISTRY_PATH}/php82-fpm
7+
IMAGE_TAG_PHP_VSCODE=vscode-1.0.3

.gitattributes

+19-8
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
# Path-based git attributes
22
# https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
33

4-
/.devcontainer/ export-ignore
5-
/.editorconfig export-ignore
6-
/.env export-ignore
7-
/.gitattributes export-ignore
8-
/.gitignore export-ignore
9-
/docker-compose.yml export-ignore
10-
/ecs-local.php export-ignore
11-
/Taskfile.yml export-ignore
4+
/.devcontainer export-ignore
5+
/.vscode export-ignore
6+
/docs export-ignore
7+
/tests export-ignore
8+
/.dockerignore export-ignore
9+
/.editorconfig export-ignore
10+
/.env export-ignore
11+
/.gitattributes export-ignore
12+
/.gitignore export-ignore
13+
/.vsls.json export-ignore
14+
/auth.json export-ignore
15+
/ecs-local.php export-ignore
16+
/phpstan.neon export-igore
17+
/phpstan.dist.neon export-ignore
18+
/phpunit.xml export-ignore
19+
/phpunit.xml.dist export-ignore
20+
/Taskfile.dist.yml export-ignore
21+
/Taskfile.yml export-ignore
22+
/docker-compose.yml export-ignore

.gitignore

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1+
!.env
12
.DS_Store
2-
/vendor
3-
/.phplint-cache
3+
/dev
44
/composer.lock
5+
/vendor
6+
/phpstan.neon
7+
/phpunit.xml
8+
/.phpunit-cache
9+
/.phplint.cache
510
/auth.json
11+
Taskfile.yml

LICENSE

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2022 Ilyes512
3+
Copyright (c) 2023 Ilyes512
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

Taskfile.yml Taskfile.dev.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,5 @@ tasks:
7373
- rm -rf
7474
vendor
7575
composer.lock
76-
.phplint-cache
76+
.phplint.cache
7777
&& printf "%s\n" "Successfully removed vendor/generated files..."

composer.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
"license": "MIT",
1212
"require": {
1313
"php": "^7.4 || ^8.0",
14-
"slevomat/coding-standard": "^7.0",
15-
"symplify/easy-coding-standard": "^10.0"
14+
"slevomat/coding-standard": "^8.0",
15+
"symplify/easy-coding-standard": "^11.0"
1616
},
1717
"require-dev": {
18-
"overtrue/phplint": "^4.1"
18+
"overtrue/phplint": "^9.0.4"
1919
},
2020
"scripts": {
2121
"lint": "XDEBUG_MODE=off phplint --exclude=vendor .",

docker-compose.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
version: "3.7"
22
services:
33
php:
4-
image: ilyes512/code-style/php/vscode:latest
4+
image: ${COMPOSE_PROJECT_NAME}-php-vscode:latest
55
entrypoint: ["sh", "-c", "trap : 15 ; sleep 9999d & wait"]
66
build:
77
context: .
88
dockerfile: .devcontainer/Dockerfile
99
args:
10-
IMAGE_REPO_PHP: ${IMAGE_REPO_PHP:-ghcr.io/ilyes512/php81-fpm}
11-
IMAGE_TAG_PHP_VSCODE: ${IMAGE_TAG_PHP_VSCODE:-vscode-latest}
10+
IMAGE_REGISTRY_PHP: $IMAGE_REGISTRY_PHP
11+
IMAGE_TAG_PHP_VSCODE: $IMAGE_TAG_PHP_VSCODE
1212
volumes:
1313
- $HOME/.ssh/known_hosts:/home/code/.ssh/known_hosts:ro
1414
# - $HOME/auth.json:/root/auth.json:ro

ecs-local.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
declare(strict_types=1);
44

5-
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
5+
use Symplify\EasyCodingStandard\Config\ECSConfig;
66
use Symplify\EasyCodingStandard\ValueObject\Option;
77

8-
return static function (ContainerConfigurator $containerConfigurator): void {
8+
return static function (ECSConfig $containerConfigurator): void {
99
$containerConfigurator->import(__DIR__ . '/ecs.php');
1010

1111
$containerConfigurator

ecs.php

+81-7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHP_CodeSniffer\Standards\Generic\Sniffs\Files\LineLengthSniff;
88
use PHP_CodeSniffer\Standards\Generic\Sniffs\Formatting\SpaceAfterCastSniff;
99
use PHP_CodeSniffer\Standards\PSR12\Sniffs\Files\FileHeaderSniff;
10+
use PHP_CodeSniffer\Standards\PSR2\Sniffs\Classes\PropertyDeclarationSniff;
1011
use PHP_CodeSniffer\Standards\Squiz\Sniffs\WhiteSpace\CastSpacingSniff;
1112
use PHP_CodeSniffer\Standards\Squiz\Sniffs\WhiteSpace\FunctionSpacingSniff;
1213
use PhpCsFixer\Fixer\ArrayNotation\NoWhitespaceBeforeCommaInArrayFixer;
@@ -49,6 +50,7 @@
4950
use PhpCsFixer\Fixer\Whitespace\NoSpacesInsideParenthesisFixer;
5051
use PhpCsFixer\Fixer\Whitespace\NoTrailingWhitespaceFixer;
5152
use PhpCsFixer\Fixer\Whitespace\SingleBlankLineAtEofFixer;
53+
use SlevomatCodingStandard\Sniffs\Arrays\DisallowImplicitArrayCreationSniff;
5254
use SlevomatCodingStandard\Sniffs\Arrays\MultiLineArrayEndBracketPlacementSniff;
5355
use SlevomatCodingStandard\Sniffs\Arrays\SingleLineArrayWhitespaceSniff;
5456
use SlevomatCodingStandard\Sniffs\Arrays\TrailingArrayCommaSniff;
@@ -63,38 +65,63 @@
6365
use SlevomatCodingStandard\Sniffs\Classes\RequireMultiLineMethodSignatureSniff;
6466
use SlevomatCodingStandard\Sniffs\Classes\TraitUseDeclarationSniff;
6567
use SlevomatCodingStandard\Sniffs\Classes\UselessLateStaticBindingSniff;
68+
use SlevomatCodingStandard\Sniffs\Commenting\DocCommentSpacingSniff;
69+
use SlevomatCodingStandard\Sniffs\Commenting\ForbiddenAnnotationsSniff;
70+
use SlevomatCodingStandard\Sniffs\Commenting\InlineDocCommentDeclarationSniff;
6671
use SlevomatCodingStandard\Sniffs\ControlStructures\DisallowContinueWithoutIntegerOperandInSwitchSniff;
72+
use SlevomatCodingStandard\Sniffs\ControlStructures\EarlyExitSniff;
6773
use SlevomatCodingStandard\Sniffs\ControlStructures\JumpStatementsSpacingSniff;
6874
use SlevomatCodingStandard\Sniffs\ControlStructures\LanguageConstructWithParenthesesSniff;
75+
use SlevomatCodingStandard\Sniffs\ControlStructures\RequireNullCoalesceEqualOperatorSniff;
76+
use SlevomatCodingStandard\Sniffs\ControlStructures\RequireNullCoalesceOperatorSniff;
77+
use SlevomatCodingStandard\Sniffs\ControlStructures\RequireNullSafeObjectOperatorSniff;
78+
use SlevomatCodingStandard\Sniffs\ControlStructures\RequireShortTernaryOperatorSniff;
6979
use SlevomatCodingStandard\Sniffs\Exceptions\DeadCatchSniff;
7080
use SlevomatCodingStandard\Sniffs\Exceptions\RequireNonCapturingCatchSniff;
7181
use SlevomatCodingStandard\Sniffs\Functions\ArrowFunctionDeclarationSniff;
82+
use SlevomatCodingStandard\Sniffs\Functions\RequireArrowFunctionSniff;
7283
use SlevomatCodingStandard\Sniffs\Functions\RequireTrailingCommaInCallSniff;
7384
use SlevomatCodingStandard\Sniffs\Functions\RequireTrailingCommaInDeclarationSniff;
7485
use SlevomatCodingStandard\Sniffs\Functions\StaticClosureSniff;
86+
use SlevomatCodingStandard\Sniffs\Functions\StrictCallSniff;
7587
use SlevomatCodingStandard\Sniffs\Functions\UnusedInheritedVariablePassedToClosureSniff;
88+
use SlevomatCodingStandard\Sniffs\Functions\UnusedParameterSniff;
7689
use SlevomatCodingStandard\Sniffs\Functions\UselessParameterDefaultValueSniff;
7790
use SlevomatCodingStandard\Sniffs\Namespaces\DisallowGroupUseSniff;
91+
use SlevomatCodingStandard\Sniffs\Namespaces\MultipleUsesPerLineSniff;
7892
use SlevomatCodingStandard\Sniffs\Namespaces\NamespaceDeclarationSniff;
93+
use SlevomatCodingStandard\Sniffs\Namespaces\NamespaceSpacingSniff;
94+
use SlevomatCodingStandard\Sniffs\Namespaces\ReferenceUsedNamesOnlySniff;
7995
use SlevomatCodingStandard\Sniffs\Namespaces\UnusedUsesSniff;
8096
use SlevomatCodingStandard\Sniffs\Namespaces\UseFromSameNamespaceSniff;
8197
use SlevomatCodingStandard\Sniffs\Namespaces\UselessAliasSniff;
8298
use SlevomatCodingStandard\Sniffs\Namespaces\UseSpacingSniff;
8399
use SlevomatCodingStandard\Sniffs\Numbers\RequireNumericLiteralSeparatorSniff;
100+
use SlevomatCodingStandard\Sniffs\Operators\DisallowEqualOperatorsSniff;
101+
use SlevomatCodingStandard\Sniffs\PHP\DisallowDirectMagicInvokeCallSniff;
84102
use SlevomatCodingStandard\Sniffs\PHP\OptimizedFunctionsWithoutUnpackingSniff;
85103
use SlevomatCodingStandard\Sniffs\PHP\ShortListSniff;
104+
use SlevomatCodingStandard\Sniffs\PHP\TypeCastSniff;
105+
use SlevomatCodingStandard\Sniffs\PHP\UselessParenthesesSniff;
86106
use SlevomatCodingStandard\Sniffs\PHP\UselessSemicolonSniff;
107+
use SlevomatCodingStandard\Sniffs\TypeHints\DisallowArrayTypeHintSyntaxSniff;
108+
use SlevomatCodingStandard\Sniffs\TypeHints\LongTypeHintsSniff;
87109
use SlevomatCodingStandard\Sniffs\TypeHints\NullableTypeForNullDefaultValueSniff;
88-
use SlevomatCodingStandard\Sniffs\TypeHints\PropertyTypeHintSpacingSniff;
110+
use SlevomatCodingStandard\Sniffs\TypeHints\NullTypeHintOnLastPositionSniff;
111+
use SlevomatCodingStandard\Sniffs\TypeHints\ParameterTypeHintSniff;
112+
use SlevomatCodingStandard\Sniffs\TypeHints\ParameterTypeHintSpacingSniff;
113+
use SlevomatCodingStandard\Sniffs\TypeHints\PropertyTypeHintSniff;
114+
use SlevomatCodingStandard\Sniffs\TypeHints\ReturnTypeHintSniff;
89115
use SlevomatCodingStandard\Sniffs\TypeHints\UnionTypeHintFormatSniff;
90116
use SlevomatCodingStandard\Sniffs\TypeHints\UselessConstantTypeHintSniff;
91117
use SlevomatCodingStandard\Sniffs\Variables\DisallowSuperGlobalVariableSniff;
118+
use SlevomatCodingStandard\Sniffs\Variables\DuplicateAssignmentToVariableSniff;
92119
use SlevomatCodingStandard\Sniffs\Variables\UnusedVariableSniff;
93120
use SlevomatCodingStandard\Sniffs\Variables\UselessVariableSniff;
94-
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
121+
use Symplify\EasyCodingStandard\Config\ECSConfig;
95122
use Symplify\EasyCodingStandard\ValueObject\Option;
96123

97-
return static function (ContainerConfigurator $containerConfigurator): void {
124+
return static function (ECSConfig $containerConfigurator): void {
98125
$services = $containerConfigurator->services();
99126

100127
$maxLineLength = 120;
@@ -201,10 +228,11 @@
201228
->property('nullPosition', 'last');
202229
$services->set(RequireNonCapturingCatchSniff::class);
203230
$services->set(ClassStructureSniff::class)
204-
->property('enableFinalMethods', true)
205231
->property('groups', [
206232
'uses',
207233

234+
'enum cases',
235+
208236
'public constants',
209237
'protected constants',
210238
'private constants',
@@ -248,7 +276,10 @@
248276
// Custom Slevomat Cleaning (Dead Code detection)
249277
$services->set(UnusedInheritedVariablePassedToClosureSniff::class);
250278
$services->set(UselessParameterDefaultValueSniff::class);
251-
$services->set(UnusedUsesSniff::class);
279+
$services->set(ReferenceUsedNamesOnlySniff::class)
280+
->property('searchAnnotations', true);
281+
$services->set(UnusedUsesSniff::class)
282+
->property('searchAnnotations', true);
252283
$services->set(UseFromSameNamespaceSniff::class);
253284
$services->set(UselessAliasSniff::class);
254285
$services->set(OptimizedFunctionsWithoutUnpackingSniff::class);
@@ -282,18 +313,61 @@
282313
$services->set(JumpStatementsSpacingSniff::class);
283314
$services->set(LanguageConstructWithParenthesesSniff::class);
284315
$services->set(ArrowFunctionDeclarationSniff::class)
285-
->property('allowMultiline', true);
316+
->property('allowMultiLine', true);
286317
$services->set(RequireTrailingCommaInCallSniff::class);
287318
$services->set(RequireTrailingCommaInDeclarationSniff::class);
288319
$services->set(NamespaceDeclarationSniff::class);
320+
$services->set(NamespaceSpacingSniff::class);
289321
$services->set(UseSpacingSniff::class);
290322
$services->set(RequireNumericLiteralSeparatorSniff::class)
291323
->property('minDigitsBeforeDecimalPoint', 6);
292324
$services->set(ShortListSniff::class);
293325
$services->set(ClassConstantVisibilitySniff::class);
294326
$services->set(NullableTypeForNullDefaultValueSniff::class);
295327
$services->set(DisallowGroupUseSniff::class);
296-
$services->set(PropertyTypeHintSpacingSniff::class);
328+
$services->set(PropertyDeclarationSniff::class);
329+
330+
// New funtional slevomat rules
331+
$services->set(ParameterTypeHintSniff::class);
332+
$services->set(PropertyTypeHintSniff::class);
333+
$services->set(ReturnTypeHintSniff::class);
334+
$services->set(RequireNonCapturingCatchSniff::class);
335+
$services->set(DisallowImplicitArrayCreationSniff::class);
336+
$services->set(RequireNullCoalesceOperatorSniff::class);
337+
$services->set(RequireNullCoalesceEqualOperatorSniff::class);
338+
$services->set(EarlyExitSniff::class);
339+
$services->set(StrictCallSniff::class);
340+
$services->set(DisallowDirectMagicInvokeCallSniff::class);
341+
$services->set(DisallowEqualOperatorsSniff::class);
342+
343+
// New clean slevomat rules
344+
$services->set(UnusedParameterSniff::class);
345+
$services->set(UselessParenthesesSniff::class);
346+
$services->set(DuplicateAssignmentToVariableSniff::class);
347+
348+
// New formatting slevomat rules https://github.com/slevomat/coding-standard#formatting---rules-for-consistent-code-looks
349+
$services->set(RequireNullSafeObjectOperatorSniff::class);
350+
$services->set(RequireShortTernaryOperatorSniff::class);
351+
$services->set(RequireArrowFunctionSniff::class);
352+
$services->set(DisallowArrayTypeHintSyntaxSniff::class);
353+
$services->set(LongTypeHintsSniff::class);
354+
$services->set(NullTypeHintOnLastPositionSniff::class);
355+
$services->set(TypeCastSniff::class);
356+
$services->set(ParameterTypeHintSpacingSniff::class);
357+
// $services->set(FullyQualifiedGlobalConstantsSniff::class);
358+
// $services->set(FullyQualifiedGlobalFunctionsSniff::class);
359+
$services->set(MultipleUsesPerLineSniff::class);
360+
$services->set(ForbiddenAnnotationsSniff::class)
361+
->property('forbiddenAnnotations', ['@author', '@created', '@version', '@package', '@copyright']);
362+
$services->set(DocCommentSpacingSniff::class)
363+
->property('annotationsGroups', [
364+
'@var',
365+
'@param',
366+
'@return',
367+
]);
368+
$services->set(InlineDocCommentDeclarationSniff::class)
369+
->property('allowDocCommentAboveReturn', true)
370+
->property('allowAboveNonAssignment', true);
297371

298372
$containerConfigurator
299373
->parameters()

0 commit comments

Comments
 (0)