From 1bd89ac238d6a718744daec62d8a546a02eb2b19 Mon Sep 17 00:00:00 2001
From: Sergio Vera <svera@adobe.com>
Date: Tue, 26 Oct 2021 10:56:28 +0200
Subject: [PATCH 01/11] AC-1549: Create codes for each type of returned error /
 warning

---
 Magento2/Sniffs/Legacy/AbstractBlockSniff.php |  12 +-
 Magento2/Sniffs/Legacy/DiConfigSniff.php      |  10 +-
 Magento2/Sniffs/Legacy/EmailTemplateSniff.php |   7 +-
 .../Sniffs/Legacy/InstallUpgradeSniff.php     |  21 ++-
 Magento2/Sniffs/Legacy/LayoutSniff.php        |   7 +-
 .../Legacy/ObsoleteConfigNodesSniff.php       | 177 ++++++++++++++----
 .../Sniffs/Legacy/ObsoleteConnectionSniff.php |  20 +-
 .../Sniffs/Legacy/ObsoleteResponseSniff.php   |  20 +-
 Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php |  17 +-
 .../Sniffs/Legacy/RestrictedCodeSniff.php     |   3 +-
 Magento2/Sniffs/Legacy/WidgetXMLSniff.php     |   7 +-
 .../Legacy/_files/restricted_classes.php      |   5 +
 .../NamingConvention/ReservedWordsSniff.php   |  42 ++++-
 13 files changed, 267 insertions(+), 81 deletions(-)

diff --git a/Magento2/Sniffs/Legacy/AbstractBlockSniff.php b/Magento2/Sniffs/Legacy/AbstractBlockSniff.php
index de9884d2..705db1b0 100644
--- a/Magento2/Sniffs/Legacy/AbstractBlockSniff.php
+++ b/Magento2/Sniffs/Legacy/AbstractBlockSniff.php
@@ -15,12 +15,8 @@ class AbstractBlockSniff implements Sniff
     private const CHILD_HTML_METHOD = 'getChildHtml';
     private const CHILD_CHILD_HTML_METHOD = 'getChildChildHtml';
 
-    /**
-     * Error violation code.
-     *
-     * @var string
-     */
-    protected $errorCode = 'FoundCountOfParametersIncorrect';
+    private const ERROR_CODE_THIRD_PARAMETER = 'ThirdParameterNotNeeded';
+    private const ERROR_CODE_FOURTH_PARAMETER = 'FourthParameterNotNeeded';
 
     /**
      * @inheritdoc
@@ -52,14 +48,14 @@ public function process(File $phpcsFile, $stackPtr)
             $phpcsFile->addError(
                 '3rd parameter is not needed anymore for getChildHtml()',
                 $stackPtr,
-                $this->errorCode
+                self::ERROR_CODE_THIRD_PARAMETER
             );
         }
         if ($content === self::CHILD_CHILD_HTML_METHOD && $paramsCount >= 4) {
             $phpcsFile->addError(
                 '4th parameter is not needed anymore for getChildChildHtml()',
                 $stackPtr,
-                $this->errorCode
+                self::ERROR_CODE_FOURTH_PARAMETER
             );
         }
     }
diff --git a/Magento2/Sniffs/Legacy/DiConfigSniff.php b/Magento2/Sniffs/Legacy/DiConfigSniff.php
index 954c32e0..89c0025d 100644
--- a/Magento2/Sniffs/Legacy/DiConfigSniff.php
+++ b/Magento2/Sniffs/Legacy/DiConfigSniff.php
@@ -11,7 +11,13 @@
 
 class DiConfigSniff implements Sniff
 {
-    private const WARNING_CODE = 'FoundObsoleteAttribute';
+    private $obsoleteDiNodesWarningCodes = [
+        '<param' => 'FoundObsoleteParamNode',
+        '<instance' => 'FoundObsoleteInstanceNode',
+        '<array' => 'FoundObsoleteArrayNode',
+        '<item key=' => 'FoundObsoleteItemNode',
+        '<value' => 'FoundObsoleteValueNode',
+    ];
 
     /**
      * @var string[] Associative array containing the obsolete nodes and the message to display when they are found.
@@ -46,7 +52,7 @@ public function process(File $phpcsFile, $stackPtr)
                 $phpcsFile->addWarning(
                     $message,
                     $stackPtr,
-                    self::WARNING_CODE
+                    $this->obsoleteDiNodesWarningCodes[$element]
                 );
             }
         }
diff --git a/Magento2/Sniffs/Legacy/EmailTemplateSniff.php b/Magento2/Sniffs/Legacy/EmailTemplateSniff.php
index 17ebbf08..1cff51fe 100644
--- a/Magento2/Sniffs/Legacy/EmailTemplateSniff.php
+++ b/Magento2/Sniffs/Legacy/EmailTemplateSniff.php
@@ -19,7 +19,10 @@ class EmailTemplateSniff implements Sniff
         '/\{\{escapehtml.*?\}\}/i' => 'Directive {{escapehtml}} is obsolete. Use {{var}} instead.',
     ];
 
-    private const ERROR_CODE = 'FoundObsoleteEmailDirective';
+    private $errorCodes = [
+        '/\{\{htmlescape.*?\}\}/i' => 'FoundObsoleteHtmlescapeDirective',
+        '/\{\{escapehtml.*?\}\}/i' => 'FoundObsoleteEscapehtmlDirective'
+    ];
 
     /**
      * @inheritdoc
@@ -42,7 +45,7 @@ public function process(File $phpcsFile, $stackPtr)
                 $phpcsFile->addError(
                     $errorMessage,
                     $stackPtr,
-                    self::ERROR_CODE
+                    $this->errorCodes[$directiveRegex]
                 );
             }
         }
diff --git a/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php b/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
index c7df570c..aad0e56b 100644
--- a/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
+++ b/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
@@ -13,7 +13,7 @@
 
 class InstallUpgradeSniff implements Sniff
 {
-    private const ERROR_CODE = 'obsoleteScript';
+    private const ERROR_CODE = 'invalidDirectory';
 
     /**
      * @var string[]
@@ -30,13 +30,28 @@ class InstallUpgradeSniff implements Sniff
             . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
         'UpgradeSchema' => 'UpgradeSchema scripts are obsolete. '
             . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
-        'UpgradeData' => 'UpgradeSchema scripts are obsolete. '
+        'UpgradeData' => 'UpgradeData scripts are obsolete. '
             . 'Please use data patches approach in module\'s Setup/Patch/Data dir',
         'data-upgrade-' => 'Upgrade scripts are obsolete. '
             . 'Please use data patches approach in module\'s Setup/Patch/Data dir',
         'recurring' => 'Recurring scripts are obsolete. Please create class Recurring in module\'s Setup folder',
     ];
 
+    /**
+     * @var string[]
+     */
+    private $wrongPrefixesErrorCodes = [
+        'install-' => 'obsoleteInstallScript',
+        'InstallSchema' => 'obsoleteInstallSchemaScript',
+        'InstallData' => 'obsoleteInstallDataScript',
+        'data-install-' => 'obsoleteDataInstallScript',
+        'upgrade-' => 'obsoleteUpgradeScript',
+        'UpgradeSchema' => 'obsoleteUpgradeSchemaScript',
+        'UpgradeData' => 'obsoleteUpgradeDataScript',
+        'data-upgrade-' => 'obsoleteDataUpgradeScript',
+        'recurring' => 'obsoleteRecurringScript',
+    ];
+
     /**
      * @inheritdoc
      */
@@ -60,7 +75,7 @@ public function process(File $phpcsFile, $stackPtr)
 
         foreach ($this->wrongPrefixes as $prefix => $errorMessage) {
             if (strpos($fileInfo->getFilename(), $prefix) === 0) {
-                $phpcsFile->addError($errorMessage, 0, self::ERROR_CODE);
+                $phpcsFile->addError($errorMessage, 0, $this->wrongPrefixesErrorCodes[$prefix]);
             }
         }
 
diff --git a/Magento2/Sniffs/Legacy/LayoutSniff.php b/Magento2/Sniffs/Legacy/LayoutSniff.php
index 3a2c2044..78b67b21 100644
--- a/Magento2/Sniffs/Legacy/LayoutSniff.php
+++ b/Magento2/Sniffs/Legacy/LayoutSniff.php
@@ -19,8 +19,9 @@ class LayoutSniff implements Sniff
 {
     private const ERROR_CODE_XML = 'WrongXML';
     private const ERROR_CODE_NOT_ALLOWED = 'NotAllowed';
-    private const ERROR_CODE_OBSOLETE = 'Obsolete';
+    private const ERROR_CODE_OBSOLETE_BLOCK = 'ObsoleteBlock';
     private const ERROR_CODE_OBSOLETE_CLASS = 'ObsoleteClass';
+    private const ERROR_CODE_OBSOLETE_TOHTML_ATTRIBUTE = 'ObsoleteToHtmlAttribute';
     private const ERROR_CODE_METHOD_NOT_ALLOWED = 'MethodNotAllowed';
     private const ERROR_CODE_HELPER_ATTRIBUTE_CHARACTER_NOT_ALLOWED = 'CharacterNotAllowedInAttribute';
     private const ERROR_CODE_HELPER_ATTRIBUTE_CHARACTER_EXPECTED = 'CharacterExpectedInAttribute';
@@ -254,7 +255,7 @@ private function testObsoleteReferences(SimpleXMLElement $layout, File $phpcsFil
                     $phpcsFile->addError(
                         'The block being referenced is removed.',
                         dom_import_simplexml($reference)->getLineNo()-1,
-                        self::ERROR_CODE_OBSOLETE
+                        self::ERROR_CODE_OBSOLETE_BLOCK
                     );
                 }
             }
@@ -317,7 +318,7 @@ private function testOutputAttribute(SimpleXMLElement $layout, File $phpcsFile):
             $phpcsFile->addError(
                 'output="toHtml" is obsolete. Use output="1"',
                 dom_import_simplexml($elements[0])->getLineNo()-1,
-                self::ERROR_CODE_OBSOLETE
+                self::ERROR_CODE_OBSOLETE_TOHTML_ATTRIBUTE
             );
         };
     }
diff --git a/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php b/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php
index efc5fae7..9738d080 100644
--- a/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php
+++ b/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php
@@ -14,7 +14,104 @@
 class ObsoleteConfigNodesSniff implements Sniff
 {
     private const ERROR_MESSAGE_CONFIG = "Nodes identified by XPath '%s' are obsolete. %s";
-    private const ERROR_CODE_CONFIG = 'ObsoleteNodeInConfig';
+    private const ERROR_CODE_CONFIG = 'WrongXML';
+    private $obsoleteNodesErrorCodes = [
+        '/config/global/fieldsets' => 'obsoleteNodeGlobalFieldsets',
+        '/config/global/cache/betatypes' => 'obsoleteNodeBetatypes',
+        '/config/admin/fieldsets' => 'obsoleteNodeAdminFieldsets',
+        '/config/general/locale' => 'obsoleteNodeGeneralLocale',
+        '/config/global/can_use_base_url' => 'obsoleteNodeGlobalCanUseBaseURL',
+        '/config/global/locale/allow/codes' => 'obsoleteNodeAllowCodes',
+        '/config/global/locale/allow/currencies' => 'obsoleteNodeAllowCurrencies',
+        '/config/global/mime/types' => 'obsoleteNodeMimeTypes',
+        '/config/global/models/*/deprecatedNode' => 'obsoleteNodeDeprecatedNode',
+        '/config/global/models/*/entities/*/table' => 'obsoleteNodeEntitiesTable',
+        '/config/global/models/*/class' => 'obsoleteNodeModelsClass',
+        '/config/global/helpers/*/class' => 'obsoleteNodeHelpersClass',
+        '/config/global/blocks/*/class' => 'obsoleteNodeBlocksClass',
+        '/config/global/models/*/resourceModel' => 'obsoleteNodeResourceModel',
+        '/config/global/page/layouts' => 'obsoleteNodePageLayouts',
+        '/config/global/cms/layouts' => 'obsoleteNodeCmsLayouts',
+        '/config/global/payment/cc/types/*/validator' => 'obsoleteNodeTypesValidator',
+        '/config/global/payment' => 'obsoleteNodeGlobalPayment',
+        '/config/adminhtml/menu' => 'obsoleteNodeAdminhtmlMenu',
+        '/config/adminhtml/acl' => 'obsoleteNodeAdminhtmlAcl',
+        '/config/adminhtml/global_search' => 'obsoleteNodeAdminhtmlGlobalSearch',
+        '/config/*[self::global|self::adminhtml|self::frontend]/di' => 'obsoleteNodeDi',
+        '/config/*[self::global|self::adminhtml|self::frontend]/events' => 'obsoleteNodeEvents',
+        '/config/*[self::global|self::adminhtml|self::frontend]/routers' => 'obsoleteNodeRouters',
+        '/config/global/importexport' => 'obsoleteNodeGlobalImportExport',
+        '/config/global/catalog/product/type' => 'obsoleteNodeProductType',
+        '/config/global/catalog/product/options' => 'obsoleteNodeProductOptions',
+        '/config/global/catalog/product/media/image_types' => 'obsoleteNodeMediaImageTypes',
+        '/config/global/eav_attributes' => 'obsoleteNodeEavAttributes',
+        '/config/global/index' => 'obsoleteNodeGlobalIndex',
+        '/config/global/catalogrule' => 'obsoleteNodeGlobalCatalogRule',
+        '/config/global/salesrule' => 'obsoleteNodeGlobalSalesRule',
+        '/config/global/session' => 'obsoleteNodeGlobalSession',
+        '/config/global/ignore_user_agents' => 'obsoleteNodeGlobalIgnoreUserAgents',
+        '/config/global/request' => 'obsoleteNodeGlobalRequest',
+        '/config/global/secure_url' => 'obsoleteNodeGlobalSecureUrl',
+        '/config/global/dev' => 'obsoleteNodeGlobalDev',
+        '/config/global/webapi' => 'obsoleteNodeGlobalWebapi',
+        '/config/global/cms' => 'obsoleteNodeGlobalCms',
+        '/config/global/widget' => 'obsoleteNodeGlobalWidget',
+        '/config/global/catalog/product/flat/max_index_count' => 'obsoleteNodeFlatMaxIndexCount',
+        '/config/global/catalog/product/flat/attribute_groups' => 'obsoleteNodeFlatAttributeGroups',
+        '/config/global/catalog/product/flat/add_filterable_attributes' => 'obsoleteNodeFlatAddIterableAttributes',
+        '/config/global/catalog/product/flat/add_child_data' => 'obsoleteNodeFlatAddChildData',
+        '/config/global/catalog/content/template_filter' => 'obsoleteNodeContentTemplateFilter',
+        '/config/frontend/catalog/per_page_values/list' => 'obsoleteNodePerPageValuesList',
+        '/config/frontend/catalog/per_page_values/grid' => 'obsoleteNodePerPageValuesGrid',
+        '/config/global/catalog/product/design' => 'obsoleteNodeProductDesign',
+        '/config/global/catalog/product/attributes' => 'obsoleteNodeProductAttributes',
+        '/config/global/eav_frontendclasses' => 'obsoleteNodeGlobalEavFrontendClasses',
+        '/config/global/resources' => 'obsoleteNodeGlobalResources',
+        '/config/global/resource' => 'obsoleteNodeGlobalResource',
+        '/config/*/events/core_block_abstract_to_html_after' => 'obsoleteNodeEventsCoreBlockAbstract',
+        '/config/*/events/catalog_controller_product_delete' => 'obsoleteNodeEventsCatalogController',
+        '/config//observers/*/args' => 'obsoleteNodeObserversArgs',
+        '/config/default/design/theme' => 'obsoleteNodeDesignTheme',
+        '/config/global/theme' => 'obsoleteNodeGlobalTheme',
+        '/config/default/web/*/base_js_url' => 'obsoleteNodeWebBaseJsUrl',
+        '/config/default/web/*/base_skin_url' => 'obsoleteNodeWebBaseSkinUrl',
+        '/config/default/web/*/base_cache_url' => 'obsoleteNodeWebBaseCacheUrl',
+        '/config/global/cache/types/*/tags' => 'obsoleteNodeTypesTags',
+        '/config/global/disable_local_modules' => 'obsoleteNodeGlobalDisableLocalModules',
+        '/config/global/newsletter/template_filter' => 'obsoleteNodeNewsletterTemplateFilter',
+        '/config/*/layout' => 'obsoleteNodeConfigLayout',
+        '/config/frontend/product/collection/attributes' => 'obsoleteNodeProductCollectionAttributes',
+        '/config/frontend/category/collection/attributes' => 'obsoleteNodeCategoryCollectionAttributes',
+        '/config/global/sales/quote/item/product_attributes' => 'obsoleteNodeQuoteItemProductAttributes',
+        '/config/global/wishlist/item/product_attributes' => 'obsoleteNodeWishlistItemProductAttributes',
+        '/config/global/catalog/product/flat/attribute_nodes' => 'obsoleteNodeFlatAttributeNodes',
+        '/config/global/customer/address/formats' => 'obsoleteNodeCustomerAddressFormats',
+        '/config/global/pdf' => 'obsoleteNodeGlobalPdf',
+        '/config/install' => 'obsoleteNodeConfigInstall',
+        '/config/install/design' => 'obsoleteNodeConfigInstallDesign',
+        '/config/adminhtml/design' => 'obsoleteNodeConfigAdminhtmlDesign',
+        '/config/frontend/design' => 'obsoleteNodeConfigFrontendDesign',
+        '/config/crontab' => 'obsoleteNodeConfigCrontab',
+        '/config/global/areas' => 'obsoleteNodeGlobalAreas',
+        '/config/vde' => 'obsoleteNodeConfigVde',
+        '/config/global/ignoredModules' => 'obsoleteNodeGlobalIgnoredModules',
+        '/config/global/helpers' => 'obsoleteNodeGlobalHelpers',
+        '/config/global/external_cache' => 'obsoleteNodeGlobalExternalCache',
+        '/config/global/currency/import/services' => 'obsoleteNodeCurrencyImportServices',
+        '/config/global/template' => 'obsoleteNodeGlobalTemplate',
+        '/config/default/general/file/sitemap_generate_valid_paths' => 'obsoleteNodeFileSitemap',
+        '/config/dev/css/minify_adapter' => 'obsoleteNodeCssMinify',
+        '/config/dev/js/minify_adapter' => 'obsoleteNodeJsMinify',
+        '/config/global/full_page_cache' => 'obsoleteNodeGlobalFullPageCache',
+        '/config/adminhtml/enterprise/admingws' => 'obsoleteNodeEnterpriseAdmingws',
+        '/config/adminhtml/enterprise/websiterestriction' => 'obsoleteNodeEnterpriseWebsiteRestriction',
+        '/config/global/enterprise_cms' => 'obsoleteNodeGlobalEnterpriseCms',
+        '/config/global/enterprise/banner' => 'obsoleteNodeGlobalEnterpriseBanner',
+        '/config/global/enterprise/giftcardaccount' => 'obsoleteNodeGlobalEnterpriseGiftCardAccount',
+        '/config/global/skip_process_modules_updates' => 'obsoleteNodeGlobalSkipProcess',
+        '/config/system/page_cache' => 'obsoleteNodeSystemPageCache',
+        '/config/system/cms/content/versioning' => 'obsoleteNodeContentVersioning',
+    ];
 
     /**
      * @inheritdoc
@@ -63,7 +160,7 @@ public function process(File $phpcsFile, $stackPtr)
                         $suggestion
                     ),
                     dom_import_simplexml($match)->getLineNo()-1,
-                    self::ERROR_CODE_CONFIG
+                    $this->obsoleteNodesErrorCodes[$xpath]
                 );
             }
         }
@@ -95,15 +192,15 @@ private function getObsoleteNodes(): array
             '/config/global/cache/betatypes' => '',
             '/config/admin/fieldsets' => '',
             '/config/general/locale' =>
-                'This configuration moved to Di configuration of \Magento\Framework\Locale\ConfigInterface',
+                'This configuration moved to DI configuration of \Magento\Framework\Locale\ConfigInterface',
             '/config/global/can_use_base_url' =>
-                'This configuration moved to Di configuration of \Magento\Backend\App\Action\Context class',
+                'This configuration moved to DI configuration of \Magento\Backend\App\Action\Context class',
             '/config/global/locale/allow/codes' =>
-                'This configuration moved to Di configuration of \Magento\Framework\Locale\ConfigInterface',
+                'This configuration moved to DI configuration of \Magento\Framework\Locale\ConfigInterface',
             '/config/global/locale/allow/currencies' =>
-                'This configuration moved to Di configuration of \Magento\Framework\Locale\ConfigInterface',
+                'This configuration moved to DI configuration of \Magento\Framework\Locale\ConfigInterface',
             '/config/global/mime/types' =>
-                'This configuration moved to Di configuration for \Magento\Downloadable\Helper\File class',
+                'This configuration moved to DI configuration for \Magento\Downloadable\Helper\File class',
             '/config/global/models/*/deprecatedNode' => '',
             '/config/global/models/*/entities/*/table' => '',
             '/config/global/models/*/class' => '',
@@ -118,68 +215,68 @@ private function getObsoleteNodes(): array
             '/config/adminhtml/menu' => 'Move them to adminhtml.xml.',
             '/config/adminhtml/acl' => 'Move them to adminhtml.xml.',
             '/config/adminhtml/global_search' =>
-                'This configuration moved to Di configuration of \Magento\Backend\Controller\Index',
+                'This configuration moved to DI configuration of \Magento\Backend\Controller\Index',
             '/config/*[self::global|self::adminhtml|self::frontend]/di' => 'This configuration moved to di.xml file',
             '/config/*[self::global|self::adminhtml|self::frontend]/events' =>
                 'This configuration moved to events.xml file',
             '/config/*[self::global|self::adminhtml|self::frontend]/routers' =>
                 'Routes configuration moved to routes.xml file,' .
-                'routers list can be set through Di configuration of \Magento\Framework\App\RouterList model',
+                'routers list can be set through DI configuration of \Magento\Framework\App\RouterList model',
             '/config/global/importexport' => 'This configuration moved to import.xml and export.xml files',
             '/config/global/catalog/product/type' => 'This configuration moved to product_types.xml file',
             '/config/global/catalog/product/options' => 'This configuration moved to product_options.xml file',
-            '/config/global/catalog/product/media/image_types' => 'This configuration moved to Di configuration of ' .
+            '/config/global/catalog/product/media/image_types' => 'This configuration moved to DI configuration of ' .
                 '\Magento\Backend\Block\Catalog\Product\Frontend\Product\Watermark',
             '/config/global/eav_attributes' => 'This configuration moved to eav_attributes.xml file',
             '/config/global/index' => 'This configuration moved to indexers.xml file',
             '/config/global/catalogrule' =>
-                'This configuration moved to Di configuration of \Magento\CatalogRule\Model\Rule',
+                'This configuration moved to DI configuration of \Magento\CatalogRule\Model\Rule',
             '/config/global/salesrule' =>
-                'This configuration moved to Di configuration of \Magento\SalesRule\Helper\Coupon',
+                'This configuration moved to DI configuration of \Magento\SalesRule\Helper\Coupon',
             '/config/global/session' =>
-                'This configuration moved to Di configuration of \Magento\Framework\Session\Validator',
+                'This configuration moved to DI configuration of \Magento\Framework\Session\Validator',
             '/config/global/ignore_user_agents' =>
-                'This configuration moved to Di configuration of \Magento\Log\Model\Visitor',
+                'This configuration moved to DI configuration of \Magento\Log\Model\Visitor',
             '/config/global/request' =>
-                'This configuration moved to Di configuration of \Magento\Framework\App\RequestInterface',
+                'This configuration moved to DI configuration of \Magento\Framework\App\RequestInterface',
             '/config/global/secure_url' =>
-                'This configuration moved to Di configuration of \Magento\Framework\Url\SecurityInfo',
+                'This configuration moved to DI configuration of \Magento\Framework\Url\SecurityInfo',
             '/config/global/dev' =>
-                'This configuration moved to Di configuration of \Magento\Framework\App\Action\Context',
+                'This configuration moved to DI configuration of \Magento\Framework\App\Action\Context',
             '/config/global/webapi' =>
-                'This configuration moved to Di configuration of '.
+                'This configuration moved to DI configuration of '.
                 ' \Magento\Webapi\Controller\Request\Rest\Interpreter\Factory' .
                 ' and \Magento\Webapi\Controller\Response\Rest\Renderer\Factory',
             '/config/global/cms' =>
-                'This configuration moved to Di configuration of \Magento\Cms\Model\Wysiwyg\Images\Storage' .
+                'This configuration moved to DI configuration of \Magento\Cms\Model\Wysiwyg\Images\Storage' .
                 ' and \Magento\Cms\Model\Wysiwyg\Config',
             '/config/global/widget' =>
-                'This configuration moved to Di configuration of \Magento\Cms\Model\Template\FilterProvider',
+                'This configuration moved to DI configuration of \Magento\Cms\Model\Template\FilterProvider',
             '/config/global/catalog/product/flat/max_index_count' =>
-                'This configuration moved to Di configuration of '.
+                'This configuration moved to DI configuration of '.
                 '\Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer',
             '/config/global/catalog/product/flat/attribute_groups' =>
-                'This configuration moved to Di configuration of '.
+                'This configuration moved to DI configuration of '.
                 '\Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer',
             '/config/global/catalog/product/flat/add_filterable_attributes' =>
-                'This configuration moved to Di configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
+                'This configuration moved to DI configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
             '/config/global/catalog/product/flat/add_child_data' =>
-                'This configuration moved to Di configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
+                'This configuration moved to DI configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
             '/config/global/catalog/content/template_filter' =>
-                'This configuration moved to Di configuration of \Magento\Catalog\Helper\Data',
+                'This configuration moved to DI configuration of \Magento\Catalog\Helper\Data',
             '/config/frontend/catalog/per_page_values/list' =>
-                'This configuration moved to Di configuration of \Magento\Catalog\Model\Config\Source\ListPerPage',
+                'This configuration moved to DI configuration of \Magento\Catalog\Model\Config\Source\ListPerPage',
             '/config/frontend/catalog/per_page_values/grid' =>
-                'This configuration moved to Di configuration of \Magento\Catalog\Model\Config\Source\GridPerPage',
-            '/config/global/catalog/product/design' => 'This configuration moved to Di configuration of' .
+                'This configuration moved to DI configuration of \Magento\Catalog\Model\Config\Source\GridPerPage',
+            '/config/global/catalog/product/design' => 'This configuration moved to DI configuration of' .
                 ' \Magento\Catalog\Model\Entity\Product\Attribute\Design\Option\Container',
             '/config/global/catalog/product/attributes' => 'This configuration moved catalog_attributes.xml',
             '/config/global/eav_frontendclasses' => 'This configuration was removed. ' .
                 'Please pluginize \Magento\Eav\Helper\Data::getFrontendClasses to extend frontend classes list',
             '/config/global/resources' =>
-                'This configuration moved to Di configuration of \Magento\Framework\App\ResourceConnection',
+                'This configuration moved to DI configuration of \Magento\Framework\App\ResourceConnection',
             '/config/global/resource' =>
-                'This configuration moved to Di configuration of \Magento\Framework\App\ResourceConnection',
+                'This configuration moved to DI configuration of \Magento\Framework\App\ResourceConnection',
             '/config/*/events/core_block_abstract_to_html_after' =>
                 'Event has been replaced with "core_layout_render_element"',
             '/config/*/events/catalog_controller_product_delete' => '',
@@ -211,27 +308,29 @@ private function getObsoleteNodes(): array
             '/config/frontend/design' => 'Configurations moved to DI file settings',
             '/config/crontab' => 'All cron configurations moved to crontab.xml',
             '/config/global/areas' => 'Configurations moved to DI file settings',
-            '/config/vde' => 'Was moved to di',
-            '/config/global/ignoredModules' => 'Was replaced using di',
-            '/config/global/helpers' => 'Was replaced using di',
-            '/config/global/external_cache' => 'Was replaced using di',
+            '/config/vde' => 'Was moved to DI',
+            '/config/global/ignoredModules' => 'Was replaced using DI',
+            '/config/global/helpers' => 'Was replaced using DI',
+            '/config/global/external_cache' => 'Was replaced using DI',
             '/config/global/currency/import/services' => 'Configurations moved to DI file settings',
             '/config/global/template' => 'Use /config/template of email_templates.xml',
             '/config/default/general/file/sitemap_generate_valid_paths' => '/config/default/sitemap/file/valid_paths',
-            '/config/dev/css/minify_adapter' => 'Was replaced using di',
-            '/config/dev/js/minify_adapter' => 'Was replaced using di',
+            '/config/dev/css/minify_adapter' => 'Was replaced using DI',
+            '/config/dev/js/minify_adapter' => 'Was replaced using DI',
             '/config/global/full_page_cache' => '/config/global/cache_advanced/full_page',
             '/config/adminhtml/enterprise/admingws' => 'This configuration moved to admingws.xml file',
             '/config/adminhtml/enterprise/websiterestriction' =>
                 'This configuration moved to websiterestrictions.xml file',
             '/config/global/enterprise_cms' => 'This configuration moved to menu_hierarchy.xml file',
             '/config/global/enterprise/banner' =>
-                'This configuration moved to Di configuration of \Magento\Banner\Model\Config',
+                'This configuration moved to DI configuration of \Magento\Banner\Model\Config',
             '/config/global/enterprise/giftcardaccount' =>
-                'This configuration moved to Di configuration of \Magento\GiftCardAccountModelPool',
-            '/config/global/skip_process_modules_updates' => 'Was replaced using di',
+                'This configuration moved to DI configuration of \Magento\GiftCardAccountModelPool',
+            '/config/global/skip_process_modules_updates' => 'Was replaced using DI',
             '/config/system/page_cache' => 'Module is eliminated. Use PageCache module instead',
             '/config/system/cms/content/versioning' => 'Functionality is eliminated',
         ];
     }
+
+
 }
diff --git a/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php b/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php
index a1425cab..a3372ff3 100644
--- a/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php
+++ b/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php
@@ -18,14 +18,14 @@ class ObsoleteConnectionSniff implements Sniff
      * @var string[]
      */
     private $obsoleteMethods = [
-        '_getReadConnection',
-        '_getWriteConnection',
-        '_getReadAdapter',
-        '_getWriteAdapter',
-        'getReadConnection',
-        'getWriteConnection',
-        'getReadAdapter',
-        'getWriteAdapter',
+        '_getReadConnection' => 'FoundObsoleteMethod_getReadConnection',
+        '_getWriteConnection' => 'FoundObsoleteMethod_getWriteConnection',
+        '_getReadAdapter' => 'FoundObsoleteMethod_getReadAdapter',
+        '_getWriteAdapter' => 'FoundObsoleteMethod_getWriteAdapter',
+        'getReadConnection' => 'FoundObsoleteMethodGetReadConnection',
+        'getWriteConnection' => 'FoundObsoleteMethodGetWriteConnection',
+        'getReadAdapter' => 'FoundObsoleteMethodGetReadAdapter',
+        'getWriteAdapter' => 'FoundObsoleteMethodGetWriteAdapter',
     ];
 
     /**
@@ -58,12 +58,12 @@ private function validateObsoleteMethod(File $phpcsFile, int $stackPtr)
         $tokens = $phpcsFile->getTokens();
         $stringPos = $phpcsFile->findNext(T_STRING, $stackPtr + 1);
         
-        foreach ($this->obsoleteMethods as $method) {
+        foreach ($this->obsoleteMethods as $method => $errorCode) {
             if ($tokens[$stringPos]['content'] === $method) {
                 $phpcsFile->addWarning(
                     sprintf("Contains obsolete method: %s. Please use getConnection method instead.", $method),
                     $stackPtr,
-                    self::ERROR_CODE_METHOD
+                    $errorCode
                 );
             }
         }
diff --git a/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php b/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php
index 725a8b15..9dadee00 100644
--- a/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php
+++ b/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php
@@ -12,8 +12,6 @@
 
 class ObsoleteResponseSniff implements Sniff
 {
-    private const WARNING_CODE_METHOD = 'FoundObsoleteResponseMethod';
-    
     /**
      * @var string[]
      */
@@ -29,6 +27,22 @@ class ObsoleteResponseSniff implements Sniff
         '_addJs' => 'Please use \Magento\Backend\Model\View\Result\Page::addJs instead.',
         '_moveBlockToContainer' => 'Please use \Magento\Backend\Model\View\Result\Page::moveBlockToContainer instead.',
     ];
+
+    /**
+     * @var string[]
+     */
+    private $obsoleteResponseWarningCodes = [
+        'loadLayout' => 'loadLayoutResponseMethodFound',
+        'renderLayout' => 'renderLayoutResponseMethodFound',
+        '_redirect' => 'redirectResponseMethodFound',
+        '_forward' => 'forwardResponseMethodFound',
+        '_setActiveMenu' => 'setActiveMenuResponseMethodFound',
+        '_addBreadcrumb' => 'addBreadcrumbResponseMethodFound',
+        '_addContent' => 'addContentResponseMethodFound',
+        '_addLeft' => 'addLeftResponseMethodFound',
+        '_addJs' => 'addJsResponseMethodFound',
+        '_moveBlockToContainer' => 'moveBlockToContainerResponseMethodFound',
+    ];
     
     /**
      * @inheritdoc
@@ -54,7 +68,7 @@ public function process(File $phpcsFile, $stackPtr)
                 $phpcsFile->addWarning(
                     sprintf('%s method is deprecated. %s', $method, $errorMessage),
                     $stackPtr,
-                    self::WARNING_CODE_METHOD
+                    $this->obsoleteResponseWarningCodes[$method]
                 );
             }
         }
diff --git a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
index 67d74575..cd9ef45e 100644
--- a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
+++ b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
@@ -13,6 +13,15 @@
 class PhtmlTemplateSniff implements Sniff
 {
     private const WARNING_CODE = 'PhtmlTemplateObsolete';
+    private const WARNING_CODE_TEXT_JAVASCRIPT = 'TextJavascriptTypeFound';
+    private const WARNING_CODE_THIS_USAGE = 'ThisUsageObsolete';
+    private const WARNING_CODE_PROTECTED_PRIVATE_BLOCK_ACCESS = 'ProtectedPrivateBlockAccess';
+
+    private const WARNING_CODES_OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES = [
+        '/(["\'])jquery\/ui\1/' => 'JQueryUILibraryFound',
+        '/data-mage-init=(?:\'|")(?!\s*{\s*"[^"]+")/' => 'JSComponentInitInPHPFound',
+        '@x-magento-init.>(?!\s*+{\s*"[^"]+"\s*:\s*{\s*"[\w/-]+")@i' => 'JSComponentInitInPHPFound',
+    ];
 
     private const OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES = [
         '/(["\'])jquery\/ui\1/' => 'Please do not use "jquery/ui" library in templates. Use needed jquery ' .
@@ -77,7 +86,7 @@ private function checkBlockVariable(File $phpcsFile, int $stackPtr, array $token
                 'Access to protected and private members of Block class is ' .
                 'obsolete in phtml templates. Use only public members.',
                 $stringPos,
-                self::WARNING_CODE
+                self::WARNING_CODE_PROTECTED_PRIVATE_BLOCK_ACCESS
             );
         }
     }
@@ -101,7 +110,7 @@ private function checkThisVariable(File $phpcsFile, int $stackPtr, array $tokens
                 'Access to members and methods of Block class through $this is ' .
                 'obsolete in phtml templates. Use only $block instead of $this.',
                 $stringPos,
-                self::WARNING_CODE
+                self::WARNING_CODE_THIS_USAGE
             );
         }
     }
@@ -120,7 +129,7 @@ private function checkHtml(File $phpcsFile, int $stackPtr): void
             $phpcsFile->addWarning(
                 'Please do not use "text/javascript" type attribute.',
                 $stackPtr,
-                self::WARNING_CODE
+                self::WARNING_CODE_TEXT_JAVASCRIPT
             );
         }
     }
@@ -140,7 +149,7 @@ private function checkHtmlSpecificFiles(File $phpcsFile, int $stackPtr): void
                 $phpcsFile->addWarning(
                     $errorMessage,
                     $stackPtr,
-                    self::WARNING_CODE
+                    self::WARNING_CODES_OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES[$obsoleteRegex]
                 );
             }
         }
diff --git a/Magento2/Sniffs/Legacy/RestrictedCodeSniff.php b/Magento2/Sniffs/Legacy/RestrictedCodeSniff.php
index 62ee2d4e..5b6c860c 100644
--- a/Magento2/Sniffs/Legacy/RestrictedCodeSniff.php
+++ b/Magento2/Sniffs/Legacy/RestrictedCodeSniff.php
@@ -16,7 +16,6 @@
 class RestrictedCodeSniff implements Sniff
 {
     private const ERROR_MESSAGE = "Class '%s' is restricted in %s. Suggested replacement: %s";
-    private const ERROR_CODE = "restrictedClass";
 
     /**
      * List of fixtures that contain restricted classes and should not be tested
@@ -76,7 +75,7 @@ public function process(File $phpcsFile, $stackPtr)
                     $this->classes[$token]['replacement']
                 ),
                 $stackPtr,
-                self::ERROR_CODE,
+                $this->classes[$token]['warning_code'],
             );
         }
     }
diff --git a/Magento2/Sniffs/Legacy/WidgetXMLSniff.php b/Magento2/Sniffs/Legacy/WidgetXMLSniff.php
index efd62aee..aee84dc8 100644
--- a/Magento2/Sniffs/Legacy/WidgetXMLSniff.php
+++ b/Magento2/Sniffs/Legacy/WidgetXMLSniff.php
@@ -15,7 +15,8 @@
  */
 class WidgetXMLSniff implements Sniff
 {
-    private const ERROR_CODE_OBSOLETE = 'FoundObsoleteNode';
+    private const ERROR_CODE_OBSOLETE_SUPPORTED_BLOCKS = 'FoundObsoleteNodeSupportedBlocks';
+    private const ERROR_CODE_OBSOLETE_BLOCK_NAME = 'FoundObsoleteNodeBlockName';
     private const ERROR_CODE_FACTORY = 'FoundFactory';
     private const ERROR_CODE_XML = 'WrongXML';
 
@@ -66,7 +67,7 @@ public function process(File $phpcsFile, $stackPtr)
             $phpcsFile->addError(
                 "Obsolete node: <supported_blocks>. To be replaced with <supported_containers>",
                 dom_import_simplexml($element)->getLineNo() - 1,
-                self::ERROR_CODE_OBSOLETE
+                self::ERROR_CODE_OBSOLETE_SUPPORTED_BLOCKS
             );
         }
 
@@ -75,7 +76,7 @@ public function process(File $phpcsFile, $stackPtr)
             $phpcsFile->addError(
                 "Obsolete node: <block_name>. To be replaced with <container_name>",
                 dom_import_simplexml($element)->getLineNo() - 1,
-                self::ERROR_CODE_OBSOLETE
+                self::ERROR_CODE_OBSOLETE_BLOCK_NAME
             );
         }
     }
diff --git a/Magento2/Sniffs/Legacy/_files/restricted_classes.php b/Magento2/Sniffs/Legacy/_files/restricted_classes.php
index 1052b994..41d4c698 100644
--- a/Magento2/Sniffs/Legacy/_files/restricted_classes.php
+++ b/Magento2/Sniffs/Legacy/_files/restricted_classes.php
@@ -13,6 +13,7 @@
  */
 return [
     'Zend_Db_Select' => [
+        'warning_code' => 'ZendDbSelectIsRestricted',
         'replacement' => '\Magento\Framework\DB\Select',
         'exclude' => [
             'Magento/Framework/DB/Select.php',
@@ -22,12 +23,14 @@
         ]
     ],
     'Zend_Db_Adapter_Pdo_Mysql' => [
+        'warning_code' => 'ZendDbAdapterPdoMysqlIsRestricted',
         'replacement' => '\Magento\Framework\DB\Adapter\Pdo\Mysql',
         'exclude' => [
             'Magento/Framework/DB/Adapter/Pdo/Mysql.php'
         ]
     ],
     'Magento\Framework\Serialize\Serializer\Serialize' => [
+        'warning_code' => 'SerializerSerializeIsRestricted',
         'replacement' => 'Magento\Framework\Serialize\SerializerInterface',
         'exclude' => [
             'Magento/Framework/App/ObjectManager/ConfigLoader/Compiled.php',
@@ -56,6 +59,7 @@
         ]
     ],
     'ArrayObject' => [
+        'warning_code' => 'ArrayObjectIsRestricted',
         'replacement' => 'Custom class, extended from ArrayObject with overwritten serialize/unserialize methods',
         'exclude' => [
                 'Magento/Theme/Model/Indexer/Design/Config.php',
@@ -78,6 +82,7 @@
             ]
     ],
     'Magento\Framework\View\Element\UiComponent\ArrayObjectFactory' => [
+        'warning_code' => 'ArrayObjectFactoryIsRestricted',
         'replacement' => 'Factory that creates custom class, extended from ArrayObject with overwritten '
             . 'serialize/unserialize methods',
         'exclude' => [
diff --git a/Magento2/Sniffs/NamingConvention/ReservedWordsSniff.php b/Magento2/Sniffs/NamingConvention/ReservedWordsSniff.php
index 23724a7c..19b80e41 100644
--- a/Magento2/Sniffs/NamingConvention/ReservedWordsSniff.php
+++ b/Magento2/Sniffs/NamingConvention/ReservedWordsSniff.php
@@ -36,6 +36,44 @@ class ReservedWordsSniff implements Sniff
         'numeric' => '7',
     ];
 
+    /**
+     * @var string[]
+     */
+    private $classErrorCodes = [
+        'int' => 'IntForbiddenAsClassName',
+        'float' => 'FloatForbiddenAsClassName',
+        'bool' => 'boolForbiddenAsClassName',
+        'string' => 'stringForbiddenAsClassName',
+        'true' => 'trueForbiddenAsClassName',
+        'false' => 'falseForbiddenAsClassName',
+        'null' => 'nullForbiddenAsClassName',
+        'void' => 'voidForbiddenAsClassName',
+        'iterable' => 'iterableForbiddenAsClassName',
+        'resource' => 'resourceForbiddenAsClassName',
+        'object' => 'objectForbiddenAsClassName',
+        'mixed' => 'mixedForbiddenAsClassName',
+        'numeric' => 'numericForbiddenAsClassName',
+    ];
+
+    /**
+     * @var string[]
+     */
+    private $namespaceErrorCodes = [
+        'int' => 'IntForbiddenAsNameSpace',
+        'float' => 'FloatForbiddenAsNameSpace',
+        'bool' => 'boolForbiddenAsNameSpace',
+        'string' => 'stringForbiddenAsNameSpace',
+        'true' => 'trueForbiddenAsNameSpace',
+        'false' => 'falseForbiddenAsNameSpace',
+        'null' => 'nullForbiddenAsNameSpace',
+        'void' => 'voidForbiddenAsNameSpace',
+        'iterable' => 'iterableForbiddenAsNameSpace',
+        'resource' => 'resourceForbiddenAsNameSpace',
+        'object' => 'objectForbiddenAsNameSpace',
+        'mixed' => 'mixedForbiddenAsNameSpace',
+        'numeric' => 'numericForbiddenAsNameSpace',
+    ];
+
     /**
      * @inheritdoc
      */
@@ -65,7 +103,7 @@ protected function validateNamespace(File $sourceFile, $stackPtr)
                 $sourceFile->addError(
                     'Cannot use "%s" in namespace as it is reserved since PHP %s',
                     $stackPtr,
-                    'Namespace',
+                    $this->namespaceErrorCodes[strtolower($namespacePart)],
                     [$namespacePart, $this->reservedWords[strtolower($namespacePart)]]
                 );
             }
@@ -89,7 +127,7 @@ protected function validateClass(File $sourceFile, $stackPtr)
             $sourceFile->addError(
                 'Cannot use "%s" as class name as it is reserved since PHP %s',
                 $stackPtr,
-                'Class',
+                $this->classErrorCodes[strtolower($className)],
                 [$className, $this->reservedWords[$className]]
             );
         }

From c147628c9524bd8f8e20c993aec62b61eb032962 Mon Sep 17 00:00:00 2001
From: Sergio Vera <svera@adobe.com>
Date: Tue, 26 Oct 2021 11:46:03 +0200
Subject: [PATCH 02/11] AC-1549: Fixed static tests

---
 Magento2/Sniffs/Legacy/DiConfigSniff.php            | 3 +++
 Magento2/Sniffs/Legacy/EmailTemplateSniff.php       | 3 +++
 Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php | 6 ++++--
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/Magento2/Sniffs/Legacy/DiConfigSniff.php b/Magento2/Sniffs/Legacy/DiConfigSniff.php
index 89c0025d..164a084c 100644
--- a/Magento2/Sniffs/Legacy/DiConfigSniff.php
+++ b/Magento2/Sniffs/Legacy/DiConfigSniff.php
@@ -11,6 +11,9 @@
 
 class DiConfigSniff implements Sniff
 {
+    /**
+     * @var string[]
+     */
     private $obsoleteDiNodesWarningCodes = [
         '<param' => 'FoundObsoleteParamNode',
         '<instance' => 'FoundObsoleteInstanceNode',
diff --git a/Magento2/Sniffs/Legacy/EmailTemplateSniff.php b/Magento2/Sniffs/Legacy/EmailTemplateSniff.php
index 1cff51fe..69cbc751 100644
--- a/Magento2/Sniffs/Legacy/EmailTemplateSniff.php
+++ b/Magento2/Sniffs/Legacy/EmailTemplateSniff.php
@@ -19,6 +19,9 @@ class EmailTemplateSniff implements Sniff
         '/\{\{escapehtml.*?\}\}/i' => 'Directive {{escapehtml}} is obsolete. Use {{var}} instead.',
     ];
 
+    /**
+     * @var string[]
+     */
     private $errorCodes = [
         '/\{\{htmlescape.*?\}\}/i' => 'FoundObsoleteHtmlescapeDirective',
         '/\{\{escapehtml.*?\}\}/i' => 'FoundObsoleteEscapehtmlDirective'
diff --git a/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php b/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php
index 9738d080..effaf123 100644
--- a/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php
+++ b/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php
@@ -15,6 +15,10 @@ class ObsoleteConfigNodesSniff implements Sniff
 {
     private const ERROR_MESSAGE_CONFIG = "Nodes identified by XPath '%s' are obsolete. %s";
     private const ERROR_CODE_CONFIG = 'WrongXML';
+
+    /**
+     * @var string[]
+     */
     private $obsoleteNodesErrorCodes = [
         '/config/global/fieldsets' => 'obsoleteNodeGlobalFieldsets',
         '/config/global/cache/betatypes' => 'obsoleteNodeBetatypes',
@@ -331,6 +335,4 @@ private function getObsoleteNodes(): array
             '/config/system/cms/content/versioning' => 'Functionality is eliminated',
         ];
     }
-
-
 }

From 94a395a84265063ef3348f5d9fee124d114b3eb4 Mon Sep 17 00:00:00 2001
From: Sergio Vera <svera@adobe.com>
Date: Tue, 26 Oct 2021 13:04:55 +0200
Subject: [PATCH 03/11] AC-1549: Added more codes and cleaned up unused
 messages

---
 Magento2/Sniffs/Legacy/InstallUpgradeSniff.php     | 12 +++++++++---
 Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php |  2 --
 Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php      |  1 -
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php b/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
index aad0e56b..e6c22cc4 100644
--- a/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
+++ b/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
@@ -13,8 +13,6 @@
 
 class InstallUpgradeSniff implements Sniff
 {
-    private const ERROR_CODE = 'invalidDirectory';
-
     /**
      * @var string[]
      */
@@ -52,6 +50,14 @@ class InstallUpgradeSniff implements Sniff
         'recurring' => 'obsoleteRecurringScript',
     ];
 
+    /**
+     * @var string[]
+     */
+    private $invalidDirectoriesErrorCodes = [
+        'data' => 'dataInvalidDirectory',
+        'sql' => 'sqlInvalidDirectory'
+    ];
+
     /**
      * @inheritdoc
      */
@@ -88,7 +94,7 @@ public function process(File $phpcsFile, $stackPtr)
                 . "- Create a data patch within module's Setup/Patch/Data folder for data upgrades.\n"
                 . "- Use declarative schema approach in module's etc/db_schema.xml file for schema changes.",
                 0,
-                self::ERROR_CODE
+                $this->invalidDirectoriesErrorCodes[$folderName]
             );
         }
     }
diff --git a/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php b/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php
index a3372ff3..c79844a5 100644
--- a/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php
+++ b/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php
@@ -12,8 +12,6 @@
 
 class ObsoleteConnectionSniff implements Sniff
 {
-    private const ERROR_CODE_METHOD = 'FoundObsoleteMethod';
-
     /**
      * @var string[]
      */
diff --git a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
index cd9ef45e..e086adc5 100644
--- a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
+++ b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
@@ -12,7 +12,6 @@
 
 class PhtmlTemplateSniff implements Sniff
 {
-    private const WARNING_CODE = 'PhtmlTemplateObsolete';
     private const WARNING_CODE_TEXT_JAVASCRIPT = 'TextJavascriptTypeFound';
     private const WARNING_CODE_THIS_USAGE = 'ThisUsageObsolete';
     private const WARNING_CODE_PROTECTED_PRIVATE_BLOCK_ACCESS = 'ProtectedPrivateBlockAccess';

From f76f48f7d1750ff4b405b2ed8f0a8a3a20b9c5e9 Mon Sep 17 00:00:00 2001
From: Sergio Vera <sergio.vera@gmail.com>
Date: Tue, 26 Oct 2021 14:54:46 +0200
Subject: [PATCH 04/11] Update Magento2/Sniffs/Legacy/InstallUpgradeSniff.php

Co-authored-by: Sergii Ivashchenko <serg.ivashchenko@gmail.com>
---
 Magento2/Sniffs/Legacy/InstallUpgradeSniff.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php b/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
index e6c22cc4..d1e0c787 100644
--- a/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
+++ b/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
@@ -39,7 +39,7 @@ class InstallUpgradeSniff implements Sniff
      * @var string[]
      */
     private $wrongPrefixesErrorCodes = [
-        'install-' => 'obsoleteInstallScript',
+        'install-' => 'ObsoleteInstallScript',
         'InstallSchema' => 'obsoleteInstallSchemaScript',
         'InstallData' => 'obsoleteInstallDataScript',
         'data-install-' => 'obsoleteDataInstallScript',

From 395320787697e254fb376a2b6207a92c2c113613 Mon Sep 17 00:00:00 2001
From: Sergio Vera <sergio.vera@gmail.com>
Date: Tue, 26 Oct 2021 14:54:53 +0200
Subject: [PATCH 05/11] Update Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php

Co-authored-by: Sergii Ivashchenko <serg.ivashchenko@gmail.com>
---
 Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
index e086adc5..91de4672 100644
--- a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
+++ b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
@@ -18,7 +18,7 @@ class PhtmlTemplateSniff implements Sniff
 
     private const WARNING_CODES_OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES = [
         '/(["\'])jquery\/ui\1/' => 'JQueryUILibraryFound',
-        '/data-mage-init=(?:\'|")(?!\s*{\s*"[^"]+")/' => 'JSComponentInitInPHPFound',
+        '/data-mage-init=(?:\'|")(?!\s*{\s*"[^"]+")/' => 'FoundDataMageInit',
         '@x-magento-init.>(?!\s*+{\s*"[^"]+"\s*:\s*{\s*"[\w/-]+")@i' => 'JSComponentInitInPHPFound',
     ];
 

From 28ce4efb524cbb9bfe35bd330f723d7692533cd5 Mon Sep 17 00:00:00 2001
From: Sergio Vera <sergio.vera@gmail.com>
Date: Tue, 26 Oct 2021 14:54:58 +0200
Subject: [PATCH 06/11] Update Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php

Co-authored-by: Sergii Ivashchenko <serg.ivashchenko@gmail.com>
---
 Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
index 91de4672..bb58f641 100644
--- a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
+++ b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
@@ -19,7 +19,7 @@ class PhtmlTemplateSniff implements Sniff
     private const WARNING_CODES_OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES = [
         '/(["\'])jquery\/ui\1/' => 'JQueryUILibraryFound',
         '/data-mage-init=(?:\'|")(?!\s*{\s*"[^"]+")/' => 'FoundDataMageInit',
-        '@x-magento-init.>(?!\s*+{\s*"[^"]+"\s*:\s*{\s*"[\w/-]+")@i' => 'JSComponentInitInPHPFound',
+        '@x-magento-init.>(?!\s*+{\s*"[^"]+"\s*:\s*{\s*"[\w/-]+")@i' => 'FoundXMagentoInit',
     ];
 
     private const OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES = [

From d7c4374b4158c9f914b7f8685fa5e9d0bcd9c28d Mon Sep 17 00:00:00 2001
From: Sergio Vera <sergio.vera@gmail.com>
Date: Tue, 26 Oct 2021 14:55:03 +0200
Subject: [PATCH 07/11] Update Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php

Co-authored-by: Sergii Ivashchenko <serg.ivashchenko@gmail.com>
---
 Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
index bb58f641..dd4d06d1 100644
--- a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
+++ b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
@@ -17,7 +17,7 @@ class PhtmlTemplateSniff implements Sniff
     private const WARNING_CODE_PROTECTED_PRIVATE_BLOCK_ACCESS = 'ProtectedPrivateBlockAccess';
 
     private const WARNING_CODES_OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES = [
-        '/(["\'])jquery\/ui\1/' => 'JQueryUILibraryFound',
+        '/(["\'])jquery\/ui\1/' => 'FoundJQueryUI',
         '/data-mage-init=(?:\'|")(?!\s*{\s*"[^"]+")/' => 'FoundDataMageInit',
         '@x-magento-init.>(?!\s*+{\s*"[^"]+"\s*:\s*{\s*"[\w/-]+")@i' => 'FoundXMagentoInit',
     ];

From ee515c3e8acaf3b126f2afec57785e0ac973a96d Mon Sep 17 00:00:00 2001
From: Sergio Vera <sergio.vera@gmail.com>
Date: Tue, 26 Oct 2021 14:55:09 +0200
Subject: [PATCH 08/11] Update
 Magento2/Sniffs/Legacy/_files/restricted_classes.php

Co-authored-by: Sergii Ivashchenko <serg.ivashchenko@gmail.com>
---
 Magento2/Sniffs/Legacy/_files/restricted_classes.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Magento2/Sniffs/Legacy/_files/restricted_classes.php b/Magento2/Sniffs/Legacy/_files/restricted_classes.php
index 41d4c698..ed6d2540 100644
--- a/Magento2/Sniffs/Legacy/_files/restricted_classes.php
+++ b/Magento2/Sniffs/Legacy/_files/restricted_classes.php
@@ -13,7 +13,7 @@
  */
 return [
     'Zend_Db_Select' => [
-        'warning_code' => 'ZendDbSelectIsRestricted',
+        'warning_code' => 'ZendDbSelect',
         'replacement' => '\Magento\Framework\DB\Select',
         'exclude' => [
             'Magento/Framework/DB/Select.php',

From 2391b0db6d2940289752ce060d7d1f633df32d99 Mon Sep 17 00:00:00 2001
From: Sergio Vera <svera@adobe.com>
Date: Tue, 26 Oct 2021 16:51:59 +0200
Subject: [PATCH 09/11] AC-1549: Made suggestions

---
 Magento2/Sniffs/Legacy/DiConfigSniff.php      |  49 ++---
 Magento2/Sniffs/Legacy/EmailTemplateSniff.php |  26 ++-
 .../Sniffs/Legacy/InstallUpgradeSniff.php     |  93 +++++----
 .../Legacy/ObsoleteConfigNodesSniff.php       | 179 ++++--------------
 .../Sniffs/Legacy/ObsoleteResponseSniff.php   |  20 +-
 .../NamingConvention/InterfaceNameSniff.php   |   6 +-
 .../NamingConvention/ReservedWordsSniff.php   |  55 +-----
 ...utogeneratedClassNotInConstructorSniff.php |   2 +-
 .../Sniffs/PHP/LiteralNamespacesSniff.php     |  10 +-
 9 files changed, 156 insertions(+), 284 deletions(-)

diff --git a/Magento2/Sniffs/Legacy/DiConfigSniff.php b/Magento2/Sniffs/Legacy/DiConfigSniff.php
index 164a084c..7495dd44 100644
--- a/Magento2/Sniffs/Legacy/DiConfigSniff.php
+++ b/Magento2/Sniffs/Legacy/DiConfigSniff.php
@@ -11,26 +11,27 @@
 
 class DiConfigSniff implements Sniff
 {
-    /**
-     * @var string[]
-     */
-    private $obsoleteDiNodesWarningCodes = [
-        '<param' => 'FoundObsoleteParamNode',
-        '<instance' => 'FoundObsoleteInstanceNode',
-        '<array' => 'FoundObsoleteArrayNode',
-        '<item key=' => 'FoundObsoleteItemNode',
-        '<value' => 'FoundObsoleteValueNode',
-    ];
-
-    /**
-     * @var string[] Associative array containing the obsolete nodes and the message to display when they are found.
-     */
-    private $obsoleteDiNodes = [
-        '<param' => 'The <param> node is obsolete. Instead, use the <argument name="..." xsi:type="...">',
-        '<instance' => 'The <instance> node is obsolete. Instead, use the <argument name="..." xsi:type="object">',
-        '<array' => 'The <array> node is obsolete. Instead, use the <argument name="..." xsi:type="array">',
-        '<item key=' => 'The <item key="..."> node is obsolete. Instead, use the <item name="..." xsi:type="...">',
-        '<value' => 'The <value> node is obsolete. Instead, provide the actual value as a text literal.'
+    private const OBSOLETE_NODES = [
+        'FoundObsoleteParamNode' => [
+            'pattern' => '<param',
+            'message' => 'The <param> node is obsolete. Instead, use the <argument name="..." xsi:type="...">'
+        ],
+        'FoundObsoleteInstanceNode' => [
+            'pattern' => '<instance',
+            'message' => 'The <instance> node is obsolete. Instead, use the <argument name="..." xsi:type="object">>'
+        ],
+        'FoundObsoleteArrayNode' => [
+            'pattern' => '<array',
+            'message' => 'The <array> node is obsolete. Instead, use the <argument name="..." xsi:type="array">'
+        ],
+        'FoundObsoleteItemNode' => [
+            'pattern' => '<item key=',
+            'message' => 'The <item key="..."> node is obsolete. Instead, use the <item name="..." xsi:type="...">'
+        ],
+        'FoundObsoleteValueNode' => [
+            'pattern' => '<value',
+            'message' => 'The <value> node is obsolete. Instead, provide the actual value as a text literal'
+        ],
     ];
 
     /**
@@ -50,12 +51,12 @@ public function process(File $phpcsFile, $stackPtr)
     {
         $lineContent = $phpcsFile->getTokensAsString($stackPtr, 1);
 
-        foreach ($this->obsoleteDiNodes as $element => $message) {
-            if (strpos($lineContent, $element) !== false) {
+        foreach (self::OBSOLETE_NODES as $code => $data) {
+            if (strpos($lineContent, $data['pattern']) !== false) {
                 $phpcsFile->addWarning(
-                    $message,
+                    $data['message'],
                     $stackPtr,
-                    $this->obsoleteDiNodesWarningCodes[$element]
+                    $code
                 );
             }
         }
diff --git a/Magento2/Sniffs/Legacy/EmailTemplateSniff.php b/Magento2/Sniffs/Legacy/EmailTemplateSniff.php
index 69cbc751..85d6b9a0 100644
--- a/Magento2/Sniffs/Legacy/EmailTemplateSniff.php
+++ b/Magento2/Sniffs/Legacy/EmailTemplateSniff.php
@@ -15,16 +15,14 @@
 class EmailTemplateSniff implements Sniff
 {
     private const OBSOLETE_EMAIL_DIRECTIVES = [
-        '/\{\{htmlescape.*?\}\}/i' => 'Directive {{htmlescape}} is obsolete. Use {{var}} instead.',
-        '/\{\{escapehtml.*?\}\}/i' => 'Directive {{escapehtml}} is obsolete. Use {{var}} instead.',
-    ];
-
-    /**
-     * @var string[]
-     */
-    private $errorCodes = [
-        '/\{\{htmlescape.*?\}\}/i' => 'FoundObsoleteHtmlescapeDirective',
-        '/\{\{escapehtml.*?\}\}/i' => 'FoundObsoleteEscapehtmlDirective'
+        'FoundObsoleteHtmlescapeDirective' => [
+            'pattern' => '/\{\{htmlescape.*?\}\}/i',
+            'message' => 'Directive {{htmlescape}} is obsolete. Use {{var}} instead.',
+        ],
+        'FoundObsoleteEscapehtmlDirective' => [
+            'pattern' => '/\{\{escapehtml.*?\}\}/i',
+            'message' => 'Directive {{escapehtml}} is obsolete. Use {{var}} instead.',
+        ],
     ];
 
     /**
@@ -43,12 +41,12 @@ public function register(): array
     public function process(File $phpcsFile, $stackPtr)
     {
         $content = $phpcsFile->getTokens()[$stackPtr]['content'];
-        foreach (self::OBSOLETE_EMAIL_DIRECTIVES as $directiveRegex => $errorMessage) {
-            if (preg_match($directiveRegex, $content)) {
+        foreach (self::OBSOLETE_EMAIL_DIRECTIVES as $code => $data) {
+            if (preg_match($data['pattern'], $content)) {
                 $phpcsFile->addError(
-                    $errorMessage,
+                    $data['message'],
                     $stackPtr,
-                    $this->errorCodes[$directiveRegex]
+                    $code
                 );
             }
         }
diff --git a/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php b/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
index d1e0c787..09dbedfb 100644
--- a/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
+++ b/Magento2/Sniffs/Legacy/InstallUpgradeSniff.php
@@ -13,49 +13,58 @@
 
 class InstallUpgradeSniff implements Sniff
 {
-    /**
-     * @var string[]
-     */
-    private $wrongPrefixes = [
-        'install-' => 'Install scripts are obsolete. '
-            . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
-        'InstallSchema' => 'InstallSchema scripts are obsolete. '
-            . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
-        'InstallData' => 'InstallData scripts are obsolete. '
-            . 'Please use data patches approach in module\'s Setup/Patch/Data dir',
-        'data-install-' => 'Install scripts are obsolete. Please create class InstallData in module\'s Setup folder',
-        'upgrade-' => 'Upgrade scripts are obsolete. '
-            . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
-        'UpgradeSchema' => 'UpgradeSchema scripts are obsolete. '
-            . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
-        'UpgradeData' => 'UpgradeData scripts are obsolete. '
-            . 'Please use data patches approach in module\'s Setup/Patch/Data dir',
-        'data-upgrade-' => 'Upgrade scripts are obsolete. '
-            . 'Please use data patches approach in module\'s Setup/Patch/Data dir',
-        'recurring' => 'Recurring scripts are obsolete. Please create class Recurring in module\'s Setup folder',
-    ];
-
-    /**
-     * @var string[]
-     */
-    private $wrongPrefixesErrorCodes = [
-        'install-' => 'ObsoleteInstallScript',
-        'InstallSchema' => 'obsoleteInstallSchemaScript',
-        'InstallData' => 'obsoleteInstallDataScript',
-        'data-install-' => 'obsoleteDataInstallScript',
-        'upgrade-' => 'obsoleteUpgradeScript',
-        'UpgradeSchema' => 'obsoleteUpgradeSchemaScript',
-        'UpgradeData' => 'obsoleteUpgradeDataScript',
-        'data-upgrade-' => 'obsoleteDataUpgradeScript',
-        'recurring' => 'obsoleteRecurringScript',
+    private const WRONG_PREFIXES = [
+        'ObsoleteInstallScript' => [
+            'pattern' => 'install-',
+            'message' => 'Install scripts are obsolete. '
+                . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
+        ],
+        'ObsoleteInstallSchemaScript' => [
+            'pattern' => 'InstallSchema',
+            'message' => 'InstallSchema scripts are obsolete. '
+                . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
+        ],
+        'ObsoleteInstallDataScript' => [
+            'pattern' => 'InstallData',
+            'message' => 'InstallData scripts are obsolete. '
+                . 'Please use data patches approach in module\'s Setup/Patch/Data dir',
+        ],
+        'ObsoleteDataInstallScript' => [
+            'pattern' => 'data-install-',
+            'message' => 'Install scripts are obsolete. Please create class InstallData in module\'s Setup folder',
+        ],
+        'ObsoleteUpgradeScript' => [
+            'pattern' => 'upgrade-',
+            'message' => 'Upgrade scripts are obsolete. '
+                . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
+        ],
+        'ObsoleteUpgradeSchemaScript' => [
+            'pattern' => 'UpgradeSchema',
+            'message' => 'UpgradeSchema scripts are obsolete. '
+                . 'Please use declarative schema approach in module\'s etc/db_schema.xml file',
+        ],
+        'ObsoleteUpgradeDataScript' => [
+            'pattern' => 'UpgradeData',
+            'message' => 'UpgradeData scripts are obsolete. '
+                . 'Please use data patches approach in module\'s Setup/Patch/Data dir',
+        ],
+        'ObsoleteDataUpgradeScript' => [
+            'pattern' => 'data-upgrade',
+            'message' => 'Upgrade scripts are obsolete. '
+                . 'Please use data patches approach in module\'s Setup/Patch/Data dir',
+        ],
+        'ObsoleteRecurringScript' => [
+            'pattern' => 'recurring',
+            'message' => 'Recurring scripts are obsolete. Please create class Recurring in module\'s Setup folder'
+        ]
     ];
 
     /**
      * @var string[]
      */
-    private $invalidDirectoriesErrorCodes = [
-        'data' => 'dataInvalidDirectory',
-        'sql' => 'sqlInvalidDirectory'
+    private const INVALID_DIRECTORIES_ERROR_CODES = [
+        'data' => 'DataInvalidDirectory',
+        'sql' => 'SqlInvalidDirectory'
     ];
 
     /**
@@ -79,9 +88,9 @@ public function process(File $phpcsFile, $stackPtr)
         
         $fileInfo = new SplFileInfo($phpcsFile->getFilename());
 
-        foreach ($this->wrongPrefixes as $prefix => $errorMessage) {
-            if (strpos($fileInfo->getFilename(), $prefix) === 0) {
-                $phpcsFile->addError($errorMessage, 0, $this->wrongPrefixesErrorCodes[$prefix]);
+        foreach (self::WRONG_PREFIXES as $code => $data) {
+            if (strpos($fileInfo->getFilename(), $data['pattern']) === 0) {
+                $phpcsFile->addError($data['message'], 0, $code);
             }
         }
 
@@ -94,7 +103,7 @@ public function process(File $phpcsFile, $stackPtr)
                 . "- Create a data patch within module's Setup/Patch/Data folder for data upgrades.\n"
                 . "- Use declarative schema approach in module's etc/db_schema.xml file for schema changes.",
                 0,
-                $this->invalidDirectoriesErrorCodes[$folderName]
+                self::INVALID_DIRECTORIES_ERROR_CODES[$folderName]
             );
         }
     }
diff --git a/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php b/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php
index effaf123..efc5fae7 100644
--- a/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php
+++ b/Magento2/Sniffs/Legacy/ObsoleteConfigNodesSniff.php
@@ -14,108 +14,7 @@
 class ObsoleteConfigNodesSniff implements Sniff
 {
     private const ERROR_MESSAGE_CONFIG = "Nodes identified by XPath '%s' are obsolete. %s";
-    private const ERROR_CODE_CONFIG = 'WrongXML';
-
-    /**
-     * @var string[]
-     */
-    private $obsoleteNodesErrorCodes = [
-        '/config/global/fieldsets' => 'obsoleteNodeGlobalFieldsets',
-        '/config/global/cache/betatypes' => 'obsoleteNodeBetatypes',
-        '/config/admin/fieldsets' => 'obsoleteNodeAdminFieldsets',
-        '/config/general/locale' => 'obsoleteNodeGeneralLocale',
-        '/config/global/can_use_base_url' => 'obsoleteNodeGlobalCanUseBaseURL',
-        '/config/global/locale/allow/codes' => 'obsoleteNodeAllowCodes',
-        '/config/global/locale/allow/currencies' => 'obsoleteNodeAllowCurrencies',
-        '/config/global/mime/types' => 'obsoleteNodeMimeTypes',
-        '/config/global/models/*/deprecatedNode' => 'obsoleteNodeDeprecatedNode',
-        '/config/global/models/*/entities/*/table' => 'obsoleteNodeEntitiesTable',
-        '/config/global/models/*/class' => 'obsoleteNodeModelsClass',
-        '/config/global/helpers/*/class' => 'obsoleteNodeHelpersClass',
-        '/config/global/blocks/*/class' => 'obsoleteNodeBlocksClass',
-        '/config/global/models/*/resourceModel' => 'obsoleteNodeResourceModel',
-        '/config/global/page/layouts' => 'obsoleteNodePageLayouts',
-        '/config/global/cms/layouts' => 'obsoleteNodeCmsLayouts',
-        '/config/global/payment/cc/types/*/validator' => 'obsoleteNodeTypesValidator',
-        '/config/global/payment' => 'obsoleteNodeGlobalPayment',
-        '/config/adminhtml/menu' => 'obsoleteNodeAdminhtmlMenu',
-        '/config/adminhtml/acl' => 'obsoleteNodeAdminhtmlAcl',
-        '/config/adminhtml/global_search' => 'obsoleteNodeAdminhtmlGlobalSearch',
-        '/config/*[self::global|self::adminhtml|self::frontend]/di' => 'obsoleteNodeDi',
-        '/config/*[self::global|self::adminhtml|self::frontend]/events' => 'obsoleteNodeEvents',
-        '/config/*[self::global|self::adminhtml|self::frontend]/routers' => 'obsoleteNodeRouters',
-        '/config/global/importexport' => 'obsoleteNodeGlobalImportExport',
-        '/config/global/catalog/product/type' => 'obsoleteNodeProductType',
-        '/config/global/catalog/product/options' => 'obsoleteNodeProductOptions',
-        '/config/global/catalog/product/media/image_types' => 'obsoleteNodeMediaImageTypes',
-        '/config/global/eav_attributes' => 'obsoleteNodeEavAttributes',
-        '/config/global/index' => 'obsoleteNodeGlobalIndex',
-        '/config/global/catalogrule' => 'obsoleteNodeGlobalCatalogRule',
-        '/config/global/salesrule' => 'obsoleteNodeGlobalSalesRule',
-        '/config/global/session' => 'obsoleteNodeGlobalSession',
-        '/config/global/ignore_user_agents' => 'obsoleteNodeGlobalIgnoreUserAgents',
-        '/config/global/request' => 'obsoleteNodeGlobalRequest',
-        '/config/global/secure_url' => 'obsoleteNodeGlobalSecureUrl',
-        '/config/global/dev' => 'obsoleteNodeGlobalDev',
-        '/config/global/webapi' => 'obsoleteNodeGlobalWebapi',
-        '/config/global/cms' => 'obsoleteNodeGlobalCms',
-        '/config/global/widget' => 'obsoleteNodeGlobalWidget',
-        '/config/global/catalog/product/flat/max_index_count' => 'obsoleteNodeFlatMaxIndexCount',
-        '/config/global/catalog/product/flat/attribute_groups' => 'obsoleteNodeFlatAttributeGroups',
-        '/config/global/catalog/product/flat/add_filterable_attributes' => 'obsoleteNodeFlatAddIterableAttributes',
-        '/config/global/catalog/product/flat/add_child_data' => 'obsoleteNodeFlatAddChildData',
-        '/config/global/catalog/content/template_filter' => 'obsoleteNodeContentTemplateFilter',
-        '/config/frontend/catalog/per_page_values/list' => 'obsoleteNodePerPageValuesList',
-        '/config/frontend/catalog/per_page_values/grid' => 'obsoleteNodePerPageValuesGrid',
-        '/config/global/catalog/product/design' => 'obsoleteNodeProductDesign',
-        '/config/global/catalog/product/attributes' => 'obsoleteNodeProductAttributes',
-        '/config/global/eav_frontendclasses' => 'obsoleteNodeGlobalEavFrontendClasses',
-        '/config/global/resources' => 'obsoleteNodeGlobalResources',
-        '/config/global/resource' => 'obsoleteNodeGlobalResource',
-        '/config/*/events/core_block_abstract_to_html_after' => 'obsoleteNodeEventsCoreBlockAbstract',
-        '/config/*/events/catalog_controller_product_delete' => 'obsoleteNodeEventsCatalogController',
-        '/config//observers/*/args' => 'obsoleteNodeObserversArgs',
-        '/config/default/design/theme' => 'obsoleteNodeDesignTheme',
-        '/config/global/theme' => 'obsoleteNodeGlobalTheme',
-        '/config/default/web/*/base_js_url' => 'obsoleteNodeWebBaseJsUrl',
-        '/config/default/web/*/base_skin_url' => 'obsoleteNodeWebBaseSkinUrl',
-        '/config/default/web/*/base_cache_url' => 'obsoleteNodeWebBaseCacheUrl',
-        '/config/global/cache/types/*/tags' => 'obsoleteNodeTypesTags',
-        '/config/global/disable_local_modules' => 'obsoleteNodeGlobalDisableLocalModules',
-        '/config/global/newsletter/template_filter' => 'obsoleteNodeNewsletterTemplateFilter',
-        '/config/*/layout' => 'obsoleteNodeConfigLayout',
-        '/config/frontend/product/collection/attributes' => 'obsoleteNodeProductCollectionAttributes',
-        '/config/frontend/category/collection/attributes' => 'obsoleteNodeCategoryCollectionAttributes',
-        '/config/global/sales/quote/item/product_attributes' => 'obsoleteNodeQuoteItemProductAttributes',
-        '/config/global/wishlist/item/product_attributes' => 'obsoleteNodeWishlistItemProductAttributes',
-        '/config/global/catalog/product/flat/attribute_nodes' => 'obsoleteNodeFlatAttributeNodes',
-        '/config/global/customer/address/formats' => 'obsoleteNodeCustomerAddressFormats',
-        '/config/global/pdf' => 'obsoleteNodeGlobalPdf',
-        '/config/install' => 'obsoleteNodeConfigInstall',
-        '/config/install/design' => 'obsoleteNodeConfigInstallDesign',
-        '/config/adminhtml/design' => 'obsoleteNodeConfigAdminhtmlDesign',
-        '/config/frontend/design' => 'obsoleteNodeConfigFrontendDesign',
-        '/config/crontab' => 'obsoleteNodeConfigCrontab',
-        '/config/global/areas' => 'obsoleteNodeGlobalAreas',
-        '/config/vde' => 'obsoleteNodeConfigVde',
-        '/config/global/ignoredModules' => 'obsoleteNodeGlobalIgnoredModules',
-        '/config/global/helpers' => 'obsoleteNodeGlobalHelpers',
-        '/config/global/external_cache' => 'obsoleteNodeGlobalExternalCache',
-        '/config/global/currency/import/services' => 'obsoleteNodeCurrencyImportServices',
-        '/config/global/template' => 'obsoleteNodeGlobalTemplate',
-        '/config/default/general/file/sitemap_generate_valid_paths' => 'obsoleteNodeFileSitemap',
-        '/config/dev/css/minify_adapter' => 'obsoleteNodeCssMinify',
-        '/config/dev/js/minify_adapter' => 'obsoleteNodeJsMinify',
-        '/config/global/full_page_cache' => 'obsoleteNodeGlobalFullPageCache',
-        '/config/adminhtml/enterprise/admingws' => 'obsoleteNodeEnterpriseAdmingws',
-        '/config/adminhtml/enterprise/websiterestriction' => 'obsoleteNodeEnterpriseWebsiteRestriction',
-        '/config/global/enterprise_cms' => 'obsoleteNodeGlobalEnterpriseCms',
-        '/config/global/enterprise/banner' => 'obsoleteNodeGlobalEnterpriseBanner',
-        '/config/global/enterprise/giftcardaccount' => 'obsoleteNodeGlobalEnterpriseGiftCardAccount',
-        '/config/global/skip_process_modules_updates' => 'obsoleteNodeGlobalSkipProcess',
-        '/config/system/page_cache' => 'obsoleteNodeSystemPageCache',
-        '/config/system/cms/content/versioning' => 'obsoleteNodeContentVersioning',
-    ];
+    private const ERROR_CODE_CONFIG = 'ObsoleteNodeInConfig';
 
     /**
      * @inheritdoc
@@ -164,7 +63,7 @@ public function process(File $phpcsFile, $stackPtr)
                         $suggestion
                     ),
                     dom_import_simplexml($match)->getLineNo()-1,
-                    $this->obsoleteNodesErrorCodes[$xpath]
+                    self::ERROR_CODE_CONFIG
                 );
             }
         }
@@ -196,15 +95,15 @@ private function getObsoleteNodes(): array
             '/config/global/cache/betatypes' => '',
             '/config/admin/fieldsets' => '',
             '/config/general/locale' =>
-                'This configuration moved to DI configuration of \Magento\Framework\Locale\ConfigInterface',
+                'This configuration moved to Di configuration of \Magento\Framework\Locale\ConfigInterface',
             '/config/global/can_use_base_url' =>
-                'This configuration moved to DI configuration of \Magento\Backend\App\Action\Context class',
+                'This configuration moved to Di configuration of \Magento\Backend\App\Action\Context class',
             '/config/global/locale/allow/codes' =>
-                'This configuration moved to DI configuration of \Magento\Framework\Locale\ConfigInterface',
+                'This configuration moved to Di configuration of \Magento\Framework\Locale\ConfigInterface',
             '/config/global/locale/allow/currencies' =>
-                'This configuration moved to DI configuration of \Magento\Framework\Locale\ConfigInterface',
+                'This configuration moved to Di configuration of \Magento\Framework\Locale\ConfigInterface',
             '/config/global/mime/types' =>
-                'This configuration moved to DI configuration for \Magento\Downloadable\Helper\File class',
+                'This configuration moved to Di configuration for \Magento\Downloadable\Helper\File class',
             '/config/global/models/*/deprecatedNode' => '',
             '/config/global/models/*/entities/*/table' => '',
             '/config/global/models/*/class' => '',
@@ -219,68 +118,68 @@ private function getObsoleteNodes(): array
             '/config/adminhtml/menu' => 'Move them to adminhtml.xml.',
             '/config/adminhtml/acl' => 'Move them to adminhtml.xml.',
             '/config/adminhtml/global_search' =>
-                'This configuration moved to DI configuration of \Magento\Backend\Controller\Index',
+                'This configuration moved to Di configuration of \Magento\Backend\Controller\Index',
             '/config/*[self::global|self::adminhtml|self::frontend]/di' => 'This configuration moved to di.xml file',
             '/config/*[self::global|self::adminhtml|self::frontend]/events' =>
                 'This configuration moved to events.xml file',
             '/config/*[self::global|self::adminhtml|self::frontend]/routers' =>
                 'Routes configuration moved to routes.xml file,' .
-                'routers list can be set through DI configuration of \Magento\Framework\App\RouterList model',
+                'routers list can be set through Di configuration of \Magento\Framework\App\RouterList model',
             '/config/global/importexport' => 'This configuration moved to import.xml and export.xml files',
             '/config/global/catalog/product/type' => 'This configuration moved to product_types.xml file',
             '/config/global/catalog/product/options' => 'This configuration moved to product_options.xml file',
-            '/config/global/catalog/product/media/image_types' => 'This configuration moved to DI configuration of ' .
+            '/config/global/catalog/product/media/image_types' => 'This configuration moved to Di configuration of ' .
                 '\Magento\Backend\Block\Catalog\Product\Frontend\Product\Watermark',
             '/config/global/eav_attributes' => 'This configuration moved to eav_attributes.xml file',
             '/config/global/index' => 'This configuration moved to indexers.xml file',
             '/config/global/catalogrule' =>
-                'This configuration moved to DI configuration of \Magento\CatalogRule\Model\Rule',
+                'This configuration moved to Di configuration of \Magento\CatalogRule\Model\Rule',
             '/config/global/salesrule' =>
-                'This configuration moved to DI configuration of \Magento\SalesRule\Helper\Coupon',
+                'This configuration moved to Di configuration of \Magento\SalesRule\Helper\Coupon',
             '/config/global/session' =>
-                'This configuration moved to DI configuration of \Magento\Framework\Session\Validator',
+                'This configuration moved to Di configuration of \Magento\Framework\Session\Validator',
             '/config/global/ignore_user_agents' =>
-                'This configuration moved to DI configuration of \Magento\Log\Model\Visitor',
+                'This configuration moved to Di configuration of \Magento\Log\Model\Visitor',
             '/config/global/request' =>
-                'This configuration moved to DI configuration of \Magento\Framework\App\RequestInterface',
+                'This configuration moved to Di configuration of \Magento\Framework\App\RequestInterface',
             '/config/global/secure_url' =>
-                'This configuration moved to DI configuration of \Magento\Framework\Url\SecurityInfo',
+                'This configuration moved to Di configuration of \Magento\Framework\Url\SecurityInfo',
             '/config/global/dev' =>
-                'This configuration moved to DI configuration of \Magento\Framework\App\Action\Context',
+                'This configuration moved to Di configuration of \Magento\Framework\App\Action\Context',
             '/config/global/webapi' =>
-                'This configuration moved to DI configuration of '.
+                'This configuration moved to Di configuration of '.
                 ' \Magento\Webapi\Controller\Request\Rest\Interpreter\Factory' .
                 ' and \Magento\Webapi\Controller\Response\Rest\Renderer\Factory',
             '/config/global/cms' =>
-                'This configuration moved to DI configuration of \Magento\Cms\Model\Wysiwyg\Images\Storage' .
+                'This configuration moved to Di configuration of \Magento\Cms\Model\Wysiwyg\Images\Storage' .
                 ' and \Magento\Cms\Model\Wysiwyg\Config',
             '/config/global/widget' =>
-                'This configuration moved to DI configuration of \Magento\Cms\Model\Template\FilterProvider',
+                'This configuration moved to Di configuration of \Magento\Cms\Model\Template\FilterProvider',
             '/config/global/catalog/product/flat/max_index_count' =>
-                'This configuration moved to DI configuration of '.
+                'This configuration moved to Di configuration of '.
                 '\Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer',
             '/config/global/catalog/product/flat/attribute_groups' =>
-                'This configuration moved to DI configuration of '.
+                'This configuration moved to Di configuration of '.
                 '\Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer',
             '/config/global/catalog/product/flat/add_filterable_attributes' =>
-                'This configuration moved to DI configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
+                'This configuration moved to Di configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
             '/config/global/catalog/product/flat/add_child_data' =>
-                'This configuration moved to DI configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
+                'This configuration moved to Di configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
             '/config/global/catalog/content/template_filter' =>
-                'This configuration moved to DI configuration of \Magento\Catalog\Helper\Data',
+                'This configuration moved to Di configuration of \Magento\Catalog\Helper\Data',
             '/config/frontend/catalog/per_page_values/list' =>
-                'This configuration moved to DI configuration of \Magento\Catalog\Model\Config\Source\ListPerPage',
+                'This configuration moved to Di configuration of \Magento\Catalog\Model\Config\Source\ListPerPage',
             '/config/frontend/catalog/per_page_values/grid' =>
-                'This configuration moved to DI configuration of \Magento\Catalog\Model\Config\Source\GridPerPage',
-            '/config/global/catalog/product/design' => 'This configuration moved to DI configuration of' .
+                'This configuration moved to Di configuration of \Magento\Catalog\Model\Config\Source\GridPerPage',
+            '/config/global/catalog/product/design' => 'This configuration moved to Di configuration of' .
                 ' \Magento\Catalog\Model\Entity\Product\Attribute\Design\Option\Container',
             '/config/global/catalog/product/attributes' => 'This configuration moved catalog_attributes.xml',
             '/config/global/eav_frontendclasses' => 'This configuration was removed. ' .
                 'Please pluginize \Magento\Eav\Helper\Data::getFrontendClasses to extend frontend classes list',
             '/config/global/resources' =>
-                'This configuration moved to DI configuration of \Magento\Framework\App\ResourceConnection',
+                'This configuration moved to Di configuration of \Magento\Framework\App\ResourceConnection',
             '/config/global/resource' =>
-                'This configuration moved to DI configuration of \Magento\Framework\App\ResourceConnection',
+                'This configuration moved to Di configuration of \Magento\Framework\App\ResourceConnection',
             '/config/*/events/core_block_abstract_to_html_after' =>
                 'Event has been replaced with "core_layout_render_element"',
             '/config/*/events/catalog_controller_product_delete' => '',
@@ -312,25 +211,25 @@ private function getObsoleteNodes(): array
             '/config/frontend/design' => 'Configurations moved to DI file settings',
             '/config/crontab' => 'All cron configurations moved to crontab.xml',
             '/config/global/areas' => 'Configurations moved to DI file settings',
-            '/config/vde' => 'Was moved to DI',
-            '/config/global/ignoredModules' => 'Was replaced using DI',
-            '/config/global/helpers' => 'Was replaced using DI',
-            '/config/global/external_cache' => 'Was replaced using DI',
+            '/config/vde' => 'Was moved to di',
+            '/config/global/ignoredModules' => 'Was replaced using di',
+            '/config/global/helpers' => 'Was replaced using di',
+            '/config/global/external_cache' => 'Was replaced using di',
             '/config/global/currency/import/services' => 'Configurations moved to DI file settings',
             '/config/global/template' => 'Use /config/template of email_templates.xml',
             '/config/default/general/file/sitemap_generate_valid_paths' => '/config/default/sitemap/file/valid_paths',
-            '/config/dev/css/minify_adapter' => 'Was replaced using DI',
-            '/config/dev/js/minify_adapter' => 'Was replaced using DI',
+            '/config/dev/css/minify_adapter' => 'Was replaced using di',
+            '/config/dev/js/minify_adapter' => 'Was replaced using di',
             '/config/global/full_page_cache' => '/config/global/cache_advanced/full_page',
             '/config/adminhtml/enterprise/admingws' => 'This configuration moved to admingws.xml file',
             '/config/adminhtml/enterprise/websiterestriction' =>
                 'This configuration moved to websiterestrictions.xml file',
             '/config/global/enterprise_cms' => 'This configuration moved to menu_hierarchy.xml file',
             '/config/global/enterprise/banner' =>
-                'This configuration moved to DI configuration of \Magento\Banner\Model\Config',
+                'This configuration moved to Di configuration of \Magento\Banner\Model\Config',
             '/config/global/enterprise/giftcardaccount' =>
-                'This configuration moved to DI configuration of \Magento\GiftCardAccountModelPool',
-            '/config/global/skip_process_modules_updates' => 'Was replaced using DI',
+                'This configuration moved to Di configuration of \Magento\GiftCardAccountModelPool',
+            '/config/global/skip_process_modules_updates' => 'Was replaced using di',
             '/config/system/page_cache' => 'Module is eliminated. Use PageCache module instead',
             '/config/system/cms/content/versioning' => 'Functionality is eliminated',
         ];
diff --git a/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php b/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php
index 9dadee00..765ae5f1 100644
--- a/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php
+++ b/Magento2/Sniffs/Legacy/ObsoleteResponseSniff.php
@@ -32,16 +32,16 @@ class ObsoleteResponseSniff implements Sniff
      * @var string[]
      */
     private $obsoleteResponseWarningCodes = [
-        'loadLayout' => 'loadLayoutResponseMethodFound',
-        'renderLayout' => 'renderLayoutResponseMethodFound',
-        '_redirect' => 'redirectResponseMethodFound',
-        '_forward' => 'forwardResponseMethodFound',
-        '_setActiveMenu' => 'setActiveMenuResponseMethodFound',
-        '_addBreadcrumb' => 'addBreadcrumbResponseMethodFound',
-        '_addContent' => 'addContentResponseMethodFound',
-        '_addLeft' => 'addLeftResponseMethodFound',
-        '_addJs' => 'addJsResponseMethodFound',
-        '_moveBlockToContainer' => 'moveBlockToContainerResponseMethodFound',
+        'loadLayout' => 'LoadLayoutResponseMethodFound',
+        'renderLayout' => 'RenderLayoutResponseMethodFound',
+        '_redirect' => 'RedirectResponseMethodFound',
+        '_forward' => 'ForwardResponseMethodFound',
+        '_setActiveMenu' => 'SetActiveMenuResponseMethodFound',
+        '_addBreadcrumb' => 'AddBreadcrumbResponseMethodFound',
+        '_addContent' => 'AddContentResponseMethodFound',
+        '_addLeft' => 'AddLeftResponseMethodFound',
+        '_addJs' => 'AddJsResponseMethodFound',
+        '_moveBlockToContainer' => 'MoveBlockToContainerResponseMethodFound',
     ];
     
     /**
diff --git a/Magento2/Sniffs/NamingConvention/InterfaceNameSniff.php b/Magento2/Sniffs/NamingConvention/InterfaceNameSniff.php
index 2ad688ec..8daf5226 100644
--- a/Magento2/Sniffs/NamingConvention/InterfaceNameSniff.php
+++ b/Magento2/Sniffs/NamingConvention/InterfaceNameSniff.php
@@ -45,16 +45,16 @@ public function register()
     /**
      * @inheritdoc
      */
-    public function process(File $sourceFile, $stackPtr)
+    public function process(File $phpcsFile, $stackPtr)
     {
-        $tokens = $sourceFile->getTokens();
+        $tokens = $phpcsFile->getTokens();
         $declarationLine = $tokens[$stackPtr]['line'];
         $suffixLength = strlen($this->interfaceSuffix);
         // Find first T_STRING after 'interface' keyword in the line and verify it
         while ($tokens[$stackPtr]['line'] === $declarationLine) {
             if ($tokens[$stackPtr]['type'] === 'T_STRING') {
                 if (substr($tokens[$stackPtr]['content'], 0 - $suffixLength) !== $this->interfaceSuffix) {
-                    $sourceFile->addWarning($this->warningMessage, $stackPtr, $this->warningCode);
+                    $phpcsFile->addWarning($this->warningMessage, $stackPtr, $this->warningCode);
                 }
                 break;
             }
diff --git a/Magento2/Sniffs/NamingConvention/ReservedWordsSniff.php b/Magento2/Sniffs/NamingConvention/ReservedWordsSniff.php
index 19b80e41..13109c58 100644
--- a/Magento2/Sniffs/NamingConvention/ReservedWordsSniff.php
+++ b/Magento2/Sniffs/NamingConvention/ReservedWordsSniff.php
@@ -36,43 +36,8 @@ class ReservedWordsSniff implements Sniff
         'numeric' => '7',
     ];
 
-    /**
-     * @var string[]
-     */
-    private $classErrorCodes = [
-        'int' => 'IntForbiddenAsClassName',
-        'float' => 'FloatForbiddenAsClassName',
-        'bool' => 'boolForbiddenAsClassName',
-        'string' => 'stringForbiddenAsClassName',
-        'true' => 'trueForbiddenAsClassName',
-        'false' => 'falseForbiddenAsClassName',
-        'null' => 'nullForbiddenAsClassName',
-        'void' => 'voidForbiddenAsClassName',
-        'iterable' => 'iterableForbiddenAsClassName',
-        'resource' => 'resourceForbiddenAsClassName',
-        'object' => 'objectForbiddenAsClassName',
-        'mixed' => 'mixedForbiddenAsClassName',
-        'numeric' => 'numericForbiddenAsClassName',
-    ];
-
-    /**
-     * @var string[]
-     */
-    private $namespaceErrorCodes = [
-        'int' => 'IntForbiddenAsNameSpace',
-        'float' => 'FloatForbiddenAsNameSpace',
-        'bool' => 'boolForbiddenAsNameSpace',
-        'string' => 'stringForbiddenAsNameSpace',
-        'true' => 'trueForbiddenAsNameSpace',
-        'false' => 'falseForbiddenAsNameSpace',
-        'null' => 'nullForbiddenAsNameSpace',
-        'void' => 'voidForbiddenAsNameSpace',
-        'iterable' => 'iterableForbiddenAsNameSpace',
-        'resource' => 'resourceForbiddenAsNameSpace',
-        'object' => 'objectForbiddenAsNameSpace',
-        'mixed' => 'mixedForbiddenAsNameSpace',
-        'numeric' => 'numericForbiddenAsNameSpace',
-    ];
+    private const CLASS_ERROR_CODE = 'ForbiddenAsClassName';
+    private const NAMESPACE_ERROR_CODE = 'ForbiddenAsNameSpace';
 
     /**
      * @inheritdoc
@@ -89,7 +54,7 @@ public function register()
      * @param int $stackPtr
      * @return void
      */
-    protected function validateNamespace(File $sourceFile, $stackPtr)
+    protected function validateNamespace(File $sourceFile, int $stackPtr)
     {
         $stackPtr += 2;
         $tokens = $sourceFile->getTokens();
@@ -103,7 +68,7 @@ protected function validateNamespace(File $sourceFile, $stackPtr)
                 $sourceFile->addError(
                     'Cannot use "%s" in namespace as it is reserved since PHP %s',
                     $stackPtr,
-                    $this->namespaceErrorCodes[strtolower($namespacePart)],
+                    self::NAMESPACE_ERROR_CODE,
                     [$namespacePart, $this->reservedWords[strtolower($namespacePart)]]
                 );
             }
@@ -118,7 +83,7 @@ protected function validateNamespace(File $sourceFile, $stackPtr)
      * @param int $stackPtr
      * @return void
      */
-    protected function validateClass(File $sourceFile, $stackPtr)
+    protected function validateClass(File $sourceFile, int $stackPtr)
     {
         $tokens = $sourceFile->getTokens();
         $stackPtr += 2; //skip "class" and whitespace
@@ -127,7 +92,7 @@ protected function validateClass(File $sourceFile, $stackPtr)
             $sourceFile->addError(
                 'Cannot use "%s" as class name as it is reserved since PHP %s',
                 $stackPtr,
-                $this->classErrorCodes[strtolower($className)],
+                self::CLASS_ERROR_CODE,
                 [$className, $this->reservedWords[$className]]
             );
         }
@@ -136,17 +101,17 @@ protected function validateClass(File $sourceFile, $stackPtr)
     /**
      * @inheritdoc
      */
-    public function process(File $sourceFile, $stackPtr)
+    public function process(File $phpcsFile, $stackPtr)
     {
-        $tokens = $sourceFile->getTokens();
+        $tokens = $phpcsFile->getTokens();
         switch ($tokens[$stackPtr]['code']) {
             case T_CLASS:
             case T_INTERFACE:
             case T_TRAIT:
-                $this->validateClass($sourceFile, $stackPtr);
+                $this->validateClass($phpcsFile, $stackPtr);
                 break;
             case T_NAMESPACE:
-                $this->validateNamespace($sourceFile, $stackPtr);
+                $this->validateNamespace($phpcsFile, $stackPtr);
                 break;
         }
     }
diff --git a/Magento2/Sniffs/PHP/AutogeneratedClassNotInConstructorSniff.php b/Magento2/Sniffs/PHP/AutogeneratedClassNotInConstructorSniff.php
index f99346af..6c56d07e 100644
--- a/Magento2/Sniffs/PHP/AutogeneratedClassNotInConstructorSniff.php
+++ b/Magento2/Sniffs/PHP/AutogeneratedClassNotInConstructorSniff.php
@@ -15,7 +15,7 @@
  */
 class AutogeneratedClassNotInConstructorSniff implements Sniff
 {
-    private const ERROR_CODE = 'AUTOGENERATED_CLASS_NOT_IN_CONSTRUCTOR';
+    private const ERROR_CODE = 'AutogeneratedClassNotInConstructor';
 
     /**
      * @var array
diff --git a/Magento2/Sniffs/PHP/LiteralNamespacesSniff.php b/Magento2/Sniffs/PHP/LiteralNamespacesSniff.php
index 705e154b..d76dae3e 100644
--- a/Magento2/Sniffs/PHP/LiteralNamespacesSniff.php
+++ b/Magento2/Sniffs/PHP/LiteralNamespacesSniff.php
@@ -37,11 +37,11 @@ public function register()
     /**
      * @inheritdoc
      */
-    public function process(File $sourceFile, $stackPtr)
+    public function process(File $phpcsFile, $stackPtr)
     {
-        $tokens = $sourceFile->getTokens();
-        if ($sourceFile->findPrevious(T_STRING_CONCAT, $stackPtr, $stackPtr - 3) ||
-            $sourceFile->findNext(T_STRING_CONCAT, $stackPtr, $stackPtr + 3)
+        $tokens = $phpcsFile->getTokens();
+        if ($phpcsFile->findPrevious(T_STRING_CONCAT, $stackPtr, $stackPtr - 3) ||
+            $phpcsFile->findNext(T_STRING_CONCAT, $stackPtr, $stackPtr + 3)
         ) {
             return;
         }
@@ -53,7 +53,7 @@ public function process(File $sourceFile, $stackPtr)
         }
 
         if (preg_match($this->literalNamespacePattern, $content) === 1) {
-            $sourceFile->addWarning(
+            $phpcsFile->addWarning(
                 "Use ::class notation instead.",
                 $stackPtr,
                 'LiteralClassUsage'

From 852a479d8a4ba28fe21d718672dee5934119ec2b Mon Sep 17 00:00:00 2001
From: Sergio Vera <svera@adobe.com>
Date: Tue, 26 Oct 2021 17:11:00 +0200
Subject: [PATCH 10/11] AC-1549: Made suggestions

---
 .../Sniffs/Legacy/ObsoleteConnectionSniff.php | 22 ++++++++++---------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php b/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php
index c79844a5..74a74394 100644
--- a/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php
+++ b/Magento2/Sniffs/Legacy/ObsoleteConnectionSniff.php
@@ -16,16 +16,18 @@ class ObsoleteConnectionSniff implements Sniff
      * @var string[]
      */
     private $obsoleteMethods = [
-        '_getReadConnection' => 'FoundObsoleteMethod_getReadConnection',
-        '_getWriteConnection' => 'FoundObsoleteMethod_getWriteConnection',
-        '_getReadAdapter' => 'FoundObsoleteMethod_getReadAdapter',
-        '_getWriteAdapter' => 'FoundObsoleteMethod_getWriteAdapter',
-        'getReadConnection' => 'FoundObsoleteMethodGetReadConnection',
-        'getWriteConnection' => 'FoundObsoleteMethodGetWriteConnection',
-        'getReadAdapter' => 'FoundObsoleteMethodGetReadAdapter',
-        'getWriteAdapter' => 'FoundObsoleteMethodGetWriteAdapter',
+        '_getReadConnection',
+        '_getWriteConnection',
+        '_getReadAdapter',
+        '_getWriteAdapter',
+        'getReadConnection',
+        'getWriteConnection',
+        'getReadAdapter',
+        'getWriteAdapter',
     ];
 
+    private const OBSOLETE_METHOD_ERROR_CODE = 'ObsoleteMethodFound';
+
     /**
      * @inheritdoc
      */
@@ -56,12 +58,12 @@ private function validateObsoleteMethod(File $phpcsFile, int $stackPtr)
         $tokens = $phpcsFile->getTokens();
         $stringPos = $phpcsFile->findNext(T_STRING, $stackPtr + 1);
         
-        foreach ($this->obsoleteMethods as $method => $errorCode) {
+        foreach ($this->obsoleteMethods as $method) {
             if ($tokens[$stringPos]['content'] === $method) {
                 $phpcsFile->addWarning(
                     sprintf("Contains obsolete method: %s. Please use getConnection method instead.", $method),
                     $stackPtr,
-                    $errorCode
+                    self::OBSOLETE_METHOD_ERROR_CODE
                 );
             }
         }

From 3d3dc9e54ba206b7272acecb73883a1fdea52da5 Mon Sep 17 00:00:00 2001
From: Sergio Vera <svera@adobe.com>
Date: Tue, 26 Oct 2021 17:17:22 +0200
Subject: [PATCH 11/11] AC-1549: Made suggestions

---
 Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php | 34 +++++++++----------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
index dd4d06d1..4217ecda 100644
--- a/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
+++ b/Magento2/Sniffs/Legacy/PhtmlTemplateSniff.php
@@ -16,19 +16,19 @@ class PhtmlTemplateSniff implements Sniff
     private const WARNING_CODE_THIS_USAGE = 'ThisUsageObsolete';
     private const WARNING_CODE_PROTECTED_PRIVATE_BLOCK_ACCESS = 'ProtectedPrivateBlockAccess';
 
-    private const WARNING_CODES_OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES = [
-        '/(["\'])jquery\/ui\1/' => 'FoundJQueryUI',
-        '/data-mage-init=(?:\'|")(?!\s*{\s*"[^"]+")/' => 'FoundDataMageInit',
-        '@x-magento-init.>(?!\s*+{\s*"[^"]+"\s*:\s*{\s*"[\w/-]+")@i' => 'FoundXMagentoInit',
-    ];
-
-    private const OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES = [
-        '/(["\'])jquery\/ui\1/' => 'Please do not use "jquery/ui" library in templates. Use needed jquery ' .
-            'ui widget instead.',
-        '/data-mage-init=(?:\'|")(?!\s*{\s*"[^"]+")/' => 'Please do not initialize JS component in php. Do ' .
-            'it in template.',
-        '@x-magento-init.>(?!\s*+{\s*"[^"]+"\s*:\s*{\s*"[\w/-]+")@i' => 'Please do not initialize JS component ' .
-            'in php. Do it in template.',
+    private const OBSOLETE_REGEX = [
+        'FoundJQueryUI' => [
+            'pattern' => '/(["\'])jquery\/ui\1/',
+            'message' => 'Please do not use "jquery/ui" library in templates. Use needed jquery ui widget instead'
+        ],
+        'FoundDataMageInit' => [
+            'pattern' => '/data-mage-init=(?:\'|")(?!\s*{\s*"[^"]+")/',
+            'message' => 'Please do not initialize JS component in php. Do it in template'
+        ],
+        'FoundXMagentoInit' => [
+            'pattern' => '@x-magento-init.>(?!\s*+{\s*"[^"]+"\s*:\s*{\s*"[\w/-]+")@i',
+            'message' => 'Please do not initialize JS component in php. Do it in template'
+        ],
     ];
     
     /**
@@ -143,12 +143,12 @@ private function checkHtmlSpecificFiles(File $phpcsFile, int $stackPtr): void
     {
         $content = $phpcsFile->getTokensAsString($stackPtr, 1);
         
-        foreach (self::OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES as $obsoleteRegex => $errorMessage) {
-            if (preg_match($obsoleteRegex, $content)) {
+        foreach (self::OBSOLETE_REGEX as $code => $data) {
+            if (preg_match($data['pattern'], $content)) {
                 $phpcsFile->addWarning(
-                    $errorMessage,
+                    $data['message'],
                     $stackPtr,
-                    self::WARNING_CODES_OBSOLETE_REGEX_IN_SPECIFIC_PHTML_TEMPLATES[$obsoleteRegex]
+                    $code
                 );
             }
         }