Skip to content

Commit 3002553

Browse files
committed
AC-665: Create phpcs static check for ConfigTest
1 parent d552f6a commit 3002553

File tree

6 files changed

+326
-0
lines changed

6 files changed

+326
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<?php
2+
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
8+
namespace Magento2\Sniffs\Legacy;
9+
10+
use DOMDocument;
11+
use PHP_CodeSniffer\Sniffs\Sniff;
12+
use PHP_CodeSniffer\Files\File;
13+
14+
class ObsoleteConfigNodesSniff implements Sniff
15+
{
16+
private const ERROR_MESSAGE_CONFIG = "Nodes identified by XPath '%s' are obsolete. %s";
17+
private const ERROR_CODE_CONFIG = 'ObsoleteNodeInConfig';
18+
19+
/**
20+
* @inheritdoc
21+
*/
22+
public function register()
23+
{
24+
return [
25+
T_INLINE_HTML,
26+
];
27+
}
28+
29+
/**
30+
* @inheritdoc
31+
*/
32+
public function process(File $phpcsFile, $stackPtr)
33+
{
34+
if ($stackPtr > 0) {
35+
return;
36+
}
37+
38+
// We need to format the incoming XML to avoid tags split into several lines. In that case, PHP's DOMElement
39+
// returns the position of the closing /> as the position of the tag, and we need the position of <
40+
// instead, as it is the one we compare with $stackPtr later on.
41+
$xml = simplexml_load_string($this->getFormattedXML($phpcsFile));
42+
if ($xml === false) {
43+
$phpcsFile->addError(
44+
sprintf(
45+
"Couldn't parse contents of '%s', check that they are in valid XML format",
46+
$phpcsFile->getFilename(),
47+
),
48+
$stackPtr,
49+
self::ERROR_CODE_CONFIG
50+
);
51+
}
52+
$obsoleteNodes = [];
53+
$obsoleteNodesFiles = glob(__DIR__ . '/_files/obsolete_config_nodes*.php');
54+
foreach ($obsoleteNodesFiles as $obsoleteNodesFile) {
55+
$obsoleteNodes = array_merge($obsoleteNodes, include $obsoleteNodesFile);
56+
}
57+
foreach ($obsoleteNodes as $xpath => $suggestion) {
58+
$matches = $xml->xpath($xpath);
59+
if (empty($matches)) {
60+
continue;
61+
}
62+
foreach ($matches as $match) {
63+
$phpcsFile->addError(
64+
sprintf(
65+
self::ERROR_MESSAGE_CONFIG,
66+
$xpath,
67+
$suggestion
68+
),
69+
dom_import_simplexml($match)->getLineNo()-1,
70+
self::ERROR_CODE_CONFIG
71+
);
72+
}
73+
}
74+
}
75+
76+
/**
77+
* Format the incoming XML to avoid tags split into several lines.
78+
*
79+
* @param File $phpcsFile
80+
* @return false|string
81+
*/
82+
private function getFormattedXML(File $phpcsFile)
83+
{
84+
$doc = new DomDocument('1.0');
85+
$doc->formatOutput = true;
86+
$doc->loadXML($phpcsFile->getTokensAsString(0, 999999));
87+
return $doc->saveXML();
88+
}
89+
90+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
/**
3+
* Obsolete configuration nodes
4+
*
5+
* Format: <class_name> => <replacement>
6+
*
7+
* Copyright © Magento, Inc. All rights reserved.
8+
* See COPYING.txt for license details.
9+
*/
10+
11+
// @codingStandardsIgnoreStart
12+
13+
return [
14+
'/config/global/fieldsets' => '',
15+
'/config/global/cache/betatypes' => '',
16+
'/config/admin/fieldsets' => '',
17+
'/config/general/locale' => 'This configuration moved to Di configuration of \Magento\Framework\Locale\ConfigInterface',
18+
'/config/global/can_use_base_url' => 'This configuration moved to Di configuration of \Magento\Backend\App\Action\Context class',
19+
'/config/global/locale/allow/codes' => 'This configuration moved to Di configuration of \Magento\Framework\Locale\ConfigInterface',
20+
'/config/global/locale/allow/currencies' => 'This configuration moved to Di configuration of \Magento\Framework\Locale\ConfigInterface',
21+
'/config/global/mime/types' => 'This configuration moved to Di configuration for \Magento\Downloadable\Helper\File class',
22+
'/config/global/models/*/deprecatedNode' => '',
23+
'/config/global/models/*/entities/*/table' => '',
24+
'/config/global/models/*/class' => '',
25+
'/config/global/helpers/*/class' => '',
26+
'/config/global/blocks/*/class' => '',
27+
'/config/global/models/*/resourceModel' => '',
28+
'/config/global/page/layouts' => 'Moved to page_layouts.xml',
29+
'/config/global/cms/layouts' => 'This was never used and is no longer supported',
30+
'/config/global/payment/cc/types/*/validator' => 'This configuration was moved to DI configuration of \Magento\Centinel\Model\StateFactory',
31+
'/config/global/payment' => 'Move them to payment.xml.',
32+
'/config/adminhtml/menu' => 'Move them to adminhtml.xml.',
33+
'/config/adminhtml/acl' => 'Move them to adminhtml.xml.',
34+
'/config/adminhtml/global_search' => 'This configuration moved to Di configuration of \Magento\Backend\Controller\Index',
35+
'/config/*[self::global|self::adminhtml|self::frontend]/di' => 'This configuration moved to di.xml file',
36+
'/config/*[self::global|self::adminhtml|self::frontend]/events' => 'This configuration moved to events.xml file',
37+
'/config/*[self::global|self::adminhtml|self::frontend]/routers' => 'Routes configuration moved to routes.xml file,' .
38+
'routers list can be set through Di configuration of \Magento\Framework\App\RouterList model',
39+
'/config/global/importexport' => 'This configuration moved to import.xml and export.xml files',
40+
'/config/global/catalog/product/type' => 'This configuration moved to product_types.xml file',
41+
'/config/global/catalog/product/options' => 'This configuration moved to product_options.xml file',
42+
'/config/global/catalog/product/media/image_types' => 'This configuration moved to Di configuration of ' .
43+
'\Magento\Backend\Block\Catalog\Product\Frontend\Product\Watermark',
44+
'/config/global/eav_attributes' => 'This configuration moved to eav_attributes.xml file',
45+
'/config/global/index' => 'This configuration moved to indexers.xml file',
46+
'/config/global/catalogrule' => 'This configuration moved to Di configuration of \Magento\CatalogRule\Model\Rule',
47+
'/config/global/salesrule' => 'This configuration moved to Di configuration of \Magento\SalesRule\Helper\Coupon',
48+
'/config/global/session' => 'This configuration moved to Di configuration of \Magento\Framework\Session\Validator',
49+
'/config/global/ignore_user_agents' => 'This configuration moved to Di configuration of \Magento\Log\Model\Visitor',
50+
'/config/global/request' => 'This configuration moved to Di configuration of \Magento\Framework\App\RequestInterface',
51+
'/config/global/secure_url' => 'This configuration moved to Di configuration of \Magento\Framework\Url\SecurityInfo',
52+
'/config/global/dev' => 'This configuration moved to Di configuration of \Magento\Framework\App\Action\Context',
53+
'/config/global/webapi' => 'This configuration moved to Di configuration of \Magento\Webapi\Controller\Request\Rest\Interpreter\Factory' .
54+
' and \Magento\Webapi\Controller\Response\Rest\Renderer\Factory',
55+
'/config/global/cms' => 'This configuration moved to Di configuration of \Magento\Cms\Model\Wysiwyg\Images\Storage' .
56+
' and \Magento\Cms\Model\Wysiwyg\Config',
57+
'/config/global/widget' => 'This configuration moved to Di configuration of \Magento\Cms\Model\Template\FilterProvider',
58+
'/config/global/catalog/product/flat/max_index_count' => 'This configuration moved to Di configuration of \Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer',
59+
'/config/global/catalog/product/flat/attribute_groups' => 'This configuration moved to Di configuration of \Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer',
60+
'/config/global/catalog/product/flat/add_filterable_attributes' => 'This configuration moved to Di configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
61+
'/config/global/catalog/product/flat/add_child_data' => 'This configuration moved to Di configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
62+
'/config/global/catalog/content/template_filter' => 'This configuration moved to Di configuration of \Magento\Catalog\Helper\Data',
63+
'/config/frontend/catalog/per_page_values/list' => 'This configuration moved to Di configuration of \Magento\Catalog\Model\Config\Source\ListPerPage',
64+
'/config/frontend/catalog/per_page_values/grid' => 'This configuration moved to Di configuration of \Magento\Catalog\Model\Config\Source\GridPerPage',
65+
'/config/global/catalog/product/design' => 'This configuration moved to Di configuration of' .
66+
' \Magento\Catalog\Model\Entity\Product\Attribute\Design\Option\Container',
67+
'/config/global/catalog/product/attributes' => 'This configuration moved catalog_attributes.xml',
68+
'/config/global/eav_frontendclasses' => 'This configuration was removed. ' .
69+
'Please pluginize \Magento\Eav\Helper\Data::getFrontendClasses to extend frontend classes list',
70+
'/config/global/resources' => 'This configuration moved to Di configuration of \Magento\Framework\App\ResourceConnection',
71+
'/config/global/resource' => 'This configuration moved to Di configuration of \Magento\Framework\App\ResourceConnection',
72+
'/config/*/events/core_block_abstract_to_html_after' => 'Event has been replaced with "core_layout_render_element"',
73+
'/config/*/events/catalog_controller_product_delete' => '',
74+
'/config//observers/*/args' => 'This was an undocumented and unused feature in event subscribers',
75+
'/config/default/design/theme' => 'Relocated to /config/<area>/design/theme',
76+
'/config/global/theme' => 'Configuration moved to DI file settings',
77+
'/config/default/web/*/base_js_url' => '',
78+
'/config/default/web/*/base_skin_url' => '/config/default/web/*/base_static_url',
79+
'/config/default/web/*/base_cache_url' => '/config/default/web/*/base_static_url',
80+
'/config/global/cache/types/*/tags' => 'use /config/global/cache/types/*/class node instead',
81+
'/config/global/disable_local_modules' => '',
82+
'/config/global/newsletter/tempate_filter' => 'Use DI configs to setup model for template processing',
83+
'/config/*/layout' => 'Use convention for layout files placement instead of configuration',
84+
'/config/frontend/product/collection/attributes' => 'Use /config/group[@name="catalog_product"] of catalog_attributes.xml',
85+
'/config/frontend/category/collection/attributes' => 'Use /config/group[@name="catalog_category"] of catalog_attributes.xml',
86+
'/config/global/sales/quote/item/product_attributes' => 'Use /config/group[@name="quote_item"] of catalog_attributes.xml',
87+
'/config/global/wishlist/item/product_attributes' => 'Use /config/group[@name="wishlist_item"] of catalog_attributes.xml',
88+
'/config/global/catalog/product/flat/attribute_nodes' => 'Use /config/global/catalog/product/flat/attribute_groups',
89+
'/config/global/customer/address/formats' => 'Use /config/format of address_formats.xml',
90+
'/config/global/pdf' => 'Use configuration in pdf.xml',
91+
'/config/install' => 'Configurations moved to DI file settings',
92+
'/config/install/design' => 'Configurations moved to DI file settings',
93+
'/config/adminhtml/design' => 'Configurations moved to DI file settings',
94+
'/config/frontend/design' => 'Configurations moved to DI file settings',
95+
'/config/crontab' => 'All cron configurations moved to crontab.xml',
96+
'/config/global/areas' => 'Configurations moved to DI file settings',
97+
'/config/vde' => 'Was moved to di',
98+
'/config/global/ignoredModules' => 'Was replaced using di',
99+
'/config/global/helpers' => 'Was replaced using di',
100+
'/config/global/external_cache' => 'Was replaced using di',
101+
'/config/global/currency/import/services' => 'Configurations moved to DI file settings',
102+
'/config/global/template' => 'Use /config/template of email_templates.xml',
103+
'/config/default/general/file/sitemap_generate_valid_paths' => '/config/default/sitemap/file/valid_paths',
104+
'/config/dev/css/minify_adapter' => 'Was replaced using di',
105+
'/config/dev/js/minify_adapter' => 'Was replaced using di',
106+
];
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/**
3+
* Obsolete configuration nodes, specific for EE
4+
*
5+
* Format: <class_name> => <replacement>
6+
*
7+
* Copyright © Magento, Inc. All rights reserved.
8+
* See COPYING.txt for license details.
9+
*/
10+
11+
return [
12+
'/config/global/full_page_cache' => '/config/global/cache_advanced/full_page',
13+
'/config/adminhtml/enterprise/admingws' => 'This configuration moved to admingws.xml file',
14+
'/config/adminhtml/enterprise/websiterestriction' => 'This configuration moved to websiterestrictions.xml file',
15+
'/config/global/enterprise_cms' => 'This configuration moved to menu_hierarchy.xml file',
16+
'/config/global/enterprise/banner' =>
17+
'This configuration moved to Di configuration of \Magento\Banner\Model\Config',
18+
'/config/global/enterprise/giftcardaccount' =>
19+
'This configuration moved to Di configuration of \Magento\GiftCardAccountModelPool',
20+
'/config/global/skip_process_modules_updates' => 'Was replaced using di',
21+
'/config/system/page_cache' => 'Module is eliminated. Use PageCache module instead',
22+
'/config/system/cms/content/versioning' => 'Functionality is eliminated',
23+
];
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
9+
<default>
10+
<analytics>
11+
<url>
12+
<signup>https://advancedreporting.rjmetrics.com/signup</signup>
13+
<update>https://advancedreporting.rjmetrics.com/update</update>
14+
<bi_essentials>https://dashboard.rjmetrics.com/v2/magento/signup</bi_essentials>
15+
<otp>https://advancedreporting.rjmetrics.com/otp</otp>
16+
<report>https://advancedreporting.rjmetrics.com/report</report>
17+
<notify_data_changed>https://advancedreporting.rjmetrics.com/report</notify_data_changed>
18+
<documentation>https://docs.magento.com/user-guide/reports/advanced-reporting.html</documentation>
19+
</url>
20+
<integration_name>Magento Analytics user</integration_name>
21+
<general>
22+
<collection_time>02,00,00</collection_time>
23+
<token/>
24+
</general>
25+
</analytics>
26+
<system>
27+
<media_storage_configuration>
28+
<allowed_resources>
29+
<analytics_folder>analytics</analytics_folder>
30+
</allowed_resources>
31+
</media_storage_configuration>
32+
</system>
33+
</default>
34+
<global>
35+
<fieldsets></fieldsets>
36+
<page>
37+
<layouts></layouts>
38+
</page>
39+
</global>
40+
</config>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
9+
<default>
10+
<analytics>
11+
<url>
12+
<signup>https://advancedreporting.rjmetrics.com/signup</signup>
13+
<update>https://advancedreporting.rjmetrics.com/update</update>
14+
<bi_essentials>https://dashboard.rjmetrics.com/v2/magento/signup</bi_essentials>
15+
<otp>https://advancedreporting.rjmetrics.com/otp</otp>
16+
<report>https://advancedreporting.rjmetrics.com/report</report>
17+
<notify_data_changed>https://advancedreporting.rjmetrics.com/report</notify_data_changed>
18+
<documentation>https://docs.magento.com/user-guide/reports/advanced-reporting.html</documentation>
19+
</url>
20+
<integration_name>Magento Analytics user</integration_name>
21+
<general>
22+
<collection_time>02,00,00</collection_time>
23+
<token/>
24+
</general>
25+
</analytics>
26+
<system>
27+
<media_storage_configuration>
28+
<allowed_resources>
29+
<analytics_folder>analytics</analytics_folder>
30+
</allowed_resources>
31+
</media_storage_configuration>
32+
</system>
33+
</default>
34+
</config>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento2\Tests\Legacy;
7+
8+
use PHP_CodeSniffer\Tests\Standards\AbstractSniffUnitTest;
9+
10+
class ObsoleteConfigNodesUnitTest extends AbstractSniffUnitTest
11+
{
12+
/**
13+
* @inheritdoc
14+
*/
15+
public function getErrorList($testFile = ''): array
16+
{
17+
if ($testFile === 'ObsoleteConfigNodesUnitTest.1.xml') {
18+
return [
19+
35 => 1,
20+
37 => 1,
21+
];
22+
}
23+
return [];
24+
}
25+
26+
/**
27+
* @inheritdoc
28+
*/
29+
public function getWarningList(): array
30+
{
31+
return [];
32+
}
33+
}

0 commit comments

Comments
 (0)