diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 23b27d08..dc3a0407 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -79,7 +79,7 @@ jobs:
run: composer install --prefer-dist --no-progress --no-suggest
- name: Coding Guideline
- run: .build/bin/php-cs-fixer fix --config=Build/.php-cs-fixer.dist.php -v --dry-run --using-cache=no --path-mode=intersection ./
+ run: composer project:cgl
code-quality:
runs-on: ubuntu-latest
@@ -87,15 +87,11 @@ jobs:
- php-linting
strategy:
matrix:
- include:
- - php-version: '8.2'
- typo3-version: '^13.4'
- - php-version: '8.3'
- typo3-version: '^13.4'
- - php-version: '8.4'
- typo3-version: '^13.4'
- - php-version: '8.5'
- typo3-version: '^13.4'
+ php-version:
+ - 8.2
+ - 8.3
+ - 8.4
+ - 8.5
steps:
- uses: actions/checkout@v4
@@ -112,41 +108,35 @@ jobs:
&& composer install --no-progress --no-ansi --no-interaction
- name: Code Quality (by PHPStan)
- run: .build/bin/phpstan analyse -c Build/phpstan.neon
+ run: composer project:phpstan
- tests-phpunit:
+ tests-unit-and-functional:
runs-on: ubuntu-latest
needs:
- coding-guideline
- code-quality
+ strategy:
+ matrix:
+ php-version:
+ - 8.2
+ - 8.3
+ - 8.4
+ - 8.5
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- - uses: cachix/install-nix-action@v17
+ - name: Install PHP
+ uses: shivammathur/setup-php@v2
with:
- nix_path: nixpkgs=channel:nixos-unstable
-
- - name: Run Unit Tests PHP8.2
- run: nix-shell --arg phpVersion \"php82\" --pure --run project-test-unit
-
- - name: Run Unit Tests PHP8.3
- run: nix-shell --arg phpVersion \"php83\" --pure --run project-test-unit
-
- - name: Run Unit Tests PHP8.4
- run: nix-shell --arg phpVersion \"php84\" --pure --run project-test-unit
-
- - name: Run Unit Tests PHP8.5
- run: nix-shell --arg phpVersion \"php85\" --pure --run project-test-unit
-
- - name: Run Functional Tests PHP8.2
- run: nix-shell --arg phpVersion \"php82\" --pure --run project-test-functional
+ php-version: "${{ matrix.php-version }}"
+ tools: composer:v2
- - name: Run Functional Tests PHP8.3
- run: nix-shell --arg phpVersion \"php83\" --pure --run project-test-functional
+ - name: Install dependencies
+ run: composer install --prefer-dist --no-progress --no-suggest
- - name: Run Functional Tests PHP8.4
- run: nix-shell --arg phpVersion \"php84\" --pure --run project-test-functional
+ - name: Run unit tests
+ run: composer project:test:unit
- - name: Run Functional Tests PHP8.5
- run: nix-shell --arg phpVersion \"php85\" --pure --run project-test-functional
+ - name: Run functional tests
+ run: export typo3DatabaseDriver=pdo_sqlite && composer project:test:functional
diff --git a/Build/.php-cs-fixer.dist.php b/Build/.php-cs-fixer.dist.php
index 58818f6f..aecc017b 100644
--- a/Build/.php-cs-fixer.dist.php
+++ b/Build/.php-cs-fixer.dist.php
@@ -2,62 +2,497 @@
declare(strict_types=1);
-if (PHP_SAPI !== 'cli') {
- die('This script supports command line usage only. Please check your command.');
+use ErickSkrauch\PhpCsFixer\Fixer\Whitespace\BlankLineBeforeReturnFixer;
+use ErickSkrauch\PhpCsFixer\Fixer\Whitespace\MultilineIfStatementBracesFixer;
+use ErickSkrauch\PhpCsFixer\Fixers as ErickSkrauchFixersAlias;
+use PhpCsFixer\Config;
+use PhpCsFixer\Finder;
+use PhpCsFixer\Fixer\Alias\MbStrFunctionsFixer;
+use PhpCsFixer\Fixer\Alias\ModernizeStrposFixer;
+use PhpCsFixer\Fixer\Alias\NoAliasFunctionsFixer;
+use PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer;
+use PhpCsFixer\Fixer\ArrayNotation\NoMultilineWhitespaceAroundDoubleArrowFixer;
+use PhpCsFixer\Fixer\ArrayNotation\NoWhitespaceBeforeCommaInArrayFixer;
+use PhpCsFixer\Fixer\ArrayNotation\NoWhitespaceInEmptyArrayFixer;
+use PhpCsFixer\Fixer\ArrayNotation\NormalizeIndexBraceFixer;
+use PhpCsFixer\Fixer\ArrayNotation\ReturnToYieldFromFixer;
+use PhpCsFixer\Fixer\ArrayNotation\TrimArraySpacesFixer;
+use PhpCsFixer\Fixer\ArrayNotation\WhitespaceAfterCommaInArrayFixer;
+use PhpCsFixer\Fixer\ArrayNotation\YieldFromArrayToYieldsFixer;
+use PhpCsFixer\Fixer\AttributeNotation\AttributeBlockNoSpacesFixer;
+use PhpCsFixer\Fixer\AttributeNotation\AttributeEmptyParenthesesFixer;
+use PhpCsFixer\Fixer\AttributeNotation\OrderedAttributesFixer;
+use PhpCsFixer\Fixer\Basic\NoMultipleStatementsPerLineFixer;
+use PhpCsFixer\Fixer\Basic\NoTrailingCommaInSinglelineFixer;
+use PhpCsFixer\Fixer\Basic\NonPrintableCharacterFixer;
+use PhpCsFixer\Fixer\Basic\NumericLiteralSeparatorFixer;
+use PhpCsFixer\Fixer\Casing\ClassReferenceNameCasingFixer;
+use PhpCsFixer\Fixer\Casing\NativeFunctionCasingFixer;
+use PhpCsFixer\Fixer\Casing\NativeTypeDeclarationCasingFixer;
+use PhpCsFixer\Fixer\CastNotation\CastSpacesFixer;
+use PhpCsFixer\Fixer\CastNotation\ModernizeTypesCastingFixer;
+use PhpCsFixer\Fixer\CastNotation\NoUnsetCastFixer;
+use PhpCsFixer\Fixer\ClassNotation\ClassAttributesSeparationFixer;
+use PhpCsFixer\Fixer\ClassNotation\NoNullPropertyInitializationFixer;
+use PhpCsFixer\Fixer\ClassNotation\NoRedundantReadonlyPropertyFixer;
+use PhpCsFixer\Fixer\ClassNotation\OrderedClassElementsFixer;
+use PhpCsFixer\Fixer\ClassNotation\OrderedInterfacesFixer;
+use PhpCsFixer\Fixer\ClassNotation\OrderedTraitsFixer;
+use PhpCsFixer\Fixer\ClassNotation\OrderedTypesFixer;
+use PhpCsFixer\Fixer\ClassNotation\SelfAccessorFixer;
+use PhpCsFixer\Fixer\ClassNotation\StaticPrivateMethodFixer;
+use PhpCsFixer\Fixer\ClassNotation\StringableForToStringFixer;
+use PhpCsFixer\Fixer\Comment\HeaderCommentFixer;
+use PhpCsFixer\Fixer\Comment\MultilineCommentOpeningClosingFixer;
+use PhpCsFixer\Fixer\Comment\NoEmptyCommentFixer;
+use PhpCsFixer\Fixer\Comment\SingleLineCommentStyleFixer;
+use PhpCsFixer\Fixer\ControlStructure\NoSuperfluousElseifFixer;
+use PhpCsFixer\Fixer\ControlStructure\NoUnneededBracesFixer;
+use PhpCsFixer\Fixer\ControlStructure\NoUnneededControlParenthesesFixer;
+use PhpCsFixer\Fixer\ControlStructure\NoUselessElseFixer;
+use PhpCsFixer\Fixer\ControlStructure\SimplifiedIfReturnFixer;
+use PhpCsFixer\Fixer\ControlStructure\TrailingCommaInMultilineFixer;
+use PhpCsFixer\Fixer\FunctionNotation\DateTimeCreateFromFormatCallFixer;
+use PhpCsFixer\Fixer\FunctionNotation\MethodArgumentSpaceFixer;
+use PhpCsFixer\Fixer\FunctionNotation\MultilinePromotedPropertiesFixer;
+use PhpCsFixer\Fixer\FunctionNotation\NoUnreachableDefaultArgumentValueFixer;
+use PhpCsFixer\Fixer\FunctionNotation\NoUselessPrintfFixer;
+use PhpCsFixer\Fixer\FunctionNotation\NoUselessSprintfFixer;
+use PhpCsFixer\Fixer\FunctionNotation\NullableTypeDeclarationForDefaultNullValueFixer;
+use PhpCsFixer\Fixer\FunctionNotation\PhpdocToParamTypeFixer;
+use PhpCsFixer\Fixer\FunctionNotation\PhpdocToPropertyTypeFixer;
+use PhpCsFixer\Fixer\FunctionNotation\PhpdocToReturnTypeFixer;
+use PhpCsFixer\Fixer\FunctionNotation\RegularCallableCallFixer;
+use PhpCsFixer\Fixer\FunctionNotation\StaticLambdaFixer;
+use PhpCsFixer\Fixer\FunctionNotation\VoidReturnFixer;
+use PhpCsFixer\Fixer\Import\FullyQualifiedStrictTypesFixer;
+use PhpCsFixer\Fixer\Import\GlobalNamespaceImportFixer;
+use PhpCsFixer\Fixer\Import\NoUnneededImportAliasFixer;
+use PhpCsFixer\Fixer\Import\NoUnusedImportsFixer;
+use PhpCsFixer\Fixer\Import\OrderedImportsFixer;
+use PhpCsFixer\Fixer\LanguageConstruct\ClassKeywordFixer;
+use PhpCsFixer\Fixer\LanguageConstruct\CombineConsecutiveIssetsFixer;
+use PhpCsFixer\Fixer\LanguageConstruct\CombineConsecutiveUnsetsFixer;
+use PhpCsFixer\Fixer\LanguageConstruct\NullableTypeDeclarationFixer;
+use PhpCsFixer\Fixer\LanguageConstruct\SingleSpaceAroundConstructFixer;
+use PhpCsFixer\Fixer\ListNotation\ListSyntaxFixer;
+use PhpCsFixer\Fixer\NamespaceNotation\BlankLinesBeforeNamespaceFixer;
+use PhpCsFixer\Fixer\Naming\NoHomoglyphNamesFixer;
+use PhpCsFixer\Fixer\Operator\ConcatSpaceFixer;
+use PhpCsFixer\Fixer\Operator\IncrementStyleFixer;
+use PhpCsFixer\Fixer\Operator\LongToShorthandOperatorFixer;
+use PhpCsFixer\Fixer\Operator\NewWithParenthesesFixer;
+use PhpCsFixer\Fixer\Operator\NoUselessConcatOperatorFixer;
+use PhpCsFixer\Fixer\Operator\ObjectOperatorWithoutWhitespaceFixer;
+use PhpCsFixer\Fixer\Operator\OperatorLinebreakFixer;
+use PhpCsFixer\Fixer\Operator\StandardizeIncrementFixer;
+use PhpCsFixer\Fixer\Operator\TernaryOperatorSpacesFixer;
+use PhpCsFixer\Fixer\Operator\TernaryToElvisOperatorFixer;
+use PhpCsFixer\Fixer\Operator\TernaryToNullCoalescingFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitConstructFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitDataProviderMethodOrderFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitDataProviderReturnTypeFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitDataProviderStaticFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitDedicateAssertFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitDedicateAssertInternalTypeFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitFqcnAnnotationFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitMethodCasingFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitMockFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitMockShortWillReturnFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitNamespacedFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitNoExpectationAnnotationFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitSetUpTearDownVisibilityFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitTestAnnotationFixer;
+use PhpCsFixer\Fixer\PhpUnit\PhpUnitTestCaseStaticMethodCallsFixer;
+use PhpCsFixer\Fixer\Phpdoc\NoBlankLinesAfterPhpdocFixer;
+use PhpCsFixer\Fixer\Phpdoc\NoEmptyPhpdocFixer;
+use PhpCsFixer\Fixer\Phpdoc\NoSuperfluousPhpdocTagsFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocAlignFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocIndentFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocLineSpanFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocNoAccessFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocNoDuplicateTypesFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocOrderByValueFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocOrderFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocParamOrderFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocScalarFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocSeparationFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocToCommentFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocTrimConsecutiveBlankLineSeparationFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocTrimFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocTypesFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocTypesOrderFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocVarAnnotationCorrectOrderFixer;
+use PhpCsFixer\Fixer\Phpdoc\PhpdocVarWithoutNameFixer;
+use PhpCsFixer\Fixer\ReturnNotation\NoUselessReturnFixer;
+use PhpCsFixer\Fixer\ReturnNotation\ReturnAssignmentFixer;
+use PhpCsFixer\Fixer\Semicolon\MultilineWhitespaceBeforeSemicolonsFixer;
+use PhpCsFixer\Fixer\Semicolon\NoEmptyStatementFixer;
+use PhpCsFixer\Fixer\Semicolon\NoSinglelineWhitespaceBeforeSemicolonsFixer;
+use PhpCsFixer\Fixer\Semicolon\SemicolonAfterInstructionFixer;
+use PhpCsFixer\Fixer\Strict\DeclareStrictTypesFixer;
+use PhpCsFixer\Fixer\StringNotation\NoTrailingWhitespaceInStringFixer;
+use PhpCsFixer\Fixer\StringNotation\SingleQuoteFixer;
+use PhpCsFixer\Fixer\StringNotation\StringImplicitBackslashesFixer;
+use PhpCsFixer\Fixer\StringNotation\StringLengthToEmptyFixer;
+use PhpCsFixer\Fixer\Whitespace\ArrayIndentationFixer;
+use PhpCsFixer\Fixer\Whitespace\CompactNullableTypeDeclarationFixer;
+use PhpCsFixer\Fixer\Whitespace\MethodChainingIndentationFixer;
+use PhpCsFixer\Fixer\Whitespace\NoExtraBlankLinesFixer;
+use PhpCsFixer\Fixer\Whitespace\NoSpacesAroundOffsetFixer;
+use PhpCsFixer\Fixer\Whitespace\StatementIndentationFixer;
+use PhpCsFixer\Fixer\Whitespace\TypeDeclarationSpacesFixer;
+use PhpCsFixer\Fixer\Whitespace\TypesSpacesFixer;
+use PhpCsFixer\Preg;
+use PhpCsFixer\Runner\Parallel\ParallelConfigFactory;
+use PhpCsFixerCustomFixers\Fixer\CommentSurroundedBySpacesFixer;
+use PhpCsFixerCustomFixers\Fixer\MultilineCommentOpeningClosingAloneFixer;
+use PhpCsFixerCustomFixers\Fixer\NoCommentedOutCodeFixer;
+use PhpCsFixerCustomFixers\Fixer\NoUselessDirnameCallFixer;
+use PhpCsFixerCustomFixers\Fixer\NoUselessParenthesisFixer;
+use PhpCsFixerCustomFixers\Fixer\NoUselessStrlenFixer;
+use PhpCsFixerCustomFixers\Fixer\PhpdocNoIncorrectVarAnnotationFixer;
+use PhpCsFixerCustomFixers\Fixer\PhpdocNoSuperfluousParamFixer;
+use PhpCsFixerCustomFixers\Fixer\PhpdocParamTypeFixer;
+use PhpCsFixerCustomFixers\Fixer\PhpdocTypesCommaSpacesFixer;
+use PhpCsFixerCustomFixers\Fixer\PhpdocTypesTrimFixer;
+use PhpCsFixerCustomFixers\Fixer\PromotedConstructorPropertyFixer;
+use PhpCsFixerCustomFixers\Fixer\SingleSpaceAfterStatementFixer;
+use PhpCsFixerCustomFixers\Fixer\SingleSpaceBeforeStatementFixer;
+use PhpCsFixerCustomFixers\Fixers as PhpCsFixerCustomFixersAlias;
+
+/**
+ * Transforms a given class to php-cs-fixer rule name.
+ * That way we can use auto completion, phpstan, etc.
+ *
+ * @param class-string $className
+ * @param bool $keepVendor Set to true for custom fixers.
+ */
+function transform(string $className, bool $keepVendor = false): string
+{
+ $nameParts = explode('\\', $className);
+ $name = mb_substr(end($nameParts), 0, -mb_strlen('Fixer'));
+ $name = mb_strtolower(Preg::replace(
+ '/(?setParallelConfig(ParallelConfigFactory::detect())
+ ->setRiskyAllowed(true)
->setFinder(
- (new PhpCsFixer\Finder())
+ (new Finder())
+ ->ignoreDotFiles(false)
->ignoreVCSIgnored(true)
->in(__DIR__ . '/../')
+ ->exclude(
+ [
+ '.build/',
+ 'var/',
+ ]
+ )
)
- ->setRiskyAllowed(true)
+ ->registerCustomFixers(new PhpCsFixerCustomFixersAlias())
+ ->registerCustomFixers(new ErickSkrauchFixersAlias())
->setRules([
- '@DoctrineAnnotation' => true,
- '@PER-CS' => true,
- 'array_syntax' => ['syntax' => 'short'],
- 'cast_spaces' => ['space' => 'none'],
- 'concat_space' => ['spacing' => 'one'],
- 'declare_equal_normalize' => ['space' => 'none'],
- 'declare_parentheses' => true,
- 'dir_constant' => true,
- 'function_to_constant' => ['functions' => ['get_called_class', 'get_class', 'get_class_this', 'php_sapi_name', 'phpversion', 'pi']],
- 'modernize_strpos' => true,
- 'modernize_types_casting' => true,
- 'native_function_casing' => true,
- 'no_alias_functions' => true,
- 'no_blank_lines_after_phpdoc' => true,
- 'no_empty_phpdoc' => true,
- 'no_empty_statement' => true,
- 'no_extra_blank_lines' => true,
- 'no_leading_namespace_whitespace' => true,
- 'no_null_property_initialization' => true,
- 'no_short_bool_cast' => true,
- 'no_singleline_whitespace_before_semicolons' => true,
- 'no_superfluous_elseif' => true,
- 'no_trailing_comma_in_singleline' => true,
- 'no_unneeded_control_parentheses' => true,
- 'no_unused_imports' => true,
- 'no_useless_else' => true,
- 'no_useless_nullsafe_operator' => true,
- 'ordered_imports' => ['imports_order' => ['class', 'function', 'const'], 'sort_algorithm' => 'alpha'],
- 'php_unit_construct' => ['assertions' => ['assertEquals', 'assertSame', 'assertNotEquals', 'assertNotSame']],
- 'php_unit_mock_short_will_return' => true,
- 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'],
- 'phpdoc_no_access' => true,
- 'phpdoc_no_empty_return' => true,
- 'phpdoc_no_package' => true,
- 'phpdoc_scalar' => true,
- 'phpdoc_trim' => true,
- 'phpdoc_types' => true,
- 'phpdoc_types_order' => ['null_adjustment' => 'always_last', 'sort_algorithm' => 'none'],
- 'return_type_declaration' => ['space_before' => 'none'],
- 'single_quote' => true,
- 'single_space_around_construct' => true,
- 'single_line_comment_style' => ['comment_types' => ['hash']],
- 'trailing_comma_in_multiline' => ['elements' => ['arrays']],
- 'type_declaration_spaces' => true,
- 'whitespace_after_comma_in_array' => ['ensure_single_space' => true],
- 'yoda_style' => ['equal' => false, 'identical' => false, 'less_and_greater' => false],
- ]);
+ '@PSR12' => true,
+ transform(ArrayIndentationFixer::class) => true,
+ transform(ArraySyntaxFixer::class) => [
+ 'syntax' => 'short',
+ ],
+ transform(AttributeBlockNoSpacesFixer::class) => true,
+ transform(AttributeEmptyParenthesesFixer::class) => true,
+ transform(BlankLinesBeforeNamespaceFixer::class) => true,
+ transform(CastSpacesFixer::class) => true,
+ transform(ClassAttributesSeparationFixer::class) => [
+ 'elements' => [
+ 'const' => 'one',
+ 'method' => 'one',
+ 'property' => 'one',
+ 'trait_import' => 'one',
+ ],
+ ],
+ transform(ClassKeywordFixer::class) => true,
+ transform(ClassReferenceNameCasingFixer::class) => true,
+ transform(CombineConsecutiveIssetsFixer::class) => true,
+ transform(CombineConsecutiveUnsetsFixer::class) => true,
+ transform(CompactNullableTypeDeclarationFixer::class) => true,
+ transform(ConcatSpaceFixer::class) => [
+ 'spacing' => 'one',
+ ],
+ transform(DateTimeCreateFromFormatCallFixer::class) => true,
+ transform(DeclareStrictTypesFixer::class) => true,
+ transform(FullyQualifiedStrictTypesFixer::class) => [
+ 'import_symbols' => true,
+ 'leading_backslash_in_global_namespace' => true,
+ ],
+ transform(GlobalNamespaceImportFixer::class) => true,
+ transform(HeaderCommentFixer::class) => [
+ 'header' => '',
+ ],
+ transform(IncrementStyleFixer::class) => [
+ 'style' => 'post',
+ ],
+ transform(ListSyntaxFixer::class) => true,
+ transform(LongToShorthandOperatorFixer::class) => true,
+ transform(MbStrFunctionsFixer::class) => true,
+ transform(MethodArgumentSpaceFixer::class) => [
+ 'on_multiline' => 'ensure_fully_multiline',
+ 'attribute_placement' => 'standalone',
+ ],
+ transform(MethodChainingIndentationFixer::class) => true,
+ transform(ModernizeStrposFixer::class) => [
+ 'modernize_stripos' => true,
+ ],
+ transform(ModernizeTypesCastingFixer::class) => true,
+ transform(MultilineCommentOpeningClosingFixer::class) => true,
+ transform(MultilinePromotedPropertiesFixer::class) => true,
+ transform(MultilineWhitespaceBeforeSemicolonsFixer::class) => [
+ 'strategy' => 'new_line_for_chained_calls',
+ ],
+ transform(NativeFunctionCasingFixer::class) => true,
+ transform(NativeTypeDeclarationCasingFixer::class) => true,
+ transform(NewWithParenthesesFixer::class) => [
+ 'anonymous_class' => false,
+ 'named_class' => true,
+ ],
+ transform(NoAliasFunctionsFixer::class) => true,
+ transform(NoBlankLinesAfterPhpdocFixer::class) => true,
+ transform(NoEmptyCommentFixer::class) => true,
+ transform(NoEmptyPhpdocFixer::class) => true,
+ transform(NoEmptyStatementFixer::class) => true,
+ transform(NoExtraBlankLinesFixer::class) => [
+ 'tokens' => [
+ 'attribute',
+ 'break',
+ 'case',
+ 'continue',
+ 'curly_brace_block',
+ 'default',
+ 'extra',
+ 'parenthesis_brace_block',
+ 'return',
+ 'square_brace_block',
+ 'switch',
+ 'throw',
+ 'use',
+ ],
+ ],
+ transform(NoHomoglyphNamesFixer::class) => true,
+ transform(NoMultilineWhitespaceAroundDoubleArrowFixer::class) => true,
+ transform(NoMultipleStatementsPerLineFixer::class) => true,
+ transform(NoNullPropertyInitializationFixer::class) => true,
+ transform(NoRedundantReadonlyPropertyFixer::class) => true,
+ transform(NoSinglelineWhitespaceBeforeSemicolonsFixer::class) => true,
+ transform(NoSpacesAroundOffsetFixer::class) => true,
+ transform(NoSuperfluousElseifFixer::class) => true,
+ transform(NoSuperfluousPhpdocTagsFixer::class) => [
+ 'allow_mixed' => true,
+ ],
+ transform(NoTrailingCommaInSinglelineFixer::class) => true,
+ transform(NoTrailingWhitespaceInStringFixer::class) => true,
+ transform(NoUnneededBracesFixer::class) => true,
+ transform(NoUnneededControlParenthesesFixer::class) => true,
+ transform(NoUnneededImportAliasFixer::class) => true,
+ transform(NoUnreachableDefaultArgumentValueFixer::class) => true,
+ transform(NoUnsetCastFixer::class) => true,
+ transform(NoUnusedImportsFixer::class) => true,
+ transform(NoUselessConcatOperatorFixer::class) => true,
+ transform(NoUselessElseFixer::class) => true,
+ transform(NoUselessPrintfFixer::class) => true,
+ transform(NoUselessReturnFixer::class) => true,
+ transform(NoUselessSprintfFixer::class) => true,
+ transform(NoWhitespaceBeforeCommaInArrayFixer::class) => true,
+ transform(NoWhitespaceInEmptyArrayFixer::class) => true,
+ transform(NonPrintableCharacterFixer::class) => true,
+ transform(NormalizeIndexBraceFixer::class) => true,
+ transform(NullableTypeDeclarationFixer::class) => true,
+ transform(NullableTypeDeclarationForDefaultNullValueFixer::class) => true,
+ transform(NumericLiteralSeparatorFixer::class) => [
+ 'strategy' => NumericLiteralSeparatorFixer::STRATEGY_NO_SEPARATOR,
+ ],
+ transform(ObjectOperatorWithoutWhitespaceFixer::class) => true,
+ transform(OperatorLinebreakFixer::class) => [
+ 'position' => 'beginning', ],
+ transform(OrderedAttributesFixer::class) => [
+ 'order' => [
+ 'alpha',
+ ],
+ ],
+ transform(OrderedClassElementsFixer::class) => [
+ 'order' => [
+ 'use_trait',
+ 'case',
+ 'constant_public',
+ 'constant_protected',
+ 'constant_private',
+ 'property_public',
+ 'property_protected',
+ 'property_private',
+ 'construct',
+ 'destruct',
+ 'magic',
+ 'phpunit',
+ 'method_public',
+ 'method_protected',
+ 'method_private',
+ ],
+ 'case_sensitive' => true,
+ ],
+ transform(OrderedImportsFixer::class) => [
+ 'sort_algorithm' => 'alpha',
+ 'case_sensitive' => true,
+ 'imports_order' => [
+ 'class',
+ 'const',
+ 'function',
+ ],
+ ],
+ transform(OrderedInterfacesFixer::class) => [
+ 'case_sensitive' => true,
+ ],
+ transform(OrderedTraitsFixer::class) => [
+ 'case_sensitive' => true,
+ ],
+ transform(OrderedTypesFixer::class) => [
+ 'case_sensitive' => true,
+ ],
+ transform(PhpUnitConstructFixer::class) => true,
+ transform(PhpUnitDataProviderMethodOrderFixer::class) => true,
+ transform(PhpUnitDataProviderReturnTypeFixer::class) => true,
+ transform(PhpUnitDataProviderStaticFixer::class) => [
+ 'force' => true,
+ ],
+ transform(PhpUnitDedicateAssertFixer::class) => true,
+ transform(PhpUnitDedicateAssertInternalTypeFixer::class) => true,
+ transform(PhpUnitFqcnAnnotationFixer::class) => true,
+ transform(PhpUnitMethodCasingFixer::class) => true,
+ transform(PhpUnitMockFixer::class) => true,
+ transform(PhpUnitMockShortWillReturnFixer::class) => true,
+ transform(PhpUnitNamespacedFixer::class) => true,
+ transform(PhpUnitNoExpectationAnnotationFixer::class) => true,
+ transform(PhpUnitSetUpTearDownVisibilityFixer::class) => true,
+ transform(PhpUnitTestAnnotationFixer::class) => [
+ 'style' => 'annotation',
+ ],
+ transform(PhpUnitTestCaseStaticMethodCallsFixer::class) => [
+ 'call_type' => 'self',
+ // TODO: phpunit/phpunit:11.0 Update this configuration to match actual PHPUnit version
+ 'target' => '10.0',
+ ],
+ transform(PhpdocAlignFixer::class) => [
+ 'align' => 'left',
+ ],
+ transform(PhpdocIndentFixer::class) => true,
+ transform(PhpdocLineSpanFixer::class) => true,
+ transform(PhpdocNoAccessFixer::class) => true,
+ transform(PhpdocNoDuplicateTypesFixer::class) => true,
+ transform(PhpdocOrderByValueFixer::class) => [
+ 'annotations' => [
+ 'covers', 'throws',
+ ],
+ ],
+ transform(PhpdocOrderFixer::class) => true,
+ transform(PhpdocParamOrderFixer::class) => true,
+ transform(PhpdocScalarFixer::class) => [
+ 'types' => [
+ 'boolean',
+ 'callback',
+ 'double',
+ 'integer',
+ 'never-return',
+ 'never-returns',
+ 'no-return',
+ 'real',
+ 'str',
+ ],
+ ],
+ transform(PhpdocSeparationFixer::class) => [
+ 'groups' => [
+ ['see'],
+ ['throw'],
+ ['param'],
+ ['return'],
+ ],
+ ],
+ transform(PhpdocToCommentFixer::class) => true,
+ transform(PhpdocToParamTypeFixer::class) => true,
+ transform(PhpdocToPropertyTypeFixer::class) => true,
+ transform(PhpdocToReturnTypeFixer::class) => true,
+ transform(PhpdocTrimConsecutiveBlankLineSeparationFixer::class) => true,
+ transform(PhpdocTrimFixer::class) => true,
+ transform(PhpdocTypesFixer::class) => true,
+ transform(PhpdocTypesOrderFixer::class) => [
+ 'case_sensitive' => true,
+ ],
+ transform(PhpdocVarAnnotationCorrectOrderFixer::class) => true,
+ transform(PhpdocVarWithoutNameFixer::class) => true,
+ transform(RegularCallableCallFixer::class) => true,
+ transform(ReturnAssignmentFixer::class) => true,
+ transform(ReturnToYieldFromFixer::class) => true,
+ transform(SelfAccessorFixer::class) => true,
+ transform(SemicolonAfterInstructionFixer::class) => true,
+ transform(SimplifiedIfReturnFixer::class) => true,
+ transform(SingleLineCommentStyleFixer::class) => true,
+ transform(SingleQuoteFixer::class) => true,
+ transform(SingleSpaceAroundConstructFixer::class) => true,
+ transform(StandardizeIncrementFixer::class) => true,
+ transform(StatementIndentationFixer::class) => true,
+ transform(StaticLambdaFixer::class) => true,
+ transform(StaticPrivateMethodFixer::class) => true,
+ transform(StringableForToStringFixer::class) => true,
+ transform(StringImplicitBackslashesFixer::class) => [
+ 'single_quoted' => 'ignore',
+ ],
+ transform(StringLengthToEmptyFixer::class) => true,
+ transform(TernaryOperatorSpacesFixer::class) => true,
+ transform(TernaryToElvisOperatorFixer::class) => true,
+ transform(TernaryToNullCoalescingFixer::class) => true,
+ transform(TrailingCommaInMultilineFixer::class) => true,
+ transform(TrimArraySpacesFixer::class) => true,
+ transform(TypeDeclarationSpacesFixer::class) => [
+ 'elements' => [
+ 'constant',
+ 'function',
+ 'property',
+ ],
+ ],
+ transform(TypesSpacesFixer::class) => true,
+ transform(VoidReturnFixer::class) => true,
+ transform(WhitespaceAfterCommaInArrayFixer::class) => [
+ 'ensure_single_space' => true,
+ ],
+ transform(YieldFromArrayToYieldsFixer::class) => true,
+
+ // Part of PhpCsFixerCustomFixers
+ CommentSurroundedBySpacesFixer::name() => true,
+ MultilineCommentOpeningClosingAloneFixer::name() => true,
+ NoCommentedOutCodeFixer::name() => true,
+ NoUselessDirnameCallFixer::name() => true,
+ NoUselessParenthesisFixer::name() => true,
+ NoUselessStrlenFixer::name() => true,
+ PhpdocNoIncorrectVarAnnotationFixer::name() => true,
+ PhpdocNoSuperfluousParamFixer::name() => true,
+ PhpdocParamTypeFixer::name() => true,
+ PhpdocTypesCommaSpacesFixer::name() => true,
+ PhpdocTypesTrimFixer::name() => true,
+ // Doesn't work with some Codeception files due to miss match with underlying TYPO3 classes.
+ // PromotedConstructorPropertyFixer::name() => true,
+ SingleSpaceAfterStatementFixer::name() => [
+ 'allow_linebreak' => true,
+ ],
+ SingleSpaceBeforeStatementFixer::name() => true,
+
+ // Part of ErickSkrauch\PhpCsFixer
+ transform(BlankLineBeforeReturnFixer::class, true) => true,
+ transform(MultilineIfStatementBracesFixer::class, true) => true,
+ ])
+;
diff --git a/Build/UnitTests.xml b/Build/UnitTests.xml
deleted file mode 100644
index 9825de0b..00000000
--- a/Build/UnitTests.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
- ../Tests/Unit/
-
-
-
-
- ../Classes/
-
-
- ../Classes/Widgets
-
-
-
diff --git a/Build/UnitTestsBootstrap.php b/Build/UnitTestsBootstrap.php
index d2cd5570..bcae7efe 100644
--- a/Build/UnitTestsBootstrap.php
+++ b/Build/UnitTestsBootstrap.php
@@ -1,5 +1,20 @@
defineSitePath();
- $requestType = \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_BE | \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_CLI;
+ $requestType = SystemEnvironmentBuilder::REQUESTTYPE_BE | SystemEnvironmentBuilder::REQUESTTYPE_CLI;
\TYPO3\TestingFramework\Core\SystemEnvironmentBuilder::run(0, $requestType);
- $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3conf/ext');
- $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/assets');
- $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/var/tests');
- $testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/var/transient');
+ $testbase->createDirectory(Environment::getPublicPath() . '/typo3conf/ext');
+ $testbase->createDirectory(Environment::getPublicPath() . '/typo3temp/assets');
+ $testbase->createDirectory(Environment::getPublicPath() . '/typo3temp/var/tests');
+ $testbase->createDirectory(Environment::getPublicPath() . '/typo3temp/var/transient');
// Retrieve an instance of class loader and inject to core bootstrap
$classLoader = require $testbase->getPackagesPath() . '/autoload.php';
- \TYPO3\CMS\Core\Core\Bootstrap::initializeClassLoader($classLoader);
+ Bootstrap::initializeClassLoader($classLoader);
// Initialize default TYPO3_CONF_VARS
- $configurationManager = new \TYPO3\CMS\Core\Configuration\ConfigurationManager();
+ $configurationManager = new ConfigurationManager();
$GLOBALS['TYPO3_CONF_VARS'] = $configurationManager->getDefaultConfiguration();
- $cache = new \TYPO3\CMS\Core\Cache\Frontend\PhpFrontend(
+ $cache = new PhpFrontend(
'core',
- new \TYPO3\CMS\Core\Cache\Backend\NullBackend('production', [])
+ new NullBackend('production', [])
);
// Set all packages to active
- if (interface_exists(\TYPO3\CMS\Core\Package\Cache\PackageCacheInterface::class)) {
- $packageManager = \TYPO3\CMS\Core\Core\Bootstrap::createPackageManager(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class, \TYPO3\CMS\Core\Core\Bootstrap::createPackageCache($cache));
+ if (interface_exists(PackageCacheInterface::class)) {
+ $packageManager = Bootstrap::createPackageManager(UnitTestPackageManager::class, Bootstrap::createPackageCache($cache));
} else {
// v10 compatibility layer
// @deprecated Will be removed when v10 compat is dropped from testing-framework
- $packageManager = \TYPO3\CMS\Core\Core\Bootstrap::createPackageManager(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class, $cache);
+ $packageManager = Bootstrap::createPackageManager(UnitTestPackageManager::class, $cache);
}
- \TYPO3\CMS\Core\Utility\GeneralUtility::setSingletonInstance(\TYPO3\CMS\Core\Package\PackageManager::class, $packageManager);
- \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::setPackageManager($packageManager);
+ GeneralUtility::setSingletonInstance(PackageManager::class, $packageManager);
+ ExtensionManagementUtility::setPackageManager($packageManager);
$testbase->dumpClassLoadingInformation();
- \TYPO3\CMS\Core\Utility\GeneralUtility::purgeInstances();
+ GeneralUtility::purgeInstances();
})();
diff --git a/Build/phpstan-baseline.neon b/Build/phpstan-baseline.neon
index 3cfb689d..626acd8d 100644
--- a/Build/phpstan-baseline.neon
+++ b/Build/phpstan-baseline.neon
@@ -1,21 +1,5473 @@
parameters:
ignoreErrors:
-
- message: "#^Call to an undefined method Extcode\\\\Cart\\\\Service\\\\PaymentMethodsServiceInterface\\:\\:getConfigurationsForType\\(\\)\\.$#"
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\SiteSets\\AbstractConfigurationLoader\:\:getConfigurationsForType\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/SiteSets/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\SiteSets\\AbstractConfigurationLoader\:\:getCountryCodeFromPreset\(\) has parameter \$configuration with no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/SiteSets/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\SiteSets\\AbstractConfigurationLoader\:\:getServices\(\) has parameter \$configurations with no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/SiteSets/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\SiteSets\\AbstractConfigurationLoader\:\:getTypeZonesPluginSettings\(\) has parameter \$zoneSettings with no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/SiteSets/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\SiteSets\\AbstractConfigurationLoader\:\:getTypeZonesPluginSettings\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/SiteSets/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\SpecialOptionsLoaderInterface\:\:getSpecialOptions\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/SpecialOptionsLoaderInterface.php
+
+ -
+ message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#'
+ identifier: foreach.nonIterable
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\AbstractConfigurationLoader\:\:getConfigurationsForType\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\AbstractConfigurationLoader\:\:getCountryCodeFromPreset\(\) has parameter \$configuration with no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\AbstractConfigurationLoader\:\:getServices\(\) has parameter \$configurations with no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\AbstractConfigurationLoader\:\:getServices\(\) has parameter \$services with no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\AbstractConfigurationLoader\:\:getServices\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\AbstractConfigurationLoader\:\:getTypeZonesPluginSettings\(\) has parameter \$zoneSettings with no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\AbstractConfigurationLoader\:\:getTypeZonesPluginSettings\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Parameter \#1 \$serviceKey of method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceFactory\:\:getService\(\) expects int, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Parameter \#2 \$serviceConfig of method Extcode\\Cart\\Domain\\Model\\Cart\\ServiceFactory\:\:getService\(\) expects array, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Possibly invalid array key type mixed\.$#'
+ identifier: offsetAccess.invalidOffset
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Property Extcode\\Cart\\Configuration\\Loader\\TypoScript\\AbstractConfigurationLoader\:\:\$configurations type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/AbstractConfigurationLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\PaymentMethodsLoader\:\:getPaymentMethods\(\) should return array\ but returns array\.$#'
+ identifier: return.type
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/PaymentMethodsLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\ShippingMethodsLoader\:\:getShippingMethods\(\) should return array\ but returns array\.$#'
+ identifier: return.type
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/ShippingMethodsLoader.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Configuration\\Loader\\TypoScript\\SpecialOptionsLoader\:\:getSpecialOptions\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/SpecialOptionsLoader.php
+
+ -
+ message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#'
+ identifier: foreach.nonIterable
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/TaxClassLoader.php
+
+ -
+ message: '#^Parameter \#1 \$taxClassKey of method Extcode\\Cart\\Domain\\Model\\Cart\\TaxClassFactoryInterface\:\:getTaxClass\(\) expects int, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/TaxClassLoader.php
+
+ -
+ message: '#^Parameter \#2 \$array of function array_key_exists expects array, mixed given\.$#'
+ identifier: argument.type
+ count: 2
+ path: ../Classes/Configuration/Loader/TypoScript/TaxClassLoader.php
+
+ -
+ message: '#^Parameter \#2 \$taxClassValue of method Extcode\\Cart\\Domain\\Model\\Cart\\TaxClassFactoryInterface\:\:getTaxClass\(\) expects array, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/TaxClassLoader.php
+
+ -
+ message: '#^Possibly invalid array key type mixed\.$#'
+ identifier: offsetAccess.invalidOffset
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/TaxClassLoader.php
+
+ -
+ message: '#^Property Extcode\\Cart\\Configuration\\Loader\\TypoScript\\TaxClassLoader\:\:\$settings type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Configuration/Loader/TypoScript/TaxClassLoader.php
+
+ -
+ message: '#^Parameter \#3 \$view of class Extcode\\Cart\\Event\\View\\ModifyViewEvent constructor expects TYPO3Fluid\\Fluid\\View\\ViewInterface, TYPO3\\CMS\\Core\\View\\ViewInterface given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/ActionController.php
+
+ -
+ message: '#^Cannot call method getPagePermsClause\(\) on mixed\.$#'
+ identifier: method.nonObject
+ count: 1
+ path: ../Classes/Controller/Backend/ActionController.php
+
+ -
+ message: '#^Cannot cast mixed to int\.$#'
+ identifier: cast.int
+ count: 1
+ path: ../Classes/Controller/Backend/ActionController.php
+
+ -
+ message: '#^Parameter \#2 \$perms_clause of static method TYPO3\\CMS\\Backend\\Utility\\BackendUtility\:\:readPageAccess\(\) expects string, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/ActionController.php
+
+ -
+ message: '#^Property Extcode\\Cart\\Controller\\Backend\\ActionController\:\:\$pluginSettings type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Backend/ActionController.php
+
+ -
+ message: '#^Binary operation "\." between ''attachment;…'' and mixed results in an error\.$#'
+ identifier: binaryOp.invalid
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Cannot call method getContents\(\) on mixed\.$#'
+ identifier: method.nonObject
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Cannot call method getName\(\) on mixed\.$#'
+ identifier: method.nonObject
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Cannot call method getOriginalResource\(\) on mixed\.$#'
+ identifier: method.nonObject
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Cannot call method getSize\(\) on mixed\.$#'
+ identifier: method.nonObject
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Cannot call method toArray\(\) on mixed\.$#'
+ identifier: method.nonObject
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Cannot cast mixed to string\.$#'
+ identifier: cast.string
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Parameter \#1 \$array of function end expects array\|object, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Parameter \#1 \$content of method Psr\\Http\\Message\\StreamFactoryInterface\:\:createStream\(\) expects string, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/DocumentController.php
+
+ -
+ message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#'
+ identifier: foreach.nonIterable
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Binary operation "\." between ''LLL\:EXT\:cart…'' and mixed results in an error\.$#'
+ identifier: binaryOp.invalid
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''columns'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''config'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''group'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''icon'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''items'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''label'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''link'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''showLabel'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''status'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''title'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''tx_cart_domain_model_order_payment'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''tx_cart_domain_model_order_shipping'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Cannot access offset ''value'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:dispatchModifyButtonBarEvent\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:getLanguageService\(\) should return TYPO3\\CMS\\Core\\Localization\\LanguageService but returns mixed\.$#'
+ identifier: return.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:getPaymentStatus\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:getShippingStatus\(\) return type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Method Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:setDocHeader\(\) has parameter \$buttons with no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Parameter \#1 \$href of method TYPO3\\CMS\\Backend\\Template\\Components\\Buttons\\LinkButton\:\:setHref\(\) expects string, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Parameter \#1 \$identifier of method TYPO3\\CMS\\Core\\Imaging\\IconFactory\:\:getIcon\(\) expects string, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Parameter \#1 \$key of static method TYPO3\\CMS\\Extbase\\Utility\\LocalizationUtility\:\:translate\(\) expects string, mixed given\.$#'
+ identifier: argument.type
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#'
+ identifier: argument.type
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Parameter \#1 \$queryResult of class TYPO3\\CMS\\Extbase\\Pagination\\QueryResultPaginator constructor expects TYPO3\\CMS\\Extbase\\Persistence\\QueryResultInterface, array\|TYPO3\\CMS\\Extbase\\Persistence\\QueryResultInterface given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Parameter \#1 \$showLabelText of method TYPO3\\CMS\\Backend\\Template\\Components\\Buttons\\AbstractButton\:\:setShowLabelText\(\) expects bool, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Parameter \#3 \$buttonGroup of method TYPO3\\CMS\\Backend\\Template\\Components\\ButtonBar\:\:addButton\(\) expects int, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Possibly invalid array key type mixed\.$#'
+ identifier: offsetAccess.invalidOffset
+ count: 2
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Property Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:\$searchArguments \(array\) does not accept mixed\.$#'
+ identifier: assign.propertyType
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Property Extcode\\Cart\\Controller\\Backend\\Order\\OrderController\:\:\$searchArguments type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Backend/Order/OrderController.php
+
+ -
+ message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/PaymentController.php
+
+ -
+ message: '#^Parameter \#1 \$messageBody of method TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ActionController\:\:addFlashMessage\(\) expects string, string\|null given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Backend/Order/ShippingController.php
+
+ -
+ message: '#^Cannot access offset ''pid'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 2
+ path: ../Classes/Controller/Cart/ActionController.php
+
+ -
+ message: '#^Cannot cast mixed to int\.$#'
+ identifier: cast.int
+ count: 1
+ path: ../Classes/Controller/Cart/ActionController.php
+
+ -
+ message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:restoreCart\(\) expects string, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Cart/ActionController.php
+
+ -
+ message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Cart/ActionController.php
+
+ -
+ message: '#^Property Extcode\\Cart\\Controller\\Cart\\ActionController\:\:\$configurations type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Cart/ActionController.php
+
+ -
+ message: '#^Property Extcode\\Cart\\Controller\\Cart\\ActionController\:\:\$payments type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Cart/ActionController.php
+
+ -
+ message: '#^Property Extcode\\Cart\\Controller\\Cart\\ActionController\:\:\$shippings type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Cart/ActionController.php
+
+ -
+ message: '#^Property Extcode\\Cart\\Controller\\Cart\\ActionController\:\:\$specials type has no value type specified in iterable type array\.$#'
+ identifier: missingType.iterableValue
+ count: 1
+ path: ../Classes/Controller/Cart/ActionController.php
+
+ -
+ message: '#^Binary operation "\." between ''billing_address_'' and mixed results in an error\.$#'
+ identifier: binaryOp.invalid
+ count: 2
+ path: ../Classes/Controller/Cart/CartController.php
+
+ -
+ message: '#^Binary operation "\." between ''shipping_address_'' and mixed results in an error\.$#'
+ identifier: binaryOp.invalid
+ count: 2
+ path: ../Classes/Controller/Cart/CartController.php
+
+ -
+ message: '#^Cannot access offset ''pid'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 8
+ path: ../Classes/Controller/Cart/CartController.php
+
+ -
+ message: '#^Cannot access offset ''shippingSameAsBilling'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Cart/CartController.php
+
+ -
+ message: '#^Cannot access offset ''steps'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Cart/CartController.php
+
+ -
+ message: '#^Cannot cast mixed to int\.$#'
+ identifier: cast.int
+ count: 4
+ path: ../Classes/Controller/Cart/CartController.php
+
+ -
+ message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#'
+ identifier: argument.type
+ count: 4
+ path: ../Classes/Controller/Cart/CartController.php
+
+ -
+ message: '#^Cannot access offset ''pid'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 1
+ path: ../Classes/Controller/Cart/CountryController.php
+
+ -
+ message: '#^Cannot call method getId\(\) on Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface\|null\.$#'
+ identifier: method.nonObject
+ count: 2
+ path: ../Classes/Controller/Cart/CountryController.php
+
+ -
+ message: '#^Cannot call method isPreset\(\) on mixed\.$#'
+ identifier: method.nonObject
+ count: 2
+ path: ../Classes/Controller/Cart/CountryController.php
+
+ -
+ message: '#^Parameter \#1 \$cartSettings of method Extcode\\Cart\\Utility\\CartUtility\:\:updateCountry\(\) expects array, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Cart/CountryController.php
+
+ -
+ message: '#^Parameter \#1 \$key of method Extcode\\Cart\\Service\\SessionHandler\:\:writeCart\(\) expects string, mixed given\.$#'
+ identifier: argument.type
+ count: 1
+ path: ../Classes/Controller/Cart/CountryController.php
+
+ -
+ message: '#^Parameter \#1 \$payment of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setPayment\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface, mixed given\.$#'
+ identifier: argument.type
+ count: 2
+ path: ../Classes/Controller/Cart/CountryController.php
+
+ -
+ message: '#^Parameter \#1 \$shipping of method Extcode\\Cart\\Domain\\Model\\Cart\\Cart\:\:setShipping\(\) expects Extcode\\Cart\\Domain\\Model\\Cart\\ServiceInterface, mixed given\.$#'
+ identifier: argument.type
+ count: 2
+ path: ../Classes/Controller/Cart/CountryController.php
+
+ -
+ message: '#^Cannot access offset ''pid'' on mixed\.$#'
+ identifier: offsetAccess.nonOffsetAccessible
+ count: 2
+ path: ../Classes/Controller/Cart/CouponController.php
+
+ -
+ message: '#^Cannot call method getCode\(\) on mixed\.$#'
+ identifier: method.nonObject
+ count: 1
+ path: ../Classes/Controller/Cart/CouponController.php
+
+ -
+ message: '#^Cannot call method isUseable\(\) on mixed\.$#'
+ identifier: method.nonObject
+ count: 1
+ path: ../Classes/Controller/Cart/CouponController.php
+
+ -
+ message: '#^Parameter \#1 \$className of static method TYPO3\\CMS\\Core\\Utility\\GeneralUtility\:\:makeInstance\(\) expects class\-string\