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

Tokenizer: Inconsistent conditions behavior for T_DEFAULT with/without curly braces #862

Open
3 tasks done
rodrigoprimo opened this issue Mar 7, 2025 · 2 comments
Open
3 tasks done

Comments

@rodrigoprimo
Copy link
Contributor

An inconsistency has been discovered in how the tokenizer handles conditions for T_DEFAULT statements depending on whether they use curly braces or not:

  • Without curly braces: The tokenizer sets conditions for all tokens until just before T_BREAK|T_RETURN|T_CONTINUE, which is the scope closer.
  • With curly braces: The tokenizer sets conditions until the T_BREAK|T_RETURN|T_CONTINUE token, which is not the scope closer.

This behavior was discovered while working on PR #850. It needs to be investigated whether this difference in behavior is intentional or not and if it is a bug that needs to be fixed.

This may be related to squizlabs/PHP_CodeSniffer#3794.

Code sample

switch($var) {
    default:       // Without curly braces.
        echo "a";
        break;     // T_BREAK does NOT have `conditions`.
}

switch($var) {
    default: {     // With curly braces.
        echo "b";
        break;      // T_BREAK has `conditions`.
    }
}

Please confirm

  • I have searched the issue list and am not opening a duplicate issue.
  • I have read the Contribution Guidelines and this is not a support question.
  • I have verified the issue still exists in the master branch of PHP_CodeSniffer.
@jrfnl
Copy link
Member

jrfnl commented Mar 7, 2025

@rodrigoprimo Just checking, but isn't this a duplicate of #810 ?

@rodrigoprimo
Copy link
Contributor Author

@jrfnl, I believe this issue and #810 are different issues. This one is about the tokenizer behaving differently when setting conditions for tokens depending on whether T_DEFAULT is used with or without curlies. #810 is about highlighting that one of the expectations of a tokenizer test (that the scope_condition of the scope closer points to T_DEFAULT) is invalid when T_SWITCH and T_DEFAULT share the scope closer.

They are related in that they are both about how the tokenizer handles the T_DEFAULT scope.

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

No branches or pull requests

2 participants