Skip to content

Trait insteadof should be able to accept a name list, but only accepts a single name #190

Closed
@TysonAndre

Description

@TysonAndre

Version: between 0.0.5 and master

Expected: Should parse without error (<?php class C{use T1,T2,T3{T1::foo insteadof T2,T3;}} is syntactically valid)

https://secure.php.net/manual/en/language.oop5.traits.php#language.oop5.traits.conflict

(If there are 3 methods with the same list, one needs to exclude two of them, so it has to be a name list)

Observed: There were parse errors, MissingToken and SkippedToken were seen.

php dump.php 'class C{use T1,T2,T3{T1::foo insteadof T2,T3;}}'                                                           
Node\SourceFileNode                            
    statementList: Node\Statement\ClassDeclaration                                             
        classKeyword: Token: ClassKeyword(109): "class"                                        
        name: Token: Name(2): " C"             
        classMembers: Node\ClassMembersNode    
            openBrace: Token: OpenBraceToken(205): "{"                                         
            classMemberDeclarations: Node\TraitUseClause                                       
                useKeyword: Token: UseKeyword(162): "use"                                      
                traitNameList: Node\DelimitedList\QualifiedNameList                            
                    children: Node\QualifiedName                                               
                        nameParts: Token: Name(2): " T1"                                       
                    children: Token: CommaToken(251): ","                                      
                    children: Node\QualifiedName                                               
                        nameParts: Token: Name(2): "T2"                                        
                    children: Token: CommaToken(251): ","                                      
                    children: Node\QualifiedName                                               
                        nameParts: Token: Name(2): "T3"                                        
                semicolonOrOpenBrace: Token: OpenBraceToken(205): "{"                          
                traitSelectAndAliasClauses: Node\DelimitedList\TraitSelectOrAliasClauseList    
                    children: Node\TraitSelectOrAliasClause                                    
                        name: Node\Expression\ScopedPropertyAccessExpression                   
                            scopeResolutionQualifier: Node\QualifiedName                       
                                nameParts: Token: Name(2): "T1"                                
                            doubleColon: Token: ColonColonToken(256): "::"                     
                            memberName: Token: Name(2): "foo"                                  
                        asOrInsteadOfKeyword: Token: InsteadOfKeyword(142): " insteadof"       
                        targetName: Node\QualifiedName                                         
                            nameParts: Token: Name(2): " T2"                                   
                closeBrace: MissingToken: CloseBraceToken(206): ""  <-- Unexpected MissingToken
            classMemberDeclarations: SkippedToken: CommaToken(251): ","                        
            closeBrace: MissingToken: CloseBraceToken(206): ""                                 
    statementList: Node\Statement\ExpressionStatement                                          
        expression: Node\QualifiedName         
            nameParts: Token: Name(2): "T3"    
        semicolon: Token: SemicolonToken(237): ";"                                             
    statementList: SkippedToken: CloseBraceToken(206): "}"                                     
    statementList: SkippedToken: CloseBraceToken(206): "}"                                     
    endOfFileToken: Token: EndOfFileToken(1): ""       

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIssue identified by VS Code Team member as probable bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions