Releases: nikic/PHP-Parser
PHP-Parser 3.0.5
Fixed
- Name resolution of
NullableType
s is now performed earlier, so that a fully resolved signature is available when a function is entered. (#360) Error
nodes are now considered empty, while previously they extended until the token where the error occurred. This made some nodes larger than expected. (#359)- Fixed notices being thrown during error recovery in some situations. (#362)
PHP-Parser 3.0.4
Fixed
- Fixed some extensibility issues in pretty printer (
pUseType()
is now public andpPrec()
calls intop()
, instead of directly dispatching to the type-specific printing method). - Fixed notice in
bin/php-parse
script.
Added
- Error recovery from missing semicolons is now supported in more cases.
- Error recovery from trailing commas in positions where PHP does not support them is now supported.
PHP-Parser 3.0.3
Fixed
- In
"$foo[0]"
the0
is now parsed as anLNumber
rather thanString
. (#325) - Ensure integers and floats are always pretty printed preserving semantics, even if the particular value can only be manually constructed.
- Throw a
LogicException
when trying to pretty-print anError
node. Previously this resulted in an undefined method exception or fatal error.
Added
- [PHP 7.1] Added support for negative interpolated offsets:
"$foo[-1]"
- Added
preserveOriginalNames
option toNameResolver
. If this option is enabled, anoriginalName
attribute, containing the unresolved name, will be added to each resolved name. - Added
php-parse --with-positions
option, which dumps nodes with position information.
Deprecated
- The XML serializer has been deprecated. In particular, the classes
Serializer\XML
,Unserializer\XML
, as well as the interfacesSerializer
andUnserializer
are deprecated.
PHP-Parser 3.0.2
Fixed
- Fixed name resolution of nullable types.
- Fixed pretty-printing of nullable types.
PHP-Parser 3.0.1
Fixed
- Fixed handling of nested
list()
s: If the nested list was unkeyed, it was directly included in the list items. If it was keyed, it was wrapped inArrayItem
. Now nestedList_
nodes are always wrapped inArrayItem
s. (#321)
PHP-Parser 3.0.0
PHP-Parser 3.0 adds support for PHP 7.1 and improves support for error recovery.
For a description of backwards incompatible changes between version 2.x and 3.0 see the upgrading guide.
The following changelog only lists changes relative to the beta 2 release. For a complete list of changes see the complete changelog.
Added
- Added support for dumping node positions in the NodeDumper through the
dumpPositions
option. - Added error recovery support for
$
,new
,Foo::
.
PHP-Parser 3.0.0 Beta 2
This release primarily improves our support for error recovery.
The following changelog only lists changes relative to the beta 1 release. A description of backwards incompatible changes between version 2.x and 3.0 can be found in the upgrading guide.
Added
- Added
Node::setDocComment()
method. - Added
Error::getMessageWithColumnInfo()
method. - Added support for recovery from lexer errors.
- Added support for recovering from "special" errors (i.e. non-syntax parse errors).
- Added precise location information for lexer errors.
- Added
ErrorHandler
interface, andErrorHandler\Throwing
andErrorHandler\Collecting
as specific implementations. These provide a general mechanism for handling error recovery. - Added optional
ErrorHandler
argument toParser::parse()
,Lexer::startLexing()
andNameResolver::__construct()
. - The
NameResolver
now adds anamespacedName
attribute on name nodes that cannot be statically resolved (unqualified unaliased function or constant names in namespaces).
Fixed
- Fixed attribute assignment for
GroupUse
prefix and variables in interpolated strings.
Changed
- The constants on
NameTraverserInterface
have been moved into theNameTraverser
class. - Due to the error handling changes, the
Parser
interface andLexer
API have changed. - The emulative lexer now directly postprocesses tokens, instead of using
~__EMU__~
sequences. This changes the protected API of the lexer. - The
Name::slice()
method now returnsnull
for empty slices, previouslynew Name([])
was used.Name::concat()
now also supports concatenation withnull
.
Removed
- Removed
Name::append()
andName::prepend()
. These mutable methods have been superseded by the immutableName::concat()
. - Removed
Error::getRawLine()
andError::setRawLine()
. These methods have been superseded byError::getStartLine()
andError::setStartLine()
. - Removed support for node cloning in the
NodeTraverser
. - Removed
$separator
argument fromName::toString()
. - Removed
throw_on_error
parser option andParser::getErrors()
method. Use theErrorHandler
mechanism instead.
PHP-Parser 3.0.0 Beta 1
The following changelog only lists changes relative to the alpha 1 release. A description of backwards incompatible changes between version 2.x and 3.0 can be found in the upgrading guide.
Added
- [7.1] Function/method and parameter builders now support PHP 7.1 type hints (void, iterable and nullable types).
- Nodes and Comments now implement
JsonSerializable
. The node kind is stored in anodeType
property. - The
InlineHTML
node now has anhasLeadingNewline
attribute, that specifies whether the
preceding closing tag contained a newline. The pretty printer honors this attribute. - Partial parsing of
$obj->
(with missing property name) is now supported in error recovery mode. - The error recovery mode is now exposed in the
php-parse
script through the--with-recovery
or-r
flags.
Changes also in PHP-Parser 2.1.1
- The PHP 7 parser will now generate a parse error for
$var =& new Obj
assignments. - Comments on free-standing code blocks will now be retained as comments on the first statement in the code block.
PHP-Parser 2.1.1
Changed
- The pretty printer will now escape all control characters in the range
\x00-\x1F
inside double quoted strings. If no special escape sequence is available, an octal escape will be used. - The quality of the error recovery has been improved. In particular unterminated expressions should be handled more gracefully.
- The PHP 7 parser will now generate a parse error for
$var =& new Obj
assignments. - Comments on free-standing code blocks will now be retained as comments on the first statement in the code block.
PHP-Parser 3.0.0 Alpha 1
This release adds full compatibility with PHP 7.1. There are no major API changes, however specific details of the node structure have changed for a number of nodes
A description of backwards incompatible changes between version 2.x and 3.0 can be found in the upgrading guide.
Added
- [7.1] Added support for
void
anditerable
types. These will now be represented as strings (instead ofName
instances) similar to other builtin types. - [7.1] Added support for class constant visibility. The
ClassConst
node now has aflags
subnode holding the visibility modifier, as well asisPublic()
,isProtected()
andisPrivate()
methods. The constructor changed to accept the additional subnode. - [7.1] Added support for nullable types. These are represented using a new
NullableType
node with a singletype
subnode. - [7.1] Added support for short array destructuring syntax. This means that
Array
nodes may now appear as the left-hand-side of assignments and foreach value targets. Additionally the array items may now containnull
values if elements are skipped. - [7.1] Added support for keys in list() destructuring. The
List
subnodevars
has been renamed toitems
and now containsArrayItem
s instead of plain variables. - [7.1] Added support for multi-catch. The
Catch
subnodetype
has been renamed totypes
and is now an array ofName
s. Name::slice()
now supports lengths and negative offsets. This brings it in line witharray_slice()
functionality.
Changed
Due to PHP 7.1 support additions described above, the node structure changed as follows:
void
anditerable
types are now stored as strings if the PHP 7 parser is used.- The
ClassConst
constructor changed to accept an additionalflags
subnode. - The
Array
subnodeitems
may now containnull
elements (destructuring). - The
List
subnodevars
has been renamed toitems
and now containsArrayItem
s instead of plain variables. - The
Catch
subnodetype
has been renamed totypes
and is now an array ofName
s.
Additionally the following changes were made:
- The
type
subnode onClass
,ClassMethod
andProperty
has been renamed toflags
. Thetype
subnode has retained for backwards compatibility and is populated to the same value asflags
. However, writes totype
will not updateflags
. - The
TryCatch
subnodefinallyStmts
has been replaced with afinally
subnode that holds an explicitFinally
node. This allows for more accurate attribute assignment. - The
Trait
constructor now has the same form as theClass
andInterface
constructors: It takes an array of subnodes. Unlike classes/interfaces, traits can only have astmts
subnode. - The
NodeDumper
now prints class/method/property/constant modifiers, as well as the include and use type in a textual representation, instead of only showing the number. - All methods on
PrettyPrinter\Standard
are now protected. Previously most of them were public.
Removed
- Removed support for running on PHP 5.4. It is however still possible to parse PHP 5.2-5.4 code while running on a newer version.
- The deprecated
Comment::setLine()
andComment::setText()
methods have been removed. - The deprecated
Name::set()
,Name::setFirst()
andName::setLast()
methods have been removed.