Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add variable analysis phpcs sniffs #8556

Merged
merged 12 commits into from
Apr 12, 2024

Conversation

reykjalin
Copy link
Contributor

@reykjalin reykjalin commented Apr 1, 2024

Part of #8436

Changes proposed in this Pull Request

Testing instructions

  1. Remove the VariableAnalysis.CodeAnalysis.VariableAnalysis excludes from phpcs.xml.dist.
  2. Run npm run lint:php and locate a file with an unused variable.
  3. Prepend _unused_ to all the unused variables in that file.
  4. Re-run phpcs for just that file: ./vendor/bin/phpcs --standard=phpcs.xml.dist <path/to/file>.
  5. Make sure no issues are reported.
    • Note: you may receive reports of mis-matched variable names in doc comments if you don't also update the doc comments.

  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@reykjalin reykjalin requested review from a team and rafaelzaleski and removed request for a team April 1, 2024 22:06
@reykjalin reykjalin changed the title Add/variable analysis phpcs sniffs Add variable analysis phpcs sniffs Apr 1, 2024
@botwoo
Copy link
Collaborator

botwoo commented Apr 1, 2024

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 8556 or branch name add/variable-analysis-phpcs-sniffs in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: 5713d32
  • Build time: 2024-04-12 04:01:09 UTC

Note: the build is updated when a new commit is pushed to this PR.

Copy link
Contributor

github-actions bot commented Apr 1, 2024

Size Change: 0 B

Total Size: 1.23 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.08 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.08 kB
release/woocommerce-payments/assets/css/success.css 158 B
release/woocommerce-payments/assets/css/success.rtl.css 158 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.02 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.02 kB
release/woocommerce-payments/dist/blocks-checkout.js 56.9 kB
release/woocommerce-payments/dist/cart-block.js 21.4 kB
release/woocommerce-payments/dist/cart.js 4.45 kB
release/woocommerce-payments/dist/checkout-rtl.css 599 B
release/woocommerce-payments/dist/checkout.css 599 B
release/woocommerce-payments/dist/checkout.js 37.8 kB
release/woocommerce-payments/dist/index-rtl.css 40.4 kB
release/woocommerce-payments/dist/index.css 40.4 kB
release/woocommerce-payments/dist/index.js 291 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.28 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 59.4 kB
release/woocommerce-payments/dist/multi-currency.css 3.29 kB
release/woocommerce-payments/dist/multi-currency.js 54.5 kB
release/woocommerce-payments/dist/order-rtl.css 733 B
release/woocommerce-payments/dist/order.css 735 B
release/woocommerce-payments/dist/order.js 41.7 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.21 kB
release/woocommerce-payments/dist/payment-gateways.css 1.21 kB
release/woocommerce-payments/dist/payment-gateways.js 38.5 kB
release/woocommerce-payments/dist/payment-request-rtl.css 155 B
release/woocommerce-payments/dist/payment-request.css 155 B
release/woocommerce-payments/dist/payment-request.js 12.4 kB
release/woocommerce-payments/dist/product-details-rtl.css 398 B
release/woocommerce-payments/dist/product-details.css 402 B
release/woocommerce-payments/dist/product-details.js 17.2 kB
release/woocommerce-payments/dist/settings-rtl.css 11 kB
release/woocommerce-payments/dist/settings.css 10.8 kB
release/woocommerce-payments/dist/settings.js 201 kB
release/woocommerce-payments/dist/subscription-edit-page.js 669 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 19.4 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 710 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 18.5 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 236 B
release/woocommerce-payments/dist/tos.js 21 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 4.67 kB
release/woocommerce-payments/dist/woopay-express-button-rtl.css 155 B
release/woocommerce-payments/dist/woopay-express-button.css 155 B
release/woocommerce-payments/dist/woopay-express-button.js 21.1 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.44 kB
release/woocommerce-payments/dist/woopay.css 4.41 kB
release/woocommerce-payments/dist/woopay.js 70.9 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 622 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 815 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.44 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.01 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 522 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 581 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/babel.config.js 160 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.css 2.37 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.js 13.5 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.rtl.css 2.37 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.03 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 291 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 403 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 299 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 742 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 572 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 411 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.8 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.83 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.52 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 502 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 355 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 429 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 781 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.27 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 392 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.05 kB

compressed-size-action

phpcs.xml.dist Outdated Show resolved Hide resolved
Copy link
Contributor

@rafaelzaleski rafaelzaleski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PHPCS was not scanning any files in my local environment until I commented out the following exclude pattern:

<exclude-pattern>./dev/*</exclude-pattern>

After removing this line, I was able to follow the testing instructions provided in the PR. However, even after prefixing the variable name with unused_, I still encountered the following error:


FILE: /Users/rafael-a8c/dev/a8c/woopay-dev/woocommerce-payments/includes/admin/class-wc-payments-admin-sections-overwrite.php
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FOUND 2 ERRORS AND 1 WARNING AFFECTING 3 LINES
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 39 | ERROR   | Doc comment for parameter "$unused_default_sections" missing (Squiz.Commenting.FunctionComment.MissingParamTag)
 42 | ERROR   | Doc comment for parameter $default_sections does not match actual variable name $unused_default_sections (Squiz.Commenting.FunctionComment.ParamNameNoMatch)
 46 | WARNING | The method parameter $unused_default_sections is never used (Generic.CodeAnalysis.UnusedFunctionParameter.Found)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

As an additional point, the VariableAnalysis plugin is being loaded upon executing composer install:

PHP CodeSniffer Config installed_paths set to ../../phpcompatibility/php-compatibility,../../phpcompatibility/phpcompatibility-paragonie,../../phpcompatibility/phpcompatibility-wp,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils,../../sirbrillig/phpcs-variable-analysis,../../slevomat/coding-standard,../../woocommerce/woocommerce-sniffs/src,../../wp-coding-standards/wpcs

For reference, here are my Composer and PHP versions:

Composer version 2.7.2, 2024-03-11 17:12:18
PHP version 8.1.27 (/usr/local/Cellar/php@8.1/8.1.27_1/bin/php)

Do you think the issue lies in the PR or in my environment? Do you have any advice?

@reykjalin
Copy link
Contributor Author

reykjalin commented Apr 3, 2024

PHPCS was not scanning any files in my local environment until I commented out the following exclude pattern:

<exclude-pattern>./dev/*</exclude-pattern>

🤯

I see in the phpcs report that you have your project stored in /Users/rafael-a8c/dev, what happens if you rename dev to something else? I'm wondering if the phpcs rule catches that for some reason 🤔
You could also see if changing ./dev/* to just dev/ changes anything?

I'll be very surprised if this is the problem. I wouldn't expect phpcs to look so far up the folder structure 🤔


However, even after prefixing the variable name with unused_, I still encountered the following error

Hmm, the doc comment errors are expected, but I guess we need to add Generic.CodeAnalysis.UnusedFunctionParameter.Found to our list of ignores since that will be replaced by the VariableAnalysis sniffs. 🤔


As an additional point, the VariableAnalysis plugin is being loaded upon executing composer install:

PHP CodeSniffer Config installed_paths set to ../../phpcompatibility/php-compatibility,../../phpcompatibility/phpcompatibility-paragonie,../../phpcompatibility/phpcompatibility-wp,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils,../../sirbrillig/phpcs-variable-analysis,../../slevomat/coding-standard,../../woocommerce/woocommerce-sniffs/src,../../wp-coding-standards/wpcs

I'm honestly not at all sure what this even means. I guess maybe something the VariableAnalysis do? Maybe @sirbrillig knows? This didn't happen until after we introduced the VariableAnalysis. Or at least I don't think it did 🤔

@reykjalin
Copy link
Contributor Author

I've updated the testing instructions to match the most recent changes 👍

@rafaelzaleski
Copy link
Contributor

I see in the phpcs report that you have your project stored in /Users/rafael-a8c/dev, what happens if you rename dev to something else? I'm wondering if the phpcs rule catches that for some reason 🤔
You could also see if changing ./dev/* to just dev/ changes anything?

That was the reason it wasn't working. I can't believe how much time I wasted because of it. 🤦

Copy link
Contributor

@rafaelzaleski rafaelzaleski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code looks good, and I was able to follow the instructions.
I can confirm that adding the prefix _unused_ to the variable with the VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable error makes the error disappear.

@reykjalin reykjalin added this pull request to the merge queue Apr 12, 2024
Merged via the queue into develop with commit f554ee5 Apr 12, 2024
22 checks passed
@reykjalin reykjalin deleted the add/variable-analysis-phpcs-sniffs branch April 12, 2024 18:20
naman03malhotra pushed a commit that referenced this pull request Apr 15, 2024
Co-authored-by: Shendy <73803630+shendy-a8c@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants