diff --git a/config/set/per-cs.php b/config/set/per-cs.php new file mode 100644 index 0000000000..baa93f014a --- /dev/null +++ b/config/set/per-cs.php @@ -0,0 +1,175 @@ +withConfiguredRule(BinaryOperatorSpacesFixer::class, [ + 'default' => 'at_least_single_space', + ]) + ->withConfiguredRule(BracesPositionFixer::class, [ + 'allow_single_line_anonymous_functions' => false, + 'allow_single_line_empty_anonymous_classes' => true, + ]) + ->withConfiguredRule(ClassDefinitionFixer::class, [ + 'inline_constructor_arguments' => false, + 'space_before_parenthesis' => true, + ]) + ->withConfiguredRule(ConcatSpaceFixer::class, [ + 'spacing' => 'one', + ]) + ->withConfiguredRule(FunctionDeclarationFixer::class, [ + 'closure_fn_spacing' => 'none', + ]) + ->withConfiguredRule(MethodArgumentSpaceFixer::class, [ + 'after_heredoc' => false, + ]) + ->withConfiguredRule(NewWithParenthesesFixer::class, [ + 'anonymous_class' => false, + ]) + ->withConfiguredRule(NoExtraBlankLinesFixer::class, [ + 'tokens' => ['use'], + ]) + ->withConfiguredRule(OrderedClassElementsFixer::class, [ + 'order' => ['use_trait'], + ]) + ->withConfiguredRule(OrderedImportsFixer::class, [ + 'imports_order' => ['class', 'function', 'const'], + 'sort_algorithm' => 'none', + ]) + ->withConfiguredRule(OrderedTypesFixer::class, [ + 'null_adjustment' => 'always_last', + 'sort_algorithm' => 'none', + ]) + ->withConfiguredRule(SingleImportPerStatementFixer::class, [ + 'group_to_single_imports' => false, + ]) + ->withConfiguredRule(SingleSpaceAroundConstructFixer::class, [ + 'constructs_followed_by_a_single_space' => [ + 'abstract', 'as', 'case', 'catch', 'class', 'const', 'const_import', 'do', 'else', 'elseif', + 'enum', 'final', 'finally', 'for', 'foreach', 'function', 'function_import', 'if', 'insteadof', + 'interface', 'match', 'named_argument', 'namespace', 'new', 'private', 'protected', 'public', + 'readonly', 'static', 'switch', 'trait', 'try', 'type_colon', 'use', 'use_lambda', 'while', + ], + 'constructs_preceded_by_a_single_space' => ['as', 'else', 'elseif', 'use_lambda'], + ]) + ->withConfiguredRule(TrailingCommaInMultilineFixer::class, [ + 'after_heredoc' => true, + 'elements' => ['arguments', 'array_destructuring', 'arrays', 'match', 'parameters'], + ]) + ->withConfiguredRule(UnaryOperatorSpacesFixer::class, [ + 'only_dec_inc' => true, + ]) + ->withRules([ + ArrayIndentationFixer::class, + ArraySyntaxFixer::class, + AttributeBlockNoSpacesFixer::class, + BlankLineAfterNamespaceFixer::class, + BlankLineAfterOpeningTagFixer::class, + BlankLineBetweenImportGroupsFixer::class, + BlankLinesBeforeNamespaceFixer::class, + CastSpacesFixer::class, + CompactNullableTypeDeclarationFixer::class, + ConstantCaseFixer::class, + ControlStructureBracesFixer::class, + ControlStructureContinuationPositionFixer::class, + DeclareEqualNormalizeFixer::class, + ElseifFixer::class, + EncodingFixer::class, + FullOpeningTagFixer::class, + IndentationTypeFixer::class, + LineEndingFixer::class, + LowercaseCastFixer::class, + LowercaseKeywordsFixer::class, + LowercaseStaticReferenceFixer::class, + ModifierKeywordsFixer::class, + NoBlankLinesAfterClassOpeningFixer::class, + NoBreakCommentFixer::class, + NoClosingTagFixer::class, + NoLeadingImportSlashFixer::class, + NoMultipleStatementsPerLineFixer::class, + NoSpaceAroundDoubleColonFixer::class, + NoSpacesAfterFunctionNameFixer::class, + NoTrailingWhitespaceFixer::class, + NoTrailingWhitespaceInCommentFixer::class, + NoWhitespaceInBlankLineFixer::class, + NullableTypeDeclarationFixer::class, + OperatorLinebreakFixer::class, + ReturnTypeDeclarationFixer::class, + ShortScalarCastFixer::class, + SingleBlankLineAtEofFixer::class, + SingleClassElementPerStatementFixer::class, + SingleLineAfterImportsFixer::class, + SingleLineEmptyBodyFixer::class, + SingleTraitInsertPerStatementFixer::class, + SpacesInsideParenthesesFixer::class, + StatementIndentationFixer::class, + SwitchCaseSemicolonToColonFixer::class, + SwitchCaseSpaceFixer::class, + TernaryOperatorSpacesFixer::class, + TypesSpacesFixer::class, + ]); diff --git a/src/Configuration/ECSConfigBuilder.php b/src/Configuration/ECSConfigBuilder.php index 3713e88535..f5a61a0722 100644 --- a/src/Configuration/ECSConfigBuilder.php +++ b/src/Configuration/ECSConfigBuilder.php @@ -201,6 +201,8 @@ public function withRootFiles(): self public function withPreparedSets( /** @see SetList::PSR_12 */ bool $psr12 = false, + /** @see SetList::PER_CS */ + bool $perCs = false, /** @see SetList::COMMON */ bool $common = false, /** @see SetList::LARAVEL */ @@ -238,6 +240,10 @@ public function withPreparedSets( $this->sets[] = SetList::PSR_12; } + if ($perCs) { + $this->sets[] = SetList::PER_CS; + } + if ($common) { // include all "common" sets $this->sets[] = SetList::COMMON; diff --git a/src/ValueObject/Set/SetList.php b/src/ValueObject/Set/SetList.php index 9e7025bef1..9cbe35a7fd 100644 --- a/src/ValueObject/Set/SetList.php +++ b/src/ValueObject/Set/SetList.php @@ -14,6 +14,11 @@ final class SetList */ public const string PSR_12 = __DIR__ . '/../../../config/set/psr12.php'; + /** + * @api + */ + public const string PER_CS = __DIR__ . '/../../../config/set/per-cs.php'; + /** * @api */ diff --git a/tests/Set/PerCs/Fixture/fixture.php.inc b/tests/Set/PerCs/Fixture/fixture.php.inc new file mode 100644 index 0000000000..c0920e1417 --- /dev/null +++ b/tests/Set/PerCs/Fixture/fixture.php.inc @@ -0,0 +1,26 @@ + 0; + return $result; + } +} +----- + 0; + return $result; + } +} diff --git a/tests/Set/PerCs/PerCsTest.php b/tests/Set/PerCs/PerCsTest.php new file mode 100644 index 0000000000..35912f8ce8 --- /dev/null +++ b/tests/Set/PerCs/PerCsTest.php @@ -0,0 +1,29 @@ +doTestFile($filePath); + } + + public static function provideData(): Iterator + { + return self::yieldFiles(__DIR__ . '/Fixture'); + } + + public function provideConfig(): string + { + return SetList::PER_CS; + } +}