Skip to content

Commit 1a59cc2

Browse files
committed
Add interface clause
1 parent 4bbff61 commit 1a59cc2

File tree

7 files changed

+23
-0
lines changed

7 files changed

+23
-0
lines changed

src/Parser.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Microsoft\PhpParser\Node\ClassMembersNode;
1919
use Microsoft\PhpParser\Node\ConstElement;
2020
use Microsoft\PhpParser\Node\EnumCaseDeclaration;
21+
use Microsoft\PhpParser\Node\EnumInterfaceClause;
2122
use Microsoft\PhpParser\Node\EnumMembers;
2223
use Microsoft\PhpParser\Node\Expression;
2324
use Microsoft\PhpParser\Node\Expression\{
@@ -3723,11 +3724,27 @@ private function parseEnumDeclaration($parentNode) {
37233724
?: new MissingToken(TokenKind::EnumType, $this->token->fullStart);
37243725
}
37253726

3727+
$enumDeclaration->enumInterfaceClause = $this->parseEnumInterfaceClause($enumDeclaration);
37263728
$enumDeclaration->enumMembers = $this->parseEnumMembers($enumDeclaration);
37273729

37283730
return $enumDeclaration;
37293731
}
37303732

3733+
private function parseEnumInterfaceClause(EnumDeclaration $enumDeclaration): ?EnumInterfaceClause {
3734+
$enumInterfaceClause = new EnumInterfaceClause();
3735+
$enumInterfaceClause->parent = $enumDeclaration;
3736+
$enumInterfaceClause->implementsKeyword = $this->eatOptional1(TokenKind::ImplementsKeyword);
3737+
3738+
if ($enumInterfaceClause->implementsKeyword === null) {
3739+
return null;
3740+
}
3741+
3742+
$enumInterfaceClause->interfaceNameList =
3743+
$this->parseQualifiedNameList($enumInterfaceClause);
3744+
return $enumInterfaceClause;
3745+
}
3746+
3747+
37313748
private function parseEnumMembers($parentNode) {
37323749
$enumMembers = new EnumMembers();
37333750
$enumMembers->parent = $parentNode;

tests/cases/parser81/enums1.php.tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
},
2525
"colonToken": null,
2626
"enumType": null,
27+
"enumInterfaceClause": null,
2728
"enumMembers": {
2829
"EnumMembers": {
2930
"openBrace": {

tests/cases/parser81/enums2.php.tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"kind": "IntReservedWord",
3131
"textLength": 3
3232
},
33+
"enumInterfaceClause": null,
3334
"enumMembers": {
3435
"EnumMembers": {
3536
"openBrace": {

tests/cases/parser81/enums3.php.tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
},
6363
"colonToken": null,
6464
"enumType": null,
65+
"enumInterfaceClause": null,
6566
"enumMembers": {
6667
"EnumMembers": {
6768
"openBrace": {

tests/cases/parser81/enums4.php.tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"kind": "StringReservedWord",
3131
"textLength": 6
3232
},
33+
"enumInterfaceClause": null,
3334
"enumMembers": {
3435
"EnumMembers": {
3536
"openBrace": {

tests/cases/parser81/enums5.php.tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"kind": "EnumType",
3232
"textLength": 0
3333
},
34+
"enumInterfaceClause": null,
3435
"enumMembers": {
3536
"EnumMembers": {
3637
"openBrace": {

tests/cases/parser81/enums6.php.tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"kind": "IntReservedWord",
3131
"textLength": 3
3232
},
33+
"enumInterfaceClause": null,
3334
"enumMembers": {
3435
"EnumMembers": {
3536
"openBrace": {

0 commit comments

Comments
 (0)