diff --git a/.gitignore b/.gitignore index ed29545..3366010 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ /.Build/* /*.idea /.php_cs.cache -composer.lock +/composer.lock /nbproject /var diff --git a/.php_cs.dist b/.php_cs.dist new file mode 100644 index 0000000..bb74eb7 --- /dev/null +++ b/.php_cs.dist @@ -0,0 +1,183 @@ + true, + '@PHP56Migration' => true, + '@PHP56Migration:risky' => true, + '@PHP70Migration' => true, + '@PHP71Migration' => true, + '@PHPUnit57Migration:risky' => true, + '@PHPUnit60Migration:risky' => true, + '@PHPUnit75Migration:risky' => true, + + 'align_multiline_comment' => true, + 'array_indentation' => true, + 'array_syntax' => ['syntax' => 'short'], + 'binary_operator_spaces' => true, + 'blank_line_before_statement' => true, + 'braces' => [ + 'allow_single_line_closure' => true, + ], + 'class_attributes_separation' => ['elements' => ['method']], + 'class_definition' => ['single_line' => true], + 'combine_consecutive_issets' => true, + 'combine_consecutive_unsets' => true, + 'comment_to_phpdoc' => true, + 'compact_nullable_typehint' => true, + 'concat_space' => ['spacing' => 'one'], + 'declare_equal_normalize' => true, + 'dir_constant' => true, + 'ereg_to_preg' => true, + 'error_suppression' => true, + 'escape_implicit_backslashes' => true, + 'explicit_indirect_variable' => true, + 'explicit_string_variable' => true, + 'final_internal_class' => true, + 'fopen_flag_order' => true, + 'fopen_flags' => ['b_mode' => false], + 'fully_qualified_strict_types' => true, + 'function_to_constant' => true, + 'function_typehint_space' => true, + 'hash_to_slash_comment' => true, + 'heredoc_to_nowdoc' => true, + 'implode_call' => true, + 'include' => true, + 'is_null' => true, + 'linebreak_after_opening_tag' => true, + 'list_syntax' => ['syntax' => 'short'], + 'logical_operators' => true, + 'lowercase_cast' => true, + 'lowercase_static_reference' => true, + 'magic_constant_casing' => true, + 'magic_method_casing' => true, + 'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'], + 'method_chaining_indentation' => true, + 'method_separation' => true, + 'modernize_types_casting' => true, + 'multiline_comment_opening_closing' => true, + 'native_function_casing' => true, + 'new_with_braces' => true, + 'no_alias_functions' => true, + 'no_alternative_syntax' => true, + 'no_binary_string' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_blank_lines' => [ + 'tokens' => [ + 'break', + 'continue', + 'curly_brace_block', + 'extra', + 'parenthesis_brace_block', + 'return', + 'square_brace_block', + 'throw', + 'use', + ], + ], + 'no_extra_consecutive_blank_lines' => true, + 'no_homoglyph_names' => true, + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_mixed_echo_print' => ['use' => 'echo'], + 'no_multiline_whitespace_around_double_arrow' => true, + 'no_multiline_whitespace_before_semicolons' => true, + 'no_php4_constructor' => true, + 'no_short_bool_cast' => true, + 'no_short_echo_tag' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_around_offset' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_superfluous_elseif' => true, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_unneeded_control_parentheses' => true, + 'no_unneeded_curly_braces' => true, + 'no_unneeded_final_method' => true, + 'no_unreachable_default_argument_value' => true, + 'no_unset_cast' => true, + 'no_unset_on_property' => true, + 'no_unused_imports' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'no_whitespace_before_comma_in_array' => true, + 'no_whitespace_in_blank_line' => true, + 'non_printable_character' => [ + 'use_escape_sequences_in_strings' => false, + ], + 'normalize_index_brace' => true, + 'object_operator_without_whitespace' => true, + 'ordered_imports' => true, + 'phpdoc_add_missing_param_annotation' => true, + 'phpdoc_no_package' => true, + 'phpdoc_indent' => true, + 'phpdoc_inline_tag' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_alias_tag' => true, + 'phpdoc_no_useless_inheritdoc' => true, + 'phpdoc_return_self_reference' => true, + 'phpdoc_scalar' => true, + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_summary' => true, + 'phpdoc_to_comment' => true, + 'phpdoc_trim' => true, + 'phpdoc_trim_consecutive_blank_line_separation' => true, + 'phpdoc_types' => true, + 'phpdoc_types_order' => [ + 'null_adjustment' => 'always_last', + 'sort_algorithm' => 'none', + ], + 'phpdoc_var_annotation_correct_order' => true, + 'phpdoc_var_without_name' => true, + 'php_unit_construct' => true, + 'php_unit_dedicate_assert' => true, + 'php_unit_expectation' => true, + 'php_unit_fqcn_annotation' => true, + 'php_unit_method_casing' => true, + 'php_unit_mock' => true, + 'php_unit_no_expectation_annotation' => true, + 'php_unit_ordered_covers' => true, + 'php_unit_set_up_tear_down_visibility' => true, + 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'], + 'protected_to_private' => true, + 'psr4' => true, + 'return_type_declaration' => true, + 'self_accessor' => true, + 'semicolon_after_instruction' => true, + 'set_type_to_cast' => true, + 'short_scalar_cast' => true, + 'single_blank_line_before_namespace' => true, + 'single_class_element_per_statement' => true, + 'single_line_comment_style' => true, + 'single_quote' => true, + 'space_after_semicolon' => [ + 'remove_in_empty_for_expressions' => true, + ], + 'standardize_not_equals' => true, + 'strict_comparison' => true, + 'strict_param' => true, + 'string_line_ending' => true, + 'standardize_increment' => true, + 'ternary_operator_spaces' => true, + 'trailing_comma_in_multiline_array' => true, + 'trim_array_spaces' => true, + 'unary_operator_spaces' => true, + 'void_return' => true, + 'whitespace_after_comma_in_array' => true, +]; + +$config = \PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setRules($rules); + +$finder = \PhpCsFixer\Finder::create() + ->in('Classes')->in('Tests'); + +return $config->setFinder($finder); diff --git a/CHANGELOG.md b/CHANGELOG.md index 72bc3fd..39e52bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). ## x.y.z ### Added +- Add PHP-CS-Fixer (#53) - Add support for PHP 7.3 (#51) - Add support for TYPO3 9.6 (#48) - Add PHP_CodeSniffer to the Travis CI build (#44,#46) diff --git a/Classes/Controller/TeaController.php b/Classes/Controller/TeaController.php index ef3b15f..ab0d46e 100644 --- a/Classes/Controller/TeaController.php +++ b/Classes/Controller/TeaController.php @@ -1,5 +1,6 @@ teaRepository = $teaRepository; } - /** - * @return void - */ - public function indexAction() + public function indexAction(): void { $this->view->assign('teas', $this->teaRepository->findAll()); } - /** - * @param Tea $tea - * - * @return void - */ - public function showAction(Tea $tea) + public function showAction(Tea $tea): void { $this->view->assign('tea', $tea); } diff --git a/Classes/Domain/Model/Product/Tea.php b/Classes/Domain/Model/Product/Tea.php index ae47fb6..1542f7c 100644 --- a/Classes/Domain/Model/Product/Tea.php +++ b/Classes/Domain/Model/Product/Tea.php @@ -1,5 +1,6 @@ title; } - /** - * @param string $title - * - * @return void - */ - public function setTitle(string $title) + public function setTitle(string $title): void { $this->title = $title; } - /** - * @return string - */ public function getDescription(): string { return $this->description; } - /** - * @param string $description - * - * @return void - */ - public function setDescription(string $description) + public function setDescription(string $description): void { $this->description = $description; } @@ -78,12 +63,7 @@ class Tea extends AbstractEntity return $this->image; } - /** - * @param FileReference $image - * - * @return void - */ - public function setImage(FileReference $image) + public function setImage(FileReference $image): void { $this->image = $image; } diff --git a/Classes/Domain/Repository/Product/TeaRepository.php b/Classes/Domain/Repository/Product/TeaRepository.php index 5a3e1ee..bc04297 100644 --- a/Classes/Domain/Repository/Product/TeaRepository.php +++ b/Classes/Domain/Repository/Product/TeaRepository.php @@ -1,5 +1,6 @@ objectManager->get(QuerySettingsInterface::class); diff --git a/Tests/Acceptance/StarterCest.php b/Tests/Acceptance/StarterCest.php index 3069d9b..12864c3 100644 --- a/Tests/Acceptance/StarterCest.php +++ b/Tests/Acceptance/StarterCest.php @@ -1,5 +1,5 @@ amOnPage('/'); } - public function seeAuthorName(\AcceptanceTester $I) + public function seeAuthorName(\AcceptanceTester $I): void { $I->see('Oliver Klee'); } - public function canNavigateToPastWorkshops(\AcceptanceTester $I) + public function canNavigateToPastWorkshops(\AcceptanceTester $I): void { $I->click('Workshops'); $I->click('Rückblick'); diff --git a/Tests/Acceptance/_support/AcceptanceTester.php b/Tests/Acceptance/_support/AcceptanceTester.php index 2478cfa..d18fcd4 100644 --- a/Tests/Acceptance/_support/AcceptanceTester.php +++ b/Tests/Acceptance/_support/AcceptanceTester.php @@ -1,8 +1,8 @@ getFrontendResponse(1)->getContent(); $teaTitle = 'Earl Grey'; - $this->assertContains($teaTitle, $responseContent); + self::assertContains($teaTitle, $responseContent); } } diff --git a/Tests/Functional/Domain/Repository/Product/TeaRepositoryTest.php b/Tests/Functional/Domain/Repository/Product/TeaRepositoryTest.php index 5812758..e19c42f 100644 --- a/Tests/Functional/Domain/Repository/Product/TeaRepositoryTest.php +++ b/Tests/Functional/Domain/Repository/Product/TeaRepositoryTest.php @@ -1,5 +1,6 @@ subject->findAll(); - static::assertCount(0, $container); + self::assertCount(0, $container); } /** * @test */ - public function findAllWithRecordsFindsRecordsFromAllPages() + public function findAllWithRecordsFindsRecordsFromAllPages(): void { $this->importDataSet(__DIR__ . '/../Fixtures/Product/Tea.xml'); $container = $this->subject->findAll(); - static::assertGreaterThanOrEqual(1, \count($container)); + self::assertGreaterThanOrEqual(1, \count($container)); } /** * @test */ - public function findAllSortsByTitleInAscendingOrder() + public function findAllSortsByTitleInAscendingOrder(): void { $this->importDataSet(__DIR__ . '/../Fixtures/Product/Tea.xml'); $container = $this->subject->findAll(); $container->rewind(); - static::assertSame(2, $container->current()->getUid()); + self::assertSame(2, $container->current()->getUid()); } /** * @test */ - public function findByUidForExistingRecordReturnsModelWithData() + public function findByUidForExistingRecordReturnsModelWithData(): void { $this->importDataSet(__DIR__ . '/../Fixtures/Product/Tea.xml'); @@ -89,15 +90,15 @@ class TeaRepositoryTest extends FunctionalTestCase /** @var Tea $model */ $model = $this->subject->findByUid($uid); - static::assertNotNull($model); - static::assertSame('Earl Grey', $model->getTitle()); - static::assertSame('Fresh and hot.', $model->getDescription()); + self::assertNotNull($model); + self::assertSame('Earl Grey', $model->getTitle()); + self::assertSame('Fresh and hot.', $model->getDescription()); } /** * @test */ - public function fillsImageRelation() + public function fillsImageRelation(): void { $this->importDataSet(__DIR__ . '/../Fixtures/Product/Tea.xml'); @@ -106,14 +107,14 @@ class TeaRepositoryTest extends FunctionalTestCase $model = $this->subject->findByUid($uid); $image = $model->getImage(); - static::assertInstanceOf(FileReference::class, $image); - static::assertSame(1, $image->getUid()); + self::assertInstanceOf(FileReference::class, $image); + self::assertSame(1, $image->getUid()); } /** * @test */ - public function addAndPersistAllCreatesNewRecord() + public function addAndPersistAllCreatesNewRecord(): void { $title = 'Godesberger Burgtee'; $model = new Tea(); @@ -127,6 +128,6 @@ class TeaRepositoryTest extends FunctionalTestCase 'tx_tea_domain_model_product_tea', 'uid = ' . $model->getUid() ); - static::assertSame($title, $databaseRow['title']); + self::assertSame($title, $databaseRow['title']); } } diff --git a/Tests/Unit/Controller/TeaControllerTest.php b/Tests/Unit/Controller/TeaControllerTest.php index 05e1add..70d82dc 100644 --- a/Tests/Unit/Controller/TeaControllerTest.php +++ b/Tests/Unit/Controller/TeaControllerTest.php @@ -1,5 +1,6 @@ subject = new TeaController(); @@ -60,15 +61,15 @@ class TeaControllerTest extends UnitTestCase /** * @test */ - public function isActionController() + public function isActionController(): void { - static::assertInstanceOf(ActionController::class, $this->subject); + self::assertInstanceOf(ActionController::class, $this->subject); } /** * @test */ - public function indexActionAssignsAllTeaAsTeasToView() + public function indexActionAssignsAllTeaAsTeasToView(): void { $teas = $this->prophesize(QueryResultInterface::class)->reveal(); $this->teaRepositoryProphecy->findAll()->willReturn($teas); @@ -80,7 +81,7 @@ class TeaControllerTest extends UnitTestCase /** * @test */ - public function showActionAssignsPassedTeaAsTeaToView() + public function showActionAssignsPassedTeaAsTeaToView(): void { $tea = new Tea(); $this->viewProphecy->assign('tea', $tea)->shouldBeCalled(); diff --git a/Tests/Unit/Domain/Model/Product/TeaTest.php b/Tests/Unit/Domain/Model/Product/TeaTest.php index fe59b12..8a4e31e 100644 --- a/Tests/Unit/Domain/Model/Product/TeaTest.php +++ b/Tests/Unit/Domain/Model/Product/TeaTest.php @@ -1,5 +1,6 @@ subject = new Tea(); } @@ -27,65 +28,65 @@ class TeaTest extends UnitTestCase /** * @test */ - public function isAbstractEntity() + public function isAbstractEntity(): void { - static::assertInstanceOf(AbstractEntity::class, $this->subject); + self::assertInstanceOf(AbstractEntity::class, $this->subject); } /** * @test */ - public function getTitleInitiallyReturnsEmptyString() + public function getTitleInitiallyReturnsEmptyString(): void { - static::assertSame('', $this->subject->getTitle()); + self::assertSame('', $this->subject->getTitle()); } /** * @test */ - public function setTitleSetsTitle() + public function setTitleSetsTitle(): void { $value = 'Club-Mate'; $this->subject->setTitle($value); - static::assertSame($value, $this->subject->getTitle()); + self::assertSame($value, $this->subject->getTitle()); } /** * @test */ - public function getDescriptionInitiallyReturnsEmptyString() + public function getDescriptionInitiallyReturnsEmptyString(): void { - static::assertSame('', $this->subject->getDescription()); + self::assertSame('', $this->subject->getDescription()); } /** * @test */ - public function setDescriptionSetsDescription() + public function setDescriptionSetsDescription(): void { $value = 'Club-Mate'; $this->subject->setDescription($value); - static::assertSame($value, $this->subject->getDescription()); + self::assertSame($value, $this->subject->getDescription()); } /** * @test */ - public function getImageInitiallyReturnsNull() + public function getImageInitiallyReturnsNull(): void { - static::assertNull($this->subject->getImage()); + self::assertNull($this->subject->getImage()); } /** * @test */ - public function setImageSetsImage() + public function setImageSetsImage(): void { $model = new FileReference(); $this->subject->setImage($model); - static::assertSame($model, $this->subject->getImage()); + self::assertSame($model, $this->subject->getImage()); } } diff --git a/Tests/Unit/Domain/Repository/Product/TeaRepositoryTest.php b/Tests/Unit/Domain/Repository/Product/TeaRepositoryTest.php index f9a5cb6..3c99fd5 100644 --- a/Tests/Unit/Domain/Repository/Product/TeaRepositoryTest.php +++ b/Tests/Unit/Domain/Repository/Product/TeaRepositoryTest.php @@ -1,5 +1,6 @@ prophesize(ObjectManagerInterface::class); $this->objectManager = $objectManagerProphecy->reveal(); @@ -35,8 +36,8 @@ class TeaRepositoryTest extends UnitTestCase /** * @test */ - public function isRepository() + public function isRepository(): void { - static::assertInstanceOf(Repository::class, $this->subject); + self::assertInstanceOf(Repository::class, $this->subject); } } diff --git a/composer.json b/composer.json index 07d1a56..d5bf6ba 100644 --- a/composer.json +++ b/composer.json @@ -37,6 +37,7 @@ "helhum/typo3-composer-setup": "^0.5.4", "squizlabs/php_codesniffer": "^3.4.2", "helmich/typo3-typoscript-lint": "^1.5.0", + "friendsofphp/php-cs-fixer": "^2.15.1", "nimut/testing-framework": "^4.1.5", "codeception/codeception": "^2.5.6" }, @@ -85,6 +86,7 @@ "@php -r 'is_dir($extFolder=__DIR__.\"/.Build/public/typo3conf/ext/\") || mkdir($extFolder, 0777, true);'", "@php -r 'file_exists($extFolder=__DIR__.\"/.Build/public/typo3conf/ext/tea\") || symlink(__DIR__,$extFolder);'" ], + "fix:php-cs": "php-cs-fixer fix", "post-autoload-dump": [ "@link-extension" ]