From 19aab20bc4548e128dae50b8fde97b8ead2f99c6 Mon Sep 17 00:00:00 2001 From: Stefan Doorn Date: Mon, 8 Feb 2021 16:15:04 +0100 Subject: [PATCH] Test against PHP 8, allow ECS 9, upgrade config to PHP file --- .travis.yml | 7 +- README.md | 24 ++- composer.json | 4 +- easy-coding-standard.yml | 166 ----------------- ecs.php | 392 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 417 insertions(+), 176 deletions(-) delete mode 100644 easy-coding-standard.yml create mode 100644 ecs.php diff --git a/.travis.yml b/.travis.yml index 402b1d3..d716231 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,12 @@ language: php php: - - 7.2 - 7.3 - 7.4 + - 8.0 env: - - ECS_VERSION="^7.0" - - ECS_VERSION="^8.0" + - ECS_VERSION="^9.0" cache: directories: @@ -22,4 +21,4 @@ install: script: - composer validate --strict - - vendor/bin/ecs check tests + - vendor/bin/ecs check --config ecs.php tests ecs.php diff --git a/README.md b/README.md index b460fcf..f070de9 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,25 @@ Installation & usage $ composer require --dev sylius-labs/coding-standard ``` -2. Include a configuration file in your `easy-coding-standard.yml`: +2. Import the configuration file in your `ecs.php`: - ```yml - imports: - - { resource: 'vendor/sylius-labs/coding-standard/easy-coding-standard.yml' } + ```php + $containerConfigurator->import('vendor/sylius-labs/coding-standard/easy-coding-standard.php'); ``` + +Example config (ecs.php) +------------------------ + + ```php + use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; + + return static function (ContainerConfigurator $containerConfigurator): void { + $containerConfigurator->import('vendor/sylius-labs/coding-standard/easy-coding-standard.php'); + }; + ``` + +Upgrade from YML to PHP config file +----------------------------------- + +Use this [package](https://github.com/symplify/config-transformer) and follow their guidelines +to automatically migrate your YML config to a PHP config file. diff --git a/composer.json b/composer.json index 42969d3..a912e68 100644 --- a/composer.json +++ b/composer.json @@ -10,9 +10,9 @@ } ], "require": { - "php": "^7.1 || ^8.0", + "php": "^7.3 || ^8.0", "slevomat/coding-standard": "^6.3", - "symplify/easy-coding-standard": "^7.3 || ^8.1" + "symplify/easy-coding-standard": "^9.0" }, "autoload-dev": { "psr-4": { diff --git a/easy-coding-standard.yml b/easy-coding-standard.yml deleted file mode 100644 index 625a870..0000000 --- a/easy-coding-standard.yml +++ /dev/null @@ -1,166 +0,0 @@ -services: - PhpCsFixer\Fixer\Alias\EregToPregFixer: ~ - PhpCsFixer\Fixer\Alias\NoAliasFunctionsFixer: ~ - PhpCsFixer\Fixer\Alias\PowToExponentiationFixer: ~ - PhpCsFixer\Fixer\Alias\NoMixedEchoPrintFixer: - use: 'echo' - PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer: - syntax: 'short' - PhpCsFixer\Fixer\ArrayNotation\NoMultilineWhitespaceAroundDoubleArrowFixer: ~ - PhpCsFixer\Fixer\ArrayNotation\NormalizeIndexBraceFixer: ~ - PhpCsFixer\Fixer\ArrayNotation\NoTrailingCommaInSinglelineArrayFixer: ~ - PhpCsFixer\Fixer\ArrayNotation\NoWhitespaceBeforeCommaInArrayFixer: ~ - PhpCsFixer\Fixer\ArrayNotation\TrailingCommaInMultilineArrayFixer: ~ - PhpCsFixer\Fixer\ArrayNotation\TrimArraySpacesFixer: ~ - PhpCsFixer\Fixer\ArrayNotation\WhitespaceAfterCommaInArrayFixer: ~ - PhpCsFixer\Fixer\Basic\BracesFixer: - allow_single_line_closure: true - PhpCsFixer\Fixer\Basic\EncodingFixer: ~ - PhpCsFixer\Fixer\Basic\NonPrintableCharacterFixer: ~ - PhpCsFixer\Fixer\Casing\LowercaseConstantsFixer: ~ - PhpCsFixer\Fixer\Casing\LowercaseKeywordsFixer: ~ - PhpCsFixer\Fixer\Casing\LowercaseStaticReferenceFixer: ~ - PhpCsFixer\Fixer\Casing\MagicConstantCasingFixer: ~ - PhpCsFixer\Fixer\Casing\NativeFunctionCasingFixer: ~ - PhpCsFixer\Fixer\CastNotation\CastSpacesFixer: ~ - PhpCsFixer\Fixer\CastNotation\LowercaseCastFixer: ~ - PhpCsFixer\Fixer\CastNotation\ModernizeTypesCastingFixer: ~ - PhpCsFixer\Fixer\CastNotation\NoShortBoolCastFixer: ~ - PhpCsFixer\Fixer\CastNotation\ShortScalarCastFixer: ~ - PhpCsFixer\Fixer\ClassNotation\ClassAttributesSeparationFixer: ~ - PhpCsFixer\Fixer\ClassNotation\ClassDefinitionFixer: - singleItemSingleLine: true - multiLineExtendsEachSingleLine: true - PhpCsFixer\Fixer\ClassNotation\MethodSeparationFixer: ~ - PhpCsFixer\Fixer\ClassNotation\NoBlankLinesAfterClassOpeningFixer: ~ - PhpCsFixer\Fixer\ClassNotation\NoNullPropertyInitializationFixer: ~ - PhpCsFixer\Fixer\ClassNotation\NoPhp4ConstructorFixer: ~ - PhpCsFixer\Fixer\ClassNotation\NoUnneededFinalMethodFixer: ~ - PhpCsFixer\Fixer\ClassNotation\ProtectedToPrivateFixer: ~ - PhpCsFixer\Fixer\ClassNotation\SelfAccessorFixer: ~ - PhpCsFixer\Fixer\ClassNotation\SingleClassElementPerStatementFixer: ~ - PhpCsFixer\Fixer\ClassNotation\VisibilityRequiredFixer: - elements: [const, property, method] - PhpCsFixer\Fixer\Comment\HashToSlashCommentFixer: ~ - PhpCsFixer\Fixer\Comment\NoEmptyCommentFixer: ~ - PhpCsFixer\Fixer\Comment\NoTrailingWhitespaceInCommentFixer: ~ - PhpCsFixer\Fixer\Comment\SingleLineCommentStyleFixer: - comment_types: ['hash'] - PhpCsFixer\Fixer\ControlStructure\ElseifFixer: ~ - PhpCsFixer\Fixer\ControlStructure\IncludeFixer: ~ - PhpCsFixer\Fixer\ControlStructure\NoBreakCommentFixer: ~ - PhpCsFixer\Fixer\ControlStructure\NoSuperfluousElseifFixer: ~ - PhpCsFixer\Fixer\ControlStructure\NoTrailingCommaInListCallFixer: ~ - PhpCsFixer\Fixer\ControlStructure\NoUnneededControlParenthesesFixer: ~ - PhpCsFixer\Fixer\ControlStructure\NoUnneededCurlyBracesFixer: ~ - PhpCsFixer\Fixer\ControlStructure\NoUselessElseFixer: ~ - PhpCsFixer\Fixer\ControlStructure\SwitchCaseSemicolonToColonFixer: ~ - PhpCsFixer\Fixer\ControlStructure\SwitchCaseSpaceFixer: ~ - PhpCsFixer\Fixer\ConstantNotation\NativeConstantInvocationFixer: ~ - PhpCsFixer\Fixer\FunctionNotation\FunctionDeclarationFixer: ~ - PhpCsFixer\Fixer\FunctionNotation\FunctionTypehintSpaceFixer: ~ - PhpCsFixer\Fixer\FunctionNotation\MethodArgumentSpaceFixer: ~ - PhpCsFixer\Fixer\FunctionNotation\NoSpacesAfterFunctionNameFixer: ~ - PhpCsFixer\Fixer\FunctionNotation\ReturnTypeDeclarationFixer: ~ - PhpCsFixer\Fixer\Import\NoLeadingImportSlashFixer: ~ - PhpCsFixer\Fixer\Import\NoUnusedImportsFixer: ~ - PhpCsFixer\Fixer\Import\OrderedImportsFixer: ~ - PhpCsFixer\Fixer\Import\SingleImportPerStatementFixer: ~ - PhpCsFixer\Fixer\Import\SingleLineAfterImportsFixer: ~ - PhpCsFixer\Fixer\LanguageConstruct\CombineConsecutiveIssetsFixer: ~ - PhpCsFixer\Fixer\LanguageConstruct\CombineConsecutiveUnsetsFixer: ~ - PhpCsFixer\Fixer\LanguageConstruct\DeclareEqualNormalizeFixer: ~ - PhpCsFixer\Fixer\LanguageConstruct\DirConstantFixer: ~ - PhpCsFixer\Fixer\LanguageConstruct\FunctionToConstantFixer: ~ - PhpCsFixer\Fixer\LanguageConstruct\IsNullFixer: ~ - PhpCsFixer\Fixer\LanguageConstruct\SilencedDeprecationErrorFixer: ~ - PhpCsFixer\Fixer\ListNotation\ListSyntaxFixer: - syntax: 'short' - PhpCsFixer\Fixer\NamespaceNotation\BlankLineAfterNamespaceFixer: ~ - PhpCsFixer\Fixer\NamespaceNotation\NoLeadingNamespaceWhitespaceFixer: ~ - PhpCsFixer\Fixer\NamespaceNotation\SingleBlankLineBeforeNamespaceFixer: ~ - PhpCsFixer\Fixer\Naming\NoHomoglyphNamesFixer: ~ - PhpCsFixer\Fixer\Operator\BinaryOperatorSpacesFixer: - align_double_arrow: false - align_equals: false - PhpCsFixer\Fixer\Operator\ConcatSpaceFixer: - spacing: 'one' - PhpCsFixer\Fixer\Operator\NewWithBracesFixer: ~ - PhpCsFixer\Fixer\Operator\ObjectOperatorWithoutWhitespaceFixer: ~ - PhpCsFixer\Fixer\Operator\PreIncrementFixer: ~ - PhpCsFixer\Fixer\Operator\StandardizeNotEqualsFixer: ~ - PhpCsFixer\Fixer\Operator\TernaryOperatorSpacesFixer: ~ - PhpCsFixer\Fixer\Operator\TernaryToNullCoalescingFixer: ~ - PhpCsFixer\Fixer\Operator\UnaryOperatorSpacesFixer: ~ - PhpCsFixer\Fixer\Phpdoc\NoBlankLinesAfterPhpdocFixer: ~ - PhpCsFixer\Fixer\Phpdoc\NoEmptyPhpdocFixer: ~ - PhpCsFixer\Fixer\Phpdoc\NoSuperfluousPhpdocTagsFixer: - allow_mixed: true - PhpCsFixer\Fixer\Phpdoc\PhpdocIndentFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocInlineTagFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocNoAccessFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocNoAliasTagFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocNoEmptyReturnFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocNoPackageFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocNoUselessInheritdocFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocReturnSelfReferenceFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocScalarFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocSeparationFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocSingleLineVarSpacingFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocTrimFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocTypesFixer: ~ - PhpCsFixer\Fixer\Phpdoc\PhpdocTypesOrderFixer: - null_adjustment: 'always_last' - sort_algorithm: 'none' - PhpCsFixer\Fixer\Phpdoc\PhpdocVarWithoutNameFixer: ~ - PhpCsFixer\Fixer\PhpTag\BlankLineAfterOpeningTagFixer: ~ - PhpCsFixer\Fixer\PhpTag\FullOpeningTagFixer: ~ - PhpCsFixer\Fixer\PhpTag\NoClosingTagFixer: ~ - PhpCsFixer\Fixer\PhpUnit\PhpUnitDedicateAssertFixer: ~ - PhpCsFixer\Fixer\PhpUnit\PhpUnitFqcnAnnotationFixer: ~ - PhpCsFixer\Fixer\Semicolon\NoEmptyStatementFixer: ~ - PhpCsFixer\Fixer\Semicolon\NoSinglelineWhitespaceBeforeSemicolonsFixer: ~ - PhpCsFixer\Fixer\Semicolon\SpaceAfterSemicolonFixer: ~ - PhpCsFixer\Fixer\Strict\DeclareStrictTypesFixer: ~ - PhpCsFixer\Fixer\StringNotation\SingleQuoteFixer: ~ - PhpCsFixer\Fixer\Whitespace\BlankLineBeforeStatementFixer: ~ - PhpCsFixer\Fixer\Whitespace\IndentationTypeFixer: ~ - PhpCsFixer\Fixer\Whitespace\LineEndingFixer: ~ - PhpCsFixer\Fixer\Whitespace\NoExtraBlankLinesFixer: - tokens: - - 'break' - - 'case' - - 'continue' - - 'curly_brace_block' - - 'default' - - 'extra' - - 'parenthesis_brace_block' - - 'return' - - 'square_brace_block' - - 'switch' - - 'throw' - - 'use' - PhpCsFixer\Fixer\Whitespace\NoSpacesAroundOffsetFixer: ~ - PhpCsFixer\Fixer\Whitespace\NoSpacesInsideParenthesisFixer: ~ - PhpCsFixer\Fixer\Whitespace\NoTrailingWhitespaceFixer: ~ - PhpCsFixer\Fixer\Whitespace\NoWhitespaceInBlankLineFixer: ~ - PhpCsFixer\Fixer\Whitespace\SingleBlankLineAtEofFixer: ~ - SlevomatCodingStandard\Sniffs\Commenting\ForbiddenAnnotationsSniff: - forbiddenAnnotations: - - '@api' - - '@author' - - '@category' - - '@copyright' - - '@created' - - '@license' - - '@package' - - '@since' - - '@subpackage' - - '@version' - SlevomatCodingStandard\Sniffs\Commenting\InlineDocCommentDeclarationSniff: ~ - SlevomatCodingStandard\Sniffs\Commenting\RequireOneLinePropertyDocCommentSniff: ~ - -parameters: - skip: - PhpCsFixer\Fixer\ClassNotation\VisibilityRequiredFixer: - - '*Spec.php' diff --git a/ecs.php b/ecs.php new file mode 100644 index 0000000..1abf315 --- /dev/null +++ b/ecs.php @@ -0,0 +1,392 @@ +services(); + + $services->set(EregToPregFixer::class); + + $services->set(NoAliasFunctionsFixer::class); + + $services->set(PowToExponentiationFixer::class); + + $services->set(NoMixedEchoPrintFixer::class) + ->call('configure', [['use' => 'echo']]); + + $services->set(ArraySyntaxFixer::class) + ->call('configure', [['syntax' => 'short']]); + + $services->set(NoMultilineWhitespaceAroundDoubleArrowFixer::class); + + $services->set(NormalizeIndexBraceFixer::class); + + $services->set(NoTrailingCommaInSinglelineArrayFixer::class); + + $services->set(NoWhitespaceBeforeCommaInArrayFixer::class); + + $services->set(TrailingCommaInMultilineArrayFixer::class); + + $services->set(TrimArraySpacesFixer::class); + + $services->set(WhitespaceAfterCommaInArrayFixer::class); + + $services->set(BracesFixer::class) + ->call('configure', [['allow_single_line_closure' => true]]); + + $services->set(EncodingFixer::class); + + $services->set(NonPrintableCharacterFixer::class); + + $services->set(LowercaseConstantsFixer::class); + + $services->set(LowercaseKeywordsFixer::class); + + $services->set(LowercaseStaticReferenceFixer::class); + + $services->set(MagicConstantCasingFixer::class); + + $services->set(NativeFunctionCasingFixer::class); + + $services->set(CastSpacesFixer::class); + + $services->set(LowercaseCastFixer::class); + + $services->set(ModernizeTypesCastingFixer::class); + + $services->set(NoShortBoolCastFixer::class); + + $services->set(ShortScalarCastFixer::class); + + $services->set(ClassAttributesSeparationFixer::class); + + $services->set(ClassDefinitionFixer::class) + ->call('configure', [['single_item_single_line' => true, 'multi_line_extends_each_single_line' => true]]); + + $services->set(MethodSeparationFixer::class); + + $services->set(NoBlankLinesAfterClassOpeningFixer::class); + + $services->set(NoNullPropertyInitializationFixer::class); + + $services->set(NoPhp4ConstructorFixer::class); + + $services->set(NoUnneededFinalMethodFixer::class); + + $services->set(ProtectedToPrivateFixer::class); + + $services->set(SelfAccessorFixer::class); + + $services->set(SingleClassElementPerStatementFixer::class); + + $services->set(VisibilityRequiredFixer::class) + ->call('configure', [['elements' => ['const', 'property', 'method']]]); + + $services->set(HashToSlashCommentFixer::class); + + $services->set(NoEmptyCommentFixer::class); + + $services->set(NoTrailingWhitespaceInCommentFixer::class); + + $services->set(SingleLineCommentStyleFixer::class) + ->call('configure', [['comment_types' => ['hash']]]); + + $services->set(ElseifFixer::class); + + $services->set(IncludeFixer::class); + + $services->set(NoBreakCommentFixer::class); + + $services->set(NoSuperfluousElseifFixer::class); + + $services->set(NoTrailingCommaInListCallFixer::class); + + $services->set(NoUnneededControlParenthesesFixer::class); + + $services->set(NoUnneededCurlyBracesFixer::class); + + $services->set(NoUselessElseFixer::class); + + $services->set(SwitchCaseSemicolonToColonFixer::class); + + $services->set(SwitchCaseSpaceFixer::class); + + $services->set(NativeConstantInvocationFixer::class); + + $services->set(FunctionDeclarationFixer::class); + + $services->set(FunctionTypehintSpaceFixer::class); + + $services->set(MethodArgumentSpaceFixer::class); + + $services->set(NoSpacesAfterFunctionNameFixer::class); + + $services->set(ReturnTypeDeclarationFixer::class); + + $services->set(NoLeadingImportSlashFixer::class); + + $services->set(NoUnusedImportsFixer::class); + + $services->set(OrderedImportsFixer::class); + + $services->set(SingleImportPerStatementFixer::class); + + $services->set(SingleLineAfterImportsFixer::class); + + $services->set(CombineConsecutiveIssetsFixer::class); + + $services->set(CombineConsecutiveUnsetsFixer::class); + + $services->set(DeclareEqualNormalizeFixer::class); + + $services->set(DirConstantFixer::class); + + $services->set(FunctionToConstantFixer::class); + + $services->set(IsNullFixer::class); + + $services->set(SilencedDeprecationErrorFixer::class); + + $services->set(ListSyntaxFixer::class) + ->call('configure', [['syntax' => 'short']]); + + $services->set(BlankLineAfterNamespaceFixer::class); + + $services->set(NoLeadingNamespaceWhitespaceFixer::class); + + $services->set(SingleBlankLineBeforeNamespaceFixer::class); + + $services->set(NoHomoglyphNamesFixer::class); + + $services->set(BinaryOperatorSpacesFixer::class) + ->call('configure', [['align_double_arrow' => false, 'align_equals' => false]]); + + $services->set(ConcatSpaceFixer::class) + ->call('configure', [['spacing' => 'one']]); + + $services->set(NewWithBracesFixer::class); + + $services->set(ObjectOperatorWithoutWhitespaceFixer::class); + + $services->set(PreIncrementFixer::class); + + $services->set(StandardizeNotEqualsFixer::class); + + $services->set(TernaryOperatorSpacesFixer::class); + + $services->set(TernaryToNullCoalescingFixer::class); + + $services->set(UnaryOperatorSpacesFixer::class); + + $services->set(NoBlankLinesAfterPhpdocFixer::class); + + $services->set(NoEmptyPhpdocFixer::class); + + $services->set(NoSuperfluousPhpdocTagsFixer::class) + ->call('configure', [['allow_mixed' => true]]); + + $services->set(PhpdocIndentFixer::class); + + $services->set(PhpdocInlineTagFixer::class); + + $services->set(PhpdocNoAccessFixer::class); + + $services->set(PhpdocNoAliasTagFixer::class); + + $services->set(PhpdocNoEmptyReturnFixer::class); + + $services->set(PhpdocNoPackageFixer::class); + + $services->set(PhpdocNoUselessInheritdocFixer::class); + + $services->set(PhpdocReturnSelfReferenceFixer::class); + + $services->set(PhpdocScalarFixer::class); + + $services->set(PhpdocSeparationFixer::class); + + $services->set(PhpdocSingleLineVarSpacingFixer::class); + + $services->set(PhpdocTrimFixer::class); + + $services->set(PhpdocTypesFixer::class); + + $services->set(PhpdocTypesOrderFixer::class) + ->call('configure', [['null_adjustment' => 'always_last', 'sort_algorithm' => 'none']]); + + $services->set(PhpdocVarWithoutNameFixer::class); + + $services->set(BlankLineAfterOpeningTagFixer::class); + + $services->set(FullOpeningTagFixer::class); + + $services->set(NoClosingTagFixer::class); + + $services->set(PhpUnitDedicateAssertFixer::class); + + $services->set(PhpUnitFqcnAnnotationFixer::class); + + $services->set(NoEmptyStatementFixer::class); + + $services->set(NoSinglelineWhitespaceBeforeSemicolonsFixer::class); + + $services->set(SpaceAfterSemicolonFixer::class); + + $services->set(DeclareStrictTypesFixer::class); + + $services->set(SingleQuoteFixer::class); + + $services->set(BlankLineBeforeStatementFixer::class); + + $services->set(IndentationTypeFixer::class); + + $services->set(LineEndingFixer::class); + + $services->set(NoExtraBlankLinesFixer::class) + ->call('configure', [['tokens' => ['break', 'case', 'continue', 'curly_brace_block', 'default', 'extra', 'parenthesis_brace_block', 'return', 'square_brace_block', 'switch', 'throw', 'use']]]); + + $services->set(NoSpacesAroundOffsetFixer::class); + + $services->set(NoSpacesInsideParenthesisFixer::class); + + $services->set(NoTrailingWhitespaceFixer::class); + + $services->set(NoWhitespaceInBlankLineFixer::class); + + $services->set(SingleBlankLineAtEofFixer::class); + + $services->set(ForbiddenAnnotationsSniff::class) + ->property('forbiddenAnnotations', ['@api', '@author', '@category', '@copyright', '@created', '@license', '@package', '@since', '@subpackage', '@version']); + + $services->set(InlineDocCommentDeclarationSniff::class); + + $services->set(RequireOneLinePropertyDocCommentSniff::class); + + $parameters = $containerConfigurator->parameters(); + + $parameters->set('skip', [VisibilityRequiredFixer::class => ['*Spec.php']]); +};