From c660589a7eb385a157c32597d2107aadf3338125 Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Sat, 6 Jan 2024 17:54:12 +0000 Subject: [PATCH] bugfix: Support attributes on readonly classes --- src/Parser.php | 2 +- .../parser81/readonly_class_attribute.php | 2 + .../readonly_class_attribute.php.diag | 1 + .../readonly_class_attribute.php.tree | 91 +++++++++++++++++++ 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 tests/cases/parser81/readonly_class_attribute.php create mode 100644 tests/cases/parser81/readonly_class_attribute.php.diag create mode 100644 tests/cases/parser81/readonly_class_attribute.php.tree diff --git a/src/Parser.php b/src/Parser.php index 100c6c0..4e55dcb 100644 --- a/src/Parser.php +++ b/src/Parser.php @@ -755,7 +755,7 @@ class Parser { $statement = $this->parseInterfaceElementFn()($parentNode); } else { // Classlikes, anonymous functions, global functions, and arrow functions can have attributes. Global constants cannot. - if (in_array($this->token->kind, [TokenKind::ClassKeyword, TokenKind::TraitKeyword, TokenKind::InterfaceKeyword, TokenKind::AbstractKeyword, TokenKind::FinalKeyword, TokenKind::FunctionKeyword, TokenKind::FnKeyword, TokenKind::EnumKeyword], true) || + if (in_array($this->token->kind, [TokenKind::ReadonlyKeyword, TokenKind::ClassKeyword, TokenKind::TraitKeyword, TokenKind::InterfaceKeyword, TokenKind::AbstractKeyword, TokenKind::FinalKeyword, TokenKind::FunctionKeyword, TokenKind::FnKeyword, TokenKind::EnumKeyword], true) || $this->token->kind === TokenKind::StaticKeyword && $this->lookahead([TokenKind::FunctionKeyword, TokenKind::FnKeyword])) { $statement = $this->parseStatement($parentNode); } else { diff --git a/tests/cases/parser81/readonly_class_attribute.php b/tests/cases/parser81/readonly_class_attribute.php new file mode 100644 index 0000000..513aa8d --- /dev/null +++ b/tests/cases/parser81/readonly_class_attribute.php @@ -0,0 +1,2 @@ +