diff --git a/config/dependencies.yaml b/config/dependencies.yaml new file mode 100644 index 000000000..31923375d --- /dev/null +++ b/config/dependencies.yaml @@ -0,0 +1,21 @@ +services: + _defaults: + autowire: true + autoconfigure: true + public: false + + # controllers are imported separately to make sure they're public + # and have a tag that allows actions to type-hint services + Pimcore\Bundle\StudioBackendBundle\Dependency\Controller\: + resource: '../src/Dependency/Controller' + public: true + tags: [ 'controller.service_arguments' ] + + Pimcore\Bundle\StudioBackendBundle\Dependency\Repository\DependencyRepositoryInterface: + class: Pimcore\Bundle\StudioBackendBundle\Dependency\Repository\DependencyRepository + + Pimcore\Bundle\StudioBackendBundle\Dependency\Service\DependencyServiceInterface: + class: Pimcore\Bundle\StudioBackendBundle\Dependency\Service\DependencyService + + Pimcore\Bundle\StudioBackendBundle\Dependency\Hydrator\DependencyHydratorInterface: + class: Pimcore\Bundle\StudioBackendBundle\Dependency\Hydrator\DependencyHydrator \ No newline at end of file diff --git a/qodana.sarif.json b/qodana.sarif.json index e59259921..7e515b223 100644 --- a/qodana.sarif.json +++ b/qodana.sarif.json @@ -326,6 +326,10 @@ "id": "HTML", "name": "HTML" }, + { + "id": "Cucumber", + "name": "Cucumber" + }, { "id": "JavaScript and TypeScript/Unused symbols", "name": "Unused symbols", @@ -344,10 +348,6 @@ } ] }, - { - "id": "Cucumber", - "name": "Cucumber" - }, { "id": "JavaScript and TypeScript/Flow type checker", "name": "Flow type checker", @@ -501,13 +501,13 @@ ] }, { - "id": "PHP/Undefined symbols", - "name": "Undefined symbols", + "id": "JavaScript and TypeScript/ES2015 migration aids", + "name": "ES2015 migration aids", "relationships": [ { "target": { - "id": "PHP", - "index": 0, + "id": "JavaScript and TypeScript", + "index": 10, "toolComponent": { "name": "QDPHP" } @@ -519,13 +519,13 @@ ] }, { - "id": "JavaScript and TypeScript/ES2015 migration aids", - "name": "ES2015 migration aids", + "id": "PHP/Undefined symbols", + "name": "Undefined symbols", "relationships": [ { "target": { - "id": "JavaScript and TypeScript", - "index": 10, + "id": "PHP", + "index": 0, "toolComponent": { "name": "QDPHP" } @@ -714,10 +714,6 @@ "id": "YAML", "name": "YAML" }, - { - "id": "HTTP Client", - "name": "HTTP Client" - }, { "id": "PHP/Unused symbols", "name": "Unused symbols", @@ -736,6 +732,10 @@ } ] }, + { + "id": "HTTP Client", + "name": "HTTP Client" + }, { "id": "PHP/Composer", "name": "Composer", @@ -754,6 +754,10 @@ } ] }, + { + "id": "XML", + "name": "XML" + }, { "id": "JavaScript and TypeScript/Control flow issues", "name": "Control flow issues", @@ -772,10 +776,6 @@ } ] }, - { - "id": "XML", - "name": "XML" - }, { "id": "JavaScript and TypeScript/Potentially undesirable code constructs", "name": "Potentially undesirable code constructs", @@ -1063,13 +1063,13 @@ ] }, { - "id": "PHP/Php Inspections (EA Extended)/Architecture", - "name": "Architecture", + "id": "JavaScript and TypeScript/DOM issues", + "name": "DOM issues", "relationships": [ { "target": { - "id": "PHP/Php Inspections (EA Extended)", - "index": 1, + "id": "JavaScript and TypeScript", + "index": 10, "toolComponent": { "name": "QDPHP" } @@ -1081,13 +1081,13 @@ ] }, { - "id": "JavaScript and TypeScript/DOM issues", - "name": "DOM issues", + "id": "PHP/Php Inspections (EA Extended)/Architecture", + "name": "Architecture", "relationships": [ { "target": { - "id": "JavaScript and TypeScript", - "index": 10, + "id": "PHP/Php Inspections (EA Extended)", + "index": 1, "toolComponent": { "name": "QDPHP" } @@ -2369,19 +2369,19 @@ ] }, { - "id": "RedundantElseClauseInspection", + "id": "SecurityAdvisoriesInspection", "shortDescription": { - "text": "Redundant 'else' keyword" + "text": "Security advisories for Composer packages" }, "fullDescription": { "text": "Documentation can be found here", - "markdown": "Documentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/control-flow.md#redundant-else-keyword)" + "markdown": "Documentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/security.md#security-advisories)" }, "defaultConfiguration": { "enabled": true, "level": "warning", "parameters": { - "suppressToolId": "RedundantElseClauseInspection", + "suppressToolId": "SecurityAdvisoriesInspection", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -2389,8 +2389,8 @@ "relationships": [ { "target": { - "id": "PHP/Php Inspections (EA Extended)/Control Flow", - "index": 17, + "id": "PHP/Php Inspections (EA Extended)/Security", + "index": 9, "toolComponent": { "name": "QDPHP" } @@ -2402,19 +2402,19 @@ ] }, { - "id": "SecurityAdvisoriesInspection", + "id": "RedundantElseClauseInspection", "shortDescription": { - "text": "Security advisories for Composer packages" + "text": "Redundant 'else' keyword" }, "fullDescription": { "text": "Documentation can be found here", - "markdown": "Documentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/security.md#security-advisories)" + "markdown": "Documentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/control-flow.md#redundant-else-keyword)" }, "defaultConfiguration": { "enabled": true, "level": "warning", "parameters": { - "suppressToolId": "SecurityAdvisoriesInspection", + "suppressToolId": "RedundantElseClauseInspection", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -2422,8 +2422,8 @@ "relationships": [ { "target": { - "id": "PHP/Php Inspections (EA Extended)/Security", - "index": 9, + "id": "PHP/Php Inspections (EA Extended)/Control Flow", + "index": 17, "toolComponent": { "name": "QDPHP" } @@ -2819,7 +2819,7 @@ { "target": { "id": "PHP/Php Inspections (EA Extended)/Architecture", - "index": 74, + "index": 75, "toolComponent": { "name": "QDPHP" } @@ -3083,7 +3083,7 @@ { "target": { "id": "PHP/Php Inspections (EA Extended)/Architecture", - "index": 74, + "index": 75, "toolComponent": { "name": "QDPHP" } @@ -3677,7 +3677,7 @@ { "target": { "id": "PHP/Php Inspections (EA Extended)/Architecture", - "index": 74, + "index": 75, "toolComponent": { "name": "QDPHP" } @@ -4139,7 +4139,7 @@ { "target": { "id": "PHP/Php Inspections (EA Extended)/Architecture", - "index": 74, + "index": 75, "toolComponent": { "name": "QDPHP" } @@ -5195,7 +5195,7 @@ { "target": { "id": "PHP/Php Inspections (EA Extended)/Architecture", - "index": 74, + "index": 75, "toolComponent": { "name": "QDPHP" } @@ -5438,19 +5438,19 @@ ] }, { - "id": "NullPointerExceptionInspection", + "id": "ObGetCleanCanBeUsedInspection", "shortDescription": { - "text": "Null reference" + "text": "'ob_get_clean()' can be used" }, "fullDescription": { "text": "Documentation can be found here", - "markdown": "Documentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/probable-bugs.md#null-pointer-exceptions-prevention)" + "markdown": "Documentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/control-flow.md#ob_get_clean-can-be-used)" }, "defaultConfiguration": { "enabled": true, "level": "warning", "parameters": { - "suppressToolId": "NullPointerExceptionInspection", + "suppressToolId": "ObGetCleanCanBeUsedInspection", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -5458,8 +5458,8 @@ "relationships": [ { "target": { - "id": "PHP/Php Inspections (EA Extended)/Probable bugs", - "index": 2, + "id": "PHP/Php Inspections (EA Extended)/Control Flow", + "index": 17, "toolComponent": { "name": "QDPHP" } @@ -5471,19 +5471,19 @@ ] }, { - "id": "ObGetCleanCanBeUsedInspection", + "id": "NullPointerExceptionInspection", "shortDescription": { - "text": "'ob_get_clean()' can be used" + "text": "Null reference" }, "fullDescription": { "text": "Documentation can be found here", - "markdown": "Documentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/control-flow.md#ob_get_clean-can-be-used)" + "markdown": "Documentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/probable-bugs.md#null-pointer-exceptions-prevention)" }, "defaultConfiguration": { "enabled": true, "level": "warning", "parameters": { - "suppressToolId": "ObGetCleanCanBeUsedInspection", + "suppressToolId": "NullPointerExceptionInspection", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -5491,8 +5491,8 @@ "relationships": [ { "target": { - "id": "PHP/Php Inspections (EA Extended)/Control Flow", - "index": 17, + "id": "PHP/Php Inspections (EA Extended)/Probable bugs", + "index": 2, "toolComponent": { "name": "QDPHP" } @@ -6515,7 +6515,7 @@ { "target": { "id": "PHP/Php Inspections (EA Extended)/Architecture", - "index": 74, + "index": 75, "toolComponent": { "name": "QDPHP" } @@ -6857,28 +6857,28 @@ ] }, { - "id": "TypeUnsafeArraySearchInspection", + "id": "StaticLambdaBindingInspection", "shortDescription": { - "text": "'in_array(...)', 'array_search(...)' type unsafe usage" + "text": "Static lambdas binding" }, "fullDescription": { - "text": "Analyzes usages of 'array_search(..)' and 'in_array(...)'. If the 'strict' (third) parameter is missing, refactoring will be proposed for security's sake. Refactoring this might present a significant cost in terms of additional development and legacy code reverse engineering, so the cost-benefit should be weighed carefully. Documentation can be found here", - "markdown": "Analyzes usages of 'array_search(..)' and 'in_array(...)'. If the 'strict' (third) parameter is missing, refactoring will be proposed for security's sake. \n\nRefactoring this might present a significant cost in terms of additional development and legacy code reverse engineering, so the cost-benefit should be weighed carefully. \nDocumentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/types-compatibility.md#strict-type-search-in-arrays)" + "text": "Reports static closures, referencing '$this' (provokes a fatal error).", + "markdown": "Reports static closures, referencing '$this' (provokes a fatal error)." }, "defaultConfiguration": { "enabled": true, - "level": "note", + "level": "error", "parameters": { - "suppressToolId": "TypeUnsafeArraySearchInspection", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate" + "suppressToolId": "StaticLambdaBindingInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" } }, "relationships": [ { "target": { - "id": "PHP/Php Inspections (EA Extended)/Type compatibility", - "index": 83, + "id": "PHP/Php Inspections (EA Extended)/Probable bugs", + "index": 2, "toolComponent": { "name": "QDPHP" } @@ -6890,28 +6890,28 @@ ] }, { - "id": "StaticLambdaBindingInspection", + "id": "TypeUnsafeArraySearchInspection", "shortDescription": { - "text": "Static lambdas binding" + "text": "'in_array(...)', 'array_search(...)' type unsafe usage" }, "fullDescription": { - "text": "Reports static closures, referencing '$this' (provokes a fatal error).", - "markdown": "Reports static closures, referencing '$this' (provokes a fatal error)." + "text": "Analyzes usages of 'array_search(..)' and 'in_array(...)'. If the 'strict' (third) parameter is missing, refactoring will be proposed for security's sake. Refactoring this might present a significant cost in terms of additional development and legacy code reverse engineering, so the cost-benefit should be weighed carefully. Documentation can be found here", + "markdown": "Analyzes usages of 'array_search(..)' and 'in_array(...)'. If the 'strict' (third) parameter is missing, refactoring will be proposed for security's sake. \n\nRefactoring this might present a significant cost in terms of additional development and legacy code reverse engineering, so the cost-benefit should be weighed carefully. \nDocumentation can be found [here](https://github.com/kalessil/phpinspectionsea/blob/master/docs/types-compatibility.md#strict-type-search-in-arrays)" }, "defaultConfiguration": { "enabled": true, - "level": "error", + "level": "note", "parameters": { - "suppressToolId": "StaticLambdaBindingInspection", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical" + "suppressToolId": "TypeUnsafeArraySearchInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" } }, "relationships": [ { "target": { - "id": "PHP/Php Inspections (EA Extended)/Probable bugs", - "index": 2, + "id": "PHP/Php Inspections (EA Extended)/Type compatibility", + "index": 83, "toolComponent": { "name": "QDPHP" } @@ -7076,7 +7076,7 @@ { "target": { "id": "PHP/Php Inspections (EA Extended)/Architecture", - "index": 74, + "index": 75, "toolComponent": { "name": "QDPHP" } @@ -7109,7 +7109,7 @@ { "target": { "id": "PHP/Php Inspections (EA Extended)/Architecture", - "index": 74, + "index": 75, "toolComponent": { "name": "QDPHP" } @@ -7142,7 +7142,7 @@ { "target": { "id": "PHP/Php Inspections (EA Extended)/Architecture", - "index": 74, + "index": 75, "toolComponent": { "name": "QDPHP" } @@ -8012,7 +8012,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -8243,7 +8243,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -8276,7 +8276,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -8573,7 +8573,7 @@ { "target": { "id": "PHP/Unused symbols", - "index": 51, + "index": 50, "toolComponent": { "name": "QDPHP" } @@ -9101,7 +9101,7 @@ { "target": { "id": "PHP/Unused symbols", - "index": 51, + "index": 50, "toolComponent": { "name": "QDPHP" } @@ -9377,28 +9377,28 @@ ] }, { - "id": "PhpUnitAssertCountInspection", + "id": "PhpDefineConstantNameStartsWithLeadingSlashInspection", "shortDescription": { - "text": "Usage 'assertCount/assertSameSize' methods instead of assertEquals" + "text": "Constant name defined with a leading slash" }, "fullDescription": { - "text": "Reports alternative usage of the 'assertEquals' and 'assertNotEquals' methods with 'count' function as a parameter See Usage of the assertCount for details. See Usage of the assertSameSize for details.", - "markdown": "Reports alternative usage of the `assertEquals` and `assertNotEquals` methods with `count` function as a parameter\n\n\nSee [Usage of the assertCount](https://phpunit.readthedocs.io/en/stable/assertions.html#assertcount) for details.\n\n\nSee [Usage of the assertSameSize](https://hotexamples.com/examples/-/PHPUnit_Framework_Assert/assertSameSize/php-phpunit_framework_assert-assertsamesize-method-examples.html) for details." + "text": "Reports the 'define' constructs in which the constant's FQN starts with a leading slash. Such constants will not be correctly registered by PHP.", + "markdown": "Reports the `define` constructs in which the constant's FQN starts with a leading slash. Such constants will not be correctly registered by PHP." }, "defaultConfiguration": { "enabled": true, - "level": "note", + "level": "warning", "parameters": { - "suppressToolId": "PhpUnitAssertCountInspection", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate" + "suppressToolId": "PhpDefineConstantNameStartsWithLeadingSlashInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" } }, "relationships": [ { "target": { - "id": "PHP/PHPUnit", - "index": 29, + "id": "PHP/Code smell", + "index": 3, "toolComponent": { "name": "QDPHP" } @@ -9410,28 +9410,28 @@ ] }, { - "id": "PhpDefineConstantNameStartsWithLeadingSlashInspection", + "id": "PhpUnitAssertCountInspection", "shortDescription": { - "text": "Constant name defined with a leading slash" + "text": "Usage 'assertCount/assertSameSize' methods instead of assertEquals" }, "fullDescription": { - "text": "Reports the 'define' constructs in which the constant's FQN starts with a leading slash. Such constants will not be correctly registered by PHP.", - "markdown": "Reports the `define` constructs in which the constant's FQN starts with a leading slash. Such constants will not be correctly registered by PHP." + "text": "Reports alternative usage of the 'assertEquals' and 'assertNotEquals' methods with 'count' function as a parameter See Usage of the assertCount for details. See Usage of the assertSameSize for details.", + "markdown": "Reports alternative usage of the `assertEquals` and `assertNotEquals` methods with `count` function as a parameter\n\n\nSee [Usage of the assertCount](https://phpunit.readthedocs.io/en/stable/assertions.html#assertcount) for details.\n\n\nSee [Usage of the assertSameSize](https://hotexamples.com/examples/-/PHPUnit_Framework_Assert/assertSameSize/php-phpunit_framework_assert-assertsamesize-method-examples.html) for details." }, "defaultConfiguration": { "enabled": true, - "level": "warning", + "level": "note", "parameters": { - "suppressToolId": "PhpDefineConstantNameStartsWithLeadingSlashInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" + "suppressToolId": "PhpUnitAssertCountInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" } }, "relationships": [ { "target": { - "id": "PHP/Code smell", - "index": 3, + "id": "PHP/PHPUnit", + "index": 29, "toolComponent": { "name": "QDPHP" } @@ -9608,28 +9608,28 @@ ] }, { - "id": "PhpUsageOfSilenceOperatorInspection", + "id": "PhpUndefinedVariableInspection", "shortDescription": { - "text": "Usage of a silence operator" + "text": "Undefined variable" }, "fullDescription": { - "text": "Reports the usages of the silence operator ('@'), which is highly discouraged. See Error Control Operators (php.net) for details.", - "markdown": "Reports the usages of the silence operator (`@`), which is highly discouraged.\n\nSee [Error Control Operators (php.net)](https://www.php.net/manual/en/language.operators.errorcontrol.php) for details." + "text": "Produces two types of warnings: Undefined variable: the variable's definition is not found in the project files, configured include paths, or among the PHP predefined variables. Variable might have not been defined: there are one or more paths to reach the line with the variable usage without defining it. Use the options below to customize the inspection: Report that variable is probably undefined: clear the checkbox to disable the Variable might have not been defined warnings. Enable inspection in global space: by default, the inspection is enabled for global space. Clear the checkbox to only report undefined variables from functions' local scope. Search for variable's definition outside the current file: if selected, the IDE reports a global variable as undefined only in case there are no 'include' or 'require' statements in the current file and the variable's definition cannot be found in the project. Note that the IDE does not examine the actual content of included files but only checks the presence of 'include' or 'require' statements. Otherwise, if not selected, the IDE searches for the variable's definition only in the current file and ignores the 'include' or 'require' statements if any.", + "markdown": "Produces two types of warnings:\n\n* *Undefined variable*: the variable's definition is not found in the project files, configured include paths, or among the PHP predefined variables.\n* *Variable might have not been defined*: there are one or more paths to reach the line with the variable usage without defining it.\n\n\nUse the options below to customize the inspection:\n\n* **Report that variable is probably undefined** : clear the checkbox to disable the *Variable might have not been defined* warnings.\n* **Enable inspection in global space**: by default, the inspection is enabled for global space. Clear the checkbox to only report undefined variables from functions' local scope.\n*\n **Search for variable's definition outside the current file** : if selected, the IDE reports a global variable as undefined only in case there are no `include` or `require` statements in the current file and the variable's definition cannot be found in the project. Note that the IDE does not examine the actual content of included files but only checks the presence of `include` or `require` statements.\n\n\n Otherwise, if not selected, the IDE searches for the variable's definition only in the current file and ignores the `include` or `require` statements if any." }, "defaultConfiguration": { - "enabled": false, - "level": "note", + "enabled": true, + "level": "error", "parameters": { - "suppressToolId": "PhpUsageOfSilenceOperatorInspection", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate" + "suppressToolId": "PhpUndefinedVariableInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" } }, "relationships": [ { "target": { - "id": "PHP/Code smell", - "index": 3, + "id": "PHP/Undefined symbols", + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -9641,28 +9641,28 @@ ] }, { - "id": "PhpUndefinedVariableInspection", + "id": "PhpUsageOfSilenceOperatorInspection", "shortDescription": { - "text": "Undefined variable" + "text": "Usage of a silence operator" }, "fullDescription": { - "text": "Produces two types of warnings: Undefined variable: the variable's definition is not found in the project files, configured include paths, or among the PHP predefined variables. Variable might have not been defined: there are one or more paths to reach the line with the variable usage without defining it. Use the options below to customize the inspection: Report that variable is probably undefined: clear the checkbox to disable the Variable might have not been defined warnings. Enable inspection in global space: by default, the inspection is enabled for global space. Clear the checkbox to only report undefined variables from functions' local scope. Search for variable's definition outside the current file: if selected, the IDE reports a global variable as undefined only in case there are no 'include' or 'require' statements in the current file and the variable's definition cannot be found in the project. Note that the IDE does not examine the actual content of included files but only checks the presence of 'include' or 'require' statements. Otherwise, if not selected, the IDE searches for the variable's definition only in the current file and ignores the 'include' or 'require' statements if any.", - "markdown": "Produces two types of warnings:\n\n* *Undefined variable*: the variable's definition is not found in the project files, configured include paths, or among the PHP predefined variables.\n* *Variable might have not been defined*: there are one or more paths to reach the line with the variable usage without defining it.\n\n\nUse the options below to customize the inspection:\n\n* **Report that variable is probably undefined** : clear the checkbox to disable the *Variable might have not been defined* warnings.\n* **Enable inspection in global space**: by default, the inspection is enabled for global space. Clear the checkbox to only report undefined variables from functions' local scope.\n*\n **Search for variable's definition outside the current file** : if selected, the IDE reports a global variable as undefined only in case there are no `include` or `require` statements in the current file and the variable's definition cannot be found in the project. Note that the IDE does not examine the actual content of included files but only checks the presence of `include` or `require` statements.\n\n\n Otherwise, if not selected, the IDE searches for the variable's definition only in the current file and ignores the `include` or `require` statements if any." + "text": "Reports the usages of the silence operator ('@'), which is highly discouraged. See Error Control Operators (php.net) for details.", + "markdown": "Reports the usages of the silence operator (`@`), which is highly discouraged.\n\nSee [Error Control Operators (php.net)](https://www.php.net/manual/en/language.operators.errorcontrol.php) for details." }, "defaultConfiguration": { - "enabled": true, - "level": "error", + "enabled": false, + "level": "note", "parameters": { - "suppressToolId": "PhpUndefinedVariableInspection", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical" + "suppressToolId": "PhpUsageOfSilenceOperatorInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" } }, "relationships": [ { "target": { - "id": "PHP/Undefined symbols", - "index": 35, + "id": "PHP/Code smell", + "index": 3, "toolComponent": { "name": "QDPHP" } @@ -10586,7 +10586,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -10961,19 +10961,19 @@ ] }, { - "id": "PhpAutovivificationOnFalseValuesInspection", + "id": "PhpDocSignatureIsNotCompleteInspection", "shortDescription": { - "text": "Automatic conversion of 'false' to array is deprecated" + "text": "PHPDoc comment signature is not complete" }, "fullDescription": { - "text": "Reports automatic conversions of 'false' values to arrays. Such expressions are deprecated starting from PHP 8.1. See Deprecate autovivification on false for details.", - "markdown": "Reports automatic conversions of `false` values to arrays. Such expressions are deprecated starting from PHP 8.1.\n\n\nSee [Deprecate autovivification on false](https://wiki.php.net/rfc/autovivification_false) for details." + "text": "Reports the PHPDoc comments that contain at least one '@param' or '@return' tag but are missing some of the '@param' or '@return' tags for parameters or return types specified in the function/method declaration.", + "markdown": "Reports the PHPDoc comments that contain at least one `@param` or `@return` tag but are missing some of the `@param` or `@return` tags for parameters or return types specified in the function/method declaration." }, "defaultConfiguration": { "enabled": true, "level": "note", "parameters": { - "suppressToolId": "PhpAutovivificationOnFalseValuesInspection", + "suppressToolId": "PhpDocSignatureIsNotCompleteInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -10981,8 +10981,8 @@ "relationships": [ { "target": { - "id": "PHP/Code style", - "index": 5, + "id": "PHP/PHPDoc/Code style", + "index": 19, "toolComponent": { "name": "QDPHP" } @@ -10994,19 +10994,19 @@ ] }, { - "id": "PhpDocSignatureIsNotCompleteInspection", + "id": "PhpAutovivificationOnFalseValuesInspection", "shortDescription": { - "text": "PHPDoc comment signature is not complete" + "text": "Automatic conversion of 'false' to array is deprecated" }, "fullDescription": { - "text": "Reports the PHPDoc comments that contain at least one '@param' or '@return' tag but are missing some of the '@param' or '@return' tags for parameters or return types specified in the function/method declaration.", - "markdown": "Reports the PHPDoc comments that contain at least one `@param` or `@return` tag but are missing some of the `@param` or `@return` tags for parameters or return types specified in the function/method declaration." + "text": "Reports automatic conversions of 'false' values to arrays. Such expressions are deprecated starting from PHP 8.1. See Deprecate autovivification on false for details.", + "markdown": "Reports automatic conversions of `false` values to arrays. Such expressions are deprecated starting from PHP 8.1.\n\n\nSee [Deprecate autovivification on false](https://wiki.php.net/rfc/autovivification_false) for details." }, "defaultConfiguration": { "enabled": true, "level": "note", "parameters": { - "suppressToolId": "PhpDocSignatureIsNotCompleteInspection", + "suppressToolId": "PhpAutovivificationOnFalseValuesInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -11014,8 +11014,8 @@ "relationships": [ { "target": { - "id": "PHP/PHPDoc/Code style", - "index": 19, + "id": "PHP/Code style", + "index": 5, "toolComponent": { "name": "QDPHP" } @@ -11258,28 +11258,28 @@ ] }, { - "id": "PhpDeprecatedImplodeUsageInspection", + "id": "PhpDangerousArrayInitializationInspection", "shortDescription": { - "text": "Deprecated 'implode/join' usage" + "text": "Dangerous array initialization" }, "fullDescription": { - "text": "Reports deprecated usage of the 'implode' and 'join' functions. Starting from PHP 7.4, using 'implode' and 'join' with an array as the first argument and a string as the second argument is deprecated. See Deprecations for PHP 7.4 (php.net) for details.", - "markdown": "Reports deprecated usage of the `implode` and `join` functions.\n\nStarting from PHP 7.4, using `implode` and `join` with an array as the first argument and a string as the second argument is deprecated.\n\n\nSee [Deprecations for PHP 7.4 (php.net)](https://wiki.php.net/rfc/deprecations_php_7_4#implode_parameter_order_mix) for details." + "text": "Reports dangerous array initializations (such as '$arr[] = value'). This practice is discouraged because if '$arr' already contains some value (for example, a string from a request variable), then this value will stay in place and '[]' may actually stand for string access operator. It is always preferable to initialize a variable by direct assignment. See Creating/modifying with square bracket syntax (php.net) for details.", + "markdown": "Reports dangerous array initializations (such as `$arr[] = value`).\n\n\nThis practice is discouraged because if `$arr` already contains some value (for example, a string from a request variable), then this value will stay in place and `[]` may actually stand for string access operator. It is always preferable to initialize a variable by direct assignment.\n\nSee [Creating/modifying with square bracket syntax (php.net)](https://www.php.net/manual/en/language.types.array.php#language.types.array.syntax.modifying) for details." }, "defaultConfiguration": { "enabled": true, - "level": "warning", + "level": "note", "parameters": { - "suppressToolId": "PhpDeprecatedImplodeUsageInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" + "suppressToolId": "PhpDangerousArrayInitializationInspection", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" } }, "relationships": [ { "target": { - "id": "PHP/General", - "index": 8, + "id": "PHP/Code style", + "index": 5, "toolComponent": { "name": "QDPHP" } @@ -11291,28 +11291,28 @@ ] }, { - "id": "PhpDangerousArrayInitializationInspection", + "id": "PhpDeprecatedImplodeUsageInspection", "shortDescription": { - "text": "Dangerous array initialization" + "text": "Deprecated 'implode/join' usage" }, "fullDescription": { - "text": "Reports dangerous array initializations (such as '$arr[] = value'). This practice is discouraged because if '$arr' already contains some value (for example, a string from a request variable), then this value will stay in place and '[]' may actually stand for string access operator. It is always preferable to initialize a variable by direct assignment. See Creating/modifying with square bracket syntax (php.net) for details.", - "markdown": "Reports dangerous array initializations (such as `$arr[] = value`).\n\n\nThis practice is discouraged because if `$arr` already contains some value (for example, a string from a request variable), then this value will stay in place and `[]` may actually stand for string access operator. It is always preferable to initialize a variable by direct assignment.\n\nSee [Creating/modifying with square bracket syntax (php.net)](https://www.php.net/manual/en/language.types.array.php#language.types.array.syntax.modifying) for details." + "text": "Reports deprecated usage of the 'implode' and 'join' functions. Starting from PHP 7.4, using 'implode' and 'join' with an array as the first argument and a string as the second argument is deprecated. See Deprecations for PHP 7.4 (php.net) for details.", + "markdown": "Reports deprecated usage of the `implode` and `join` functions.\n\nStarting from PHP 7.4, using `implode` and `join` with an array as the first argument and a string as the second argument is deprecated.\n\n\nSee [Deprecations for PHP 7.4 (php.net)](https://wiki.php.net/rfc/deprecations_php_7_4#implode_parameter_order_mix) for details." }, "defaultConfiguration": { "enabled": true, - "level": "note", + "level": "warning", "parameters": { - "suppressToolId": "PhpDangerousArrayInitializationInspection", - "ideaSeverity": "INFORMATION", - "qodanaSeverity": "Info" + "suppressToolId": "PhpDeprecatedImplodeUsageInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" } }, "relationships": [ { "target": { - "id": "PHP/Code style", - "index": 5, + "id": "PHP/General", + "index": 8, "toolComponent": { "name": "QDPHP" } @@ -11720,28 +11720,28 @@ ] }, { - "id": "PhpIncludeInspection", + "id": "PhpUnitUndefinedDataProviderInspection", "shortDescription": { - "text": "Unresolved include" + "text": "Undefined PHPUnit data provider" }, "fullDescription": { - "text": "Reports non-resolved 'include', 'include_once', 'require', and 'require_once' expressions.", - "markdown": "Reports non-resolved `include`, `include_once`, `require`, and `require_once` expressions." + "text": "Reports the references to functions/methods in the '@dataProvider' PHPDoc tag that are not resolved. Note that when resolving 'dataProvider', PHPUnit doesn't take 'use' statements into account.", + "markdown": "Reports the references to functions/methods in the `@dataProvider` PHPDoc tag that are not resolved.\n\nNote that when resolving `dataProvider`, PHPUnit doesn't take `use` statements into account." }, "defaultConfiguration": { "enabled": true, - "level": "note", + "level": "warning", "parameters": { - "suppressToolId": "PhpIncludeInspection", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate" + "suppressToolId": "PhpUnitUndefinedDataProviderInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" } }, "relationships": [ { "target": { - "id": "PHP/General", - "index": 8, + "id": "PHP/PHPUnit", + "index": 29, "toolComponent": { "name": "QDPHP" } @@ -11753,28 +11753,28 @@ ] }, { - "id": "PhpUnitUndefinedDataProviderInspection", + "id": "PhpIncludeInspection", "shortDescription": { - "text": "Undefined PHPUnit data provider" + "text": "Unresolved include" }, "fullDescription": { - "text": "Reports the references to functions/methods in the '@dataProvider' PHPDoc tag that are not resolved. Note that when resolving 'dataProvider', PHPUnit doesn't take 'use' statements into account.", - "markdown": "Reports the references to functions/methods in the `@dataProvider` PHPDoc tag that are not resolved.\n\nNote that when resolving `dataProvider`, PHPUnit doesn't take `use` statements into account." + "text": "Reports non-resolved 'include', 'include_once', 'require', and 'require_once' expressions.", + "markdown": "Reports non-resolved `include`, `include_once`, `require`, and `require_once` expressions." }, "defaultConfiguration": { "enabled": true, - "level": "warning", + "level": "note", "parameters": { - "suppressToolId": "PhpUnitUndefinedDataProviderInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" + "suppressToolId": "PhpIncludeInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" } }, "relationships": [ { "target": { - "id": "PHP/PHPUnit", - "index": 29, + "id": "PHP/General", + "index": 8, "toolComponent": { "name": "QDPHP" } @@ -12842,19 +12842,19 @@ ] }, { - "id": "PhpDeprecationInspection", + "id": "MessDetectorValidationInspection", "shortDescription": { - "text": "Deprecated" + "text": "PHP Mess Detector validation" }, "fullDescription": { - "text": "Reports the usages of deprecated entities. In most cases, such usages should be removed or replaced with other constructs.", - "markdown": "Reports the usages of deprecated entities.\n\n\nIn most cases, such usages should be removed or replaced with other constructs." + "text": "Reports coding style problems detected by PHP Mess Detector. The inspection requires PHP Mess Detector to be properly installed and set up in the IDE under Settings | PHP | Quality Tools | Mess Detector. To learn more about installing PHP Mess Detector, see PHP Mess Detector installation (phpmd.org) for details. You can use a predefined set of rules or add your own by specifying valid ruleset.xml files. See the rules index (phpmd.org) and How to create a custom rule set (phpmd.org) for details.", + "markdown": "Reports coding style problems detected by PHP Mess Detector.\n\n\nThe inspection requires PHP Mess Detector to be properly installed and set up in the IDE under\n[Settings \\| PHP \\| Quality Tools \\| Mess Detector](settings://settings.php.quality.tools.mess.detector).\n\n\nTo learn more about installing PHP Mess Detector, see [PHP Mess Detector installation (phpmd.org)](https://phpmd.org/download/index.html) for details.\n\n\nYou can use a predefined set of rules or add your own by specifying valid *ruleset.xml* files. See the [rules index (phpmd.org)](https://phpmd.org/rules/index.html) and [How to create a custom rule set (phpmd.org)](https://phpmd.org/documentation/creating-a-ruleset.html) for details." }, "defaultConfiguration": { - "enabled": true, + "enabled": false, "level": "note", "parameters": { - "suppressToolId": "PhpDeprecationInspection", + "suppressToolId": "MessDetectorValidationInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -12862,8 +12862,8 @@ "relationships": [ { "target": { - "id": "PHP/General", - "index": 8, + "id": "PHP/Quality tools", + "index": 93, "toolComponent": { "name": "QDPHP" } @@ -12875,19 +12875,19 @@ ] }, { - "id": "MessDetectorValidationInspection", + "id": "PhpDeprecationInspection", "shortDescription": { - "text": "PHP Mess Detector validation" + "text": "Deprecated" }, "fullDescription": { - "text": "Reports coding style problems detected by PHP Mess Detector. The inspection requires PHP Mess Detector to be properly installed and set up in the IDE under Settings | PHP | Quality Tools | Mess Detector. To learn more about installing PHP Mess Detector, see PHP Mess Detector installation (phpmd.org) for details. You can use a predefined set of rules or add your own by specifying valid ruleset.xml files. See the rules index (phpmd.org) and How to create a custom rule set (phpmd.org) for details.", - "markdown": "Reports coding style problems detected by PHP Mess Detector.\n\n\nThe inspection requires PHP Mess Detector to be properly installed and set up in the IDE under\n[Settings \\| PHP \\| Quality Tools \\| Mess Detector](settings://settings.php.quality.tools.mess.detector).\n\n\nTo learn more about installing PHP Mess Detector, see [PHP Mess Detector installation (phpmd.org)](https://phpmd.org/download/index.html) for details.\n\n\nYou can use a predefined set of rules or add your own by specifying valid *ruleset.xml* files. See the [rules index (phpmd.org)](https://phpmd.org/rules/index.html) and [How to create a custom rule set (phpmd.org)](https://phpmd.org/documentation/creating-a-ruleset.html) for details." + "text": "Reports the usages of deprecated entities. In most cases, such usages should be removed or replaced with other constructs.", + "markdown": "Reports the usages of deprecated entities.\n\n\nIn most cases, such usages should be removed or replaced with other constructs." }, "defaultConfiguration": { - "enabled": false, + "enabled": true, "level": "note", "parameters": { - "suppressToolId": "MessDetectorValidationInspection", + "suppressToolId": "PhpDeprecationInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -12895,8 +12895,8 @@ "relationships": [ { "target": { - "id": "PHP/Quality tools", - "index": 93, + "id": "PHP/General", + "index": 8, "toolComponent": { "name": "QDPHP" } @@ -13204,39 +13204,6 @@ } ] }, - { - "id": "PhpConcatenationWithEmptyStringCanBeInlinedInspection", - "shortDescription": { - "text": "Concatenation to empty string can be merged with assignment" - }, - "fullDescription": { - "text": "Reports the '.=' concatenation assignments performed right after assignment to an empty string literal. Such assignments can be merged together.", - "markdown": "Reports the `.=` concatenation assignments performed right after assignment to an empty string literal. Such assignments can be merged together." - }, - "defaultConfiguration": { - "enabled": true, - "level": "note", - "parameters": { - "suppressToolId": "PhpConcatenationWithEmptyStringCanBeInlinedInspection", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate" - } - }, - "relationships": [ - { - "target": { - "id": "PHP/Code smell", - "index": 3, - "toolComponent": { - "name": "QDPHP" - } - }, - "kinds": [ - "superset" - ] - } - ] - }, { "id": "PhpDisabledQualityToolComposerInspection", "shortDescription": { @@ -13271,19 +13238,19 @@ ] }, { - "id": "PhpArrayIndexResetIsUnnecessaryInspection", + "id": "PhpConcatenationWithEmptyStringCanBeInlinedInspection", "shortDescription": { - "text": "Array internal pointer reset is unnecessary" + "text": "Concatenation to empty string can be merged with assignment" }, "fullDescription": { - "text": "Reports the 'reset($array)' calls on arrays whose internal pointer is already set on the first element. Such calls are redundant and can be safely removed. See reset (php.net) for details.", - "markdown": "Reports the `reset($array)` calls on arrays whose internal pointer is already set on the first element. Such calls are redundant and can be safely removed.\n\n\nSee [reset (php.net)](https://www.php.net/manual/en/function.reset.php) for details." + "text": "Reports the '.=' concatenation assignments performed right after assignment to an empty string literal. Such assignments can be merged together.", + "markdown": "Reports the `.=` concatenation assignments performed right after assignment to an empty string literal. Such assignments can be merged together." }, "defaultConfiguration": { "enabled": true, "level": "note", "parameters": { - "suppressToolId": "PhpArrayIndexResetIsUnnecessaryInspection", + "suppressToolId": "PhpConcatenationWithEmptyStringCanBeInlinedInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -13325,7 +13292,7 @@ { "target": { "id": "PHP/Unused symbols", - "index": 51, + "index": 50, "toolComponent": { "name": "QDPHP" } @@ -13369,6 +13336,39 @@ } ] }, + { + "id": "PhpArrayIndexResetIsUnnecessaryInspection", + "shortDescription": { + "text": "Array internal pointer reset is unnecessary" + }, + "fullDescription": { + "text": "Reports the 'reset($array)' calls on arrays whose internal pointer is already set on the first element. Such calls are redundant and can be safely removed. See reset (php.net) for details.", + "markdown": "Reports the `reset($array)` calls on arrays whose internal pointer is already set on the first element. Such calls are redundant and can be safely removed.\n\n\nSee [reset (php.net)](https://www.php.net/manual/en/function.reset.php) for details." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "suppressToolId": "PhpArrayIndexResetIsUnnecessaryInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" + } + }, + "relationships": [ + { + "target": { + "id": "PHP/Code smell", + "index": 3, + "toolComponent": { + "name": "QDPHP" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, { "id": "PhpApplyingEmptyIndexOperatorOnStringInspection", "shortDescription": { @@ -13556,7 +13556,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -13667,19 +13667,19 @@ ] }, { - "id": "PhpReturnValueOfMethodIsNeverUsedInspection", + "id": "PhpClassCantBeUsedAsAttributeInspection", "shortDescription": { - "text": "Method's return value is never used" + "text": "Class cannot be used as attribute" }, "fullDescription": { - "text": "Reports the private methods returning the values that are not used.", - "markdown": "Reports the private methods returning the values that are not used." + "text": "Reports the attributes that are resolved to a class not annotated with '#[Attribute]'. See Attributes (php.net) for details.", + "markdown": "Reports the attributes that are resolved to a class not annotated with `#[Attribute]`.\n\n\nSee [Attributes (php.net)](https://wiki.php.net/rfc/attributes_v2) for details." }, "defaultConfiguration": { "enabled": true, "level": "note", "parameters": { - "suppressToolId": "PhpReturnValueOfMethodIsNeverUsedInspection", + "suppressToolId": "PhpClassCantBeUsedAsAttributeInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -13687,8 +13687,8 @@ "relationships": [ { "target": { - "id": "PHP/Code smell", - "index": 3, + "id": "PHP/Attributes", + "index": 61, "toolComponent": { "name": "QDPHP" } @@ -13700,19 +13700,19 @@ ] }, { - "id": "PhpClassCantBeUsedAsAttributeInspection", + "id": "PhpReturnValueOfMethodIsNeverUsedInspection", "shortDescription": { - "text": "Class cannot be used as attribute" + "text": "Method's return value is never used" }, "fullDescription": { - "text": "Reports the attributes that are resolved to a class not annotated with '#[Attribute]'. See Attributes (php.net) for details.", - "markdown": "Reports the attributes that are resolved to a class not annotated with `#[Attribute]`.\n\n\nSee [Attributes (php.net)](https://wiki.php.net/rfc/attributes_v2) for details." + "text": "Reports the private methods returning the values that are not used.", + "markdown": "Reports the private methods returning the values that are not used." }, "defaultConfiguration": { "enabled": true, "level": "note", "parameters": { - "suppressToolId": "PhpClassCantBeUsedAsAttributeInspection", + "suppressToolId": "PhpReturnValueOfMethodIsNeverUsedInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -13720,8 +13720,8 @@ "relationships": [ { "target": { - "id": "PHP/Attributes", - "index": 61, + "id": "PHP/Code smell", + "index": 3, "toolComponent": { "name": "QDPHP" } @@ -13853,7 +13853,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -14492,19 +14492,19 @@ ] }, { - "id": "PhpBooleanCanBeSimplifiedInspection", + "id": "PhpFuncGetArgCanBeReplacedWithParamInspection", "shortDescription": { - "text": "Boolean expression can be simplified" + "text": "'func_get_arg()' call can be replaced with parameter access" }, "fullDescription": { - "text": "Reports the boolean expressions that contain the 'true' or 'false' literals and can be simplified.", - "markdown": "Reports the boolean expressions that contain the `true` or `false` literals and can be simplified." + "text": "Reports the 'func_get_arg()' calls that can be replaced with direct parameter access.", + "markdown": "Reports the `func_get_arg()` calls that can be replaced with direct parameter access." }, "defaultConfiguration": { "enabled": true, "level": "note", "parameters": { - "suppressToolId": "PhpBooleanCanBeSimplifiedInspection", + "suppressToolId": "PhpFuncGetArgCanBeReplacedWithParamInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -14525,19 +14525,19 @@ ] }, { - "id": "PhpFuncGetArgCanBeReplacedWithParamInspection", + "id": "PhpBooleanCanBeSimplifiedInspection", "shortDescription": { - "text": "'func_get_arg()' call can be replaced with parameter access" + "text": "Boolean expression can be simplified" }, "fullDescription": { - "text": "Reports the 'func_get_arg()' calls that can be replaced with direct parameter access.", - "markdown": "Reports the `func_get_arg()` calls that can be replaced with direct parameter access." + "text": "Reports the boolean expressions that contain the 'true' or 'false' literals and can be simplified.", + "markdown": "Reports the boolean expressions that contain the `true` or `false` literals and can be simplified." }, "defaultConfiguration": { "enabled": true, "level": "note", "parameters": { - "suppressToolId": "PhpFuncGetArgCanBeReplacedWithParamInspection", + "suppressToolId": "PhpBooleanCanBeSimplifiedInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -14612,7 +14612,7 @@ { "target": { "id": "PHP/Unused symbols", - "index": 51, + "index": 50, "toolComponent": { "name": "QDPHP" } @@ -14624,28 +14624,28 @@ ] }, { - "id": "PhpRandArgumentsInReverseOrderInspection", + "id": "PhpAssignmentReplaceableWithPrefixExpressionInspection", "shortDescription": { - "text": "Misordered 'rand' function arguments" + "text": "Assignment can be replaced with increment or decrement" }, "fullDescription": { - "text": "Reports the 'rand($min, $max)' family function calls in which the 'max' argument is less than 'min'. For such functions as 'mt_rand' and 'random_int', this will result in a fatal error.", - "markdown": "Reports the `rand($min, $max)` family function calls in which the `max` argument is less than `min`. For such functions as `mt_rand` and `random_int`, this will result in a fatal error." + "text": "Reports the assignments that can be replaced with incrementing ('++') or decrementing ('--') operations.", + "markdown": "Reports the assignments that can be replaced with incrementing (`++`) or decrementing (`--`) operations." }, "defaultConfiguration": { "enabled": true, - "level": "error", + "level": "note", "parameters": { - "suppressToolId": "PhpRandArgumentsInReverseOrderInspection", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical" + "suppressToolId": "PhpAssignmentReplaceableWithPrefixExpressionInspection", + "ideaSeverity": "INFORMATION", + "qodanaSeverity": "Info" } }, "relationships": [ { "target": { - "id": "PHP/Probable bugs", - "index": 12, + "id": "PHP/Replaceable assignments", + "index": 107, "toolComponent": { "name": "QDPHP" } @@ -14657,28 +14657,28 @@ ] }, { - "id": "PhpAssignmentReplaceableWithPrefixExpressionInspection", + "id": "PhpRandArgumentsInReverseOrderInspection", "shortDescription": { - "text": "Assignment can be replaced with increment or decrement" + "text": "Misordered 'rand' function arguments" }, "fullDescription": { - "text": "Reports the assignments that can be replaced with incrementing ('++') or decrementing ('--') operations.", - "markdown": "Reports the assignments that can be replaced with incrementing (`++`) or decrementing (`--`) operations." + "text": "Reports the 'rand($min, $max)' family function calls in which the 'max' argument is less than 'min'. For such functions as 'mt_rand' and 'random_int', this will result in a fatal error.", + "markdown": "Reports the `rand($min, $max)` family function calls in which the `max` argument is less than `min`. For such functions as `mt_rand` and `random_int`, this will result in a fatal error." }, "defaultConfiguration": { "enabled": true, - "level": "note", + "level": "error", "parameters": { - "suppressToolId": "PhpAssignmentReplaceableWithPrefixExpressionInspection", - "ideaSeverity": "INFORMATION", - "qodanaSeverity": "Info" + "suppressToolId": "PhpRandArgumentsInReverseOrderInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" } }, "relationships": [ { "target": { - "id": "PHP/Replaceable assignments", - "index": 107, + "id": "PHP/Probable bugs", + "index": 12, "toolComponent": { "name": "QDPHP" } @@ -15074,7 +15074,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -15470,7 +15470,7 @@ { "target": { "id": "PHP/Unused symbols", - "index": 51, + "index": 50, "toolComponent": { "name": "QDPHP" } @@ -16328,7 +16328,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -16361,7 +16361,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -17120,7 +17120,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -17318,7 +17318,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -17429,19 +17429,19 @@ ] }, { - "id": "PhpRegExpRedundantModifierInspection", + "id": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "shortDescription": { - "text": "Redundant modifier" + "text": "Attribute can be added to overriding member " }, "fullDescription": { - "text": "Reports the 'i' (case insensitivity) modifiers that are used in regular expression patterns containing no letters. Such modifiers are redundant and can be safely removed.", - "markdown": "Reports the `i` (case insensitivity) modifiers that are used in regular expression patterns containing no letters. Such modifiers are redundant and can be safely removed." + "text": "Reports the methods' and parameters' attributes that can be propagated to overriding methods/parameters. See Attributes (php.net) for details.", + "markdown": "Reports the methods' and parameters' attributes that can be propagated to overriding methods/parameters.\n\n\nSee [Attributes (php.net)](https://wiki.php.net/rfc/attributes_v2) for details." }, "defaultConfiguration": { "enabled": true, "level": "note", "parameters": { - "suppressToolId": "PhpRegExpRedundantModifierInspection", + "suppressToolId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -17449,8 +17449,8 @@ "relationships": [ { "target": { - "id": "PHP/Regular expressions", - "index": 91, + "id": "PHP/Attributes", + "index": 61, "toolComponent": { "name": "QDPHP" } @@ -17462,19 +17462,19 @@ ] }, { - "id": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "id": "PhpRegExpRedundantModifierInspection", "shortDescription": { - "text": "Attribute can be added to overriding member " + "text": "Redundant modifier" }, "fullDescription": { - "text": "Reports the methods' and parameters' attributes that can be propagated to overriding methods/parameters. See Attributes (php.net) for details.", - "markdown": "Reports the methods' and parameters' attributes that can be propagated to overriding methods/parameters.\n\n\nSee [Attributes (php.net)](https://wiki.php.net/rfc/attributes_v2) for details." + "text": "Reports the 'i' (case insensitivity) modifiers that are used in regular expression patterns containing no letters. Such modifiers are redundant and can be safely removed.", + "markdown": "Reports the `i` (case insensitivity) modifiers that are used in regular expression patterns containing no letters. Such modifiers are redundant and can be safely removed." }, "defaultConfiguration": { "enabled": true, "level": "note", "parameters": { - "suppressToolId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "suppressToolId": "PhpRegExpRedundantModifierInspection", "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate" } @@ -17482,8 +17482,8 @@ "relationships": [ { "target": { - "id": "PHP/Attributes", - "index": 61, + "id": "PHP/Regular expressions", + "index": 91, "toolComponent": { "name": "QDPHP" } @@ -17549,7 +17549,7 @@ { "target": { "id": "PHP/Unused symbols", - "index": 51, + "index": 50, "toolComponent": { "name": "QDPHP" } @@ -18275,7 +18275,7 @@ { "target": { "id": "PHP/Unused symbols", - "index": 51, + "index": 50, "toolComponent": { "name": "QDPHP" } @@ -18770,7 +18770,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -18848,28 +18848,28 @@ ] }, { - "id": "PhpTooManyParametersInspection", + "id": "PhpWrongForeachArgumentTypeInspection", "shortDescription": { - "text": "Too many parameters in function declaration" + "text": "Invalid argument supplied for 'foreach()'" }, "fullDescription": { - "text": "Reports the function/method declarations with the number of parameters exceeding the specified limit.", - "markdown": "Reports the function/method declarations with the number of parameters exceeding the specified limit." + "text": "Reports the 'foreach' constructs used on variables of the 'string', 'float', 'int', or 'boolean' type. See foreach (php.net) for details.", + "markdown": "Reports the `foreach` constructs used on variables of the `string`, `float`, `int`, or `boolean` type.\n\n\nSee [foreach (php.net)](http://www.php.net/manual/en/control-structures.foreach.php) for details." }, "defaultConfiguration": { - "enabled": false, - "level": "note", + "enabled": true, + "level": "warning", "parameters": { - "suppressToolId": "PhpTooManyParametersInspection", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate" + "suppressToolId": "PhpWrongForeachArgumentTypeInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" } }, "relationships": [ { "target": { - "id": "PHP/Code smell", - "index": 3, + "id": "PHP/Type compatibility", + "index": 33, "toolComponent": { "name": "QDPHP" } @@ -18881,28 +18881,28 @@ ] }, { - "id": "PhpWrongForeachArgumentTypeInspection", + "id": "PhpTooManyParametersInspection", "shortDescription": { - "text": "Invalid argument supplied for 'foreach()'" + "text": "Too many parameters in function declaration" }, "fullDescription": { - "text": "Reports the 'foreach' constructs used on variables of the 'string', 'float', 'int', or 'boolean' type. See foreach (php.net) for details.", - "markdown": "Reports the `foreach` constructs used on variables of the `string`, `float`, `int`, or `boolean` type.\n\n\nSee [foreach (php.net)](http://www.php.net/manual/en/control-structures.foreach.php) for details." + "text": "Reports the function/method declarations with the number of parameters exceeding the specified limit.", + "markdown": "Reports the function/method declarations with the number of parameters exceeding the specified limit." }, "defaultConfiguration": { - "enabled": true, - "level": "warning", + "enabled": false, + "level": "note", "parameters": { - "suppressToolId": "PhpWrongForeachArgumentTypeInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" + "suppressToolId": "PhpTooManyParametersInspection", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" } }, "relationships": [ { "target": { - "id": "PHP/Type compatibility", - "index": 33, + "id": "PHP/Code smell", + "index": 3, "toolComponent": { "name": "QDPHP" } @@ -19544,28 +19544,28 @@ ] }, { - "id": "MysqlParsingInspection", + "id": "SqlCallNotationInspection", "shortDescription": { - "text": "Unsupported syntax in pre-8.0 versions" + "text": "Using of named and positional arguments" }, "fullDescription": { - "text": "Reports invalid usages of UNION in queries. The inspection works in MySQL versions that are earlier than 8.0. Example (MySQL): 'SELECT * FROM (SELECT 1 UNION (SELECT 1 UNION SELECT 2)) a;'", - "markdown": "Reports invalid usages of UNION in queries.\n\nThe inspection works in MySQL versions that are earlier than 8.0.\n\nExample (MySQL):\n\n\n SELECT * FROM (SELECT 1 UNION (SELECT 1 UNION SELECT 2)) a;\n" + "text": "Reports calls in which positional arguments go after the named ones. Works in PostgreSQL, Oracle, and Db2. Example (In PostgreSQL): 'CREATE FUNCTION foo(a int, b int, c int) RETURNS int\n LANGUAGE plpgsql AS\n$$\nBEGIN\n RETURN a + b + c;\nEND\n$$;\nSELECT foo(a => 1, b => 2, c => 3);\n -- `3` goes after the named argument\nSELECT foo(1, b => 2, 3);\n -- `1` and `3` go after the named argument\nSELECT foo(b => 2, 1, 3);'", + "markdown": "Reports calls in which positional arguments go after the named ones. Works in PostgreSQL, Oracle, and Db2.\n\nExample (In PostgreSQL):\n\n CREATE FUNCTION foo(a int, b int, c int) RETURNS int\n LANGUAGE plpgsql AS\n $$\n BEGIN\n RETURN a + b + c;\n END\n $$;\n SELECT foo(a => 1, b => 2, c => 3);\n -- `3` goes after the named argument\n SELECT foo(1, b => 2, 3);\n -- `1` and `3` go after the named argument\n SELECT foo(b => 2, 1, 3);\n" }, "defaultConfiguration": { "enabled": false, - "level": "warning", + "level": "error", "parameters": { - "suppressToolId": "MysqlParsing", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" + "suppressToolId": "SqlCallNotation", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" } }, "relationships": [ { "target": { - "id": "MySQL", - "index": 13, + "id": "SQL", + "index": 46, "toolComponent": { "name": "QDPHP" } @@ -19577,28 +19577,28 @@ ] }, { - "id": "SqlCallNotationInspection", + "id": "MysqlParsingInspection", "shortDescription": { - "text": "Using of named and positional arguments" + "text": "Unsupported syntax in pre-8.0 versions" }, "fullDescription": { - "text": "Reports calls in which positional arguments go after the named ones. Works in PostgreSQL, Oracle, and Db2. Example (In PostgreSQL): 'CREATE FUNCTION foo(a int, b int, c int) RETURNS int\n LANGUAGE plpgsql AS\n$$\nBEGIN\n RETURN a + b + c;\nEND\n$$;\nSELECT foo(a => 1, b => 2, c => 3);\n -- `3` goes after the named argument\nSELECT foo(1, b => 2, 3);\n -- `1` and `3` go after the named argument\nSELECT foo(b => 2, 1, 3);'", - "markdown": "Reports calls in which positional arguments go after the named ones. Works in PostgreSQL, Oracle, and Db2.\n\nExample (In PostgreSQL):\n\n CREATE FUNCTION foo(a int, b int, c int) RETURNS int\n LANGUAGE plpgsql AS\n $$\n BEGIN\n RETURN a + b + c;\n END\n $$;\n SELECT foo(a => 1, b => 2, c => 3);\n -- `3` goes after the named argument\n SELECT foo(1, b => 2, 3);\n -- `1` and `3` go after the named argument\n SELECT foo(b => 2, 1, 3);\n" + "text": "Reports invalid usages of UNION in queries. The inspection works in MySQL versions that are earlier than 8.0. Example (MySQL): 'SELECT * FROM (SELECT 1 UNION (SELECT 1 UNION SELECT 2)) a;'", + "markdown": "Reports invalid usages of UNION in queries.\n\nThe inspection works in MySQL versions that are earlier than 8.0.\n\nExample (MySQL):\n\n\n SELECT * FROM (SELECT 1 UNION (SELECT 1 UNION SELECT 2)) a;\n" }, "defaultConfiguration": { "enabled": false, - "level": "error", + "level": "warning", "parameters": { - "suppressToolId": "SqlCallNotation", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical" + "suppressToolId": "MysqlParsing", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" } }, "relationships": [ { "target": { - "id": "SQL", - "index": 46, + "id": "MySQL", + "index": 13, "toolComponent": { "name": "QDPHP" } @@ -24254,7 +24254,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -24518,7 +24518,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -24617,7 +24617,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -24650,7 +24650,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -24716,7 +24716,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -24782,7 +24782,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -24914,7 +24914,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -25079,7 +25079,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -25178,7 +25178,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -25541,7 +25541,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -25673,7 +25673,7 @@ { "target": { "id": "XML", - "index": 54, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -25784,19 +25784,19 @@ ] }, { - "id": "XmlDeprecatedElement", + "id": "RegExpRedundantNestedCharacterClass", "shortDescription": { - "text": "Deprecated symbol" + "text": "Redundant nested character class" }, "fullDescription": { - "text": "Reports a deprecated XML element or attribute. Symbols can be marked by XML comment or documentation tag with text 'deprecated'.", - "markdown": "Reports a deprecated XML element or attribute.\n\nSymbols can be marked by XML comment or documentation tag with text 'deprecated'." + "text": "Reports unnecessary nested character classes. Example: '[a-c[x-z]]' After the quick-fix is applied: '[a-cx-z]' New in 2020.2", + "markdown": "Reports unnecessary nested character classes.\n\n**Example:**\n\n\n [a-c[x-z]]\n\nAfter the quick-fix is applied:\n\n\n [a-cx-z]\n\nNew in 2020.2" }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "XmlDeprecatedElement", + "suppressToolId": "RegExpRedundantNestedCharacterClass", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -25804,8 +25804,8 @@ "relationships": [ { "target": { - "id": "XML", - "index": 54, + "id": "RegExp", + "index": 65, "toolComponent": { "name": "QDPHP" } @@ -25817,19 +25817,19 @@ ] }, { - "id": "RegExpRedundantNestedCharacterClass", + "id": "XmlDeprecatedElement", "shortDescription": { - "text": "Redundant nested character class" + "text": "Deprecated symbol" }, "fullDescription": { - "text": "Reports unnecessary nested character classes. Example: '[a-c[x-z]]' After the quick-fix is applied: '[a-cx-z]' New in 2020.2", - "markdown": "Reports unnecessary nested character classes.\n\n**Example:**\n\n\n [a-c[x-z]]\n\nAfter the quick-fix is applied:\n\n\n [a-cx-z]\n\nNew in 2020.2" + "text": "Reports a deprecated XML element or attribute. Symbols can be marked by XML comment or documentation tag with text 'deprecated'.", + "markdown": "Reports a deprecated XML element or attribute.\n\nSymbols can be marked by XML comment or documentation tag with text 'deprecated'." }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "RegExpRedundantNestedCharacterClass", + "suppressToolId": "XmlDeprecatedElement", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -25837,8 +25837,8 @@ "relationships": [ { "target": { - "id": "RegExp", - "index": 65, + "id": "XML", + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -25970,40 +25970,7 @@ { "target": { "id": "XML", - "index": 54, - "toolComponent": { - "name": "QDPHP" - } - }, - "kinds": [ - "superset" - ] - } - ] - }, - { - "id": "RegExpDuplicateAlternationBranch", - "shortDescription": { - "text": "Duplicate branch in alternation" - }, - "fullDescription": { - "text": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression. Example: '(alpha|bravo|charlie|alpha)' After the quick-fix is applied: '(alpha|bravo|charlie)' New in 2017.1", - "markdown": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression.\n\n**Example:**\n\n\n (alpha|bravo|charlie|alpha)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo|charlie)\n\nNew in 2017.1" - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "RegExpDuplicateAlternationBranch", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" - } - }, - "relationships": [ - { - "target": { - "id": "RegExp", - "index": 65, + "index": 53, "toolComponent": { "name": "QDPHP" } @@ -26047,6 +26014,39 @@ } ] }, + { + "id": "RegExpDuplicateAlternationBranch", + "shortDescription": { + "text": "Duplicate branch in alternation" + }, + "fullDescription": { + "text": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression. Example: '(alpha|bravo|charlie|alpha)' After the quick-fix is applied: '(alpha|bravo|charlie)' New in 2017.1", + "markdown": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression.\n\n**Example:**\n\n\n (alpha|bravo|charlie|alpha)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo|charlie)\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "RegExpDuplicateAlternationBranch", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 65, + "toolComponent": { + "name": "QDPHP" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, { "id": "CheckEmptyScriptTag", "shortDescription": { @@ -26088,6 +26088,249 @@ ], "isComprehensive": false }, + { + "name": "gherkin", + "version": "241.16902", + "rules": [ + { + "id": "GherkinScenarioToScenarioOutline", + "shortDescription": { + "text": "Scenario with Examples section" + }, + "fullDescription": { + "text": "Reports Gherkin scenarios that contain an 'Examples' section. Use the quick-fix to convert 'Scenario' to 'Scenario Outline'.", + "markdown": "Reports Gherkin scenarios that contain an `Examples` section.\n\nUse the quick-fix to convert `Scenario` to `Scenario Outline`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "GherkinScenarioToScenarioOutline", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 23, + "toolComponent": { + "name": "QDPHP" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberTableInspection", + "shortDescription": { + "text": "Unused or missing columns in Cucumber tables" + }, + "fullDescription": { + "text": "Reports tables in 'Examples' sections in Cucumber .feature files with unused or missing columns.", + "markdown": "Reports tables in `Examples` sections in Cucumber .feature files with unused or missing columns." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CucumberTableInspection", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 23, + "toolComponent": { + "name": "QDPHP" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GherkinBrokenTableInspection", + "shortDescription": { + "text": "Gherkin table is broken" + }, + "fullDescription": { + "text": "Reports a table if there is at least one row with the number of cells different from the number of cells in the table header.", + "markdown": "Reports a table if there is at least one row with the number of cells different from the number of cells in the table header." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "GherkinBrokenTableInspection", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 23, + "toolComponent": { + "name": "QDPHP" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GherkinMisplacedBackground", + "shortDescription": { + "text": "Misplaced background section" + }, + "fullDescription": { + "text": "Reports 'Background' sections that are located incorrectly. The 'Background' section must be located before the 'Scenario' section.", + "markdown": "Reports `Background` sections that are located incorrectly. The `Background` section must be located before the `Scenario` section." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "GherkinMisplacedBackground", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 23, + "toolComponent": { + "name": "QDPHP" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberMissedExamples", + "shortDescription": { + "text": "Missing examples section" + }, + "fullDescription": { + "text": "Reports scenario outlines in Cucumber .feature files that do not have the 'Examples' section. Use the quick-fix to automatically create the 'Examples' section with a pre-filled table header.", + "markdown": "Reports scenario outlines in Cucumber .feature files that do not have the `Examples` section.\n\nUse the quick-fix to automatically create the `Examples` section with a pre-filled table header." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CucumberMissedExamples", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 23, + "toolComponent": { + "name": "QDPHP" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberUndefinedStep", + "shortDescription": { + "text": "Undefined step" + }, + "fullDescription": { + "text": "Reports steps in Cucumber (or some other Gherkin) .feature files that do not have matching step definitions. Use the quick-fix to automatically create a new step definition.", + "markdown": "Reports steps in Cucumber (or some other Gherkin) .feature files that do not have matching step definitions.\n\nUse the quick-fix to automatically create a new step definition." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "suppressToolId": "CucumberUndefinedStep", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 23, + "toolComponent": { + "name": "QDPHP" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CucumberExamplesColon", + "shortDescription": { + "text": "Missing ':' after examples keyword" + }, + "fullDescription": { + "text": "Reports 'Examples' sections in Cucumber .feature files if they do not have ':' after the 'Examples' keyword.", + "markdown": "Reports `Examples` sections in Cucumber .feature files if they do not have ':' after the `Examples` keyword." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "suppressToolId": "CucumberExamplesColon", + "ideaSeverity": "ERROR", + "qodanaSeverity": "Critical" + } + }, + "relationships": [ + { + "target": { + "id": "Cucumber", + "index": 23, + "toolComponent": { + "name": "QDPHP" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, { "name": "JavaScript", "version": "241.16902", @@ -26114,7 +26357,7 @@ { "target": { "id": "JavaScript and TypeScript/Unused symbols", - "index": 23, + "index": 24, "toolComponent": { "name": "QDPHP" } @@ -26279,7 +26522,7 @@ { "target": { "id": "JavaScript and TypeScript/ES2015 migration aids", - "index": 36, + "index": 35, "toolComponent": { "name": "QDPHP" } @@ -26543,7 +26786,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -26774,7 +27017,7 @@ { "target": { "id": "JavaScript and TypeScript/ES2015 migration aids", - "index": 36, + "index": 35, "toolComponent": { "name": "QDPHP" } @@ -26939,7 +27182,7 @@ { "target": { "id": "JavaScript and TypeScript/Unused symbols", - "index": 23, + "index": 24, "toolComponent": { "name": "QDPHP" } @@ -26972,7 +27215,7 @@ { "target": { "id": "JavaScript and TypeScript/ES2015 migration aids", - "index": 36, + "index": 35, "toolComponent": { "name": "QDPHP" } @@ -27005,7 +27248,7 @@ { "target": { "id": "JavaScript and TypeScript/DOM issues", - "index": 75, + "index": 74, "toolComponent": { "name": "QDPHP" } @@ -27149,28 +27392,28 @@ ] }, { - "id": "TextLabelInSwitchStatementJS", + "id": "ES6PossiblyAsyncFunction", "shortDescription": { - "text": "Text label in 'switch' statement" + "text": "'await' in non-async function" }, "fullDescription": { - "text": "Reports a labeled statement inside a 'switch' statement, which often results from a typo. Example: 'switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }'", - "markdown": "Reports a labeled statement inside a `switch` statement, which often results from a typo.\n\nExample:\n\n\n switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }\n" + "text": "Reports a usage of 'await' in a function that was possibly intended to be async but is actually missing the 'async' modifier. Although 'await' can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made 'async'.", + "markdown": "Reports a usage of `await` in a function that was possibly intended to be async but is actually missing the `async` modifier. Although `await` can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made `async`." }, "defaultConfiguration": { "enabled": false, - "level": "warning", + "level": "note", "parameters": { - "suppressToolId": "TextLabelInSwitchStatementJS", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" + "suppressToolId": "ES6PossiblyAsyncFunction", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" } }, "relationships": [ { "target": { - "id": "JavaScript and TypeScript/Switch statement issues", - "index": 73, + "id": "JavaScript and TypeScript/Async code and promises", + "index": 76, "toolComponent": { "name": "QDPHP" } @@ -27182,28 +27425,28 @@ ] }, { - "id": "ES6PossiblyAsyncFunction", + "id": "TextLabelInSwitchStatementJS", "shortDescription": { - "text": "'await' in non-async function" + "text": "Text label in 'switch' statement" }, "fullDescription": { - "text": "Reports a usage of 'await' in a function that was possibly intended to be async but is actually missing the 'async' modifier. Although 'await' can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made 'async'.", - "markdown": "Reports a usage of `await` in a function that was possibly intended to be async but is actually missing the `async` modifier. Although `await` can be used as an identifier, it is likely that it was intended to be used as an operator, so the containing function should be made `async`." + "text": "Reports a labeled statement inside a 'switch' statement, which often results from a typo. Example: 'switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }'", + "markdown": "Reports a labeled statement inside a `switch` statement, which often results from a typo.\n\nExample:\n\n\n switch(x)\n {\n case 1:\n case2: //typo!\n case 3:\n break;\n }\n" }, "defaultConfiguration": { "enabled": false, - "level": "note", + "level": "warning", "parameters": { - "suppressToolId": "ES6PossiblyAsyncFunction", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate" + "suppressToolId": "TextLabelInSwitchStatementJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" } }, "relationships": [ { "target": { - "id": "JavaScript and TypeScript/Async code and promises", - "index": 76, + "id": "JavaScript and TypeScript/Switch statement issues", + "index": 73, "toolComponent": { "name": "QDPHP" } @@ -27533,7 +27776,7 @@ { "target": { "id": "JavaScript and TypeScript/ES2015 migration aids", - "index": 36, + "index": 35, "toolComponent": { "name": "QDPHP" } @@ -27830,7 +28073,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -27896,7 +28139,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -28028,7 +28271,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -28127,7 +28370,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -28721,7 +28964,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -28754,7 +28997,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -28886,7 +29129,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -29018,7 +29261,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -29051,7 +29294,7 @@ { "target": { "id": "JavaScript and TypeScript/DOM issues", - "index": 75, + "index": 74, "toolComponent": { "name": "QDPHP" } @@ -29129,19 +29372,19 @@ ] }, { - "id": "TrivialConditionalJS", + "id": "TypeScriptDuplicateUnionOrIntersectionType", "shortDescription": { - "text": "Redundant conditional expression" + "text": "Duplicate union or intersection type component" }, "fullDescription": { - "text": "Reports a conditional expression of the form 'condition ? true : false\ncondition ? false : true' These expressions may be safely converted to 'condition\n!condition'", - "markdown": "Reports a conditional expression of the form\n\n\n condition ? true : false\n condition ? false : true\n\n\nThese expressions may be safely converted to\n\n\n condition\n !condition\n" + "text": "Reports a duplicate type inside a union or intersection.", + "markdown": "Reports a duplicate type inside a union or intersection." }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "RedundantConditionalExpressionJS", + "suppressToolId": "TypeScriptDuplicateUnionOrIntersectionType", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -29149,8 +29392,8 @@ "relationships": [ { "target": { - "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "id": "JavaScript and TypeScript/TypeScript", + "index": 71, "toolComponent": { "name": "QDPHP" } @@ -29162,19 +29405,19 @@ ] }, { - "id": "TypeScriptDuplicateUnionOrIntersectionType", + "id": "TrivialConditionalJS", "shortDescription": { - "text": "Duplicate union or intersection type component" + "text": "Redundant conditional expression" }, "fullDescription": { - "text": "Reports a duplicate type inside a union or intersection.", - "markdown": "Reports a duplicate type inside a union or intersection." + "text": "Reports a conditional expression of the form 'condition ? true : false\ncondition ? false : true' These expressions may be safely converted to 'condition\n!condition'", + "markdown": "Reports a conditional expression of the form\n\n\n condition ? true : false\n condition ? false : true\n\n\nThese expressions may be safely converted to\n\n\n condition\n !condition\n" }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "TypeScriptDuplicateUnionOrIntersectionType", + "suppressToolId": "RedundantConditionalExpressionJS", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -29182,8 +29425,8 @@ "relationships": [ { "target": { - "id": "JavaScript and TypeScript/TypeScript", - "index": 71, + "id": "JavaScript and TypeScript/Control flow issues", + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -29195,19 +29438,19 @@ ] }, { - "id": "InnerHTMLJS", + "id": "ES6UnusedImports", "shortDescription": { - "text": "Use of 'innerHTML' property" + "text": "Unused import" }, "fullDescription": { - "text": "Reports a JavaScript access to DOM nodes as text using the 'innerHTML' property. Most usages of 'innerHTML' are performed better with explicit DOM calls, such as 'getElementByID()' and 'createElement()'. Additionally, 'innerHTML' will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can lead to difficulties in diagnosing bugs.", - "markdown": "Reports a JavaScript access to DOM nodes as text using the `innerHTML` property. Most usages of `innerHTML` are performed better with explicit DOM calls, such as `getElementByID()` and `createElement()`. Additionally, `innerHTML` will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can lead to difficulties in diagnosing bugs." + "text": "Reports a redundant 'import' statement. This is usually the case if the imported symbols are not used in the source file. To avoid side-effects, consider using bare import 'import 'packageName'' instead of the regular one.", + "markdown": "Reports a redundant `import` statement. This is usually the case if the imported symbols are not used in the source file. To avoid side-effects, consider using bare import `import 'packageName'` instead of the regular one." }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "InnerHTMLJS", + "suppressToolId": "ES6UnusedImports", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -29215,8 +29458,8 @@ "relationships": [ { "target": { - "id": "JavaScript and TypeScript/DOM issues", - "index": 75, + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 80, "toolComponent": { "name": "QDPHP" } @@ -29228,19 +29471,19 @@ ] }, { - "id": "ES6UnusedImports", + "id": "InnerHTMLJS", "shortDescription": { - "text": "Unused import" + "text": "Use of 'innerHTML' property" }, "fullDescription": { - "text": "Reports a redundant 'import' statement. This is usually the case if the imported symbols are not used in the source file. To avoid side-effects, consider using bare import 'import 'packageName'' instead of the regular one.", - "markdown": "Reports a redundant `import` statement. This is usually the case if the imported symbols are not used in the source file. To avoid side-effects, consider using bare import `import 'packageName'` instead of the regular one." + "text": "Reports a JavaScript access to DOM nodes as text using the 'innerHTML' property. Most usages of 'innerHTML' are performed better with explicit DOM calls, such as 'getElementByID()' and 'createElement()'. Additionally, 'innerHTML' will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can lead to difficulties in diagnosing bugs.", + "markdown": "Reports a JavaScript access to DOM nodes as text using the `innerHTML` property. Most usages of `innerHTML` are performed better with explicit DOM calls, such as `getElementByID()` and `createElement()`. Additionally, `innerHTML` will not work with XML DOMs, including DOMs for XHTML if viewed as XML. This can lead to difficulties in diagnosing bugs." }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "ES6UnusedImports", + "suppressToolId": "InnerHTMLJS", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -29248,8 +29491,8 @@ "relationships": [ { "target": { - "id": "JavaScript and TypeScript/Imports and dependencies", - "index": 80, + "id": "JavaScript and TypeScript/DOM issues", + "index": 74, "toolComponent": { "name": "QDPHP" } @@ -29348,7 +29591,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -29480,7 +29723,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -29525,19 +29768,19 @@ ] }, { - "id": "IfStatementWithTooManyBranchesJS", + "id": "JSValidateJSDoc", "shortDescription": { - "text": "'if' statement with too many branches" + "text": "Syntax errors and unresolved references in JSDoc" }, "fullDescription": { - "text": "Reports an 'if' statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction. Use the field below to specify the maximum number of branches expected.", - "markdown": "Reports an `if` statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction.\n\n\nUse the field below to specify the maximum number of branches expected." + "text": "Reports a syntax discrepancy in a documentation comment.", + "markdown": "Reports a syntax discrepancy in a documentation comment." }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "IfStatementWithTooManyBranchesJS", + "suppressToolId": "JSValidateJSDoc", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -29545,8 +29788,8 @@ "relationships": [ { "target": { - "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "id": "JavaScript and TypeScript/General", + "index": 34, "toolComponent": { "name": "QDPHP" } @@ -29591,19 +29834,19 @@ ] }, { - "id": "JSValidateJSDoc", + "id": "IfStatementWithTooManyBranchesJS", "shortDescription": { - "text": "Syntax errors and unresolved references in JSDoc" + "text": "'if' statement with too many branches" }, "fullDescription": { - "text": "Reports a syntax discrepancy in a documentation comment.", - "markdown": "Reports a syntax discrepancy in a documentation comment." + "text": "Reports an 'if' statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction. Use the field below to specify the maximum number of branches expected.", + "markdown": "Reports an `if` statement with too many branches. Such statements may be confusing, and often indicate inadequate levels of design abstraction.\n\n\nUse the field below to specify the maximum number of branches expected." }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "JSValidateJSDoc", + "suppressToolId": "IfStatementWithTooManyBranchesJS", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -29611,8 +29854,8 @@ "relationships": [ { "target": { - "id": "JavaScript and TypeScript/General", - "index": 34, + "id": "JavaScript and TypeScript/Control flow issues", + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -29777,7 +30020,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -29954,19 +30197,19 @@ ] }, { - "id": "JSObjectNullOrUndefined", + "id": "TypeScriptMissingConfigOption", "shortDescription": { - "text": "Object is 'null' or 'undefined'" + "text": "Missing tsconfig.json option " }, "fullDescription": { - "text": "Reports an error caused by invoking a method, accessing a property, or calling a function on an object that is 'undefined' or 'null'.", - "markdown": "Reports an error caused by invoking a method, accessing a property, or calling a function on an object that is `undefined` or `null`." + "text": "Reports a usage that requires an explicit option in 'tsconfig.json'. For example, to use JSX in '.tsx' files, 'tsconfig.json' must contain '\"jsx\"' property.", + "markdown": "Reports a usage that requires an explicit option in `tsconfig.json`. For example, to use JSX in `.tsx` files, `tsconfig.json` must contain `\"jsx\"` property." }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "JSObjectNullOrUndefined", + "suppressToolId": "TypeScriptMissingConfigOption", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -29974,8 +30217,8 @@ "relationships": [ { "target": { - "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "id": "JavaScript and TypeScript/TypeScript", + "index": 71, "toolComponent": { "name": "QDPHP" } @@ -29987,19 +30230,19 @@ ] }, { - "id": "TypeScriptMissingConfigOption", + "id": "JSObjectNullOrUndefined", "shortDescription": { - "text": "Missing tsconfig.json option " + "text": "Object is 'null' or 'undefined'" }, "fullDescription": { - "text": "Reports a usage that requires an explicit option in 'tsconfig.json'. For example, to use JSX in '.tsx' files, 'tsconfig.json' must contain '\"jsx\"' property.", - "markdown": "Reports a usage that requires an explicit option in `tsconfig.json`. For example, to use JSX in `.tsx` files, `tsconfig.json` must contain `\"jsx\"` property." + "text": "Reports an error caused by invoking a method, accessing a property, or calling a function on an object that is 'undefined' or 'null'.", + "markdown": "Reports an error caused by invoking a method, accessing a property, or calling a function on an object that is `undefined` or `null`." }, "defaultConfiguration": { "enabled": false, "level": "warning", "parameters": { - "suppressToolId": "TypeScriptMissingConfigOption", + "suppressToolId": "JSObjectNullOrUndefined", "ideaSeverity": "WARNING", "qodanaSeverity": "High" } @@ -30007,8 +30250,8 @@ "relationships": [ { "target": { - "id": "JavaScript and TypeScript/TypeScript", - "index": 71, + "id": "JavaScript and TypeScript/Control flow issues", + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -30272,7 +30515,7 @@ { "target": { "id": "JavaScript and TypeScript/ES2015 migration aids", - "index": 36, + "index": 35, "toolComponent": { "name": "QDPHP" } @@ -30371,7 +30614,7 @@ { "target": { "id": "JavaScript and TypeScript/ES2015 migration aids", - "index": 36, + "index": 35, "toolComponent": { "name": "QDPHP" } @@ -30404,7 +30647,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -30536,7 +30779,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -30680,28 +30923,28 @@ ] }, { - "id": "UnusedCatchParameterJS", + "id": "NpmUsedModulesInstalled", "shortDescription": { - "text": "Unused 'catch' parameter" + "text": "Missing module dependency" }, "fullDescription": { - "text": "Reports a 'catch' parameter that is not used in the corresponding block. The 'catch' parameters named 'ignore' or 'ignored' are ignored. Use the checkbox below to disable this inspection for 'catch' blocks with comments.", - "markdown": "Reports a `catch` parameter that is not used in the corresponding block. The `catch` parameters named `ignore` or `ignored` are ignored.\n\n\nUse the checkbox below to disable this inspection for `catch`\nblocks with comments." + "text": "Reports a module from a 'require()' call or an 'import' statement that is not installed or is not listed in package.json dependencies. Suggests installing the module and/or including it into package.json. For 'require()' calls, works only in the files from the scope of Node.js Core JavaScript library.", + "markdown": "Reports a module from a `require()` call or an `import` statement that is not installed or is not listed in package.json dependencies.\n\nSuggests installing the module and/or including it into package.json.\n\nFor `require()` calls, works only in the files from the scope of *Node.js Core* JavaScript library." }, "defaultConfiguration": { "enabled": false, - "level": "warning", + "level": "note", "parameters": { - "suppressToolId": "UnusedCatchParameterJS", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" + "suppressToolId": "NpmUsedModulesInstalled", + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate" } }, "relationships": [ { "target": { - "id": "JavaScript and TypeScript/Try statement issues", - "index": 48, + "id": "JavaScript and TypeScript/Imports and dependencies", + "index": 80, "toolComponent": { "name": "QDPHP" } @@ -30713,28 +30956,28 @@ ] }, { - "id": "NpmUsedModulesInstalled", + "id": "UnusedCatchParameterJS", "shortDescription": { - "text": "Missing module dependency" + "text": "Unused 'catch' parameter" }, "fullDescription": { - "text": "Reports a module from a 'require()' call or an 'import' statement that is not installed or is not listed in package.json dependencies. Suggests installing the module and/or including it into package.json. For 'require()' calls, works only in the files from the scope of Node.js Core JavaScript library.", - "markdown": "Reports a module from a `require()` call or an `import` statement that is not installed or is not listed in package.json dependencies.\n\nSuggests installing the module and/or including it into package.json.\n\nFor `require()` calls, works only in the files from the scope of *Node.js Core* JavaScript library." + "text": "Reports a 'catch' parameter that is not used in the corresponding block. The 'catch' parameters named 'ignore' or 'ignored' are ignored. Use the checkbox below to disable this inspection for 'catch' blocks with comments.", + "markdown": "Reports a `catch` parameter that is not used in the corresponding block. The `catch` parameters named `ignore` or `ignored` are ignored.\n\n\nUse the checkbox below to disable this inspection for `catch`\nblocks with comments." }, "defaultConfiguration": { "enabled": false, - "level": "note", + "level": "warning", "parameters": { - "suppressToolId": "NpmUsedModulesInstalled", - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate" + "suppressToolId": "UnusedCatchParameterJS", + "ideaSeverity": "WARNING", + "qodanaSeverity": "High" } }, "relationships": [ { "target": { - "id": "JavaScript and TypeScript/Imports and dependencies", - "index": 80, + "id": "JavaScript and TypeScript/Try statement issues", + "index": 48, "toolComponent": { "name": "QDPHP" } @@ -31493,7 +31736,7 @@ { "target": { "id": "JavaScript and TypeScript/DOM issues", - "index": 75, + "index": 74, "toolComponent": { "name": "QDPHP" } @@ -31625,7 +31868,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -31757,7 +32000,7 @@ { "target": { "id": "JavaScript and TypeScript/ES2015 migration aids", - "index": 36, + "index": 35, "toolComponent": { "name": "QDPHP" } @@ -31823,7 +32066,7 @@ { "target": { "id": "JavaScript and TypeScript/ES2015 migration aids", - "index": 36, + "index": 35, "toolComponent": { "name": "QDPHP" } @@ -32912,7 +33155,7 @@ { "target": { "id": "JavaScript and TypeScript/Control flow issues", - "index": 53, + "index": 54, "toolComponent": { "name": "QDPHP" } @@ -33011,249 +33254,6 @@ { "target": { "id": "JavaScript and TypeScript/Unused symbols", - "index": 23, - "toolComponent": { - "name": "QDPHP" - } - }, - "kinds": [ - "superset" - ] - } - ] - } - ], - "language": "en-US", - "contents": [ - "localizedData", - "nonLocalizedData" - ], - "isComprehensive": false - }, - { - "name": "gherkin", - "version": "241.16902", - "rules": [ - { - "id": "GherkinScenarioToScenarioOutline", - "shortDescription": { - "text": "Scenario with Examples section" - }, - "fullDescription": { - "text": "Reports Gherkin scenarios that contain an 'Examples' section. Use the quick-fix to convert 'Scenario' to 'Scenario Outline'.", - "markdown": "Reports Gherkin scenarios that contain an `Examples` section.\n\nUse the quick-fix to convert `Scenario` to `Scenario Outline`." - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "GherkinScenarioToScenarioOutline", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical" - } - }, - "relationships": [ - { - "target": { - "id": "Cucumber", - "index": 24, - "toolComponent": { - "name": "QDPHP" - } - }, - "kinds": [ - "superset" - ] - } - ] - }, - { - "id": "CucumberTableInspection", - "shortDescription": { - "text": "Unused or missing columns in Cucumber tables" - }, - "fullDescription": { - "text": "Reports tables in 'Examples' sections in Cucumber .feature files with unused or missing columns.", - "markdown": "Reports tables in `Examples` sections in Cucumber .feature files with unused or missing columns." - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "CucumberTableInspection", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" - } - }, - "relationships": [ - { - "target": { - "id": "Cucumber", - "index": 24, - "toolComponent": { - "name": "QDPHP" - } - }, - "kinds": [ - "superset" - ] - } - ] - }, - { - "id": "GherkinBrokenTableInspection", - "shortDescription": { - "text": "Gherkin table is broken" - }, - "fullDescription": { - "text": "Reports a table if there is at least one row with the number of cells different from the number of cells in the table header.", - "markdown": "Reports a table if there is at least one row with the number of cells different from the number of cells in the table header." - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "GherkinBrokenTableInspection", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical" - } - }, - "relationships": [ - { - "target": { - "id": "Cucumber", - "index": 24, - "toolComponent": { - "name": "QDPHP" - } - }, - "kinds": [ - "superset" - ] - } - ] - }, - { - "id": "GherkinMisplacedBackground", - "shortDescription": { - "text": "Misplaced background section" - }, - "fullDescription": { - "text": "Reports 'Background' sections that are located incorrectly. The 'Background' section must be located before the 'Scenario' section.", - "markdown": "Reports `Background` sections that are located incorrectly. The `Background` section must be located before the `Scenario` section." - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "GherkinMisplacedBackground", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical" - } - }, - "relationships": [ - { - "target": { - "id": "Cucumber", - "index": 24, - "toolComponent": { - "name": "QDPHP" - } - }, - "kinds": [ - "superset" - ] - } - ] - }, - { - "id": "CucumberMissedExamples", - "shortDescription": { - "text": "Missing examples section" - }, - "fullDescription": { - "text": "Reports scenario outlines in Cucumber .feature files that do not have the 'Examples' section. Use the quick-fix to automatically create the 'Examples' section with a pre-filled table header.", - "markdown": "Reports scenario outlines in Cucumber .feature files that do not have the `Examples` section.\n\nUse the quick-fix to automatically create the `Examples` section with a pre-filled table header." - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "CucumberMissedExamples", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical" - } - }, - "relationships": [ - { - "target": { - "id": "Cucumber", - "index": 24, - "toolComponent": { - "name": "QDPHP" - } - }, - "kinds": [ - "superset" - ] - } - ] - }, - { - "id": "CucumberUndefinedStep", - "shortDescription": { - "text": "Undefined step" - }, - "fullDescription": { - "text": "Reports steps in Cucumber (or some other Gherkin) .feature files that do not have matching step definitions. Use the quick-fix to automatically create a new step definition.", - "markdown": "Reports steps in Cucumber (or some other Gherkin) .feature files that do not have matching step definitions.\n\nUse the quick-fix to automatically create a new step definition." - }, - "defaultConfiguration": { - "enabled": false, - "level": "warning", - "parameters": { - "suppressToolId": "CucumberUndefinedStep", - "ideaSeverity": "WARNING", - "qodanaSeverity": "High" - } - }, - "relationships": [ - { - "target": { - "id": "Cucumber", - "index": 24, - "toolComponent": { - "name": "QDPHP" - } - }, - "kinds": [ - "superset" - ] - } - ] - }, - { - "id": "CucumberExamplesColon", - "shortDescription": { - "text": "Missing ':' after examples keyword" - }, - "fullDescription": { - "text": "Reports 'Examples' sections in Cucumber .feature files if they do not have ':' after the 'Examples' keyword.", - "markdown": "Reports `Examples` sections in Cucumber .feature files if they do not have ':' after the `Examples` keyword." - }, - "defaultConfiguration": { - "enabled": false, - "level": "error", - "parameters": { - "suppressToolId": "CucumberExamplesColon", - "ideaSeverity": "ERROR", - "qodanaSeverity": "Critical" - } - }, - "relationships": [ - { - "target": { - "id": "Cucumber", "index": 24, "toolComponent": { "name": "QDPHP" @@ -36065,7 +36065,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36098,7 +36098,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36131,7 +36131,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36164,7 +36164,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36230,7 +36230,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36263,7 +36263,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36296,7 +36296,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36329,7 +36329,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36362,7 +36362,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36395,7 +36395,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -36428,7 +36428,7 @@ { "target": { "id": "HTTP Client", - "index": 50, + "index": 51, "toolComponent": { "name": "QDPHP" } @@ -38003,7 +38003,7 @@ { "target": { "id": "PHP/Undefined symbols", - "index": 35, + "index": 36, "toolComponent": { "name": "QDPHP" } @@ -38482,9 +38482,9 @@ }, "invocations": [ { - "startTimeUtc": "2024-05-17T09:43:49.206044148Z", + "startTimeUtc": "2024-05-17T09:20:35.046647408Z", "exitCode": 255, - "exitCodeDescription": "Failure condition triggered:\n- Detected 4 problems across all severities, fail threshold: 0", + "exitCodeDescription": "Failure condition triggered:\n- Detected 36 problems across all severities, fail threshold: 0", "executionSuccessful": true } ], @@ -38492,74 +38492,17 @@ "versionControlProvenance": [ { "repositoryUri": "https://github.com/pimcore/studio-backend-bundle.git", - "revisionId": "a48608c5a7346ada328cb83dc72cf244085b4516", - "branch": "versions-introduce-events", + "revisionId": "76bbe2cd00f5140de01ae95c4d9acf6fcf77459f", + "branch": "156-dependencies", "properties": { "repoUrl": "https://github.com/pimcore/studio-backend-bundle.git", - "lastAuthorName": "lukmzig", + "lastAuthorName": "mattamon", "vcsType": "Git", - "lastAuthorEmail": "lukas.mzigot@pimcore.com" + "lastAuthorEmail": "matthias.schuhmayer@pimcore.com" } } ], "results": [ - { - "ruleId": "EfferentObjectCouplingInspection", - "kind": "fail", - "level": "note", - "message": { - "text": "[EA] High efferent coupling (22).", - "markdown": "\\[EA\\] High efferent coupling (22)." - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "src/Asset/Controller/CustomSettingsController.php", - "uriBaseId": "SRCROOT" - }, - "region": { - "startLine": 44, - "startColumn": 13, - "charOffset": 2116, - "charLength": 24, - "snippet": { - "text": "CustomSettingsController" - }, - "sourceLanguage": "PHP" - }, - "contextRegion": { - "startLine": 42, - "startColumn": 1, - "charOffset": 2087, - "charLength": 115, - "snippet": { - "text": " * @internal\n */\nfinal class CustomSettingsController extends AbstractApiController\n{\n use ElementProviderTrait;" - }, - "sourceLanguage": "PHP" - } - }, - "logicalLocations": [ - { - "fullyQualifiedName": "project", - "kind": "module" - } - ] - } - ], - "partialFingerprints": { - "equalIndicator/v2": "7ba46194b23c4715", - "equalIndicator/v1": "c3a1fb37b40e52d1c38c4c51dc39402aa72d2557cd4c06356d0b1747ada4bf85" - }, - "baselineState": "unchanged", - "properties": { - "ideaSeverity": "WEAK WARNING", - "qodanaSeverity": "Moderate", - "tags": [ - "PHP" - ] - } - }, { "ruleId": "DuplicatedCode", "kind": "fail", @@ -38778,6 +38721,63 @@ "equalIndicator/v2": "1a48abf43e131b3c", "equalIndicator/v1": "d332e327ffffb913d03b5c1b123366ccfb39379be3645fdac1a4e16298cddeb5" }, + "baselineState": "new", + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "tags": [ + "PHP" + ] + } + }, + { + "ruleId": "EfferentObjectCouplingInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "[EA] High efferent coupling (25).", + "markdown": "\\[EA\\] High efferent coupling (25)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/Dependency/Controller/CollectionController.php", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 47, + "startColumn": 13, + "charOffset": 2485, + "charLength": 20, + "snippet": { + "text": "CollectionController" + }, + "sourceLanguage": "PHP" + }, + "contextRegion": { + "startLine": 45, + "startColumn": 1, + "charOffset": 2456, + "charLength": 113, + "snippet": { + "text": " * @internal\n */\nfinal class CollectionController extends AbstractApiController\n{\n use PaginatedResponseTrait;" + }, + "sourceLanguage": "PHP" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "576763bd4bcb2c7c", + "equalIndicator/v1": "2697ac122041ac59d9eddfc3209cd27515ff25f85a22b32964cada2b16c80ede" + }, "baselineState": "unchanged", "properties": { "ideaSeverity": "WEAK WARNING", @@ -38835,7 +38835,7 @@ "equalIndicator/v2": "af124e8aa2be2d8b", "equalIndicator/v1": "31c95f4bfa8bf741b071ffed051cc58534a0d8fa41131ab271c2271332f08bcd" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -38849,33 +38849,33 @@ "kind": "fail", "level": "note", "message": { - "text": "[EA] High efferent coupling (30).", - "markdown": "\\[EA\\] High efferent coupling (30)." + "text": "[EA] High efferent coupling (22).", + "markdown": "\\[EA\\] High efferent coupling (22)." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/DataObject/Controller/CollectionController.php", + "uri": "src/Property/Controller/UpdateController.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 50, + "startLine": 44, "startColumn": 13, - "charOffset": 3025, - "charLength": 20, + "charOffset": 2077, + "charLength": 16, "snippet": { - "text": "CollectionController" + "text": "UpdateController" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 48, + "startLine": 42, "startColumn": 1, - "charOffset": 2958, - "charLength": 151, + "charOffset": 2048, + "charLength": 110, "snippet": { - "text": "use Symfony\\Component\\Serializer\\SerializerInterface;\n\nfinal class CollectionController extends AbstractApiController\n{\n use PaginatedResponseTrait;" + "text": " * @internal\n */\nfinal class UpdateController extends AbstractApiController\n{\n public function __construct(" }, "sourceLanguage": "PHP" } @@ -38889,10 +38889,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "2628b827dadbc43e", - "equalIndicator/v1": "4eff5b6887106f38106f3d5e26c162bd2a02157f1c71659dc533c9ec4a13c41c" + "equalIndicator/v2": "cc30109889285c34", + "equalIndicator/v1": "341f72b7a05cc112d36ecbeb0620f8e1323e502c1a8e0d94186d9a2f29accb0f" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -38913,13 +38913,13 @@ { "physicalLocation": { "artifactLocation": { - "uri": "src/Asset/Controller/CollectionController.php", + "uri": "src/DataObject/Controller/CollectionController.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 53, + "startLine": 50, "startColumn": 13, - "charOffset": 2996, + "charOffset": 3025, "charLength": 20, "snippet": { "text": "CollectionController" @@ -38927,12 +38927,12 @@ "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 51, + "startLine": 48, "startColumn": 1, - "charOffset": 2967, - "charLength": 113, + "charOffset": 2958, + "charLength": 151, "snippet": { - "text": " * @internal\n */\nfinal class CollectionController extends AbstractApiController\n{\n use PaginatedResponseTrait;" + "text": "use Symfony\\Component\\Serializer\\SerializerInterface;\n\nfinal class CollectionController extends AbstractApiController\n{\n use PaginatedResponseTrait;" }, "sourceLanguage": "PHP" } @@ -38946,10 +38946,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "4fb327c4151fd0ef", - "equalIndicator/v1": "5c00a4f43cabb4c6181f0353ac0fcab81fe0f6be307800d7899ad041c4d5a7a5" + "equalIndicator/v2": "2628b827dadbc43e", + "equalIndicator/v1": "4eff5b6887106f38106f3d5e26c162bd2a02157f1c71659dc533c9ec4a13c41c" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -38959,37 +38959,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "EfferentObjectCouplingInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] High efferent coupling (20).", + "markdown": "\\[EA\\] High efferent coupling (20)." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Asset/Schema/Asset.php", + "uri": "src/Version/Controller/CleanupController.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 52, - "startColumn": 11, - "charOffset": 1762, - "charLength": 75, + "startLine": 42, + "startColumn": 13, + "charOffset": 2021, + "charLength": 17, "snippet": { - "text": "Property(description: 'Workflow permissions', type: 'bool', example: false)" + "text": "CleanupController" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 50, + "startLine": 40, "startColumn": 1, - "charOffset": 1699, - "charLength": 291, + "charOffset": 1992, + "charLength": 111, "snippet": { - "text": " )]\n private readonly array $metaData,\n #[Property(description: 'Workflow permissions', type: 'bool', example: false)]\n private readonly bool $hasWorkflowWithPermissions,\n #[Property(description: 'Full path', type: 'string', example: '/path/to/asset.jpg')]" + "text": " * @internal\n */\nfinal class CleanupController extends AbstractApiController\n{\n public function __construct(" }, "sourceLanguage": "PHP" } @@ -39003,10 +39003,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "c8e54b4ae449ef08", - "equalIndicator/v1": "08a9dc4e9b115719de1aeaed732b08c3844bfa0d83ec7ce65f3d70a6998a7355" + "equalIndicator/v2": "ef77395305986867", + "equalIndicator/v1": "56fa5cb989107bf6a2500e4f7e4590ecd2a76c4b9c3266968efd6977f85df779" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39016,37 +39016,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "EfferentObjectCouplingInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] High efferent coupling (30).", + "markdown": "\\[EA\\] High efferent coupling (30)." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Response/Element.php", + "uri": "src/Asset/Controller/CollectionController.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 48, - "startColumn": 11, - "charOffset": 1882, - "charLength": 33, + "startLine": 53, + "startColumn": 13, + "charOffset": 2996, + "charLength": 20, "snippet": { - "text": "Property(ref: Permissions::class)" + "text": "CollectionController" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 46, + "startLine": 51, "startColumn": 1, - "charOffset": 1732, - "charLength": 242, + "charOffset": 2967, + "charLength": 113, "snippet": { - "text": " #[Property(description: 'Modification date', type: 'integer', example: 327417600)]\n private readonly ?int $modificationDate,\n #[Property(ref: Permissions::class)]\n private readonly Permissions $permissions\n ) {" + "text": " * @internal\n */\nfinal class CollectionController extends AbstractApiController\n{\n use PaginatedResponseTrait;" }, "sourceLanguage": "PHP" } @@ -39060,10 +39060,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "14ab2cf63d196a8d", - "equalIndicator/v1": "1519aa442e4b7420e0c7976d0355262e40ecff315029ceb0f77558914cdc8c7e" + "equalIndicator/v2": "4fb327c4151fd0ef", + "equalIndicator/v1": "5c00a4f43cabb4c6181f0353ac0fcab81fe0f6be307800d7899ad041c4d5a7a5" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39073,37 +39073,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "EfferentObjectCouplingInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] High efferent coupling (20).", + "markdown": "\\[EA\\] High efferent coupling (20)." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Asset/Schema/Asset.php", + "uri": "src/Property/Controller/Element/CollectionController.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 39, - "startColumn": 11, - "charOffset": 1142, - "charLength": 63, + "startLine": 40, + "startColumn": 13, + "charOffset": 1869, + "charLength": 20, "snippet": { - "text": "Property(description: 'Type', type: 'string', example: 'image')" + "text": "CollectionController" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 37, + "startLine": 38, "startColumn": 1, - "charOffset": 1009, - "charLength": 318, + "charOffset": 1840, + "charLength": 114, "snippet": { - "text": " #[Property(description: 'Has children', type: 'bool', example: false)]\n private readonly bool $hasChildren,\n #[Property(description: 'Type', type: 'string', example: 'image')]\n private readonly string $type,\n #[Property(description: 'Filename', type: 'string', example: 'cool.jpg')]" + "text": " * @internal\n */\nfinal class CollectionController extends AbstractApiController\n{\n public function __construct(" }, "sourceLanguage": "PHP" } @@ -39117,10 +39117,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "669bc6ac0069bd19", - "equalIndicator/v1": "43a80b488985c32dafac3a484c67f89e44977e35238a60da91129ee894458006" + "equalIndicator/v2": "f1f19cd3c9b7872f", + "equalIndicator/v1": "660d5ca670ab0fd528593863c3c5e76b1e99d5b8dd9e7b0ee4de4bfe5db68e6e" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39130,37 +39130,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "EfferentObjectCouplingInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] High efferent coupling (21).", + "markdown": "\\[EA\\] High efferent coupling (21)." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Response/Element.php", + "uri": "src/Property/Controller/CollectionController.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 46, - "startColumn": 11, - "charOffset": 1742, - "charLength": 79, + "startLine": 44, + "startColumn": 13, + "charOffset": 2160, + "charLength": 20, "snippet": { - "text": "Property(description: 'Modification date', type: 'integer', example: 327417600)" + "text": "CollectionController" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 44, + "startLine": 42, "startColumn": 1, - "charOffset": 1600, - "charLength": 316, + "charOffset": 2131, + "charLength": 113, "snippet": { - "text": " #[Property(description: 'Creation date', type: 'integer', example: 221846400)]\n private readonly ?int $creationDate,\n #[Property(description: 'Modification date', type: 'integer', example: 327417600)]\n private readonly ?int $modificationDate,\n #[Property(ref: Permissions::class)]" + "text": " * @internal\n */\nfinal class CollectionController extends AbstractApiController\n{\n use PaginatedResponseTrait;" }, "sourceLanguage": "PHP" } @@ -39174,10 +39174,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "7bcbe5e0ca1111b0", - "equalIndicator/v1": "56ec89239bdfba357459724f1bb84609cec99734a3a9fbc3a0a1cce71f74f674" + "equalIndicator/v2": "a1162108b11fced8", + "equalIndicator/v1": "686a6533fb7f3eb66b60047a900ff083c4787bd4bd4b32ace419a622a369936d" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39187,37 +39187,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "EfferentObjectCouplingInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] High efferent coupling (24).", + "markdown": "\\[EA\\] High efferent coupling (24)." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Request/CollectionParameters.php", + "uri": "src/Version/Controller/CollectionController.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 33, - "startColumn": 11, - "charOffset": 905, - "charLength": 8, + "startLine": 46, + "startColumn": 13, + "charOffset": 2370, + "charLength": 20, "snippet": { - "text": "Positive" + "text": "CollectionController" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 31, + "startLine": 44, "startColumn": 1, - "charOffset": 844, - "charLength": 114, + "charOffset": 2341, + "charLength": 113, "snippet": { - "text": " private int $page = 1,\n #[NotBlank]\n #[Positive]\n private int $pageSize = 10,\n ) {" + "text": " * @internal\n */\nfinal class CollectionController extends AbstractApiController\n{\n use PaginatedResponseTrait;" }, "sourceLanguage": "PHP" } @@ -39231,10 +39231,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "77d6ecc501de5c0c", - "equalIndicator/v1": "64afe4fba632fd3636d6943e45b1124b60c35b33bcbcbb3be68e9ad0e99134a3" + "equalIndicator/v2": "92b68947b9449ee1", + "equalIndicator/v1": "83f4848e12782b2d396312d0d5597edc0a820ff23ebf26d04fa71f2c2699290d" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39244,37 +39244,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "EfferentObjectCouplingInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] High efferent coupling (23).", + "markdown": "\\[EA\\] High efferent coupling (23)." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Request/CollectionParameters.php", + "uri": "src/Property/Controller/Element/UpdateController.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 32, - "startColumn": 11, - "charOffset": 885, - "charLength": 8, + "startLine": 43, + "startColumn": 13, + "charOffset": 2107, + "charLength": 16, "snippet": { - "text": "NotBlank" + "text": "UpdateController" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 30, + "startLine": 41, "startColumn": 1, - "charOffset": 824, - "charLength": 126, + "charOffset": 2078, + "charLength": 110, "snippet": { - "text": " #[Positive]\n private int $page = 1,\n #[NotBlank]\n #[Positive]\n private int $pageSize = 10," + "text": " * @internal\n */\nfinal class UpdateController extends AbstractApiController\n{\n public function __construct(" }, "sourceLanguage": "PHP" } @@ -39288,10 +39288,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "ccd5d96bc68b7e1a", - "equalIndicator/v1": "70cb41f7fe78e21c7d9dc60728b83fd4fe5e2d7eece4ba89f9a57f4d07018b1c" + "equalIndicator/v2": "45874f215741c0d2", + "equalIndicator/v1": "91ceea34e0aca77ee9e75d42d1674c9203a8a95adedb9a1117b879f8f845df42" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39301,37 +39301,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "EfferentObjectCouplingInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] High efferent coupling (22).", + "markdown": "\\[EA\\] High efferent coupling (22)." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Asset/Schema/Asset.php", + "uri": "src/Asset/Controller/CustomSettingsController.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 45, - "startColumn": 11, - "charOffset": 1509, - "charLength": 199, + "startLine": 44, + "startColumn": 13, + "charOffset": 2116, + "charLength": 24, "snippet": { - "text": "Property(\n description: 'Metadata',\n type: 'array',\n items: new Items(type: 'string', example: 'meta_data_example'),\n example: 'pimcore_icon_pdf'\n )" + "text": "CustomSettingsController" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 43, + "startLine": 42, "startColumn": 1, - "charOffset": 1371, - "charLength": 467, + "charOffset": 2087, + "charLength": 115, "snippet": { - "text": " #[Property(description: 'Mimetype', type: 'string', example: 'image/jpeg')]\n private readonly ?string $mimeType,\n #[Property(\n description: 'Metadata',\n type: 'array',\n items: new Items(type: 'string', example: 'meta_data_example'),\n example: 'pimcore_icon_pdf'\n )]\n private readonly array $metaData,\n #[Property(description: 'Workflow permissions', type: 'bool', example: false)]" + "text": " * @internal\n */\nfinal class CustomSettingsController extends AbstractApiController\n{\n use ElementProviderTrait;" }, "sourceLanguage": "PHP" } @@ -39345,10 +39345,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "b4c6aa1929d1bf97", - "equalIndicator/v1": "7e7fad67b721599df9b4a59f1faf5ae55576773c810fe1f0b11211a03ffdc9fb" + "equalIndicator/v2": "7ba46194b23c4715", + "equalIndicator/v1": "c3a1fb37b40e52d1c38c4c51dc39402aa72d2557cd4c06356d0b1747ada4bf85" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39358,37 +39358,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "LongInheritanceChainInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] Class has 4 parent classes, consider using appropriate design patterns.", + "markdown": "\\[EA\\] Class has 4 parent classes, consider using appropriate design patterns." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Response/Element.php", + "uri": "src/Dependency/Attributes/Parameters/Query/DependencyModeParameter.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 34, - "startColumn": 11, - "charOffset": 983, - "charLength": 74, + "startLine": 25, + "startColumn": 13, + "charOffset": 755, + "charLength": 23, "snippet": { - "text": "Property(description: 'path', type: 'string', example: '/path/to/element')" + "text": "DependencyModeParameter" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 32, + "startLine": 23, "startColumn": 1, - "charOffset": 855, - "charLength": 319, + "charOffset": 703, + "charLength": 133, "snippet": { - "text": " #[Property(description: 'ID of parent', type: 'integer', example: 1)]\n private readonly int $parentId,\n #[Property(description: 'path', type: 'string', example: '/path/to/element')]\n private readonly string $path,\n #[Property(description: 'ID of owner', type: 'integer', example: 1)]" + "text": "\n#[Attribute(Attribute::TARGET_METHOD)]\nfinal class DependencyModeParameter extends QueryParameter\n{\n public function __construct(" }, "sourceLanguage": "PHP" } @@ -39402,10 +39402,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "dd3f5ea7a9dff674", - "equalIndicator/v1": "8126ddc2ba426ea7c6af291056e76b92f38870ecf0967860a9a3bb0fa7933858" + "equalIndicator/v2": "f9fdd280a426dd86", + "equalIndicator/v1": "58343a1402a6002f342abc2ad8066c0acb9b6d8a123b3cfbf36d4a4a627ba2c5" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39415,37 +39415,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "LongInheritanceChainInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] Class has 3 parent classes, consider using appropriate design patterns.", + "markdown": "\\[EA\\] Class has 3 parent classes, consider using appropriate design patterns." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Asset/Schema/Asset.php", + "uri": "src/Property/Attributes/Request/PredefinedPropertyRequestBody.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 54, - "startColumn": 11, - "charOffset": 1908, - "charLength": 81, + "startLine": 25, + "startColumn": 13, + "charOffset": 753, + "charLength": 29, "snippet": { - "text": "Property(description: 'Full path', type: 'string', example: '/path/to/asset.jpg')" + "text": "PredefinedPropertyRequestBody" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 52, + "startLine": 23, "startColumn": 1, - "charOffset": 1752, - "charLength": 298, + "charOffset": 701, + "charLength": 137, "snippet": { - "text": " #[Property(description: 'Workflow permissions', type: 'bool', example: false)]\n private readonly bool $hasWorkflowWithPermissions,\n #[Property(description: 'Full path', type: 'string', example: '/path/to/asset.jpg')]\n private readonly string $fullPath,\n int $id," + "text": "\n#[Attribute(Attribute::TARGET_METHOD)]\nfinal class PredefinedPropertyRequestBody extends RequestBody\n{\n public function __construct()" }, "sourceLanguage": "PHP" } @@ -39459,10 +39459,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "0b4f2b468ad5fa55", - "equalIndicator/v1": "8589169c7dc68ddd3a3ff4ca9c715b43f668e1a9f3d177dae4138d9370b0e4a8" + "equalIndicator/v2": "0f6c1858595af6ed", + "equalIndicator/v1": "9a2e03681f116de615f949dba300e280938521cbee12263ad61337d3fc735818" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39472,37 +39472,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "LongInheritanceChainInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] Class has 4 parent classes, consider using appropriate design patterns.", + "markdown": "\\[EA\\] Class has 4 parent classes, consider using appropriate design patterns." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Response/Element.php", + "uri": "src/Dependency/Attributes/Response/Property/DependencyCollection.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 44, - "startColumn": 11, - "charOffset": 1610, - "charLength": 75, + "startLine": 27, + "startColumn": 13, + "charOffset": 742, + "charLength": 20, "snippet": { - "text": "Property(description: 'Creation date', type: 'integer', example: 221846400)" + "text": "DependencyCollection" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 42, + "startLine": 25, "startColumn": 1, - "charOffset": 1480, - "charLength": 342, + "charOffset": 713, + "charLength": 102, "snippet": { - "text": " #[Property(description: 'Is locked', type: 'boolean', example: false)]\n private readonly bool $isLocked,\n #[Property(description: 'Creation date', type: 'integer', example: 221846400)]\n private readonly ?int $creationDate,\n #[Property(description: 'Modification date', type: 'integer', example: 327417600)]" + "text": " * @internal\n */\nfinal class DependencyCollection extends Property\n{\n public function __construct()" }, "sourceLanguage": "PHP" } @@ -39516,10 +39516,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "80bfcd5e195caddf", - "equalIndicator/v1": "a202732b45abe1c94d18ae6ea5f71ddbbfd1fb71649fbfcec1ec249f16766178" + "equalIndicator/v2": "74c1f86ba7becaa1", + "equalIndicator/v1": "eb8afedc856125616bbe9e28a3944af903e27992059858edebf5f19cf42dac85" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39529,37 +39529,37 @@ } }, { - "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "ruleId": "LongInheritanceChainInspection", "kind": "fail", "level": "note", "message": { - "text": "Attribute can be added to overriding parameter", - "markdown": "Attribute can be added to overriding parameter" + "text": "[EA] Class has 3 parent classes, consider using appropriate design patterns.", + "markdown": "\\[EA\\] Class has 3 parent classes, consider using appropriate design patterns." }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Response/Element.php", + "uri": "src/Property/Attributes/Request/ElementPropertyRequestBody.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 42, - "startColumn": 11, - "charOffset": 1490, - "charLength": 67, + "startLine": 25, + "startColumn": 13, + "charOffset": 791, + "charLength": 26, "snippet": { - "text": "Property(description: 'Is locked', type: 'boolean', example: false)" + "text": "ElementPropertyRequestBody" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 40, + "startLine": 23, "startColumn": 1, - "charOffset": 1360, - "charLength": 326, + "charOffset": 739, + "charLength": 134, "snippet": { - "text": " #[Property(description: 'Locked', type: 'string', example: 'locked')]\n private readonly ?string $locked,\n #[Property(description: 'Is locked', type: 'boolean', example: false)]\n private readonly bool $isLocked,\n #[Property(description: 'Creation date', type: 'integer', example: 221846400)]" + "text": "\n#[Attribute(Attribute::TARGET_METHOD)]\nfinal class ElementPropertyRequestBody extends RequestBody\n{\n public function __construct()" }, "sourceLanguage": "PHP" } @@ -39573,10 +39573,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "2fec47e9fbf8e257", - "equalIndicator/v1": "b8d74bf3622ae06c9cab86005a1ab064dc1fea4c53635f2556e00d81b9cddd88" + "equalIndicator/v2": "952cdaedba577771", + "equalIndicator/v1": "efa881f809aa9b51baa0f9649613db3e73246ba0a4f74904195d8a6c6a1dfe48" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39597,26 +39597,26 @@ { "physicalLocation": { "artifactLocation": { - "uri": "src/Request/CollectionParameters.php", + "uri": "src/Asset/Schema/Asset.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 30, + "startLine": 52, "startColumn": 11, - "charOffset": 834, - "charLength": 8, + "charOffset": 1762, + "charLength": 75, "snippet": { - "text": "Positive" + "text": "Property(description: 'Workflow permissions', type: 'bool', example: false)" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 28, + "startLine": 50, "startColumn": 1, - "charOffset": 771, - "charLength": 123, + "charOffset": 1699, + "charLength": 291, "snippet": { - "text": " public function __construct(\n #[NotBlank]\n #[Positive]\n private int $page = 1,\n #[NotBlank]" + "text": " )]\n private readonly array $metaData,\n #[Property(description: 'Workflow permissions', type: 'bool', example: false)]\n private readonly bool $hasWorkflowWithPermissions,\n #[Property(description: 'Full path', type: 'string', example: '/path/to/asset.jpg')]" }, "sourceLanguage": "PHP" } @@ -39630,10 +39630,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "63721e6ae2ff09e4", - "equalIndicator/v1": "cc182978cf2b938bd3cf51d25b8852bdcaefc64d83197c7c517a569e1bed1d79" + "equalIndicator/v2": "c8e54b4ae449ef08", + "equalIndicator/v1": "08a9dc4e9b115719de1aeaed732b08c3844bfa0d83ec7ce65f3d70a6998a7355" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39658,22 +39658,22 @@ "uriBaseId": "SRCROOT" }, "region": { - "startLine": 36, + "startLine": 48, "startColumn": 11, - "charOffset": 1108, - "charLength": 65, + "charOffset": 1882, + "charLength": 33, "snippet": { - "text": "Property(description: 'ID of owner', type: 'integer', example: 1)" + "text": "Property(ref: Permissions::class)" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 34, + "startLine": 46, "startColumn": 1, - "charOffset": 973, - "charLength": 338, + "charOffset": 1732, + "charLength": 242, "snippet": { - "text": " #[Property(description: 'path', type: 'string', example: '/path/to/element')]\n private readonly string $path,\n #[Property(description: 'ID of owner', type: 'integer', example: 1)]\n private readonly int $userOwner,\n #[Property(description: 'User that modified the element', type: 'integer', example: 1)]" + "text": " #[Property(description: 'Modification date', type: 'integer', example: 327417600)]\n private readonly ?int $modificationDate,\n #[Property(ref: Permissions::class)]\n private readonly Permissions $permissions\n ) {" }, "sourceLanguage": "PHP" } @@ -39687,10 +39687,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "9c7851323aec72ad", - "equalIndicator/v1": "d23051cfd5b754ac82c3b6a0393e6667205ad4a75d4f5eefbeab50b23606d799" + "equalIndicator/v2": "14ab2cf63d196a8d", + "equalIndicator/v1": "1519aa442e4b7420e0c7976d0355262e40ecff315029ceb0f77558914cdc8c7e" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39711,26 +39711,26 @@ { "physicalLocation": { "artifactLocation": { - "uri": "src/Asset/Schema/Asset.php", + "uri": "src/Version/Schema/AssetVersion.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 43, + "startLine": 32, "startColumn": 11, - "charOffset": 1381, - "charLength": 72, + "charOffset": 738, + "charLength": 78, "snippet": { - "text": "Property(description: 'Mimetype', type: 'string', example: 'image/jpeg')" + "text": "Property(description: 'file name', type: 'string', example: 'myImageFile.png')" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 41, + "startLine": 30, "startColumn": 1, - "charOffset": 1246, - "charLength": 272, + "charOffset": 693, + "charLength": 264, "snippet": { - "text": " #[Property(description: 'Filename', type: 'string', example: 'cool.jpg')]\n private readonly string $filename,\n #[Property(description: 'Mimetype', type: 'string', example: 'image/jpeg')]\n private readonly ?string $mimeType,\n #[Property(" + "text": "{\n public function __construct(\n #[Property(description: 'file name', type: 'string', example: 'myImageFile.png')]\n private string $fileName,\n #[Property(description: 'temporary file', type: 'string', example: 'path/to/temporary/file.png')]" }, "sourceLanguage": "PHP" } @@ -39744,10 +39744,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "01e6b1622c1ac541", - "equalIndicator/v1": "e1278b582ec78526441db2e368254195614e887186a2c3c98383915ca5fa35fe" + "equalIndicator/v2": "84178e08c07824ca", + "equalIndicator/v1": "40378ee9c96fbd740fa85b6951c8a29bdf4466e8f7534633fd0f233505230f64" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39772,22 +39772,22 @@ "uriBaseId": "SRCROOT" }, "region": { - "startLine": 41, + "startLine": 39, "startColumn": 11, - "charOffset": 1256, - "charLength": 70, + "charOffset": 1142, + "charLength": 63, "snippet": { - "text": "Property(description: 'Filename', type: 'string', example: 'cool.jpg')" + "text": "Property(description: 'Type', type: 'string', example: 'image')" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 39, + "startLine": 37, "startColumn": 1, - "charOffset": 1132, - "charLength": 322, + "charOffset": 1009, + "charLength": 318, "snippet": { - "text": " #[Property(description: 'Type', type: 'string', example: 'image')]\n private readonly string $type,\n #[Property(description: 'Filename', type: 'string', example: 'cool.jpg')]\n private readonly string $filename,\n #[Property(description: 'Mimetype', type: 'string', example: 'image/jpeg')]" + "text": " #[Property(description: 'Has children', type: 'bool', example: false)]\n private readonly bool $hasChildren,\n #[Property(description: 'Type', type: 'string', example: 'image')]\n private readonly string $type,\n #[Property(description: 'Filename', type: 'string', example: 'cool.jpg')]" }, "sourceLanguage": "PHP" } @@ -39801,10 +39801,124 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "4265bd53264b2b0c", - "equalIndicator/v1": "e6cc6503ffca3f6dd7dce4f92789ac1a3e122d9a7ab44c799f8b7aebf6f514e1" + "equalIndicator/v2": "669bc6ac0069bd19", + "equalIndicator/v1": "43a80b488985c32dafac3a484c67f89e44977e35238a60da91129ee894458006" }, - "baselineState": "unchanged", + "baselineState": "new", + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "tags": [ + "PHP" + ] + } + }, + { + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/Version/Schema/AssetVersion.php", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 34, + "startColumn": 11, + "charOffset": 862, + "charLength": 94, + "snippet": { + "text": "Property(description: 'temporary file', type: 'string', example: 'path/to/temporary/file.png')" + }, + "sourceLanguage": "PHP" + }, + "contextRegion": { + "startLine": 32, + "startColumn": 1, + "charOffset": 728, + "charLength": 277, + "snippet": { + "text": " #[Property(description: 'file name', type: 'string', example: 'myImageFile.png')]\n private string $fileName,\n #[Property(description: 'temporary file', type: 'string', example: 'path/to/temporary/file.png')]\n private ?string $temporaryFile,\n ) {" + }, + "sourceLanguage": "PHP" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "402d16b5748c1803", + "equalIndicator/v1": "4d0f4b8b25bda5952fb05a5f1ae26ef53b28dc776cb6c9b419e6ea833fdcdf52" + }, + "baselineState": "new", + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "tags": [ + "PHP" + ] + } + }, + { + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/Response/Element.php", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 46, + "startColumn": 11, + "charOffset": 1742, + "charLength": 79, + "snippet": { + "text": "Property(description: 'Modification date', type: 'integer', example: 327417600)" + }, + "sourceLanguage": "PHP" + }, + "contextRegion": { + "startLine": 44, + "startColumn": 1, + "charOffset": 1600, + "charLength": 316, + "snippet": { + "text": " #[Property(description: 'Creation date', type: 'integer', example: 221846400)]\n private readonly ?int $creationDate,\n #[Property(description: 'Modification date', type: 'integer', example: 327417600)]\n private readonly ?int $modificationDate,\n #[Property(ref: Permissions::class)]" + }, + "sourceLanguage": "PHP" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "7bcbe5e0ca1111b0", + "equalIndicator/v1": "56ec89239bdfba357459724f1bb84609cec99734a3a9fbc3a0a1cce71f74f674" + }, + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39829,22 +39943,22 @@ "uriBaseId": "SRCROOT" }, "region": { - "startLine": 29, + "startLine": 33, "startColumn": 11, - "charOffset": 814, + "charOffset": 905, "charLength": 8, "snippet": { - "text": "NotBlank" + "text": "Positive" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 27, + "startLine": 31, "startColumn": 1, - "charOffset": 769, - "charLength": 105, + "charOffset": 844, + "charLength": 114, "snippet": { - "text": "{\n public function __construct(\n #[NotBlank]\n #[Positive]\n private int $page = 1," + "text": " private int $page = 1,\n #[NotBlank]\n #[Positive]\n private int $pageSize = 10,\n ) {" }, "sourceLanguage": "PHP" } @@ -39858,10 +39972,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "b924270e17c10f07", - "equalIndicator/v1": "f2c0dc13e7e15ff2d40ef3f389848e6f1605257cc3a55e118392df3632ecdabf" + "equalIndicator/v2": "77d6ecc501de5c0c", + "equalIndicator/v1": "64afe4fba632fd3636d6943e45b1124b60c35b33bcbcbb3be68e9ad0e99134a3" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39882,26 +39996,26 @@ { "physicalLocation": { "artifactLocation": { - "uri": "src/Response/Element.php", + "uri": "src/Request/CollectionParameters.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 40, + "startLine": 32, "startColumn": 11, - "charOffset": 1370, - "charLength": 66, + "charOffset": 885, + "charLength": 8, "snippet": { - "text": "Property(description: 'Locked', type: 'string', example: 'locked')" + "text": "NotBlank" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 38, + "startLine": 30, "startColumn": 1, - "charOffset": 1216, - "charLength": 342, + "charOffset": 824, + "charLength": 126, "snippet": { - "text": " #[Property(description: 'User that modified the element', type: 'integer', example: 1)]\n private readonly int $userModification,\n #[Property(description: 'Locked', type: 'string', example: 'locked')]\n private readonly ?string $locked,\n #[Property(description: 'Is locked', type: 'boolean', example: false)]" + "text": " #[Positive]\n private int $page = 1,\n #[NotBlank]\n #[Positive]\n private int $pageSize = 10," }, "sourceLanguage": "PHP" } @@ -39915,10 +40029,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "54e2faa7120fdfad", - "equalIndicator/v1": "faa3722f6b90434e54f632922c9803f6e391e29984d1a9464086c270b3a0ed41" + "equalIndicator/v2": "ccd5d96bc68b7e1a", + "equalIndicator/v1": "70cb41f7fe78e21c7d9dc60728b83fd4fe5e2d7eece4ba89f9a57f4d07018b1c" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39939,26 +40053,26 @@ { "physicalLocation": { "artifactLocation": { - "uri": "src/Response/Element.php", + "uri": "src/Asset/Schema/Asset.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 38, + "startLine": 45, "startColumn": 11, - "charOffset": 1226, - "charLength": 84, + "charOffset": 1509, + "charLength": 199, "snippet": { - "text": "Property(description: 'User that modified the element', type: 'integer', example: 1)" + "text": "Property(\n description: 'Metadata',\n type: 'array',\n items: new Items(type: 'string', example: 'meta_data_example'),\n example: 'pimcore_icon_pdf'\n )" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 36, + "startLine": 43, "startColumn": 1, - "charOffset": 1098, - "charLength": 339, + "charOffset": 1371, + "charLength": 467, "snippet": { - "text": " #[Property(description: 'ID of owner', type: 'integer', example: 1)]\n private readonly int $userOwner,\n #[Property(description: 'User that modified the element', type: 'integer', example: 1)]\n private readonly int $userModification,\n #[Property(description: 'Locked', type: 'string', example: 'locked')]" + "text": " #[Property(description: 'Mimetype', type: 'string', example: 'image/jpeg')]\n private readonly ?string $mimeType,\n #[Property(\n description: 'Metadata',\n type: 'array',\n items: new Items(type: 'string', example: 'meta_data_example'),\n example: 'pimcore_icon_pdf'\n )]\n private readonly array $metaData,\n #[Property(description: 'Workflow permissions', type: 'bool', example: false)]" }, "sourceLanguage": "PHP" } @@ -39972,10 +40086,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "0d648721bc039127", - "equalIndicator/v1": "fe6fc561100aa403c25a9624309cc14e7f1cc862740c652d71d7cc91df967beb" + "equalIndicator/v2": "b4c6aa1929d1bf97", + "equalIndicator/v1": "7e7fad67b721599df9b4a59f1faf5ae55576773c810fe1f0b11211a03ffdc9fb" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -39985,37 +40099,37 @@ } }, { - "ruleId": "EfferentObjectCouplingInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] High efferent coupling (21).", - "markdown": "\\[EA\\] High efferent coupling (21)." + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Property/Controller/CollectionController.php", + "uri": "src/Response/Element.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 44, - "startColumn": 13, - "charOffset": 2160, - "charLength": 20, + "startLine": 34, + "startColumn": 11, + "charOffset": 983, + "charLength": 74, "snippet": { - "text": "CollectionController" + "text": "Property(description: 'path', type: 'string', example: '/path/to/element')" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 42, + "startLine": 32, "startColumn": 1, - "charOffset": 2131, - "charLength": 113, + "charOffset": 855, + "charLength": 319, "snippet": { - "text": " * @internal\n */\nfinal class CollectionController extends AbstractApiController\n{\n use PaginatedResponseTrait;" + "text": " #[Property(description: 'ID of parent', type: 'integer', example: 1)]\n private readonly int $parentId,\n #[Property(description: 'path', type: 'string', example: '/path/to/element')]\n private readonly string $path,\n #[Property(description: 'ID of owner', type: 'integer', example: 1)]" }, "sourceLanguage": "PHP" } @@ -40029,10 +40143,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "a1162108b11fced8", - "equalIndicator/v1": "686a6533fb7f3eb66b60047a900ff083c4787bd4bd4b32ace419a622a369936d" + "equalIndicator/v2": "dd3f5ea7a9dff674", + "equalIndicator/v1": "8126ddc2ba426ea7c6af291056e76b92f38870ecf0967860a9a3bb0fa7933858" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -40042,37 +40156,37 @@ } }, { - "ruleId": "PhpUnusedPrivateMethodInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "Unused private method 'getLatestVersionForUser'", - "markdown": "Unused private method 'getLatestVersionForUser'" + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Util/Traits/ElementProviderTrait.php", + "uri": "src/Asset/Schema/Asset.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 51, - "startColumn": 22, - "charOffset": 1450, - "charLength": 23, + "startLine": 54, + "startColumn": 11, + "charOffset": 1908, + "charLength": 81, "snippet": { - "text": "getLatestVersionForUser" + "text": "Property(description: 'Full path', type: 'string', example: '/path/to/asset.jpg')" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 49, + "startLine": 52, "startColumn": 1, - "charOffset": 1422, - "charLength": 135, + "charOffset": 1752, + "charLength": 298, "snippet": { - "text": " }\n\n private function getLatestVersionForUser(\n Asset|Document\\PageSnippet|Concrete $element,\n ?UserInterface $user" + "text": " #[Property(description: 'Workflow permissions', type: 'bool', example: false)]\n private readonly bool $hasWorkflowWithPermissions,\n #[Property(description: 'Full path', type: 'string', example: '/path/to/asset.jpg')]\n private readonly string $fullPath,\n int $id," }, "sourceLanguage": "PHP" } @@ -40086,10 +40200,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "bfd52ccc33bdf9f8", - "equalIndicator/v1": "295728d99e3a5dcb0efd0d158f8b5f684869670bb2bddd29968e10e6e47ffe22" + "equalIndicator/v2": "0b4f2b468ad5fa55", + "equalIndicator/v1": "8589169c7dc68ddd3a3ff4ca9c715b43f668e1a9f3d177dae4138d9370b0e4a8" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -40099,37 +40213,37 @@ } }, { - "ruleId": "EfferentObjectCouplingInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] High efferent coupling (22).", - "markdown": "\\[EA\\] High efferent coupling (22)." + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Property/Controller/UpdateController.php", + "uri": "src/Response/Element.php", "uriBaseId": "SRCROOT" }, "region": { "startLine": 44, - "startColumn": 13, - "charOffset": 2077, - "charLength": 16, + "startColumn": 11, + "charOffset": 1610, + "charLength": 75, "snippet": { - "text": "UpdateController" + "text": "Property(description: 'Creation date', type: 'integer', example: 221846400)" }, "sourceLanguage": "PHP" }, "contextRegion": { "startLine": 42, "startColumn": 1, - "charOffset": 2048, - "charLength": 110, + "charOffset": 1480, + "charLength": 342, "snippet": { - "text": " * @internal\n */\nfinal class UpdateController extends AbstractApiController\n{\n public function __construct(" + "text": " #[Property(description: 'Is locked', type: 'boolean', example: false)]\n private readonly bool $isLocked,\n #[Property(description: 'Creation date', type: 'integer', example: 221846400)]\n private readonly ?int $creationDate,\n #[Property(description: 'Modification date', type: 'integer', example: 327417600)]" }, "sourceLanguage": "PHP" } @@ -40143,10 +40257,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "cc30109889285c34", - "equalIndicator/v1": "341f72b7a05cc112d36ecbeb0620f8e1323e502c1a8e0d94186d9a2f29accb0f" + "equalIndicator/v2": "80bfcd5e195caddf", + "equalIndicator/v1": "a202732b45abe1c94d18ae6ea5f71ddbbfd1fb71649fbfcec1ec249f16766178" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -40156,37 +40270,94 @@ } }, { - "ruleId": "EfferentObjectCouplingInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] High efferent coupling (20).", - "markdown": "\\[EA\\] High efferent coupling (20)." + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Property/Controller/Element/CollectionController.php", + "uri": "src/Response/Element.php", "uriBaseId": "SRCROOT" }, "region": { + "startLine": 42, + "startColumn": 11, + "charOffset": 1490, + "charLength": 67, + "snippet": { + "text": "Property(description: 'Is locked', type: 'boolean', example: false)" + }, + "sourceLanguage": "PHP" + }, + "contextRegion": { "startLine": 40, - "startColumn": 13, - "charOffset": 1869, - "charLength": 20, + "startColumn": 1, + "charOffset": 1360, + "charLength": 326, "snippet": { - "text": "CollectionController" + "text": " #[Property(description: 'Locked', type: 'string', example: 'locked')]\n private readonly ?string $locked,\n #[Property(description: 'Is locked', type: 'boolean', example: false)]\n private readonly bool $isLocked,\n #[Property(description: 'Creation date', type: 'integer', example: 221846400)]" + }, + "sourceLanguage": "PHP" + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v2": "2fec47e9fbf8e257", + "equalIndicator/v1": "b8d74bf3622ae06c9cab86005a1ab064dc1fea4c53635f2556e00d81b9cddd88" + }, + "baselineState": "new", + "properties": { + "ideaSeverity": "WEAK WARNING", + "qodanaSeverity": "Moderate", + "tags": [ + "PHP" + ] + } + }, + { + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", + "kind": "fail", + "level": "note", + "message": { + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/Request/CollectionParameters.php", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 30, + "startColumn": 11, + "charOffset": 834, + "charLength": 8, + "snippet": { + "text": "Positive" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 38, + "startLine": 28, "startColumn": 1, - "charOffset": 1840, - "charLength": 114, + "charOffset": 771, + "charLength": 123, "snippet": { - "text": " * @internal\n */\nfinal class CollectionController extends AbstractApiController\n{\n public function __construct(" + "text": " public function __construct(\n #[NotBlank]\n #[Positive]\n private int $page = 1,\n #[NotBlank]" }, "sourceLanguage": "PHP" } @@ -40200,10 +40371,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "f1f19cd3c9b7872f", - "equalIndicator/v1": "660d5ca670ab0fd528593863c3c5e76b1e99d5b8dd9e7b0ee4de4bfe5db68e6e" + "equalIndicator/v2": "63721e6ae2ff09e4", + "equalIndicator/v1": "cc182978cf2b938bd3cf51d25b8852bdcaefc64d83197c7c517a569e1bed1d79" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -40213,37 +40384,37 @@ } }, { - "ruleId": "EfferentObjectCouplingInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] High efferent coupling (23).", - "markdown": "\\[EA\\] High efferent coupling (23)." + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Property/Controller/Element/UpdateController.php", + "uri": "src/Response/Element.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 43, - "startColumn": 13, - "charOffset": 2107, - "charLength": 16, + "startLine": 36, + "startColumn": 11, + "charOffset": 1108, + "charLength": 65, "snippet": { - "text": "UpdateController" + "text": "Property(description: 'ID of owner', type: 'integer', example: 1)" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 41, + "startLine": 34, "startColumn": 1, - "charOffset": 2078, - "charLength": 110, + "charOffset": 973, + "charLength": 338, "snippet": { - "text": " * @internal\n */\nfinal class UpdateController extends AbstractApiController\n{\n public function __construct(" + "text": " #[Property(description: 'path', type: 'string', example: '/path/to/element')]\n private readonly string $path,\n #[Property(description: 'ID of owner', type: 'integer', example: 1)]\n private readonly int $userOwner,\n #[Property(description: 'User that modified the element', type: 'integer', example: 1)]" }, "sourceLanguage": "PHP" } @@ -40257,10 +40428,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "45874f215741c0d2", - "equalIndicator/v1": "91ceea34e0aca77ee9e75d42d1674c9203a8a95adedb9a1117b879f8f845df42" + "equalIndicator/v2": "9c7851323aec72ad", + "equalIndicator/v1": "d23051cfd5b754ac82c3b6a0393e6667205ad4a75d4f5eefbeab50b23606d799" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -40270,37 +40441,37 @@ } }, { - "ruleId": "LongInheritanceChainInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] Class has 3 parent classes, consider using appropriate design patterns.", - "markdown": "\\[EA\\] Class has 3 parent classes, consider using appropriate design patterns." + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Property/Attributes/Request/PredefinedPropertyRequestBody.php", + "uri": "src/Asset/Schema/Asset.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 25, - "startColumn": 13, - "charOffset": 753, - "charLength": 29, + "startLine": 43, + "startColumn": 11, + "charOffset": 1381, + "charLength": 72, "snippet": { - "text": "PredefinedPropertyRequestBody" + "text": "Property(description: 'Mimetype', type: 'string', example: 'image/jpeg')" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 23, + "startLine": 41, "startColumn": 1, - "charOffset": 701, - "charLength": 137, + "charOffset": 1246, + "charLength": 272, "snippet": { - "text": "\n#[Attribute(Attribute::TARGET_METHOD)]\nfinal class PredefinedPropertyRequestBody extends RequestBody\n{\n public function __construct()" + "text": " #[Property(description: 'Filename', type: 'string', example: 'cool.jpg')]\n private readonly string $filename,\n #[Property(description: 'Mimetype', type: 'string', example: 'image/jpeg')]\n private readonly ?string $mimeType,\n #[Property(" }, "sourceLanguage": "PHP" } @@ -40314,10 +40485,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "0f6c1858595af6ed", - "equalIndicator/v1": "9a2e03681f116de615f949dba300e280938521cbee12263ad61337d3fc735818" + "equalIndicator/v2": "01e6b1622c1ac541", + "equalIndicator/v1": "e1278b582ec78526441db2e368254195614e887186a2c3c98383915ca5fa35fe" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -40327,37 +40498,37 @@ } }, { - "ruleId": "LongInheritanceChainInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] Class has 3 parent classes, consider using appropriate design patterns.", - "markdown": "\\[EA\\] Class has 3 parent classes, consider using appropriate design patterns." + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Property/Attributes/Request/ElementPropertyRequestBody.php", + "uri": "src/Asset/Schema/Asset.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 25, - "startColumn": 13, - "charOffset": 791, - "charLength": 26, + "startLine": 41, + "startColumn": 11, + "charOffset": 1256, + "charLength": 70, "snippet": { - "text": "ElementPropertyRequestBody" + "text": "Property(description: 'Filename', type: 'string', example: 'cool.jpg')" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 23, + "startLine": 39, "startColumn": 1, - "charOffset": 739, - "charLength": 134, + "charOffset": 1132, + "charLength": 322, "snippet": { - "text": "\n#[Attribute(Attribute::TARGET_METHOD)]\nfinal class ElementPropertyRequestBody extends RequestBody\n{\n public function __construct()" + "text": " #[Property(description: 'Type', type: 'string', example: 'image')]\n private readonly string $type,\n #[Property(description: 'Filename', type: 'string', example: 'cool.jpg')]\n private readonly string $filename,\n #[Property(description: 'Mimetype', type: 'string', example: 'image/jpeg')]" }, "sourceLanguage": "PHP" } @@ -40371,10 +40542,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "952cdaedba577771", - "equalIndicator/v1": "efa881f809aa9b51baa0f9649613db3e73246ba0a4f74904195d8a6c6a1dfe48" + "equalIndicator/v2": "4265bd53264b2b0c", + "equalIndicator/v1": "e6cc6503ffca3f6dd7dce4f92789ac1a3e122d9a7ab44c799f8b7aebf6f514e1" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -40384,37 +40555,37 @@ } }, { - "ruleId": "EfferentObjectCouplingInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] High efferent coupling (20).", - "markdown": "\\[EA\\] High efferent coupling (20)." + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Version/Controller/CleanupController.php", + "uri": "src/Request/CollectionParameters.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 42, - "startColumn": 13, - "charOffset": 2039, - "charLength": 17, + "startLine": 29, + "startColumn": 11, + "charOffset": 814, + "charLength": 8, "snippet": { - "text": "CleanupController" + "text": "NotBlank" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 40, + "startLine": 27, "startColumn": 1, - "charOffset": 2010, - "charLength": 111, + "charOffset": 769, + "charLength": 105, "snippet": { - "text": " * @internal\n */\nfinal class CleanupController extends AbstractApiController\n{\n public function __construct(" + "text": "{\n public function __construct(\n #[NotBlank]\n #[Positive]\n private int $page = 1," }, "sourceLanguage": "PHP" } @@ -40428,10 +40599,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "6ab5b12e2de87683", - "equalIndicator/v1": "a859ed8e532942d2f92cd885d0faf3d59be83b977e550aaa13f9dc5cea9e295c" + "equalIndicator/v2": "b924270e17c10f07", + "equalIndicator/v1": "f2c0dc13e7e15ff2d40ef3f389848e6f1605257cc3a55e118392df3632ecdabf" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -40441,37 +40612,37 @@ } }, { - "ruleId": "EfferentObjectCouplingInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] High efferent coupling (24).", - "markdown": "\\[EA\\] High efferent coupling (24)." + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Version/Controller/CollectionController.php", + "uri": "src/Response/Element.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 46, - "startColumn": 13, - "charOffset": 2369, - "charLength": 20, + "startLine": 40, + "startColumn": 11, + "charOffset": 1370, + "charLength": 66, "snippet": { - "text": "CollectionController" + "text": "Property(description: 'Locked', type: 'string', example: 'locked')" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 44, + "startLine": 38, "startColumn": 1, - "charOffset": 2340, - "charLength": 113, + "charOffset": 1216, + "charLength": 342, "snippet": { - "text": " * @internal\n */\nfinal class CollectionController extends AbstractApiController\n{\n use PaginatedResponseTrait;" + "text": " #[Property(description: 'User that modified the element', type: 'integer', example: 1)]\n private readonly int $userModification,\n #[Property(description: 'Locked', type: 'string', example: 'locked')]\n private readonly ?string $locked,\n #[Property(description: 'Is locked', type: 'boolean', example: false)]" }, "sourceLanguage": "PHP" } @@ -40485,10 +40656,10 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "3126bc33a7a07b9a", - "equalIndicator/v1": "c2ee398bed6b0ba43bec5a57d5552240869e13ecc687ecdf4d70fadf0a1190da" + "equalIndicator/v2": "54e2faa7120fdfad", + "equalIndicator/v1": "faa3722f6b90434e54f632922c9803f6e391e29984d1a9464086c270b3a0ed41" }, - "baselineState": "unchanged", + "baselineState": "new", "properties": { "ideaSeverity": "WEAK WARNING", "qodanaSeverity": "Moderate", @@ -40498,37 +40669,37 @@ } }, { - "ruleId": "LongInheritanceChainInspection", + "ruleId": "PhpAttributeCanBeAddedToOverriddenMemberInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] Class has 4 parent classes, consider using appropriate design patterns.", - "markdown": "\\[EA\\] Class has 4 parent classes, consider using appropriate design patterns." + "text": "Attribute can be added to overriding parameter", + "markdown": "Attribute can be added to overriding parameter" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Version/Attributes/Response/Property/VersionCollection.php", + "uri": "src/Response/Element.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 26, - "startColumn": 13, - "charOffset": 702, - "charLength": 17, + "startLine": 38, + "startColumn": 11, + "charOffset": 1226, + "charLength": 84, "snippet": { - "text": "VersionCollection" + "text": "Property(description: 'User that modified the element', type: 'integer', example: 1)" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 24, + "startLine": 36, "startColumn": 1, - "charOffset": 673, - "charLength": 99, + "charOffset": 1098, + "charLength": 339, "snippet": { - "text": " * @internal\n */\nfinal class VersionCollection extends Property\n{\n public function __construct()" + "text": " #[Property(description: 'ID of owner', type: 'integer', example: 1)]\n private readonly int $userOwner,\n #[Property(description: 'User that modified the element', type: 'integer', example: 1)]\n private readonly int $userModification,\n #[Property(description: 'Locked', type: 'string', example: 'locked')]" }, "sourceLanguage": "PHP" } @@ -40542,8 +40713,8 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "1ce363398dcdcc34", - "equalIndicator/v1": "521ef8ee86099e2b8852f1ec3be1d35d3d84c999162f9b15ed71ec2068949826" + "equalIndicator/v2": "0d648721bc039127", + "equalIndicator/v1": "fe6fc561100aa403c25a9624309cc14e7f1cc862740c652d71d7cc91df967beb" }, "baselineState": "new", "properties": { @@ -40555,37 +40726,37 @@ } }, { - "ruleId": "LongInheritanceChainInspection", + "ruleId": "PhpUnusedPrivateMethodInspection", "kind": "fail", "level": "note", "message": { - "text": "[EA] Class has 4 parent classes, consider using appropriate design patterns.", - "markdown": "\\[EA\\] Class has 4 parent classes, consider using appropriate design patterns." + "text": "Unused private method 'getLatestVersionForUser'", + "markdown": "Unused private method 'getLatestVersionForUser'" }, "locations": [ { "physicalLocation": { "artifactLocation": { - "uri": "src/Version/Attributes/Response/Content/OneOfVersionJson.php", + "uri": "src/Util/Traits/ElementProviderTrait.php", "uriBaseId": "SRCROOT" }, "region": { - "startLine": 26, - "startColumn": 13, - "charOffset": 699, - "charLength": 16, + "startLine": 51, + "startColumn": 22, + "charOffset": 1450, + "charLength": 23, "snippet": { - "text": "OneOfVersionJson" + "text": "getLatestVersionForUser" }, "sourceLanguage": "PHP" }, "contextRegion": { - "startLine": 24, + "startLine": 49, "startColumn": 1, - "charOffset": 670, - "charLength": 101, + "charOffset": 1422, + "charLength": 135, "snippet": { - "text": " * @internal\n */\nfinal class OneOfVersionJson extends JsonContent\n{\n public function __construct()" + "text": " }\n\n private function getLatestVersionForUser(\n Asset|Document\\PageSnippet|Concrete $element,\n ?UserInterface $user" }, "sourceLanguage": "PHP" } @@ -40599,8 +40770,8 @@ } ], "partialFingerprints": { - "equalIndicator/v2": "81f512c456998868", - "equalIndicator/v1": "6d516097629e8876b8d8315132728391f14eae9088e6b759e7dc1b148829f5bf" + "equalIndicator/v2": "bfd52ccc33bdf9f8", + "equalIndicator/v1": "295728d99e3a5dcb0efd0d158f8b5f684869670bb2bddd29968e10e6e47ffe22" }, "baselineState": "new", "properties": { @@ -40614,9 +40785,9 @@ ], "automationDetails": { "id": "project/qodana/2024-05-17", - "guid": "3caddc6b-360f-411a-bc1f-97ee3f683b44", + "guid": "cddb935a-e8fa-4119-872b-9d693e2a2a6c", "properties": { - "jobUrl": "https://github.com/pimcore/studio-backend-bundle/actions/runs/9126213061" + "jobUrl": "https://github.com/pimcore/studio-backend-bundle/actions/runs/9125922627" } }, "newlineSequences": [ @@ -40632,8 +40803,8 @@ "configProfile": "path", "deviceId": "200820300000000-7c33-767c-9695-477d79c87e1c", "qodanaNewResultSummary": { - "moderate": 4, - "total": 4 + "moderate": 36, + "total": 36 } } } diff --git a/src/Dependency/Attributes/Parameters/Query/DependencyModeParameter.php b/src/Dependency/Attributes/Parameters/Query/DependencyModeParameter.php new file mode 100644 index 000000000..20055dd9c --- /dev/null +++ b/src/Dependency/Attributes/Parameters/Query/DependencyModeParameter.php @@ -0,0 +1,41 @@ +value + ), + ); + } +} diff --git a/src/Dependency/Attributes/Response/Property/DependencyCollection.php b/src/Dependency/Attributes/Response/Property/DependencyCollection.php new file mode 100644 index 000000000..fa7606031 --- /dev/null +++ b/src/Dependency/Attributes/Response/Property/DependencyCollection.php @@ -0,0 +1,42 @@ +name] + )] + #[PageParameter] + #[PageSizeParameter] + #[IdParameter('ID of the element', 'element')] + #[DependencyModeParameter] + #[ElementTypeParameter] + #[SuccessResponse( + description: 'Paginated dependencies with total count as header param', + content: new CollectionJson(new DependencyCollection()) + )] + #[NotFoundResponse] + #[UnauthorizedResponse] + #[BadRequestResponse] + #[MethodNotAllowedResponse] + #[UnprocessableContentResponse] + public function getDependencies(#[MapQueryString] DependencyParameters $parameters): JsonResponse + { + $collection = $this->hydratorService->getDependencies( + $parameters, + $this->securityService->getCurrentUser() + ); + + return $this->getPaginatedCollection( + $this->serializer, + $collection->getItems(), + $collection->getTotalItems(), + ); + } +} diff --git a/src/Dependency/Event/DependencyEvent.php b/src/Dependency/Event/DependencyEvent.php new file mode 100644 index 000000000..848efc217 --- /dev/null +++ b/src/Dependency/Event/DependencyEvent.php @@ -0,0 +1,40 @@ +dependency; + } +} diff --git a/src/Dependency/Hydrator/DependencyHydrator.php b/src/Dependency/Hydrator/DependencyHydrator.php new file mode 100644 index 000000000..c650969ee --- /dev/null +++ b/src/Dependency/Hydrator/DependencyHydrator.php @@ -0,0 +1,68 @@ +extractData($elementType, $elementId); + + return new Dependency( + $data['id'], + $data['path'], + $data['type'], + $data['subtype'], + $data['published'] + ); + } + + private function extractData(string $elementType, int $elementId): array + { + $element = $this->getElement($this->serviceResolver, $elementType, $elementId); + + return [ + 'id' => $element->getId(), + 'type' => $this->serviceResolver->getElementType($element), + 'subtype' => $element->getType(), + 'published' => $this->serviceResolver->isPublished($element), + 'path' => $element->getRealFullPath(), + ]; + } +} \ No newline at end of file diff --git a/src/Dependency/Hydrator/DependencyHydratorInterface.php b/src/Dependency/Hydrator/DependencyHydratorInterface.php new file mode 100644 index 000000000..b0f8de761 --- /dev/null +++ b/src/Dependency/Hydrator/DependencyHydratorInterface.php @@ -0,0 +1,27 @@ +getElement( + $this->serviceResolver, + $elementType, + $elementId + ) + ->getDependencies() + ->getRequires(); + } + + public function listRequiresDependenciesTotalCount(string $elementType, int $elementId): int + { + return + $this->getElement( + $this->serviceResolver, + $elementType, + $elementId + ) + ->getDependencies() + ->getRequiresTotalCount(); + } + + public function listRequiredByDependencies(string $elementType, int $elementId): array + { + return $this->getElement( + $this->serviceResolver, + $elementType, + $elementId + ) + ->getDependencies() + ->getRequiredBy(); + } + + public function listRequiredByDependenciesTotalCount(string $elementType, int $elementId): int + { + return + $this->getElement( + $this->serviceResolver, + $elementType, + $elementId + ) + ->getDependencies() + ->getRequiredByTotalCount(); + } +} \ No newline at end of file diff --git a/src/Dependency/Repository/DependencyRepositoryInterface.php b/src/Dependency/Repository/DependencyRepositoryInterface.php new file mode 100644 index 000000000..7c07c527c --- /dev/null +++ b/src/Dependency/Repository/DependencyRepositoryInterface.php @@ -0,0 +1,31 @@ +mode = $this->getDependencyMode($dependencyMode); + parent::__construct($page, $pageSize); + } + + public function getMode(): DependencyMode + { + return $this->mode; + } + + public function getElementId(): int + { + return $this->elementId; + } + + public function getElementType(): string + { + if ($this->elementType === ElementTypes::TYPE_DATA_OBJECT) { + return ElementTypes::TYPE_OBJECT; + } + + return $this->elementType; + } + + private function getDependencyMode(string $mode): DependencyMode { + $dependencyMode = DependencyMode::tryFrom($mode); + + if(!$dependencyMode) { + throw new InvalidDependencyMode('Invalid dependency mode: ' . $mode); + } + + return $dependencyMode; + } + +} diff --git a/src/Dependency/Response/Collection.php b/src/Dependency/Response/Collection.php new file mode 100644 index 000000000..c9921aa12 --- /dev/null +++ b/src/Dependency/Response/Collection.php @@ -0,0 +1,60 @@ +totalItems; + } + + /** + * @return array + */ + public function getItems(): array + { + return $this->items; + } + + public function getCurrentPage(): int + { + return $this->currentPage; + } + + public function getPageSize(): int + { + return $this->pageSize; + } +} diff --git a/src/Dependency/Schema/Dependency.php b/src/Dependency/Schema/Dependency.php new file mode 100644 index 000000000..19defab67 --- /dev/null +++ b/src/Dependency/Schema/Dependency.php @@ -0,0 +1,70 @@ +id; + } + + public function getPath(): string + { + return $this->path; + } + + public function getType(): string + { + return $this->type; + } + + public function getSubType(): string + { + return $this->subType; + } + + public function isPublished(): bool + { + return $this->published; + } +} \ No newline at end of file diff --git a/src/Dependency/Service/DependencyMode.php b/src/Dependency/Service/DependencyMode.php new file mode 100644 index 000000000..548db2516 --- /dev/null +++ b/src/Dependency/Service/DependencyMode.php @@ -0,0 +1,13 @@ +getMode()) { + DependencyMode::REQUIRES => $this->getRequiredDependencies($parameters), + DependencyMode::REQUIRED_BY => $this->getRequiredByDependencies($parameters), + }; + } + + private function getDependencyCollection(array $dependencies): array + { + $hydratedDependencies = []; + + foreach($dependencies as $dependency) { + $dependency = $this->dependencyHydrator->hydrate($dependency); + if($dependency) { + $this->eventDispatcher->dispatch( + new DependencyEvent($dependency), + DependencyEvent::EVENT_NAME + ); + $hydratedDependencies[] = $dependency; + } + } + + return $hydratedDependencies; + } + + private function getRequiredDependencies( + DependencyParameters $parameters + ): Collection { + + $dependencies = $this->dependencyRepository->listRequiresDependencies( + $parameters->getElementType(), + $parameters->getElementId() + ); + + $dependencies = $this->getDependencyCollection($dependencies); + + return new Collection( + $dependencies, + $parameters->getPage(), + $parameters->getPageSize(), + $this->dependencyRepository->listRequiresDependenciesTotalCount( + $parameters->getElementType(), + $parameters->getElementId() + ) + ); + } + + private function getRequiredByDependencies( + DependencyParameters $parameters + ): Collection { + $dependencies = $this->dependencyRepository->listRequiredByDependencies( + $parameters->getElementType(), + $parameters->getElementId() + ); + + $dependencies = $this->getDependencyCollection($dependencies); + + return new Collection( + $dependencies, + $parameters->getPage(), + $parameters->getPageSize(), + $this->dependencyRepository->listRequiredByDependenciesTotalCount( + $parameters->getElementType(), + $parameters->getElementId() + ) + ); + } +} \ No newline at end of file diff --git a/src/Dependency/Service/DependencyServiceInterface.php b/src/Dependency/Service/DependencyServiceInterface.php new file mode 100644 index 000000000..b0f9a1ea5 --- /dev/null +++ b/src/Dependency/Service/DependencyServiceInterface.php @@ -0,0 +1,29 @@ +load('data_index.yaml'); $loader->load('data_index_filters.yaml'); $loader->load('data_objects.yaml'); + $loader->load('dependencies.yaml'); $loader->load('event_subscribers.yaml'); $loader->load('factories.yaml'); $loader->load('filters.yaml'); diff --git a/src/Dto/Dependency.php b/src/Dto/Dependency.php deleted file mode 100644 index 840b73539..000000000 --- a/src/Dto/Dependency.php +++ /dev/null @@ -1,69 +0,0 @@ -dependency->getSourceId(); - } - - public function getRequires(int $offset = null, int $limit = null): array - { - return $this->dependency->getRequires($offset, $limit); - } - - public function getFilterRequiresByPath(int $offset = null, int $limit = null, string $value = null): array - { - return $this->dependency->getFilterRequiresByPath($offset, $limit, $value); - } - - public function getFilterRequiredByPath(int $offset = null, int $limit = null, string $value = null): array - { - return $this->dependency->getFilterRequiredByPath($offset, $limit, $value); - } - - public function getRequiredBy(int $offset = null, int $limit = null): array - { - return $this->dependency->getRequiredBy($offset, $limit); - } - - public function getSourceType(): string - { - return $this->dependency->getSourceType(); - } - - public function getRequiresTotalCount(): int - { - return $this->dependency->getRequiresTotalCount(); - } - - public function getRequiredByTotalCount(): int - { - return $this->dependency->getRequiredByTotalCount(); - } - - public function isRequired(): bool - { - return $this->dependency->isRequired(); - } -} diff --git a/src/Exception/InvalidDependencyMode.php b/src/Exception/InvalidDependencyMode.php new file mode 100644 index 000000000..255caef6d --- /dev/null +++ b/src/Exception/InvalidDependencyMode.php @@ -0,0 +1,28 @@ +name, description: 'DataObject operations to get/update/create/delete data objects' )] +#[Tag( + name: Tags::Dependencies->name, + description: 'Get dependencies for a single element.' +)] #[Tag( name: Tags::Properties->name, description: 'Property operations to get/update/create/delete properties' @@ -54,6 +58,7 @@ enum Tags: string case Assets = 'Assets'; case Authorization = 'Authorization'; case DataObjects = 'DataObjects'; + case Dependencies = 'Dependencies'; case Properties = 'Properties'; case PropertiesForElement = 'Properties for Element'; case Translation = 'Translation'; diff --git a/src/Property/Event/PredefinedPropertyEvent.php b/src/Property/Event/PredefinedPropertyEvent.php index 2a5d4a9d9..54a5e9b10 100644 --- a/src/Property/Event/PredefinedPropertyEvent.php +++ b/src/Property/Event/PredefinedPropertyEvent.php @@ -22,6 +22,7 @@ final class PredefinedPropertyEvent extends AbstractPreResponseEvent { public const EVENT_NAME = 'pre_response.predefined_property'; + public function __construct( private readonly PredefinedProperty $predefinedProperty ) diff --git a/tests/Unit/Dependency/DependencyHydratorTest.php b/tests/Unit/Dependency/DependencyHydratorTest.php new file mode 100644 index 000000000..d8f37cbf6 --- /dev/null +++ b/tests/Unit/Dependency/DependencyHydratorTest.php @@ -0,0 +1,76 @@ +getHydrator(); + + $dependency = $hydrator->hydrate(['id' => 1, 'type' => 'document']); + + $this->assertSame(1, $dependency->getId()); + $this->assertSame('/testtest', $dependency->getPath()); + $this->assertSame('document', $dependency->getType()); + $this->assertSame('page', $dependency->getSubType()); + $this->assertTrue($dependency->isPublished()); + $this->assertEmpty($dependency->getAdditionalAttributes()); + } + + /** + * @throws Exception + */ + private function getHydrator(): DependencyHydratorInterface + { + return new DependencyHydrator($this->mockServiceResolver()); + } + + /** + * @throws Exception + */ + private function mockServiceResolver(): ServiceResolverInterface + { + return $this->makeEmpty(ServiceResolverInterface::class, + [ + 'getElementById' => $this->getDocument(), + 'getElementType' => 'document', + 'isPublished' => true, + ]); + } + + private function getDocument(): Document + { + $document = new Document(); + $document->setPath('/test'); + $document->setId(1); + $document->setType('page'); + $document->setKey('test'); + + return $document; + } +}