Skip to content

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

Open
@rodrigoprimo

Description

@rodrigoprimo

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions