From c64d9bcd3eeaf8237c47a5f8a819ffba4e2cc6c1 Mon Sep 17 00:00:00 2001 From: mhsdesign <85400359+mhsdesign@users.noreply.github.com> Date: Sun, 15 Oct 2023 10:31:08 +0200 Subject: [PATCH 01/13] BUGFIX: `NodeTypesCommandController` check if node type or configuration exists --- .../Classes/Command/NodeTypesCommandController.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php b/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php index 9460c8ab2f3..2c5f4c86c14 100644 --- a/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php +++ b/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php @@ -31,9 +31,15 @@ class NodeTypesCommandController extends CommandController */ public function showCommand(string $nodeTypeName, ?string $path = null): void { + if (!$this->nodeTypeManager->hasNodeType($nodeTypeName)) { + $this->outputLine('NodeType "%s" was not found!', [$nodeTypeName]); + $this->quit(); + } + $nodeType = $this->nodeTypeManager->getNodeType($nodeTypeName); - if (!$nodeType) { - $this->outputLine('NodeType "%s" was not found!', [$nodeTypeName]); + + if ($path && !$nodeType->hasConfiguration($path)) { + $this->outputLine('NodeType "%s" does not have configuration "%s".', [$nodeTypeName, $path]); $this->quit(); } $yaml = Yaml::dump( From b1bb41d9942ae8c059d729f35a7a409ae27fba68 Mon Sep 17 00:00:00 2001 From: mhsdesign <85400359+mhsdesign@users.noreply.github.com> Date: Sun, 15 Oct 2023 10:32:08 +0200 Subject: [PATCH 02/13] BUGFIX: `NodeTypesCommandController` add "level" option to truncate to deep input Use it like ``` flow nodeTypes:show Neos.Demo:Document.Homepage --path properties --level 1 ``` to show only the property keys --- .../Command/NodeTypesCommandController.php | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php b/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php index 2c5f4c86c14..d6c45863ae2 100644 --- a/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php +++ b/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php @@ -27,9 +27,10 @@ class NodeTypesCommandController extends CommandController * Shows the merged configuration (including supertypes) of a NodeType * * @param string $nodeTypeName The name of the NodeType to show + * @param ?int $level Truncate the configuration at this depth and show '...' (Usefully for only seeing the keys of the properties) * @param ?string $path Path of the NodeType-configuration which will be shown */ - public function showCommand(string $nodeTypeName, ?string $path = null): void + public function showCommand(string $nodeTypeName, ?string $path = null, ?int $level = 0): void { if (!$this->nodeTypeManager->hasNodeType($nodeTypeName)) { $this->outputLine('NodeType "%s" was not found!', [$nodeTypeName]); @@ -42,13 +43,14 @@ public function showCommand(string $nodeTypeName, ?string $path = null): void $this->outputLine('NodeType "%s" does not have configuration "%s".', [$nodeTypeName, $path]); $this->quit(); } - $yaml = Yaml::dump( - $path - ? $nodeType->getConfiguration($path) - : [$nodeTypeName => $nodeType->getFullConfiguration()], - 99 - ); - $this->outputLine('NodeType Configuration "%s":', [$nodeTypeName . ($path ? ("." . $path) : "")]); + + $configuration = $path + ? self::truncateArrayAtLevel($nodeType->getConfiguration($path), $level) + : [$nodeTypeName => self::truncateArrayAtLevel($nodeType->getFullConfiguration(), $level)]; + + $yaml = Yaml::dump($configuration, 99); + + $this->outputLine('NodeType configuration "%s":', [$nodeTypeName . ($path ? ("." . $path) : "")]); $this->outputLine(); $this->outputLine($yaml); $this->outputLine(); @@ -84,4 +86,28 @@ public function listCommand(?string $filter = null, bool $includeAbstract = true } } } + + /** + * @param int $truncateLevel 0 for no truncation and 1 to only show the first keys of the array + * @param int $currentLevel 1 for the start and will be incremented recursively + */ + private static function truncateArrayAtLevel(array $array, int $truncateLevel, int $currentLevel = 1): array + { + if ($truncateLevel <= 0) { + return $array; + } + $truncatedArray = []; + foreach ($array as $key => $value) { + if ($currentLevel >= $truncateLevel) { + $truncatedArray[$key] = '...'; // truncated + continue; + } + if (!is_array($value)) { + $truncatedArray[$key] = $value; + continue; + } + $truncatedArray[$key] = self::truncateArrayAtLevel($value, $truncateLevel, $currentLevel + 1); + } + return $truncatedArray; + } } From 85f811c4dc47ad93f3c9c4dfb4c6a40b91dfd826 Mon Sep 17 00:00:00 2001 From: Marc Henry Schultz <85400359+mhsdesign@users.noreply.github.com> Date: Fri, 3 Nov 2023 00:34:48 +0100 Subject: [PATCH 03/13] Task add suggestion from review Co-authored-by: Karsten Dambekalns --- .../Classes/Command/NodeTypesCommandController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php b/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php index d6c45863ae2..97208c7406a 100644 --- a/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php +++ b/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php @@ -30,7 +30,7 @@ class NodeTypesCommandController extends CommandController * @param ?int $level Truncate the configuration at this depth and show '...' (Usefully for only seeing the keys of the properties) * @param ?string $path Path of the NodeType-configuration which will be shown */ - public function showCommand(string $nodeTypeName, ?string $path = null, ?int $level = 0): void + public function showCommand(string $nodeTypeName, string $path = '', int $level = 0): void { if (!$this->nodeTypeManager->hasNodeType($nodeTypeName)) { $this->outputLine('NodeType "%s" was not found!', [$nodeTypeName]); From b7abfbcfa09e11514dfb7bfe6144ca45284477c6 Mon Sep 17 00:00:00 2001 From: Marc Henry Schultz <85400359+mhsdesign@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:35:37 +0100 Subject: [PATCH 04/13] TASK: Fix order of doc comments --- .../Classes/Command/NodeTypesCommandController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php b/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php index 97208c7406a..65d05f57711 100644 --- a/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php +++ b/Neos.ContentRepository/Classes/Command/NodeTypesCommandController.php @@ -27,8 +27,8 @@ class NodeTypesCommandController extends CommandController * Shows the merged configuration (including supertypes) of a NodeType * * @param string $nodeTypeName The name of the NodeType to show - * @param ?int $level Truncate the configuration at this depth and show '...' (Usefully for only seeing the keys of the properties) - * @param ?string $path Path of the NodeType-configuration which will be shown + * @param string $path Path of the NodeType-configuration which will be shown + * @param int $level Truncate the configuration at this depth and show '...' (Usefully for only seeing the keys of the properties) */ public function showCommand(string $nodeTypeName, string $path = '', int $level = 0): void { From 67390edd6b37dc5610a1cccdd6ea358a4bbd7588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anke=20H=C3=A4slich?= Date: Sun, 5 Nov 2023 16:06:53 +0100 Subject: [PATCH 05/13] BUGFIX: Adjust Neos.NodeTypes:Page to updated Neos.Neos:Page In addition: remove obsolete fluid template. Relates: #4654 --- .../Resources/Private/Fusion/Documents/Page.fusion | 10 ++++------ .../Resources/Private/Templates/Documents/Page.html | 1 - 2 files changed, 4 insertions(+), 7 deletions(-) delete mode 100644 Neos.NodeTypes/Resources/Private/Templates/Documents/Page.html diff --git a/Neos.NodeTypes/Resources/Private/Fusion/Documents/Page.fusion b/Neos.NodeTypes/Resources/Private/Fusion/Documents/Page.fusion index 589f8b719f5..6b21b84b9ce 100644 --- a/Neos.NodeTypes/Resources/Private/Fusion/Documents/Page.fusion +++ b/Neos.NodeTypes/Resources/Private/Fusion/Documents/Page.fusion @@ -1,9 +1,7 @@ prototype(Neos.NodeTypes:Page) < prototype(Neos.Neos:Page) { - body { - content { - main = Neos.Neos:ContentCollection { - nodePath = 'main' - } - } + body { + main = Neos.Neos:ContentCollection { + nodePath = 'main' } + } } diff --git a/Neos.NodeTypes/Resources/Private/Templates/Documents/Page.html b/Neos.NodeTypes/Resources/Private/Templates/Documents/Page.html deleted file mode 100644 index ca7934d2764..00000000000 --- a/Neos.NodeTypes/Resources/Private/Templates/Documents/Page.html +++ /dev/null @@ -1 +0,0 @@ -{content.main -> f:format.raw()} \ No newline at end of file From 74aed394e17d76f8571660fe36a3069dd30978a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Mu=CC=88ller?= Date: Tue, 7 Nov 2023 17:00:15 +0100 Subject: [PATCH 06/13] TASK: Update dependency versions --- Neos.ContentGraph.DoctrineDbalAdapter/composer.json | 2 +- Neos.ContentRepository.Core/composer.json | 2 +- Neos.ContentRepository.NodeAccess/composer.json | 2 +- Neos.ContentRepository.TestSuite/composer.json | 2 +- Neos.ContentRepositoryRegistry/composer.json | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Neos.ContentGraph.DoctrineDbalAdapter/composer.json b/Neos.ContentGraph.DoctrineDbalAdapter/composer.json index 8870ee1a7f2..6ef1a4dfca2 100644 --- a/Neos.ContentGraph.DoctrineDbalAdapter/composer.json +++ b/Neos.ContentGraph.DoctrineDbalAdapter/composer.json @@ -10,7 +10,7 @@ "license": "GPL-3.0+", "require": { "neos/contentrepository-core": "self.version", - "doctrine/dbal": "*", + "doctrine/dbal": "^2.13", "doctrine/migrations": "*" }, "autoload": { diff --git a/Neos.ContentRepository.Core/composer.json b/Neos.ContentRepository.Core/composer.json index db6a605a7fa..3fe7bbfe497 100644 --- a/Neos.ContentRepository.Core/composer.json +++ b/Neos.ContentRepository.Core/composer.json @@ -17,7 +17,7 @@ "neos/error-messages": "*", "neos/utility-objecthandling": "*", "neos/utility-arrays": "*", - "doctrine/dbal": "^2.6", + "doctrine/dbal": "^2.13", "symfony/serializer": "^6.3", "psr/clock": "^1", "behat/transliterator": "~1.0", diff --git a/Neos.ContentRepository.NodeAccess/composer.json b/Neos.ContentRepository.NodeAccess/composer.json index 90ab630e2c5..f17bdb3e538 100644 --- a/Neos.ContentRepository.NodeAccess/composer.json +++ b/Neos.ContentRepository.NodeAccess/composer.json @@ -11,7 +11,7 @@ "GPL-3.0-or-later" ], "require": { - "neos/flow": "*", + "neos/flow": "~9.0.0", "neos/contentrepository-core": "self.version" }, "autoload": { diff --git a/Neos.ContentRepository.TestSuite/composer.json b/Neos.ContentRepository.TestSuite/composer.json index 0035865c093..e47e4b4d011 100644 --- a/Neos.ContentRepository.TestSuite/composer.json +++ b/Neos.ContentRepository.TestSuite/composer.json @@ -11,7 +11,7 @@ "GPL-3.0-or-later" ], "require": { - "neos/utility-arrays": "*", + "neos/utility-arrays": "~9.0.0", "neos/contentrepository-core": "self.version", "neos/contentrepository-structureadjustment": "self.version", "neos/contentrepository-nodemigration": "self.version", diff --git a/Neos.ContentRepositoryRegistry/composer.json b/Neos.ContentRepositoryRegistry/composer.json index 056ed38fb7e..bf9d8320b42 100644 --- a/Neos.ContentRepositoryRegistry/composer.json +++ b/Neos.ContentRepositoryRegistry/composer.json @@ -11,10 +11,10 @@ "GPL-3.0-or-later" ], "require": { - "neos/flow": "*", + "neos/flow": "~9.0.0", "neos/contentrepository-core": "self.version", "neos/contentrepositoryregistry-storageclient": "self.version", - "symfony/property-access": "*", + "symfony/property-access": "^5.4|^6.0", "psr/clock": "^1" }, "autoload": { From 5983d6d40ab7a2375d3d0eff94b9071656df0aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Mu=CC=88ller?= Date: Tue, 7 Nov 2023 17:11:04 +0100 Subject: [PATCH 07/13] TASK: Require eventstore 1.0.0 --- Neos.ContentRepository.Core/composer.json | 4 ++-- Neos.ContentRepositoryRegistry/composer.json | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Neos.ContentRepository.Core/composer.json b/Neos.ContentRepository.Core/composer.json index 3fe7bbfe497..f1256f0a53b 100644 --- a/Neos.ContentRepository.Core/composer.json +++ b/Neos.ContentRepository.Core/composer.json @@ -11,8 +11,8 @@ "GPL-3.0-or-later" ], "require": { - "neos/eventstore": "*", - "neos/eventstore-doctrineadapter": "*", + "neos/eventstore": "~1.0.0", + "neos/eventstore-doctrineadapter": "~1.0.0", "php": "^8.2", "neos/error-messages": "*", "neos/utility-objecthandling": "*", diff --git a/Neos.ContentRepositoryRegistry/composer.json b/Neos.ContentRepositoryRegistry/composer.json index bf9d8320b42..9a095a3f034 100644 --- a/Neos.ContentRepositoryRegistry/composer.json +++ b/Neos.ContentRepositoryRegistry/composer.json @@ -10,6 +10,8 @@ "license": [ "GPL-3.0-or-later" ], + "minimum-stability": "dev", + "prefer-stable": true, "require": { "neos/flow": "~9.0.0", "neos/contentrepository-core": "self.version", From 3fd557098d8173c9ffe074d883907f24bf76cb88 Mon Sep 17 00:00:00 2001 From: Jenkins Date: Tue, 7 Nov 2023 16:35:16 +0000 Subject: [PATCH 08/13] TASK: Update composer manifest for 9.0.0-beta2 See https://jenkins.neos.io/job/neos-release/400/ --- Neos.Neos/composer.json | 9 +++++---- composer.json | 7 ++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Neos.Neos/composer.json b/Neos.Neos/composer.json index 150dc9471bf..b5765d137cb 100644 --- a/Neos.Neos/composer.json +++ b/Neos.Neos/composer.json @@ -12,20 +12,21 @@ }, "require": { "php": "^8.2", - "neos/diff": "self.version", + "neos/diff": "~9.0.0", "neos/flow": "~9.0.0", - "neos/media-browser": "self.version", + "neos/media-browser": "~9.0.0", "neos/party": "*", "neos/twitter-bootstrap": "*", "neos/contentrepository-core": "self.version", "neos/contentrepositoryregistry": "self.version", "neos/contentrepository-nodeaccess": "self.version", - "neos/fusion": "self.version", + "neos/fusion": "~9.0.0", "neos/fusion-afx": "self.version", "neos/fusion-form": "^1.0 || ^2.0", "neos/fluid-adaptor": "~9.0.0", "behat/transliterator": "~1.0", - "neos/media": "self.version" + "neos/media": "~9.0.0", + "neos/content-repository": "~9.0.0" }, "suggest": { "neos/site-kickstarter": "Helps with creating new site packages for Neos.", diff --git a/composer.json b/composer.json index b755bd7d8a2..1fe73035988 100644 --- a/composer.json +++ b/composer.json @@ -11,8 +11,8 @@ "league/flysystem-memory": "^3", "doctrine/dbal": "^2.8", "doctrine/migrations": "*", - "neos/eventstore": "*", - "neos/eventstore-doctrineadapter": "*", + "neos/eventstore": "~1.0.0", + "neos/eventstore-doctrineadapter": "~1.0.0", "php": "^8.2", "neos/error-messages": "*", "neos/utility-objecthandling": "*", @@ -28,7 +28,7 @@ "phpunit/phpunit": "^9.0", "neos/behat": "^9.0", "neos/contentrepositoryregistry-storageclient": "self.version", - "symfony/property-access": "*", + "symfony/property-access": "^5.4|^6.0", "neos/fluid-adaptor": "*", "neos/cache": "*", "neos/eel": "*", @@ -43,6 +43,7 @@ "imagine/imagine": "*", "neos/party": "*", "neos/fusion-form": "^1.0 || ^2.0", + "neos/content-repository": "~9.0.0", "neos/form": "*", "neos/kickstarter": "~9.0.0" }, From 18170f4195357ad15b2d5aaf8e403271d65a20f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Mu=CC=88ller?= Date: Tue, 7 Nov 2023 18:21:38 +0100 Subject: [PATCH 09/13] TASK: Fix composer dependencies after release script amok --- Neos.Neos/composer.json | 3 +-- composer.json | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Neos.Neos/composer.json b/Neos.Neos/composer.json index b5765d137cb..2eb39587bec 100644 --- a/Neos.Neos/composer.json +++ b/Neos.Neos/composer.json @@ -25,8 +25,7 @@ "neos/fusion-form": "^1.0 || ^2.0", "neos/fluid-adaptor": "~9.0.0", "behat/transliterator": "~1.0", - "neos/media": "~9.0.0", - "neos/content-repository": "~9.0.0" + "neos/media": "~9.0.0" }, "suggest": { "neos/site-kickstarter": "Helps with creating new site packages for Neos.", diff --git a/composer.json b/composer.json index 1fe73035988..d3ddd2afe23 100644 --- a/composer.json +++ b/composer.json @@ -43,7 +43,6 @@ "imagine/imagine": "*", "neos/party": "*", "neos/fusion-form": "^1.0 || ^2.0", - "neos/content-repository": "~9.0.0", "neos/form": "*", "neos/kickstarter": "~9.0.0" }, From de23d51e994ae6517a66cc6954d546b79dbb1538 Mon Sep 17 00:00:00 2001 From: mhsdesign <85400359+mhsdesign@users.noreply.github.com> Date: Wed, 8 Nov 2023 11:08:32 +0100 Subject: [PATCH 10/13] TASK: Fix declared dependencies of Neos.Neos --- Neos.Neos/composer.json | 12 ++++++------ composer.json | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Neos.Neos/composer.json b/Neos.Neos/composer.json index 2eb39587bec..0f61b1d8764 100644 --- a/Neos.Neos/composer.json +++ b/Neos.Neos/composer.json @@ -12,20 +12,20 @@ }, "require": { "php": "^8.2", - "neos/diff": "~9.0.0", + "neos/diff": "self.version", "neos/flow": "~9.0.0", - "neos/media-browser": "~9.0.0", - "neos/party": "*", - "neos/twitter-bootstrap": "*", + "neos/media-browser": "self.version", + "neos/party": "~7.0.3", "neos/contentrepository-core": "self.version", "neos/contentrepositoryregistry": "self.version", "neos/contentrepository-nodeaccess": "self.version", - "neos/fusion": "~9.0.0", + "neos/contentrepository-export": "self.version", + "neos/fusion": "self.version", "neos/fusion-afx": "self.version", "neos/fusion-form": "^1.0 || ^2.0", "neos/fluid-adaptor": "~9.0.0", "behat/transliterator": "~1.0", - "neos/media": "~9.0.0" + "neos/media": "self.version" }, "suggest": { "neos/site-kickstarter": "Helps with creating new site packages for Neos.", diff --git a/composer.json b/composer.json index d3ddd2afe23..fc3c8ec3141 100644 --- a/composer.json +++ b/composer.json @@ -35,13 +35,13 @@ "neos/utility-unicode": "*", "doctrine/orm": "^2.6", "ext-dom": "*", - "neos/twitter-bootstrap": "*", + "neos/twitter-bootstrap": "^3.0.6", "neos/utility-files": "*", "neos/utility-mediatypes": "*", "doctrine/common": "^2.7 || ^3.0", "neos/imagine": "^3.1.0", "imagine/imagine": "*", - "neos/party": "*", + "neos/party": "~7.0.3", "neos/fusion-form": "^1.0 || ^2.0", "neos/form": "*", "neos/kickstarter": "~9.0.0" From 9e6da7a05103c86d81febfd9de77514c172915ea Mon Sep 17 00:00:00 2001 From: mhsdesign <85400359+mhsdesign@users.noreply.github.com> Date: Wed, 8 Nov 2023 13:46:32 +0100 Subject: [PATCH 11/13] TASK: Remove hacky .composer.json dependencies they have been added to the dev dist --- .composer.json | 3 --- composer.json | 6 ++---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/.composer.json b/.composer.json index c45b9bcd482..67054c5642d 100644 --- a/.composer.json +++ b/.composer.json @@ -4,9 +4,6 @@ "license": ["GPL-3.0-or-later"], "type": "neos-package-collection", "require": { - "neos/flow-development-collection": "9.0.x-dev", - "neos/neos-setup": "^2.0", - "league/flysystem-memory": "^3" }, "replace": { }, diff --git a/composer.json b/composer.json index fc3c8ec3141..e5bcc219ed7 100644 --- a/composer.json +++ b/composer.json @@ -6,9 +6,6 @@ ], "type": "neos-package-collection", "require": { - "neos/flow-development-collection": "9.0.x-dev", - "neos/neos-setup": "^2.0", - "league/flysystem-memory": "^3", "doctrine/dbal": "^2.8", "doctrine/migrations": "*", "neos/eventstore": "~1.0.0", @@ -285,6 +282,7 @@ "phpstan/phpstan": "^1.8", "squizlabs/php_codesniffer": "^3.6", "phpunit/phpunit": "^9.0", - "neos/behat": "*" + "neos/behat": "*", + "league/flysystem-memory": "^3" } } From 1b378c704cba47a2006c95f6b8ce5781a7de8250 Mon Sep 17 00:00:00 2001 From: mhsdesign <85400359+mhsdesign@users.noreply.github.com> Date: Wed, 8 Nov 2023 16:05:50 +0100 Subject: [PATCH 12/13] TASK: Remove hardcoded require statements --- .github/workflows/build.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8cea3924b45..901b635eea4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -132,9 +132,6 @@ jobs: git -C ../${{ env.NEOS_FOLDER }} checkout -b build composer config repositories.neos '{ "type": "path", "url": "../${{ env.NEOS_FOLDER }}", "options": { "symlink": false } }' composer require --no-update neos/neos-development-collection:"dev-build as ${{ env.NEOS_BRANCH_ALIAS }}" - # TODO workaround for not-yet-released neos/eventstore packages - composer require --no-update neos/eventstore:"dev-main" - composer require --no-update neos/eventstore-doctrineadapter:"dev-main" - name: Cache Composer packages id: composer-cache From 134c875b9e9c2441ee30638a45d1f7ee1e6804c1 Mon Sep 17 00:00:00 2001 From: mhsdesign <85400359+mhsdesign@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:07:53 +0100 Subject: [PATCH 13/13] TASK: Improve PhpStan By Fixing Flow --- .../Classes/Command/CrCommandController.php | 1 - .../FlowQueryOperations/FilterOperation.php | 1 - .../Command/NodeTypesCommandController.php | 2 + .../Classes/Configuration/NodeTypesLoader.php | 1 - .../Classes/Package.php | 2 - .../Classes/Controller/LoginController.php | 15 +- .../Module/AbstractModuleController.php | 3 - .../Administration/PackagesController.php | 1 - .../Module/Administration/SitesController.php | 3 - .../Management/WorkspacesController.php | 5 - .../Controller/AbstractServiceController.php | 1 - bootstrap-phpstan.php | 9 + phpstan-baseline.neon | 346 ++++++++++++++++++ phpstan.neon.dist | 14 +- 14 files changed, 368 insertions(+), 36 deletions(-) create mode 100644 bootstrap-phpstan.php create mode 100644 phpstan-baseline.neon diff --git a/Neos.ContentRepository.LegacyNodeMigration/Classes/Command/CrCommandController.php b/Neos.ContentRepository.LegacyNodeMigration/Classes/Command/CrCommandController.php index b3b7e1a11d6..6f6fe55ff91 100644 --- a/Neos.ContentRepository.LegacyNodeMigration/Classes/Command/CrCommandController.php +++ b/Neos.ContentRepository.LegacyNodeMigration/Classes/Command/CrCommandController.php @@ -202,7 +202,6 @@ private function determineResourcesPath(): string private static function defaultResourcesPath(): string { - // @phpstan-ignore-next-line return FLOW_PATH_DATA . 'Persistent/Resources'; } } diff --git a/Neos.ContentRepository.NodeAccess/Classes/FlowQueryOperations/FilterOperation.php b/Neos.ContentRepository.NodeAccess/Classes/FlowQueryOperations/FilterOperation.php index ea212ea5182..040dc4703cb 100644 --- a/Neos.ContentRepository.NodeAccess/Classes/FlowQueryOperations/FilterOperation.php +++ b/Neos.ContentRepository.NodeAccess/Classes/FlowQueryOperations/FilterOperation.php @@ -141,7 +141,6 @@ protected function evaluateOperator($value, $operator, $operand) { if ($operator === 'instanceof' && $value instanceof Node) { if ($this->operandIsSimpleType($operand)) { - /** @phpstan-ignore-next-line Flow does not properly declare its types here */ return $this->handleSimpleTypeOperand($operand, $value); } elseif ($operand === Node::class) { return true; diff --git a/Neos.ContentRepositoryRegistry/Classes/Command/NodeTypesCommandController.php b/Neos.ContentRepositoryRegistry/Classes/Command/NodeTypesCommandController.php index 9dd7ba7433d..2a77e6c7fe1 100644 --- a/Neos.ContentRepositoryRegistry/Classes/Command/NodeTypesCommandController.php +++ b/Neos.ContentRepositoryRegistry/Classes/Command/NodeTypesCommandController.php @@ -100,8 +100,10 @@ public function listCommand(?string $filter = null, bool $includeAbstract = true } /** + * @param array $array * @param int $truncateLevel 0 for no truncation and 1 to only show the first keys of the array * @param int $currentLevel 1 for the start and will be incremented recursively + * @return array */ private static function truncateArrayAtLevel(array $array, int $truncateLevel, int $currentLevel = 1): array { diff --git a/Neos.ContentRepositoryRegistry/Classes/Configuration/NodeTypesLoader.php b/Neos.ContentRepositoryRegistry/Classes/Configuration/NodeTypesLoader.php index d19628fcdf4..b8635bf5dfa 100644 --- a/Neos.ContentRepositoryRegistry/Classes/Configuration/NodeTypesLoader.php +++ b/Neos.ContentRepositoryRegistry/Classes/Configuration/NodeTypesLoader.php @@ -24,7 +24,6 @@ class NodeTypesLoader implements LoaderInterface */ private $configurationBasePath; - /** @phpstan-ignore-next-line FLOW_PATH_CONFIGURATION not found */ public function __construct(YamlSource $yamlSource, string $configurationBasePath = FLOW_PATH_CONFIGURATION, protected readonly ?Bootstrap $bootstrap = null) { $this->yamlSource = $yamlSource; diff --git a/Neos.ContentRepositoryRegistry/Classes/Package.php b/Neos.ContentRepositoryRegistry/Classes/Package.php index c51e1712ce7..acd45ae3bcd 100644 --- a/Neos.ContentRepositoryRegistry/Classes/Package.php +++ b/Neos.ContentRepositoryRegistry/Classes/Package.php @@ -38,7 +38,6 @@ public function boot(Bootstrap $bootstrap) $dispatcher = $bootstrap->getSignalSlotDispatcher(); $dispatcher->connect(ConfigurationManager::class, 'configurationManagerReady', function (ConfigurationManager $configurationManager) use ($bootstrap) { - /** @phpstan-ignore-next-line FLOW_* */ $configurationManager->registerConfigurationType('NodeTypes', new NodeTypesLoader(new YamlSource(), FLOW_PATH_CONFIGURATION, $bootstrap)); }); @@ -64,7 +63,6 @@ public function boot(Bootstrap $bootstrap) } } - /** @phpstan-ignore-next-line FLOW_* */ $nodeTypeConfigurationFileMonitor->monitorDirectory(FLOW_PATH_CONFIGURATION, 'NodeTypes(\..+)\.yaml'); $nodeTypeConfigurationFileMonitor->detectChanges(); diff --git a/Neos.Neos/Classes/Controller/LoginController.php b/Neos.Neos/Classes/Controller/LoginController.php index c7601c8b540..6fa34f50d47 100644 --- a/Neos.Neos/Classes/Controller/LoginController.php +++ b/Neos.Neos/Classes/Controller/LoginController.php @@ -164,16 +164,15 @@ public function tokenLoginAction(string $token): void if ($newSessionId === false) { $this->logger->warning(sprintf('Token-based login failed, non-existing or expired token %s', $token)); $this->redirect('index'); - return; } $this->logger->debug(sprintf('Token-based login succeeded, token %s', $token)); $newSession = $this->sessionManager->getSession($newSessionId); - if ($newSession->canBeResumed()) { + if ($newSession?->canBeResumed()) { $newSession->resume(); } - if (!$newSession->isStarted()) { + if (!$newSession?->isStarted()) { $this->logger->error(sprintf( 'Failed resuming or starting session %s which was referred to in the login token %s.', $newSessionId, @@ -211,13 +210,11 @@ protected function onAuthenticationFailure(AuthenticationRequiredException $exce * * @param ActionRequest|null $originalRequest The request that was intercepted by the security framework, * NULL if there was none - * @phpstan-ignore-next-line Flow does not properly declare its return type here - * @return void * @throws SessionNotStartedException * @throws StopActionException * @throws \Neos\Flow\Mvc\Exception\NoSuchArgumentException */ - protected function onAuthenticationSuccess(ActionRequest $originalRequest = null): void + protected function onAuthenticationSuccess(ActionRequest $originalRequest = null): null { if ($this->view instanceof JsonView) { $this->view->assign( @@ -227,6 +224,7 @@ protected function onAuthenticationSuccess(ActionRequest $originalRequest = null 'csrfToken' => $this->securityContext->getCsrfProtectionToken() ] ); + return null; } else { if ($originalRequest !== null) { // Redirect to the location that redirected to the login form because the user was nog logged in @@ -268,11 +266,8 @@ public function logoutAction(): void /** * Disable the default error flash message * - * - * @phpstan-ignore-next-line Flow does not properly declare its types here - * @return false */ - protected function getErrorFlashMessage(): bool + protected function getErrorFlashMessage(): false { return false; } diff --git a/Neos.Neos/Classes/Controller/Module/AbstractModuleController.php b/Neos.Neos/Classes/Controller/Module/AbstractModuleController.php index b52cee0325b..81d6445b6ff 100644 --- a/Neos.Neos/Classes/Controller/Module/AbstractModuleController.php +++ b/Neos.Neos/Classes/Controller/Module/AbstractModuleController.php @@ -68,9 +68,6 @@ public function indexAction() /** * Display no flash message at all on errors. - * - * @phpstan-ignore-next-line Flow does not properly declare its types here - * @return false */ protected function getErrorFlashMessage() { diff --git a/Neos.Neos/Classes/Controller/Module/Administration/PackagesController.php b/Neos.Neos/Classes/Controller/Module/Administration/PackagesController.php index a73a2374a7b..537f1504dba 100644 --- a/Neos.Neos/Classes/Controller/Module/Administration/PackagesController.php +++ b/Neos.Neos/Classes/Controller/Module/Administration/PackagesController.php @@ -36,7 +36,6 @@ public function indexAction() $packageGroups = []; foreach ($this->packageManager->getAvailablePackages() as $package) { /** @var Package $package */ - /** @phpstan-ignore-next-line FLOW_PATH_PACKAGES is known at this point */ $packagePath = substr($package->getPackagepath(), strlen(FLOW_PATH_PACKAGES)); $packageGroup = substr($packagePath, 0, strpos($packagePath, '/') ?: null); $packageGroups[$packageGroup][$package->getPackageKey()] = [ diff --git a/Neos.Neos/Classes/Controller/Module/Administration/SitesController.php b/Neos.Neos/Classes/Controller/Module/Administration/SitesController.php index 04fecdde89d..61f854c20f5 100755 --- a/Neos.Neos/Classes/Controller/Module/Administration/SitesController.php +++ b/Neos.Neos/Classes/Controller/Module/Administration/SitesController.php @@ -393,7 +393,6 @@ public function createSiteNodeAction($packageKey, $siteName, $nodeType) 1412372375 ); $this->redirect('createSiteNode'); - return; } catch (SiteNodeTypeIsInvalid $exception) { $this->addFlashMessage( $this->getModuleLabel( @@ -406,7 +405,6 @@ public function createSiteNodeAction($packageKey, $siteName, $nodeType) 1412372375 ); $this->redirect('createSiteNode'); - return; } catch (SiteNodeNameIsAlreadyInUseByAnotherSite | NodeNameIsAlreadyOccupied $exception) { $this->addFlashMessage( $this->getModuleLabel('sites.SiteCreationError.siteWithSiteNodeNameAlreadyExists.body', [$siteName]), @@ -416,7 +414,6 @@ public function createSiteNodeAction($packageKey, $siteName, $nodeType) 1412372375 ); $this->redirect('createSiteNode'); - return; } $this->addFlashMessage( diff --git a/Neos.Neos/Classes/Controller/Module/Management/WorkspacesController.php b/Neos.Neos/Classes/Controller/Module/Management/WorkspacesController.php index 26d7046e851..ec474622f5c 100644 --- a/Neos.Neos/Classes/Controller/Module/Management/WorkspacesController.php +++ b/Neos.Neos/Classes/Controller/Module/Management/WorkspacesController.php @@ -163,7 +163,6 @@ public function showAction(WorkspaceName $workspace): void if (is_null($workspaceObj)) { /** @todo add flash message */ $this->redirect('index'); - return; } $this->view->assignMultiple([ 'selectedWorkspace' => $workspaceObj, @@ -259,7 +258,6 @@ public function editAction(WorkspaceName $workspaceName): void if (is_null($workspace)) { // @todo add flash message $this->redirect('index'); - return; } $this->view->assign('workspace', $workspace); $this->view->assign('baseWorkspaceOptions', $this->prepareBaseWorkspaceOptions($contentRepository, $workspace)); @@ -304,7 +302,6 @@ public function updateAction( Message::SEVERITY_ERROR ); $this->redirect('index'); - return; } if (!$workspace->workspaceTitle->equals($title) || !$workspace->workspaceDescription->equals($description)) { @@ -360,12 +357,10 @@ public function deleteAction(WorkspaceName $workspaceName): void Message::SEVERITY_ERROR ); $this->redirect('index'); - return; } if ($workspace->isPersonalWorkspace()) { $this->redirect('index'); - return; } $dependentWorkspaces = $contentRepository->getWorkspaceFinder() diff --git a/Neos.Neos/Classes/Service/Controller/AbstractServiceController.php b/Neos.Neos/Classes/Service/Controller/AbstractServiceController.php index 5a67975cbd7..eacebb5d5bd 100644 --- a/Neos.Neos/Classes/Service/Controller/AbstractServiceController.php +++ b/Neos.Neos/Classes/Service/Controller/AbstractServiceController.php @@ -95,7 +95,6 @@ public function processRequest(ActionRequest $request, ActionResponse $response) { try { parent::processRequest($request, $response); - /** @phpstan-ignore-next-line Although Flow does not declare it, StopActionExceptions might be thrown */ } catch (StopActionException $exception) { throw $exception; } catch (\Exception $exception) { diff --git a/bootstrap-phpstan.php b/bootstrap-phpstan.php new file mode 100644 index 00000000000..589be9a4f96 --- /dev/null +++ b/bootstrap-phpstan.php @@ -0,0 +1,9 @@ + but returns array\\\\>\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Method Neos\\\\Neos\\\\Controller\\\\Module\\\\Administration\\\\UsersController\\:\\:updateAccountAction\\(\\) has parameter \\$password with no value type specified in iterable type array\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Method Neos\\\\Neos\\\\Controller\\\\Module\\\\Administration\\\\UsersController\\:\\:updateAccountAction\\(\\) has parameter \\$roleIdentifiers with no value type specified in iterable type array\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^PHPDoc tag @var for variable \\$personName contains unknown class Neos\\\\Neos\\\\Controller\\\\Module\\\\Administration\\\\PersonName\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Parameter \\#1 \\$messageBody of method Neos\\\\Flow\\\\Mvc\\\\Controller\\\\AbstractController\\:\\:addFlashMessage\\(\\) expects string, string\\|null given\\.$#" + count: 16 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Parameter \\#1 \\$roles of method Neos\\\\Flow\\\\Security\\\\Authorization\\\\PrivilegeManagerInterface\\:\\:isPrivilegeTargetGrantedForRoles\\(\\) expects array\\, array\\ given\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Parameter \\#1 \\$string of function htmlspecialchars expects string, Neos\\\\Party\\\\Domain\\\\Model\\\\PersonName given\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Parameter \\#1 \\$user of method Neos\\\\Neos\\\\Controller\\\\Module\\\\Administration\\\\UsersController\\:\\:isEditingAllowed\\(\\) expects Neos\\\\Neos\\\\Domain\\\\Model\\\\User, Neos\\\\Neos\\\\Domain\\\\Model\\\\User\\|null given\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Parameter \\#1 \\$user of method Neos\\\\Neos\\\\Domain\\\\Service\\\\UserService\\:\\:setUserPassword\\(\\) expects Neos\\\\Neos\\\\Domain\\\\Model\\\\User, Neos\\\\Neos\\\\Domain\\\\Model\\\\User\\|null given\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Parameter \\#2 \\$messageTitle of method Neos\\\\Flow\\\\Mvc\\\\Controller\\\\AbstractController\\:\\:addFlashMessage\\(\\) expects string, string\\|null given\\.$#" + count: 18 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Property Neos\\\\Neos\\\\Controller\\\\Module\\\\Administration\\\\UsersController\\:\\:\\$authenticationProviderSettings type has no value type specified in iterable type array\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Property Neos\\\\Neos\\\\Controller\\\\Module\\\\Administration\\\\UsersController\\:\\:\\$currentUser \\(Neos\\\\Neos\\\\Domain\\\\Model\\\\User\\) does not accept Neos\\\\Neos\\\\Domain\\\\Model\\\\User\\|null\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Ternary operator condition is always true\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/Administration/UsersController.php + + - + message: "#^Method Neos\\\\Neos\\\\Controller\\\\Module\\\\User\\\\UserSettingsController\\:\\:updateAccountAction\\(\\) has parameter \\$password with no value type specified in iterable type array\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/User/UserSettingsController.php + + - + message: "#^Parameter \\#1 \\$messageBody of method Neos\\\\Flow\\\\Mvc\\\\Controller\\\\AbstractController\\:\\:addFlashMessage\\(\\) expects string, string\\|null given\\.$#" + count: 4 + path: Neos.Neos/Classes/Controller/Module/User/UserSettingsController.php + + - + message: "#^Parameter \\#2 \\$messageTitle of method Neos\\\\Flow\\\\Mvc\\\\Controller\\\\AbstractController\\:\\:addFlashMessage\\(\\) expects string, string\\|null given\\.$#" + count: 5 + path: Neos.Neos/Classes/Controller/Module/User/UserSettingsController.php + + - + message: "#^Property Neos\\\\Neos\\\\Controller\\\\Module\\\\User\\\\UserSettingsController\\:\\:\\$currentUser \\(Neos\\\\Neos\\\\Domain\\\\Model\\\\User\\) does not accept Neos\\\\Neos\\\\Domain\\\\Model\\\\User\\|null\\.$#" + count: 1 + path: Neos.Neos/Classes/Controller/Module/User/UserSettingsController.php + + - + message: "#^The internal method \"Neos\\\\ContentRepository\\\\Core\\\\Projection\\\\ContentStream\\\\ContentStreamFinder\\:\\:findAllIds\" is called\\.$#" + count: 1 + path: Neos.Neos/Classes/Domain/Service/SiteServiceInternals.php + + - + message: "#^The internal method \"Neos\\\\ContentRepository\\\\Core\\\\DimensionSpace\\\\WeightedDimensionSpacePoint\\:\\:getIdentityHash\" is called\\.$#" + count: 3 + path: Neos.Neos/Classes/Presentation/Dimensions/VisualInterDimensionalVariationGraph.php + + - + message: "#^The internal method \"Neos\\\\ContentRepository\\\\Core\\\\DimensionSpace\\\\WeightedDimensionSpacePoint\\:\\:getIdentityHash\" is called\\.$#" + count: 1 + path: Neos.Neos/Classes/Presentation/Dimensions/VisualWeightedDimensionSpacePoint.php + + - + message: "#^Else branch is unreachable because ternary operator condition is always true\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:cast\\(\\) should return resource but returns false\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:pathStat\\(\\) return type has no value type specified in iterable type array\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:pathStat\\(\\) should return array but returns array\\\\|false\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:pathStat\\(\\) should return array but returns false\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:read\\(\\) should return string but returns string\\|false\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:readDirectory\\(\\) should return string but returns string\\|false\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:resourceStat\\(\\) return type has no value type specified in iterable type array\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:resourceStat\\(\\) should return array but returns array\\\\|false\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:tell\\(\\) should return int but returns int\\|false\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:write\\(\\) should return int but returns int\\<0, max\\>\\|false\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Parameter \\#2 \\$length of function fread expects int\\<0, max\\>, int given\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Parameter \\#3 \\$recursive of function mkdir expects bool, int\\<0, 1\\> given\\.$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Return type \\(void\\) of method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:makeDirectory\\(\\) should be compatible with return type \\(bool\\) of method Neos\\\\Flow\\\\ResourceManagement\\\\Streams\\\\StreamWrapperInterface\\:\\:makeDirectory\\(\\)$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php + + - + message: "#^Return type \\(void\\) of method Neos\\\\Neos\\\\ResourceManagement\\\\NodeTypesStreamWrapper\\:\\:removeDirectory\\(\\) should be compatible with return type \\(bool\\) of method Neos\\\\Flow\\\\ResourceManagement\\\\Streams\\\\StreamWrapperInterface\\:\\:removeDirectory\\(\\)$#" + count: 1 + path: Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 108878cd883..2273d653107 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,3 +1,6 @@ +includes: + - phpstan-baseline.neon + parameters: level: 8 paths: @@ -12,13 +15,8 @@ parameters: - Neos.ContentRepository.TestSuite/Classes - Neos.ContentRepositoryRegistry/Classes - Neos.Neos/Classes - excludePaths: - analyse: - - Neos.Neos/Classes/ResourceManagement/NodeTypesStreamWrapper.php - - Neos.Neos/Classes/Controller/Module/User/UserSettingsController.php - - Neos.Neos/Classes/Controller/Module/Administration/UsersController.php - - Neos.Neos/Classes/Controller/Backend/MenuHelper.php - - Neos.ContentRepositoryRegistry/Classes/Command/ContentCommandController.php + bootstrapFiles: + - bootstrap-phpstan.php rules: - Neos\ContentRepository\BehavioralTests\PhpstanRules\ApiOrInternalAnnotationRule -# - Neos\ContentRepository\BehavioralTests\PhpstanRules\InternalMethodsNotAllowedOutsideContentRepositoryRule + - Neos\ContentRepository\BehavioralTests\PhpstanRules\InternalMethodsNotAllowedOutsideContentRepositoryRule