PHP Parser Versions Save

A PHP parser written in PHP

v4.14.0

1 year ago

Added

  • Added support for readonly classes.
  • Added rawValue attribute to LNumber, DNumber and String_ nodes, which stores the unparsed value of the literal (e.g. "1_000" rather than 1000).

v4.13.2

2 years ago

Added

  • Added builders for enums and enum cases.

Fixed

  • NullsafeMethodCall now extends from CallLike.
  • The namespacedName property populated by the NameResolver is now declared on relevant nodes, to avoid a dynamic property deprecation warning with PHP 8.2.

v4.13.1

2 years ago

Fixed

  • Support reserved keywords as enum cases.
  • Support array unpacking in constant expression evaluator.

v4.13.0

2 years ago

This release features full PHP 8.1 support.

Added

  • [PHP 8.1] Added support for intersection types using a new IntersectionType node. Additionally a ComplexType parent class for NullableType, UnionType and IntersectionType has been added.
  • [PHP 8.1] Added support for explicit octal literals.
  • [PHP 8.1] Added support for first-class callables. These are represented using a call whose first argument is a VariadicPlaceholder. The representation is intended to be forward-compatible with partial function application, just like the PHP feature itself. Call nodes now extend from Expr\CallLike, which provides an isFirstClassCallable() method to determine whether a placeholder id present. getArgs() can be used to assert that the call is not a first-class callable and returns Arg[] rather than array<Arg|VariadicPlaceholder>.

Fixed

  • Multiple modifiers for promoted properties are now accepted. In particular this allows something like public readonly for promoted properties.
  • Formatting-preserving pretty printing for comments in array literals has been fixed.

v4.12.0

2 years ago

Added

  • [PHP 8.1] Added support for readonly properties (through a new MODIFIER_READONLY).
  • [PHP 8.1] Added support for final class constants.

Fixed

  • Fixed compatibility with PHP 8.1. & tokens are now canonicalized to the T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG and T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG tokens used in PHP 8.1. This happens unconditionally, regardless of whether the emulative lexer is used.

v4.11.0

2 years ago

Added

  • BuilderFactory::args() now accepts named arguments.
  • BuilderFactory::attribute() has been added.
  • An addAttribute() method accepting an Attribute or AttributeGroup has been added to all builders that accept attributes, such as Builder\Class_.

Fixed

  • NameResolver now handles enums.
  • PrettyPrinter now prints backing enum type.
  • Builder methods for types now property handle never type.

v4.10.5

3 years ago

Added

  • [PHP 8.1] Added support for enums. These are represented using the Stmt\Enum_ and Stmt\EnumCase nodes.
  • [PHP 8.1] Added support for never type. This type will now be returned as an Identifier rather than Name.
  • Added ClassConst builder.

Changed

  • Non-UTF-8 code units in strings will now be hex-encoded.

Fixed

  • Fixed precedence of arrow functions.

v4.10.4

3 years ago

Fixed

  • Fixed position information for variable-variables (#741).
  • Fixed position information for traits/interfaces preceded by if statement (#738).

v4.10.3

3 years ago

Fixed

  • Fixed formatting-preserving pretty printing for "{$x}".
  • Ternary expressions are now treated as non-associative in the pretty printer, in order to generate code that is compatible with the parentheses requirement introduced in PHP 8.
  • Removed no longer necessary error_clear_last() call in lexer, which may interfere with fatal error handlers if invoked during shutdown.

v4.10.2

3 years ago

Fixed

  • Fixed check for token emulation conflicts with other libraries.