From bd95e08533a2142c58a7f7edf81de1c38c849e42 Mon Sep 17 00:00:00 2001 From: ADmad Date: Fri, 5 Jun 2026 18:10:24 +0530 Subject: [PATCH 1/2] Generate enums with EnumLabelTrait --- composer.json | 8 ++++---- templates/bake/Model/enum.twig | 12 +++--------- tests/comparisons/Model/testBakeEnum.php | 10 ++-------- tests/comparisons/Model/testBakeEnumBackedInt.php | 10 ++-------- .../Model/testBakeEnumBackedIntWithCases.php | 12 +++--------- .../Model/testBakeEnumBackedWithCases.php | 12 +++--------- .../Model/testBakeTableWithEnumConfig.php | 12 +++--------- .../App/Model/Enum/BakeUserNullableGender.php | 12 +++--------- 8 files changed, 23 insertions(+), 65 deletions(-) diff --git a/composer.json b/composer.json index 352018c4..c2ebe37e 100644 --- a/composer.json +++ b/composer.json @@ -22,16 +22,16 @@ "source": "https://github.com/cakephp/bake" }, "require": { - "php": ">=8.1", - "brick/varexporter": "^0.6.0 || ^0.7.0", - "cakephp/cakephp": "^5.1", + "php": ">=8.2", + "brick/varexporter": "^0.7.0", + "cakephp/cakephp": "dev-5.next as 5.4.0", "cakephp/twig-view": "^2.0.2", "nikic/php-parser": "^5.0.0" }, "require-dev": { "cakephp/cakephp-codesniffer": "^5.0.0", "cakephp/debug_kit": "^5.0.0", - "phpunit/phpunit": "^10.5.40 || ^11.5.20 || ^12.2.4 || ^13.0" + "phpunit/phpunit": "^11.5.20 || ^12.2.4 || ^13.0" }, "autoload": { "psr-4": { diff --git a/templates/bake/Model/enum.twig b/templates/bake/Model/enum.twig index 83f48243..2ef141ee 100644 --- a/templates/bake/Model/enum.twig +++ b/templates/bake/Model/enum.twig @@ -17,22 +17,16 @@ namespace: "#{namespace}\\Model\\Enum", classImports: [ 'Cake\\Database\\Type\\EnumLabelInterface', - 'Cake\\Utility\\Inflector', + 'Cake\\Database\\Type\\EnumLabelTrait', ], }) }} {{ DocBlock.classDescription(name, 'Enum', [])|raw }} enum {{ name }}: {{ backingType }} implements EnumLabelInterface { + use EnumLabelTrait; {% if cases %} - {{ Bake.concat('\n ', cases) }} + {{ Bake.concat('\n ', cases) }} {% endif %} - /** - * @return string - */ - public function label(): string - { - return Inflector::humanize(Inflector::underscore($this->name)); - } } diff --git a/tests/comparisons/Model/testBakeEnum.php b/tests/comparisons/Model/testBakeEnum.php index 41c6faea..cdab77f6 100644 --- a/tests/comparisons/Model/testBakeEnum.php +++ b/tests/comparisons/Model/testBakeEnum.php @@ -4,18 +4,12 @@ namespace Bake\Test\App\Model\Enum; use Cake\Database\Type\EnumLabelInterface; -use Cake\Utility\Inflector; +use Cake\Database\Type\EnumLabelTrait; /** * FooBar Enum */ enum FooBar: string implements EnumLabelInterface { - /** - * @return string - */ - public function label(): string - { - return Inflector::humanize(Inflector::underscore($this->name)); - } + use EnumLabelTrait; } diff --git a/tests/comparisons/Model/testBakeEnumBackedInt.php b/tests/comparisons/Model/testBakeEnumBackedInt.php index c0c0648c..0fbe2b07 100644 --- a/tests/comparisons/Model/testBakeEnumBackedInt.php +++ b/tests/comparisons/Model/testBakeEnumBackedInt.php @@ -4,18 +4,12 @@ namespace Bake\Test\App\Model\Enum; use Cake\Database\Type\EnumLabelInterface; -use Cake\Utility\Inflector; +use Cake\Database\Type\EnumLabelTrait; /** * FooBar Enum */ enum FooBar: int implements EnumLabelInterface { - /** - * @return string - */ - public function label(): string - { - return Inflector::humanize(Inflector::underscore($this->name)); - } + use EnumLabelTrait; } diff --git a/tests/comparisons/Model/testBakeEnumBackedIntWithCases.php b/tests/comparisons/Model/testBakeEnumBackedIntWithCases.php index fcd88e07..d5beba07 100644 --- a/tests/comparisons/Model/testBakeEnumBackedIntWithCases.php +++ b/tests/comparisons/Model/testBakeEnumBackedIntWithCases.php @@ -4,22 +4,16 @@ namespace Bake\Test\App\Model\Enum; use Cake\Database\Type\EnumLabelInterface; -use Cake\Utility\Inflector; +use Cake\Database\Type\EnumLabelTrait; /** * FooBar Enum */ enum FooBar: int implements EnumLabelInterface { + use EnumLabelTrait; + case Foo = 0; case Bar = 1; case BarBaz = 9; - - /** - * @return string - */ - public function label(): string - { - return Inflector::humanize(Inflector::underscore($this->name)); - } } diff --git a/tests/comparisons/Model/testBakeEnumBackedWithCases.php b/tests/comparisons/Model/testBakeEnumBackedWithCases.php index 403e8fda..a13c1378 100644 --- a/tests/comparisons/Model/testBakeEnumBackedWithCases.php +++ b/tests/comparisons/Model/testBakeEnumBackedWithCases.php @@ -4,22 +4,16 @@ namespace Bake\Test\App\Model\Enum; use Cake\Database\Type\EnumLabelInterface; -use Cake\Utility\Inflector; +use Cake\Database\Type\EnumLabelTrait; /** * FooBar Enum */ enum FooBar: string implements EnumLabelInterface { + use EnumLabelTrait; + case Foo = 'foo'; case Bar = 'b'; case BarBaz = 'bar_baz'; - - /** - * @return string - */ - public function label(): string - { - return Inflector::humanize(Inflector::underscore($this->name)); - } } diff --git a/tests/comparisons/Model/testBakeTableWithEnumConfig.php b/tests/comparisons/Model/testBakeTableWithEnumConfig.php index 1287d1ac..be913fa3 100644 --- a/tests/comparisons/Model/testBakeTableWithEnumConfig.php +++ b/tests/comparisons/Model/testBakeTableWithEnumConfig.php @@ -4,22 +4,16 @@ namespace Bake\Test\App\Model\Enum; use Cake\Database\Type\EnumLabelInterface; -use Cake\Utility\Inflector; +use Cake\Database\Type\EnumLabelTrait; /** * BakeUserNullableGender Enum */ enum BakeUserNullableGender: string implements EnumLabelInterface { + use EnumLabelTrait; + case Male = 'male'; case Female = 'female'; case Diverse = 'diverse'; - - /** - * @return string - */ - public function label(): string - { - return Inflector::humanize(Inflector::underscore($this->name)); - } } diff --git a/tests/test_app/App/Model/Enum/BakeUserNullableGender.php b/tests/test_app/App/Model/Enum/BakeUserNullableGender.php index 1287d1ac..be913fa3 100644 --- a/tests/test_app/App/Model/Enum/BakeUserNullableGender.php +++ b/tests/test_app/App/Model/Enum/BakeUserNullableGender.php @@ -4,22 +4,16 @@ namespace Bake\Test\App\Model\Enum; use Cake\Database\Type\EnumLabelInterface; -use Cake\Utility\Inflector; +use Cake\Database\Type\EnumLabelTrait; /** * BakeUserNullableGender Enum */ enum BakeUserNullableGender: string implements EnumLabelInterface { + use EnumLabelTrait; + case Male = 'male'; case Female = 'female'; case Diverse = 'diverse'; - - /** - * @return string - */ - public function label(): string - { - return Inflector::humanize(Inflector::underscore($this->name)); - } } From 6d1e8e0be497db3f16258db8472f25db7b2d5288 Mon Sep 17 00:00:00 2001 From: ADmad Date: Wed, 10 Jun 2026 11:33:54 +0530 Subject: [PATCH 2/2] update phpstan ignores --- phpstan-baseline.neon | 6 ------ src/BakePlugin.php | 3 +-- src/Command/CellCommand.php | 3 +-- src/Command/CommandCommand.php | 3 +-- src/Command/EnumCommand.php | 3 +-- src/Command/SimpleBakeCommand.php | 3 +-- src/View/BakeView.php | 1 - 7 files changed, 5 insertions(+), 17 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index e45840cf..de4a29d8 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1,11 +1,5 @@ parameters: ignoreErrors: - - - message: '#^Method Bake\\BakePlugin\:\:bootstrap\(\) has parameter \$app with generic interface Cake\\Core\\PluginApplicationInterface but does not specify its types\: TSubject$#' - identifier: missingType.generics - count: 1 - path: src/BakePlugin.php - - message: '#^Instanceof between mixed and Cake\\Chronos\\Chronos will always evaluate to false\.$#' identifier: instanceof.alwaysFalse diff --git a/src/BakePlugin.php b/src/BakePlugin.php index e2ce6b65..ed8cc035 100644 --- a/src/BakePlugin.php +++ b/src/BakePlugin.php @@ -109,8 +109,7 @@ protected function discoverCommands(CommandCollection $commands): CommandCollect * * @param string $namespace The namespace classes are expected to be in. * @param string $path The path to look in. - * @return array - * @phpstan-return array> + * @return array> */ protected function findInPath(string $namespace, string $path): array { diff --git a/src/Command/CellCommand.php b/src/Command/CellCommand.php index c0fb6dc5..739b9991 100644 --- a/src/Command/CellCommand.php +++ b/src/Command/CellCommand.php @@ -59,8 +59,7 @@ public function template(): string * Get template data. * * @param \Cake\Console\Arguments $arguments Arguments object. - * @return array - * @phpstan-return array + * @return array */ public function templateData(Arguments $arguments): array { diff --git a/src/Command/CommandCommand.php b/src/Command/CommandCommand.php index 8612f330..00c4f49b 100644 --- a/src/Command/CommandCommand.php +++ b/src/Command/CommandCommand.php @@ -57,8 +57,7 @@ public function template(): string * Get template data. * * @param \Cake\Console\Arguments $arguments Arguments object. - * @return array - * @phpstan-return array + * @return array */ public function templateData(Arguments $arguments): array { diff --git a/src/Command/EnumCommand.php b/src/Command/EnumCommand.php index 5eee0d0e..52e2bf9b 100644 --- a/src/Command/EnumCommand.php +++ b/src/Command/EnumCommand.php @@ -61,8 +61,7 @@ public function template(): string * Get template data. * * @param \Cake\Console\Arguments $arguments The arguments for the command - * @return array - * @phpstan-return array + * @return array */ public function templateData(Arguments $arguments): array { diff --git a/src/Command/SimpleBakeCommand.php b/src/Command/SimpleBakeCommand.php index a9667a22..59dcbc5c 100644 --- a/src/Command/SimpleBakeCommand.php +++ b/src/Command/SimpleBakeCommand.php @@ -53,8 +53,7 @@ abstract public function template(): string; * Get template data. * * @param \Cake\Console\Arguments $arguments The arguments for the command - * @return array - * @phpstan-return array + * @return array */ public function templateData(Arguments $arguments): array { diff --git a/src/View/BakeView.php b/src/View/BakeView.php index 99a77010..b6a6abb4 100644 --- a/src/View/BakeView.php +++ b/src/View/BakeView.php @@ -116,7 +116,6 @@ public function dispatchEvent(string $name, array $data = [], ?object $subject = { $name = (string)preg_replace('/^View\./', 'Bake.', $name); - /** @phpstan-ignore-next-line missingType.generics */ return parent::dispatchEvent($name, $data, $subject); }