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

Squiz/DisallowMultipleAssignments: fix false positive when handling parameter default values #557

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

rodrigoprimo
Copy link
Contributor

Description

This PR fixes a bug in the code used to check if a equal sign is used to set a default value for a parameter. This bug caused a false positive when the function declaration was missing the closing parenthesis (which can happen during live coding).

Suggested changelog entry

Squiz.PHP.DisallowMultipleAssignments false positive for parameter default values when the closing parenthesis of the function declaration is missing.

Related issues/external references

Fixes #551

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
    • This change is only breaking for integrators, not for external standards or end-users.
  • Documentation improvement

PR checklist

  • I have checked there is no other PR open for the same change.
  • I have read the Contribution Guidelines.
  • I grant the project the right to include and distribute the code under the BSD-3-Clause license (and I have the right to grant these rights).
  • I have added tests to cover my changes.
  • I have verified that the code complies with the projects coding standards.
  • [Required for new sniffs] I have added XML documentation for the sniff.

Doing this to be able to create a test with a syntax error on separate
file.
There was a bug in the code used to check if a equal sign is used to set
a default value for a parameter that caused a false positive when the
function was missing the closing parenthesis (which can happen during
live coding). This commit fixes this false positive.
Comment on lines 48 to 52
$opener = $tokens[$function]['parenthesis_opener'];
$closer = $tokens[$function]['parenthesis_closer'];
if ($opener < $stackPtr && $closer > $stackPtr) {
if ($closer === null || ($opener < $stackPtr && $closer > $stackPtr)) {
return;
}
Copy link
Member

Choose a reason for hiding this comment

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

The code is accessing the parenthesis_closer before this condition.

Would it make sense to move the check for a missing parenthesis closer up ?

I.e.:

Suggested change
$opener = $tokens[$function]['parenthesis_opener'];
$closer = $tokens[$function]['parenthesis_closer'];
if ($opener < $stackPtr && $closer > $stackPtr) {
if ($closer === null || ($opener < $stackPtr && $closer > $stackPtr)) {
return;
}
if (isset($tokens[$function]['parenthesis_closer']) === false) {
// Live coding/parse error. Bow out.
return;
}
$opener = $tokens[$function]['parenthesis_opener'];
$closer = $tokens[$function]['parenthesis_closer'];
if ($opener < $stackPtr && $closer > $stackPtr) {
return;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants