From 03c7979ccd26eeb0d52ce92cad2ec44293a2a9fb Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Sun, 20 Dec 2020 23:04:23 +0200 Subject: [PATCH] refactoring: remove StmtTraitAdaptationList node --- internal/php5/parser_test.go | 1138 ++++++++++---------- internal/php5/php5.go | Bin 264652 -> 264939 bytes internal/php5/php5.y | 16 +- internal/php7/parser_test.go | 1138 ++++++++++---------- internal/php7/php7.go | Bin 219246 -> 219529 bytes internal/php7/php7.y | 18 +- pkg/ast/ast.go | 1 - pkg/ast/node.go | 45 +- pkg/ast/traverser/dfs.go | 22 +- pkg/ast/visitor/dumper.go | 18 +- pkg/ast/visitor/formatter.go | 39 +- pkg/ast/visitor/formatter_test.go | 88 +- pkg/ast/visitor/namespace_resolver.go | 30 +- pkg/ast/visitor/namespace_resolver_test.go | 26 +- pkg/ast/visitor/null.go | 4 - pkg/ast/visitor/printer.go | 11 +- pkg/ast/visitor/printer_test.go | 40 +- 17 files changed, 1221 insertions(+), 1413 deletions(-) diff --git a/internal/php5/parser_test.go b/internal/php5/parser_test.go index b4a4ee9..a60a8fb 100644 --- a/internal/php5/parser_test.go +++ b/internal/php5/parser_test.go @@ -23235,23 +23235,15 @@ func TestStmtTraitUse(t *testing.T) { }, }, }, - Adaptations: &ast.StmtNop{ + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 22, EndPos: 23, }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 22, - EndPos: 23, - }, - }, }, }, }, @@ -23518,23 +23510,15 @@ func TestStmtTraitUse_Uses(t *testing.T) { }, }, }, - Adaptations: &ast.StmtNop{ + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 27, EndPos: 28, }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, - }, }, }, }, @@ -23801,44 +23785,36 @@ func TestStmtTraitUse_EmptyAdaptations(t *testing.T) { }, }, }, - Adaptations: &ast.StmtTraitAdaptationList{ + OpenCurlyBracketTkn: &token.Token{ + ID: token.ID(123), + Value: []byte("{"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 28, - EndPos: 30, + EndPos: 29, }, - OpenCurlyBracketTkn: &token.Token{ - ID: token.ID(123), - Value: []byte("{"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 28, }, }, }, - CloseCurlyBracketTkn: &token.Token{ - ID: token.ID(125), - Value: []byte("}"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + }, + CloseCurlyBracketTkn: &token.Token{ + ID: token.ID(125), + Value: []byte("}"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, @@ -24106,120 +24082,59 @@ func TestStmtTraitUse_Modifier(t *testing.T) { }, }, }, - Adaptations: &ast.StmtTraitAdaptationList{ + OpenCurlyBracketTkn: &token.Token{ + ID: token.ID(123), + Value: []byte("{"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 28, - EndPos: 46, + EndPos: 29, }, - OpenCurlyBracketTkn: &token.Token{ - ID: token.ID(123), - Value: []byte("{"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 28, }, }, }, - Adaptations: []ast.Vertex{ - &ast.StmtTraitUseAlias{ + }, + Adaptations: []ast.Vertex{ + &ast.StmtTraitUseAlias{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 43, + }, + Ref: &ast.StmtTraitMethodRef{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, - EndPos: 43, + EndPos: 33, }, - Ref: &ast.StmtTraitMethodRef{ + Method: &ast.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - Method: &ast.Identifier{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("one"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("one"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, - }, - }, - }, - Value: []byte("one"), - }, - }, - AsTkn: &token.Token{ - ID: token.T_AS, - Value: []byte("as"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 34, - EndPos: 36, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 33, - EndPos: 34, - }, - }, - }, - }, - Modifier: &ast.Identifier{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 37, - EndPos: 43, - }, - IdentifierTkn: &token.Token{ - ID: token.T_PUBLIC, - Value: []byte("public"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 37, - EndPos: 43, - }, FreeFloating: []*token.Token{ { ID: token.T_WHITESPACE, @@ -24227,45 +24142,98 @@ func TestStmtTraitUse_Modifier(t *testing.T) { Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 36, - EndPos: 37, + StartPos: 29, + EndPos: 30, }, }, }, }, - Value: []byte("public"), + Value: []byte("one"), }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), + }, + AsTkn: &token.Token{ + ID: token.T_AS, + Value: []byte("as"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 34, + EndPos: 36, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 33, + EndPos: 34, + }, + }, + }, + }, + Modifier: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 37, + EndPos: 43, + }, + IdentifierTkn: &token.Token{ + ID: token.T_PUBLIC, + Value: []byte("public"), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 43, - EndPos: 44, + StartPos: 37, + EndPos: 43, }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 36, + EndPos: 37, + }, + }, + }, + }, + Value: []byte("public"), + }, + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 43, + EndPos: 44, }, }, }, - CloseCurlyBracketTkn: &token.Token{ - ID: token.ID(125), - Value: []byte("}"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 45, - EndPos: 46, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 44, - EndPos: 45, - }, + }, + CloseCurlyBracketTkn: &token.Token{ + ID: token.ID(125), + Value: []byte("}"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 45, + EndPos: 46, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 44, + EndPos: 45, }, }, }, @@ -24535,90 +24503,112 @@ func TestStmtTraitUse_AliasModifier(t *testing.T) { }, }, }, - Adaptations: &ast.StmtTraitAdaptationList{ + OpenCurlyBracketTkn: &token.Token{ + ID: token.ID(123), + Value: []byte("{"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 28, - EndPos: 50, + EndPos: 29, }, - OpenCurlyBracketTkn: &token.Token{ - ID: token.ID(123), - Value: []byte("{"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 28, }, }, }, - Adaptations: []ast.Vertex{ - &ast.StmtTraitUseAlias{ + }, + Adaptations: []ast.Vertex{ + &ast.StmtTraitUseAlias{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 47, + }, + Ref: &ast.StmtTraitMethodRef{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, - EndPos: 47, + EndPos: 33, }, - Ref: &ast.StmtTraitMethodRef{ + Method: &ast.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - Method: &ast.Identifier{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("one"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("one"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("one"), + }, + Value: []byte("one"), + }, + }, + AsTkn: &token.Token{ + ID: token.T_AS, + Value: []byte("as"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 34, + EndPos: 36, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 33, + EndPos: 34, + }, }, }, - AsTkn: &token.Token{ - ID: token.T_AS, - Value: []byte("as"), + }, + Modifier: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 37, + EndPos: 43, + }, + IdentifierTkn: &token.Token{ + ID: token.T_PUBLIC, + Value: []byte("public"), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 34, - EndPos: 36, + StartPos: 37, + EndPos: 43, }, FreeFloating: []*token.Token{ { @@ -24627,105 +24617,75 @@ func TestStmtTraitUse_AliasModifier(t *testing.T) { Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 33, - EndPos: 34, + StartPos: 36, + EndPos: 37, }, }, }, }, - Modifier: &ast.Identifier{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 37, - EndPos: 43, - }, - IdentifierTkn: &token.Token{ - ID: token.T_PUBLIC, - Value: []byte("public"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 37, - EndPos: 43, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 36, - EndPos: 37, - }, - }, - }, - }, - Value: []byte("public"), + Value: []byte("public"), + }, + Alias: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 44, + EndPos: 47, }, - Alias: &ast.Identifier{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("two"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 44, EndPos: 47, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("two"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 44, - EndPos: 47, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 43, - EndPos: 44, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 43, + EndPos: 44, }, }, }, - Value: []byte("two"), }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 47, - EndPos: 48, - }, + Value: []byte("two"), + }, + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 47, + EndPos: 48, }, }, }, - CloseCurlyBracketTkn: &token.Token{ - ID: token.ID(125), - Value: []byte("}"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 49, - EndPos: 50, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 48, - EndPos: 49, - }, + }, + CloseCurlyBracketTkn: &token.Token{ + ID: token.ID(125), + Value: []byte("}"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 49, + EndPos: 50, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 48, + EndPos: 49, }, }, }, @@ -24995,343 +24955,365 @@ func TestStmtTraitUse_Adaptions(t *testing.T) { }, }, }, - Adaptations: &ast.StmtTraitAdaptationList{ + OpenCurlyBracketTkn: &token.Token{ + ID: token.ID(123), + Value: []byte("{"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 28, - EndPos: 78, + EndPos: 29, }, - OpenCurlyBracketTkn: &token.Token{ - ID: token.ID(123), - Value: []byte("{"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 28, }, }, }, - Adaptations: []ast.Vertex{ - &ast.StmtTraitUsePrecedence{ + }, + Adaptations: []ast.Vertex{ + &ast.StmtTraitUsePrecedence{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 58, + }, + Ref: &ast.StmtTraitMethodRef{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, - EndPos: 58, + EndPos: 38, }, - Ref: &ast.StmtTraitMethodRef{ + Trait: &ast.NameName{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, - EndPos: 38, + EndPos: 33, }, - Trait: &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("Bar"), }, + Value: []byte("Bar"), }, }, - DoubleColonTkn: &token.Token{ - ID: token.T_PAAMAYIM_NEKUDOTAYIM, - Value: []byte("::"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 33, - EndPos: 35, - }, + }, + DoubleColonTkn: &token.Token{ + ID: token.T_PAAMAYIM_NEKUDOTAYIM, + Value: []byte("::"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 33, + EndPos: 35, }, - Method: &ast.Identifier{ + }, + Method: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 35, + EndPos: 38, + }, + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("one"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 35, EndPos: 38, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("one"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 35, - EndPos: 38, - }, - }, - Value: []byte("one"), }, + Value: []byte("one"), }, - InsteadofTkn: &token.Token{ - ID: token.T_INSTEADOF, - Value: []byte("insteadof"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 39, - EndPos: 48, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 38, - EndPos: 39, - }, - }, - }, + }, + InsteadofTkn: &token.Token{ + ID: token.T_INSTEADOF, + Value: []byte("insteadof"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 39, + EndPos: 48, }, - Insteadof: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 49, - EndPos: 52, + StartPos: 38, + EndPos: 39, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Insteadof: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 49, + EndPos: 52, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 49, + EndPos: 52, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Baz"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 49, EndPos: 52, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Baz"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 49, - EndPos: 52, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 48, - EndPos: 49, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 48, + EndPos: 49, }, }, }, - Value: []byte("Baz"), }, + Value: []byte("Baz"), }, }, - &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 54, - EndPos: 58, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 54, + EndPos: 58, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 54, + EndPos: 58, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Quux"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 54, EndPos: 58, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Quux"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 54, - EndPos: 58, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 53, - EndPos: 54, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 53, + EndPos: 54, }, }, }, - Value: []byte("Quux"), }, + Value: []byte("Quux"), }, }, }, - SeparatorTkns: []*token.Token{ - { - ID: token.ID(44), - Value: []byte(","), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 52, - EndPos: 53, - }, - }, - }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 58, - EndPos: 59, - }, - }, }, - &ast.StmtTraitUseAlias{ + SeparatorTkns: []*token.Token{ + { + ID: token.ID(44), + Value: []byte(","), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 52, + EndPos: 53, + }, + }, + }, + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 58, + EndPos: 59, + }, + }, + }, + &ast.StmtTraitUseAlias{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 60, + EndPos: 75, + }, + Ref: &ast.StmtTraitMethodRef{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 60, - EndPos: 75, + EndPos: 68, }, - Ref: &ast.StmtTraitMethodRef{ + Trait: &ast.NameName{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 60, - EndPos: 68, + EndPos: 63, }, - Trait: &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 60, - EndPos: 63, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 60, + EndPos: 63, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Baz"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 60, EndPos: 63, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Baz"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 60, - EndPos: 63, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 59, - EndPos: 60, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 59, + EndPos: 60, }, }, }, - Value: []byte("Baz"), }, + Value: []byte("Baz"), }, }, - DoubleColonTkn: &token.Token{ - ID: token.T_PAAMAYIM_NEKUDOTAYIM, - Value: []byte("::"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 63, - EndPos: 65, - }, + }, + DoubleColonTkn: &token.Token{ + ID: token.T_PAAMAYIM_NEKUDOTAYIM, + Value: []byte("::"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 63, + EndPos: 65, }, - Method: &ast.Identifier{ + }, + Method: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 65, + EndPos: 68, + }, + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("one"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 65, EndPos: 68, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("one"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 65, - EndPos: 68, - }, + }, + Value: []byte("one"), + }, + }, + AsTkn: &token.Token{ + ID: token.T_AS, + Value: []byte("as"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 69, + EndPos: 71, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 68, + EndPos: 69, }, - Value: []byte("one"), }, }, - AsTkn: &token.Token{ - ID: token.T_AS, - Value: []byte("as"), + }, + Alias: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 72, + EndPos: 75, + }, + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("two"), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 69, - EndPos: 71, + StartPos: 72, + EndPos: 75, }, FreeFloating: []*token.Token{ { @@ -25340,74 +25322,44 @@ func TestStmtTraitUse_Adaptions(t *testing.T) { Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 68, - EndPos: 69, + StartPos: 71, + EndPos: 72, }, }, }, }, - Alias: &ast.Identifier{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 72, - EndPos: 75, - }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("two"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 72, - EndPos: 75, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 71, - EndPos: 72, - }, - }, - }, - }, - Value: []byte("two"), - }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 75, - EndPos: 76, - }, + Value: []byte("two"), + }, + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 75, + EndPos: 76, }, }, }, - CloseCurlyBracketTkn: &token.Token{ - ID: token.ID(125), - Value: []byte("}"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 77, - EndPos: 78, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 76, - EndPos: 77, - }, + }, + CloseCurlyBracketTkn: &token.Token{ + ID: token.ID(125), + Value: []byte("}"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 77, + EndPos: 78, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 76, + EndPos: 77, }, }, }, diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 59fe0b9cf7c6bc77e336ab56ff7309a7de9ad3b0..0aaa2b98cc24a2c01681465b5e0078ac2d616f02 100644 GIT binary patch delta 6265 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 G!1*uflN{3k delta 6204 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 diff --git a/internal/php5/php5.y b/internal/php5/php5.y index 727d486..7867d5c 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -2150,13 +2150,23 @@ class_statement: trait_use_statement: T_USE trait_list trait_adaptations { - $$ = &ast.StmtTraitUse{ + traitUse := &ast.StmtTraitUse{ Position: yylex.(*Parser).builder.NewTokenNodePosition($1, $3), UseTkn: $1, Traits: $2.(*ast.ParserSeparatedList).Items, SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, - Adaptations: $3, } + + switch n := $3.(type) { + case *ast.TraitAdaptationList : + traitUse.OpenCurlyBracketTkn = n.OpenCurlyBracketTkn + traitUse.Adaptations = n.Adaptations + traitUse.CloseCurlyBracketTkn = n.CloseCurlyBracketTkn + case *ast.StmtNop : + traitUse.SemiColonTkn = n.SemiColonTkn + }; + + $$ = traitUse } ; @@ -2186,7 +2196,7 @@ trait_adaptations: } | '{' trait_adaptation_list '}' { - $$ = &ast.StmtTraitAdaptationList{ + $$ = &ast.TraitAdaptationList{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), OpenCurlyBracketTkn: $1, Adaptations: $2, diff --git a/internal/php7/parser_test.go b/internal/php7/parser_test.go index 6c94e47..76706ed 100644 --- a/internal/php7/parser_test.go +++ b/internal/php7/parser_test.go @@ -25219,23 +25219,15 @@ func TestStmtTraitUse(t *testing.T) { }, }, }, - Adaptations: &ast.StmtNop{ + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 22, EndPos: 23, }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 22, - EndPos: 23, - }, - }, }, }, }, @@ -25502,23 +25494,15 @@ func TestStmtTraitUse_Uses(t *testing.T) { }, }, }, - Adaptations: &ast.StmtNop{ + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 27, EndPos: 28, }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, - }, }, }, }, @@ -25785,44 +25769,36 @@ func TestStmtTraitUse_EmptyAdaptations(t *testing.T) { }, }, }, - Adaptations: &ast.StmtTraitAdaptationList{ + OpenCurlyBracketTkn: &token.Token{ + ID: token.ID(123), + Value: []byte("{"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 28, - EndPos: 30, + EndPos: 29, }, - OpenCurlyBracketTkn: &token.Token{ - ID: token.ID(123), - Value: []byte("{"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 28, }, }, }, - CloseCurlyBracketTkn: &token.Token{ - ID: token.ID(125), - Value: []byte("}"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + }, + CloseCurlyBracketTkn: &token.Token{ + ID: token.ID(125), + Value: []byte("}"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, @@ -26090,120 +26066,59 @@ func TestStmtTraitUse_Modifier(t *testing.T) { }, }, }, - Adaptations: &ast.StmtTraitAdaptationList{ + OpenCurlyBracketTkn: &token.Token{ + ID: token.ID(123), + Value: []byte("{"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 28, - EndPos: 46, + EndPos: 29, }, - OpenCurlyBracketTkn: &token.Token{ - ID: token.ID(123), - Value: []byte("{"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 28, }, }, }, - Adaptations: []ast.Vertex{ - &ast.StmtTraitUseAlias{ + }, + Adaptations: []ast.Vertex{ + &ast.StmtTraitUseAlias{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 43, + }, + Ref: &ast.StmtTraitMethodRef{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, - EndPos: 43, + EndPos: 33, }, - Ref: &ast.StmtTraitMethodRef{ + Method: &ast.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - Method: &ast.Identifier{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("one"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("one"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, - }, - }, - }, - Value: []byte("one"), - }, - }, - AsTkn: &token.Token{ - ID: token.T_AS, - Value: []byte("as"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 34, - EndPos: 36, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 33, - EndPos: 34, - }, - }, - }, - }, - Modifier: &ast.Identifier{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 37, - EndPos: 43, - }, - IdentifierTkn: &token.Token{ - ID: token.T_PUBLIC, - Value: []byte("public"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 37, - EndPos: 43, - }, FreeFloating: []*token.Token{ { ID: token.T_WHITESPACE, @@ -26211,45 +26126,98 @@ func TestStmtTraitUse_Modifier(t *testing.T) { Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 36, - EndPos: 37, + StartPos: 29, + EndPos: 30, }, }, }, }, - Value: []byte("public"), + Value: []byte("one"), }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), + }, + AsTkn: &token.Token{ + ID: token.T_AS, + Value: []byte("as"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 34, + EndPos: 36, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 33, + EndPos: 34, + }, + }, + }, + }, + Modifier: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 37, + EndPos: 43, + }, + IdentifierTkn: &token.Token{ + ID: token.T_PUBLIC, + Value: []byte("public"), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 43, - EndPos: 44, + StartPos: 37, + EndPos: 43, }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 36, + EndPos: 37, + }, + }, + }, + }, + Value: []byte("public"), + }, + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 43, + EndPos: 44, }, }, }, - CloseCurlyBracketTkn: &token.Token{ - ID: token.ID(125), - Value: []byte("}"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 45, - EndPos: 46, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 44, - EndPos: 45, - }, + }, + CloseCurlyBracketTkn: &token.Token{ + ID: token.ID(125), + Value: []byte("}"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 45, + EndPos: 46, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 44, + EndPos: 45, }, }, }, @@ -26519,90 +26487,112 @@ func TestStmtTraitUse_AliasModifier(t *testing.T) { }, }, }, - Adaptations: &ast.StmtTraitAdaptationList{ + OpenCurlyBracketTkn: &token.Token{ + ID: token.ID(123), + Value: []byte("{"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 28, - EndPos: 50, + EndPos: 29, }, - OpenCurlyBracketTkn: &token.Token{ - ID: token.ID(123), - Value: []byte("{"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 28, }, }, }, - Adaptations: []ast.Vertex{ - &ast.StmtTraitUseAlias{ + }, + Adaptations: []ast.Vertex{ + &ast.StmtTraitUseAlias{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 47, + }, + Ref: &ast.StmtTraitMethodRef{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, - EndPos: 47, + EndPos: 33, }, - Ref: &ast.StmtTraitMethodRef{ + Method: &ast.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - Method: &ast.Identifier{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("one"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("one"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("one"), + }, + Value: []byte("one"), + }, + }, + AsTkn: &token.Token{ + ID: token.T_AS, + Value: []byte("as"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 34, + EndPos: 36, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 33, + EndPos: 34, + }, }, }, - AsTkn: &token.Token{ - ID: token.T_AS, - Value: []byte("as"), + }, + Modifier: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 37, + EndPos: 43, + }, + IdentifierTkn: &token.Token{ + ID: token.T_PUBLIC, + Value: []byte("public"), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 34, - EndPos: 36, + StartPos: 37, + EndPos: 43, }, FreeFloating: []*token.Token{ { @@ -26611,105 +26601,75 @@ func TestStmtTraitUse_AliasModifier(t *testing.T) { Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 33, - EndPos: 34, + StartPos: 36, + EndPos: 37, }, }, }, }, - Modifier: &ast.Identifier{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 37, - EndPos: 43, - }, - IdentifierTkn: &token.Token{ - ID: token.T_PUBLIC, - Value: []byte("public"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 37, - EndPos: 43, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 36, - EndPos: 37, - }, - }, - }, - }, - Value: []byte("public"), + Value: []byte("public"), + }, + Alias: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 44, + EndPos: 47, }, - Alias: &ast.Identifier{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("two"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 44, EndPos: 47, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("two"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 44, - EndPos: 47, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 43, - EndPos: 44, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 43, + EndPos: 44, }, }, }, - Value: []byte("two"), }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 47, - EndPos: 48, - }, + Value: []byte("two"), + }, + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 47, + EndPos: 48, }, }, }, - CloseCurlyBracketTkn: &token.Token{ - ID: token.ID(125), - Value: []byte("}"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 49, - EndPos: 50, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 48, - EndPos: 49, - }, + }, + CloseCurlyBracketTkn: &token.Token{ + ID: token.ID(125), + Value: []byte("}"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 49, + EndPos: 50, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 48, + EndPos: 49, }, }, }, @@ -26979,343 +26939,365 @@ func TestStmtTraitUse_Adaptions(t *testing.T) { }, }, }, - Adaptations: &ast.StmtTraitAdaptationList{ + OpenCurlyBracketTkn: &token.Token{ + ID: token.ID(123), + Value: []byte("{"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 28, - EndPos: 78, + EndPos: 29, }, - OpenCurlyBracketTkn: &token.Token{ - ID: token.ID(123), - Value: []byte("{"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 28, - EndPos: 29, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 27, - EndPos: 28, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 27, + EndPos: 28, }, }, }, - Adaptations: []ast.Vertex{ - &ast.StmtTraitUsePrecedence{ + }, + Adaptations: []ast.Vertex{ + &ast.StmtTraitUsePrecedence{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 58, + }, + Ref: &ast.StmtTraitMethodRef{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, - EndPos: 58, + EndPos: 38, }, - Ref: &ast.StmtTraitMethodRef{ + Trait: &ast.NameName{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, - EndPos: 38, + EndPos: 33, }, - Trait: &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 30, + EndPos: 33, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Bar"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 30, EndPos: 33, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Bar"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 30, - EndPos: 33, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 29, - EndPos: 30, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 29, + EndPos: 30, }, }, }, - Value: []byte("Bar"), }, + Value: []byte("Bar"), }, }, - DoubleColonTkn: &token.Token{ - ID: token.T_PAAMAYIM_NEKUDOTAYIM, - Value: []byte("::"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 33, - EndPos: 35, - }, + }, + DoubleColonTkn: &token.Token{ + ID: token.T_PAAMAYIM_NEKUDOTAYIM, + Value: []byte("::"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 33, + EndPos: 35, }, - Method: &ast.Identifier{ + }, + Method: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 35, + EndPos: 38, + }, + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("one"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 35, EndPos: 38, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("one"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 35, - EndPos: 38, - }, - }, - Value: []byte("one"), }, + Value: []byte("one"), }, - InsteadofTkn: &token.Token{ - ID: token.T_INSTEADOF, - Value: []byte("insteadof"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 39, - EndPos: 48, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 38, - EndPos: 39, - }, - }, - }, + }, + InsteadofTkn: &token.Token{ + ID: token.T_INSTEADOF, + Value: []byte("insteadof"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 39, + EndPos: 48, }, - Insteadof: []ast.Vertex{ - &ast.NameName{ + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 49, - EndPos: 52, + StartPos: 38, + EndPos: 39, }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + }, + }, + Insteadof: []ast.Vertex{ + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 49, + EndPos: 52, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 49, + EndPos: 52, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Baz"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 49, EndPos: 52, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Baz"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 49, - EndPos: 52, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 48, - EndPos: 49, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 48, + EndPos: 49, }, }, }, - Value: []byte("Baz"), }, + Value: []byte("Baz"), }, }, - &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 54, - EndPos: 58, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + }, + &ast.NameName{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 54, + EndPos: 58, + }, + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 54, + EndPos: 58, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Quux"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 54, EndPos: 58, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Quux"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 54, - EndPos: 58, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 53, - EndPos: 54, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 53, + EndPos: 54, }, }, }, - Value: []byte("Quux"), }, + Value: []byte("Quux"), }, }, }, - SeparatorTkns: []*token.Token{ - { - ID: token.ID(44), - Value: []byte(","), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 52, - EndPos: 53, - }, - }, - }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 58, - EndPos: 59, - }, - }, }, - &ast.StmtTraitUseAlias{ + SeparatorTkns: []*token.Token{ + { + ID: token.ID(44), + Value: []byte(","), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 52, + EndPos: 53, + }, + }, + }, + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 58, + EndPos: 59, + }, + }, + }, + &ast.StmtTraitUseAlias{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 60, + EndPos: 75, + }, + Ref: &ast.StmtTraitMethodRef{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 60, - EndPos: 75, + EndPos: 68, }, - Ref: &ast.StmtTraitMethodRef{ + Trait: &ast.NameName{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 60, - EndPos: 68, + EndPos: 63, }, - Trait: &ast.NameName{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 60, - EndPos: 63, - }, - Parts: []ast.Vertex{ - &ast.NameNamePart{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 60, + EndPos: 63, + }, + StringTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("Baz"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 60, EndPos: 63, }, - StringTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("Baz"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 60, - EndPos: 63, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 59, - EndPos: 60, - }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 59, + EndPos: 60, }, }, }, - Value: []byte("Baz"), }, + Value: []byte("Baz"), }, }, - DoubleColonTkn: &token.Token{ - ID: token.T_PAAMAYIM_NEKUDOTAYIM, - Value: []byte("::"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 63, - EndPos: 65, - }, + }, + DoubleColonTkn: &token.Token{ + ID: token.T_PAAMAYIM_NEKUDOTAYIM, + Value: []byte("::"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 63, + EndPos: 65, }, - Method: &ast.Identifier{ + }, + Method: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 65, + EndPos: 68, + }, + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("one"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 65, EndPos: 68, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("one"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 65, - EndPos: 68, - }, + }, + Value: []byte("one"), + }, + }, + AsTkn: &token.Token{ + ID: token.T_AS, + Value: []byte("as"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 69, + EndPos: 71, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 68, + EndPos: 69, }, - Value: []byte("one"), }, }, - AsTkn: &token.Token{ - ID: token.T_AS, - Value: []byte("as"), + }, + Alias: &ast.Identifier{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 72, + EndPos: 75, + }, + IdentifierTkn: &token.Token{ + ID: token.T_STRING, + Value: []byte("two"), Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 69, - EndPos: 71, + StartPos: 72, + EndPos: 75, }, FreeFloating: []*token.Token{ { @@ -27324,74 +27306,44 @@ func TestStmtTraitUse_Adaptions(t *testing.T) { Position: &position.Position{ StartLine: 1, EndLine: 1, - StartPos: 68, - EndPos: 69, + StartPos: 71, + EndPos: 72, }, }, }, }, - Alias: &ast.Identifier{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 72, - EndPos: 75, - }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING, - Value: []byte("two"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 72, - EndPos: 75, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 71, - EndPos: 72, - }, - }, - }, - }, - Value: []byte("two"), - }, - SemiColonTkn: &token.Token{ - ID: token.ID(59), - Value: []byte(";"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 75, - EndPos: 76, - }, + Value: []byte("two"), + }, + SemiColonTkn: &token.Token{ + ID: token.ID(59), + Value: []byte(";"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 75, + EndPos: 76, }, }, }, - CloseCurlyBracketTkn: &token.Token{ - ID: token.ID(125), - Value: []byte("}"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 77, - EndPos: 78, - }, - FreeFloating: []*token.Token{ - { - ID: token.T_WHITESPACE, - Value: []byte(" "), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 76, - EndPos: 77, - }, + }, + CloseCurlyBracketTkn: &token.Token{ + ID: token.ID(125), + Value: []byte("}"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 77, + EndPos: 78, + }, + FreeFloating: []*token.Token{ + { + ID: token.T_WHITESPACE, + Value: []byte(" "), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 76, + EndPos: 77, }, }, }, diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 82fd500097cc4aea6ed76dd483fc23d9c33a45f0..3c139f281daa4756c9e24fce21900fa911f0983a 100644 GIT binary patch delta 4553 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 diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 2c14cff..00582e4 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -1970,13 +1970,23 @@ class_statement: } | T_USE name_list trait_adaptations { - $$ = &ast.StmtTraitUse{ + traitUse := &ast.StmtTraitUse{ Position: yylex.(*Parser).builder.NewTokenNodePosition($1, $3), UseTkn: $1, Traits: $2.(*ast.ParserSeparatedList).Items, SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, - Adaptations: $3, } + + switch n := $3.(type) { + case *ast.TraitAdaptationList : + traitUse.OpenCurlyBracketTkn = n.OpenCurlyBracketTkn + traitUse.Adaptations = n.Adaptations + traitUse.CloseCurlyBracketTkn = n.CloseCurlyBracketTkn + case *ast.StmtNop : + traitUse.SemiColonTkn = n.SemiColonTkn + }; + + $$ = traitUse } | method_modifiers T_FUNCTION returns_ref identifier backup_doc_comment '(' parameter_list ')' return_type method_body { @@ -2032,7 +2042,7 @@ trait_adaptations: } | '{' '}' { - $$ = &ast.StmtTraitAdaptationList{ + $$ = &ast.TraitAdaptationList{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $2), OpenCurlyBracketTkn: $1, CloseCurlyBracketTkn: $2, @@ -2040,7 +2050,7 @@ trait_adaptations: } | '{' trait_adaptation_list '}' { - $$ = &ast.StmtTraitAdaptationList{ + $$ = &ast.TraitAdaptationList{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), OpenCurlyBracketTkn: $1, Adaptations: $2, diff --git a/pkg/ast/ast.go b/pkg/ast/ast.go index fad100c..0cdb4b0 100644 --- a/pkg/ast/ast.go +++ b/pkg/ast/ast.go @@ -67,7 +67,6 @@ type NodeVisitor interface { StmtSwitch(n *StmtSwitch) StmtThrow(n *StmtThrow) StmtTrait(n *StmtTrait) - StmtTraitAdaptationList(n *StmtTraitAdaptationList) StmtTraitMethodRef(n *StmtTraitMethodRef) StmtTraitUse(n *StmtTraitUse) StmtTraitUseAlias(n *StmtTraitUseAlias) diff --git a/pkg/ast/node.go b/pkg/ast/node.go index 7497f9a..3e3e428 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -945,22 +945,6 @@ func (n *StmtTrait) GetPosition() *position.Position { return n.Position } -// StmtTraitAdaptationList node -type StmtTraitAdaptationList struct { - Position *position.Position - OpenCurlyBracketTkn *token.Token - Adaptations []Vertex - CloseCurlyBracketTkn *token.Token -} - -func (n *StmtTraitAdaptationList) Accept(v NodeVisitor) { - v.StmtTraitAdaptationList(n) -} - -func (n *StmtTraitAdaptationList) GetPosition() *position.Position { - return n.Position -} - // StmtTraitMethodRef node type StmtTraitMethodRef struct { Position *position.Position @@ -979,11 +963,14 @@ func (n *StmtTraitMethodRef) GetPosition() *position.Position { // StmtTraitUse node type StmtTraitUse struct { - Position *position.Position - UseTkn *token.Token - Traits []Vertex - SeparatorTkns []*token.Token - Adaptations Vertex + Position *position.Position + UseTkn *token.Token + Traits []Vertex + SeparatorTkns []*token.Token + OpenCurlyBracketTkn *token.Token + Adaptations []Vertex + CloseCurlyBracketTkn *token.Token + SemiColonTkn *token.Token } func (n *StmtTraitUse) Accept(v NodeVisitor) { @@ -2699,6 +2686,22 @@ func (n *ParserSeparatedList) GetPosition() *position.Position { return n.Position } +// TraitAdaptationList node +type TraitAdaptationList struct { + Position *position.Position + OpenCurlyBracketTkn *token.Token + Adaptations []Vertex + CloseCurlyBracketTkn *token.Token +} + +func (n *TraitAdaptationList) Accept(v NodeVisitor) { + // do nothing +} + +func (n *TraitAdaptationList) GetPosition() *position.Position { + return n.Position +} + // ArgumentList node type ArgumentList struct { Position *position.Position diff --git a/pkg/ast/traverser/dfs.go b/pkg/ast/traverser/dfs.go index d9e198e..f980c7f 100644 --- a/pkg/ast/traverser/dfs.go +++ b/pkg/ast/traverser/dfs.go @@ -812,20 +812,6 @@ func (t *DFS) Traverse(n ast.Vertex) { } t.visitor.Leave("Stmts", false) } - case *ast.StmtTraitAdaptationList: - if nn == nil { - return - } - if !t.visitor.EnterNode(nn) { - return - } - if nn.Adaptations != nil { - t.visitor.Enter("Adaptations", false) - for _, c := range nn.Adaptations { - t.Traverse(c) - } - t.visitor.Leave("Adaptations", false) - } case *ast.StmtTraitMethodRef: if nn == nil { return @@ -858,9 +844,11 @@ func (t *DFS) Traverse(n ast.Vertex) { t.visitor.Leave("Traits", false) } if nn.Adaptations != nil { - t.visitor.Enter("Adaptations", true) - t.Traverse(nn.Adaptations) - t.visitor.Leave("Adaptations", true) + t.visitor.Enter("Adaptations", false) + for _, c := range nn.Adaptations { + t.Traverse(c) + } + t.visitor.Leave("Adaptations", false) } case *ast.StmtTraitUseAlias: if nn == nil { diff --git a/pkg/ast/visitor/dumper.go b/pkg/ast/visitor/dumper.go index 98ef5ef..c086d47 100644 --- a/pkg/ast/visitor/dumper.go +++ b/pkg/ast/visitor/dumper.go @@ -858,19 +858,6 @@ func (v *Dumper) StmtTrait(n *ast.StmtTrait) { v.print(v.indent, "},\n") } -func (v *Dumper) StmtTraitAdaptationList(n *ast.StmtTraitAdaptationList) { - v.print(0, "&ast.StmtTraitAdaptationList{\n") - v.indent++ - - v.dumpPosition(n.Position) - v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn) - v.dumpVertexList("Adaptations", n.Adaptations) - v.dumpToken("CloseCurlyBracketTkn", n.CloseCurlyBracketTkn) - - v.indent-- - v.print(v.indent, "},\n") -} - func (v *Dumper) StmtTraitMethodRef(n *ast.StmtTraitMethodRef) { v.print(0, "&ast.StmtTraitMethodRef{\n") v.indent++ @@ -892,7 +879,10 @@ func (v *Dumper) StmtTraitUse(n *ast.StmtTraitUse) { v.dumpToken("UseTkn", n.UseTkn) v.dumpVertexList("Traits", n.Traits) v.dumpTokenList("SeparatorTkns", n.SeparatorTkns) - v.dumpVertex("Adaptations", n.Adaptations) + v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn) + v.dumpVertexList("Adaptations", n.Adaptations) + v.dumpToken("CloseCurlyBracketTkn", n.CloseCurlyBracketTkn) + v.dumpToken("SemiColonTkn", n.SemiColonTkn) v.indent-- v.print(v.indent, "},\n") diff --git a/pkg/ast/visitor/formatter.go b/pkg/ast/visitor/formatter.go index 31b1475..5d2d202 100644 --- a/pkg/ast/visitor/formatter.go +++ b/pkg/ast/visitor/formatter.go @@ -886,21 +886,6 @@ func (f *formatter) StmtTrait(n *ast.StmtTrait) { n.CloseCurlyBracketTkn = f.newToken('}', []byte("}")) } -func (f *formatter) StmtTraitAdaptationList(n *ast.StmtTraitAdaptationList) { - n.OpenCurlyBracketTkn = f.newToken('{', []byte("{")) - - if len(n.Adaptations) > 0 { - f.indent++ - f.formatStmts(&n.Adaptations) - f.indent-- - - f.addFreeFloating(token.T_WHITESPACE, []byte("\n")) - f.addIndent() - } - - n.CloseCurlyBracketTkn = f.newToken('}', []byte("}")) -} - func (f *formatter) StmtTraitMethodRef(n *ast.StmtTraitMethodRef) { if n.Trait != nil { n.Trait.Accept(f) @@ -916,11 +901,27 @@ func (f *formatter) StmtTraitUse(n *ast.StmtTraitUse) { n.SeparatorTkns = f.formatList(n.Traits, ',') - if _, ok := n.Adaptations.(*ast.StmtTraitAdaptationList); ok { - f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) - } + n.OpenCurlyBracketTkn = nil + n.CloseCurlyBracketTkn = nil + n.SemiColonTkn = nil - n.Adaptations.Accept(f) + if len(n.Adaptations) > 0 { + f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) + n.OpenCurlyBracketTkn = f.newToken('{', []byte("{")) + + if len(n.Adaptations) > 0 { + f.indent++ + f.formatStmts(&n.Adaptations) + f.indent-- + + f.addFreeFloating(token.T_WHITESPACE, []byte("\n")) + f.addIndent() + } + + n.CloseCurlyBracketTkn = f.newToken('}', []byte("}")) + } else { + n.SemiColonTkn = f.newToken(';', []byte(";")) + } } func (f *formatter) StmtTraitUseAlias(n *ast.StmtTraitUseAlias) { diff --git a/pkg/ast/visitor/formatter_test.go b/pkg/ast/visitor/formatter_test.go index d4b2c0a..ee8637b 100644 --- a/pkg/ast/visitor/formatter_test.go +++ b/pkg/ast/visitor/formatter_test.go @@ -2503,76 +2503,6 @@ func TestFormatter_StmtTrait_Implements(t *testing.T) { } } -func TestFormatter_StmtTraitAdaptationList(t *testing.T) { - o := bytes.NewBufferString("") - - n := &ast.StmtTraitAdaptationList{} - - f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) - n.Accept(f) - - p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) - n.Accept(p) - - expected := `{}` - actual := o.String() - - if expected != actual { - t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) - } -} - -func TestFormatter_StmtTraitAdaptationList_List(t *testing.T) { - o := bytes.NewBufferString("") - - n := &ast.StmtTraitAdaptationList{ - Adaptations: []ast.Vertex{ - &ast.StmtTraitUseAlias{ - Ref: &ast.StmtTraitMethodRef{ - Method: &ast.Identifier{ - Value: []byte("foo"), - }, - }, - Alias: &ast.Identifier{ - Value: []byte("bar"), - }, - }, - &ast.StmtTraitUsePrecedence{ - Ref: &ast.StmtTraitMethodRef{ - Method: &ast.Identifier{ - Value: []byte("foo"), - }, - }, - Insteadof: []ast.Vertex{ - &ast.NameName{ - Parts: []ast.Vertex{ - &ast.NameNamePart{ - Value: []byte("bar"), - }, - }, - }, - }, - }, - }, - } - - f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) - n.Accept(f) - - p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) - n.Accept(p) - - expected := `{ - foo as bar; - foo insteadof bar; - }` - actual := o.String() - - if expected != actual { - t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) - } -} - func TestFormatter_StmtTraitMethodRef(t *testing.T) { o := bytes.NewBufferString("") @@ -2646,7 +2576,6 @@ func TestFormatter_StmtTraitUse(t *testing.T) { }, }, }, - Adaptations: &ast.StmtNop{}, } f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) @@ -2683,7 +2612,18 @@ func TestFormatter_StmtTraitUse_Adaptations(t *testing.T) { }, }, }, - Adaptations: &ast.StmtTraitAdaptationList{}, + Adaptations: []ast.Vertex{ + &ast.StmtTraitUseAlias{ + Ref: &ast.StmtTraitMethodRef{ + Method: &ast.Identifier{ + Value: []byte("foo"), + }, + }, + Alias: &ast.Identifier{ + Value: []byte("baz"), + }, + }, + }, } f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) @@ -2692,7 +2632,9 @@ func TestFormatter_StmtTraitUse_Adaptations(t *testing.T) { p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) n.Accept(p) - expected := `use foo, bar {}` + expected := `use foo, bar { + foo as baz; + }` actual := o.String() if expected != actual { diff --git a/pkg/ast/visitor/namespace_resolver.go b/pkg/ast/visitor/namespace_resolver.go index 5bc82ca..9e4e6a2 100644 --- a/pkg/ast/visitor/namespace_resolver.go +++ b/pkg/ast/visitor/namespace_resolver.go @@ -184,23 +184,21 @@ func (nsr *NamespaceResolver) StmtTraitUse(n *ast.StmtTraitUse) { nsr.ResolveName(t, "") } - if adaptationList, ok := n.Adaptations.(*ast.StmtTraitAdaptationList); ok { - for _, a := range adaptationList.Adaptations { - switch aa := a.(type) { - case *ast.StmtTraitUsePrecedence: - refTrait := aa.Ref.(*ast.StmtTraitMethodRef).Trait - if refTrait != nil { - nsr.ResolveName(refTrait, "") - } - for _, insteadOf := range aa.Insteadof { - nsr.ResolveName(insteadOf, "") - } + for _, a := range n.Adaptations { + switch aa := a.(type) { + case *ast.StmtTraitUsePrecedence: + refTrait := aa.Ref.(*ast.StmtTraitMethodRef).Trait + if refTrait != nil { + nsr.ResolveName(refTrait, "") + } + for _, insteadOf := range aa.Insteadof { + nsr.ResolveName(insteadOf, "") + } - case *ast.StmtTraitUseAlias: - refTrait := aa.Ref.(*ast.StmtTraitMethodRef).Trait - if refTrait != nil { - nsr.ResolveName(refTrait, "") - } + case *ast.StmtTraitUseAlias: + refTrait := aa.Ref.(*ast.StmtTraitMethodRef).Trait + if refTrait != nil { + nsr.ResolveName(refTrait, "") } } } diff --git a/pkg/ast/visitor/namespace_resolver_test.go b/pkg/ast/visitor/namespace_resolver_test.go index fa7043a..f42f11e 100644 --- a/pkg/ast/visitor/namespace_resolver_test.go +++ b/pkg/ast/visitor/namespace_resolver_test.go @@ -354,22 +354,20 @@ func TestResolveTraitUse(t *testing.T) { nameB, relativeNameB, }, - Adaptations: &ast.StmtTraitAdaptationList{ - Adaptations: []ast.Vertex{ - &ast.StmtTraitUsePrecedence{ - Ref: &ast.StmtTraitMethodRef{ - Trait: fullyQualifiedNameB, - Method: &ast.Identifier{Value: []byte("foo")}, - }, - Insteadof: []ast.Vertex{fullyQualifiedNameBC}, + Adaptations: []ast.Vertex{ + &ast.StmtTraitUsePrecedence{ + Ref: &ast.StmtTraitMethodRef{ + Trait: fullyQualifiedNameB, + Method: &ast.Identifier{Value: []byte("foo")}, }, - &ast.StmtTraitUseAlias{ - Ref: &ast.StmtTraitMethodRef{ - Trait: relativeNameBC, - Method: &ast.Identifier{Value: []byte("foo")}, - }, - Alias: &ast.Identifier{Value: []byte("bar")}, + Insteadof: []ast.Vertex{fullyQualifiedNameBC}, + }, + &ast.StmtTraitUseAlias{ + Ref: &ast.StmtTraitMethodRef{ + Trait: relativeNameBC, + Method: &ast.Identifier{Value: []byte("foo")}, }, + Alias: &ast.Identifier{Value: []byte("bar")}, }, }, }, diff --git a/pkg/ast/visitor/null.go b/pkg/ast/visitor/null.go index bba280c..cef3d73 100644 --- a/pkg/ast/visitor/null.go +++ b/pkg/ast/visitor/null.go @@ -206,10 +206,6 @@ func (v *Null) StmtTrait(_ *ast.StmtTrait) { // do nothing } -func (v *Null) StmtTraitAdaptationList(_ *ast.StmtTraitAdaptationList) { - // do nothing -} - func (v *Null) StmtTraitMethodRef(_ *ast.StmtTraitMethodRef) { // do nothing } diff --git a/pkg/ast/visitor/printer.go b/pkg/ast/visitor/printer.go index ae85256..255ffe9 100644 --- a/pkg/ast/visitor/printer.go +++ b/pkg/ast/visitor/printer.go @@ -531,12 +531,6 @@ func (p *printer) StmtTrait(n *ast.StmtTrait) { p.printToken(n.CloseCurlyBracketTkn, []byte("}")) } -func (p *printer) StmtTraitAdaptationList(n *ast.StmtTraitAdaptationList) { - p.printToken(n.OpenCurlyBracketTkn, []byte("{")) - p.printList(n.Adaptations) - p.printToken(n.CloseCurlyBracketTkn, []byte("}")) -} - func (p *printer) StmtTraitMethodRef(n *ast.StmtTraitMethodRef) { p.printNode(n.Trait) p.printToken(n.DoubleColonTkn, p.ifNode(n.Trait, []byte("::"))) @@ -546,7 +540,10 @@ func (p *printer) StmtTraitMethodRef(n *ast.StmtTraitMethodRef) { func (p *printer) StmtTraitUse(n *ast.StmtTraitUse) { p.printToken(n.UseTkn, []byte("use")) p.printSeparatedList(n.Traits, n.SeparatorTkns, []byte(",")) - p.printNode(n.Adaptations) + p.printToken(n.OpenCurlyBracketTkn, p.ifNodeList(n.Adaptations, []byte("{"))) + p.printList(n.Adaptations) + p.printToken(n.CloseCurlyBracketTkn, p.ifNodeList(n.Adaptations, []byte("}"))) + p.printToken(n.SemiColonTkn, p.ifNotToken(n.OpenCurlyBracketTkn, p.ifNotNodeList(n.Adaptations, []byte(";")))) } func (p *printer) StmtTraitUseAlias(n *ast.StmtTraitUseAlias) { diff --git a/pkg/ast/visitor/printer_test.go b/pkg/ast/visitor/printer_test.go index 7920cb2..d918f0a 100644 --- a/pkg/ast/visitor/printer_test.go +++ b/pkg/ast/visitor/printer_test.go @@ -4339,31 +4339,6 @@ func TestPrinterPrintStmtThrow(t *testing.T) { } } -func TestPrinterPrintStmtTraitAdaptationList(t *testing.T) { - o := bytes.NewBufferString("") - - p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) - n := &ast.StmtTraitAdaptationList{ - Adaptations: []ast.Vertex{ - &ast.StmtTraitUseAlias{ - Ref: &ast.StmtTraitMethodRef{ - Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, - Method: &ast.Identifier{Value: []byte("a")}, - }, - Alias: &ast.Identifier{Value: []byte("b")}, - }, - }, - } - n.Accept(p) - - expected := `{Foo::a as b;}` - actual := o.String() - - if expected != actual { - t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) - } -} - func TestPrinterPrintStmtTraitMethodRef(t *testing.T) { o := bytes.NewBufferString("") @@ -4454,7 +4429,6 @@ func TestPrinterPrintStmtTraitUse(t *testing.T) { &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, }, - Adaptations: &ast.StmtNop{}, } n.Accept(p) @@ -4475,15 +4449,13 @@ func TestPrinterPrintStmtTraitAdaptations(t *testing.T) { &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, }, - Adaptations: &ast.StmtTraitAdaptationList{ - Adaptations: []ast.Vertex{ - &ast.StmtTraitUseAlias{ - Ref: &ast.StmtTraitMethodRef{ - Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, - Method: &ast.Identifier{Value: []byte("a")}, - }, - Alias: &ast.Identifier{Value: []byte("b")}, + Adaptations: []ast.Vertex{ + &ast.StmtTraitUseAlias{ + Ref: &ast.StmtTraitMethodRef{ + Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Method: &ast.Identifier{Value: []byte("a")}, }, + Alias: &ast.Identifier{Value: []byte("b")}, }, }, }