From 7e815ddd8fb8dd158e41f4550876d11f597b4111 Mon Sep 17 00:00:00 2001 From: rhydb Date: Fri, 8 May 2026 11:53:43 +0100 Subject: [PATCH] Allow main asymmetric visibility to be omitted --- src/Parser.php | 8 + src/TokenStringMaps.php | 2 + ...asymetrical-visiblity-member-omit-main.php | 8 + ...trical-visiblity-member-omit-main.php.diag | 1 + ...trical-visiblity-member-omit-main.php.tree | 177 +++++++++++++++ .../parser84/asymetrical-visiblity-member.php | 8 + .../asymetrical-visiblity-member.php.diag | 1 + .../asymetrical-visiblity-member.php.tree | 185 ++++++++++++++++ .../asymetrical-visiblity-omit-main.php | 15 ++ .../asymetrical-visiblity-omit-main.php.diag | 1 + .../asymetrical-visiblity-omit-main.php.tree | 206 ++++++++++++++++++ 11 files changed, 612 insertions(+) create mode 100644 tests/cases/parser84/asymetrical-visiblity-member-omit-main.php create mode 100644 tests/cases/parser84/asymetrical-visiblity-member-omit-main.php.diag create mode 100644 tests/cases/parser84/asymetrical-visiblity-member-omit-main.php.tree create mode 100644 tests/cases/parser84/asymetrical-visiblity-member.php create mode 100644 tests/cases/parser84/asymetrical-visiblity-member.php.diag create mode 100644 tests/cases/parser84/asymetrical-visiblity-member.php.tree create mode 100644 tests/cases/parser84/asymetrical-visiblity-omit-main.php create mode 100644 tests/cases/parser84/asymetrical-visiblity-omit-main.php.diag create mode 100644 tests/cases/parser84/asymetrical-visiblity-omit-main.php.tree diff --git a/src/Parser.php b/src/Parser.php index a6574916..d9cb58e3 100644 --- a/src/Parser.php +++ b/src/Parser.php @@ -1069,6 +1069,8 @@ private function isClassMemberDeclarationStart(Token $token) { case TokenKind::PublicKeyword: case TokenKind::ProtectedKeyword: case TokenKind::PrivateKeyword: + case TokenKind::ProtectedSetKeyword: + case TokenKind::PrivateSetKeyword: // static-modifier case TokenKind::StaticKeyword: @@ -1574,6 +1576,8 @@ private function isModifier($token): bool { case TokenKind::PublicKeyword: case TokenKind::ProtectedKeyword: case TokenKind::PrivateKeyword: + case TokenKind::ProtectedSetKeyword: + case TokenKind::PrivateSetKeyword: // static-modifier case TokenKind::StaticKeyword: @@ -1594,6 +1598,8 @@ private function isParameterModifier($token): bool { case TokenKind::PublicKeyword: case TokenKind::ProtectedKeyword: case TokenKind::PrivateKeyword: + case TokenKind::ProtectedSetKeyword: + case TokenKind::PrivateSetKeyword: // readonly-modifier case TokenKind::ReadonlyKeyword: @@ -1648,6 +1654,8 @@ private function isParameterStartFn() { case TokenKind::PublicKeyword: case TokenKind::ProtectedKeyword: case TokenKind::PrivateKeyword: + case TokenKind::ProtectedSetKeyword: + case TokenKind::PrivateSetKeyword: case TokenKind::AttributeToken: // dnf types (A&B)|C diff --git a/src/TokenStringMaps.php b/src/TokenStringMaps.php index 15249ed1..3a4f5437 100644 --- a/src/TokenStringMaps.php +++ b/src/TokenStringMaps.php @@ -63,7 +63,9 @@ class TokenStringMaps { "or" => TokenKind::OrKeyword, "print" => TokenKind::PrintKeyword, "private" => TokenKind::PrivateKeyword, + "private(set)" => TokenKind::PrivateSetKeyword, "protected" => TokenKind::ProtectedKeyword, + "protected(set)" => TokenKind::ProtectedSetKeyword, "public" => TokenKind::PublicKeyword, "readonly" => TokenKind::ReadonlyKeyword, "require" => TokenKind::RequireKeyword, diff --git a/tests/cases/parser84/asymetrical-visiblity-member-omit-main.php b/tests/cases/parser84/asymetrical-visiblity-member-omit-main.php new file mode 100644 index 00000000..8e51c056 --- /dev/null +++ b/tests/cases/parser84/asymetrical-visiblity-member-omit-main.php @@ -0,0 +1,8 @@ +