Releases: nikic/PHP-Parser
Releases · nikic/PHP-Parser
PHP-Parser 2.1.0
Fixed
- Properly support
B""
strings (with uppercaseB
) in a number of places. - Fixed reformatting of indented parts in a certain non-standard comment style.
Added
- Added
dumpComments
option to node dumper, to enable dumping of comments associated with nodes. - Added
Stmt\Nop
node, that is used to collect comments located at the end of a block or at the end of a file (without a following node with which they could otherwise be associated). - Added
kind
attribute toExpr\Exit
to distinguish betweenexit
anddie
. - Added
kind
attribute toScalar\LNumber
to distinguish between decimal, binary, octal and hexadecimal numbers. - Added
kind
attribtue toExpr\Array
to distinguish betweenarray()
and[]
. - Added
kind
attribute toScalar\String
andScalar\Encapsed
to distinguish between single-quoted, double-quoted, heredoc and nowdoc string. - Added
docLabel
attribute toScalar\String
andScalar\Encapsed
, if it is a heredoc or nowdoc string. - Added start file offset information to
Comment
nodes. - Added
setReturnType()
method to function and method builders. - Added
-h
and--help
options tophp-parse
script.
Changed
- Invalid octal literals now throw a parse error in PHP 7 mode.
- The pretty printer takes all the new attributes mentioned in the previous section into account.
- The protected
AbstractPrettyPrinter::pComments()
method no longer returns a trailing newline. - The bundled autoloader supports library files being stored in a different directory than
PhpParser
for easier downstream distribution.
Deprecated
- The
Comment::setLine()
andComment::setText()
methods have been deprecated. Construct new objects instead.
Removed
- The internal (but public) method
Scalar\LNumber::parse()
has been removed. A non-internalLNumber::fromString()
method has been added instead.
PHP-Parser 2.0.1
Fixed
declare() {}
anddeclare();
are not semantically equivalent and will now result in different ASTs. The former case will have an emptystmts
array, while the latter will setstmts
tonull
.- Magic constants are now supported as semi-reserved keywords.
- A shebang line like
#!/usr/bin/env php
is now allowed at the start of a namespaced file. Previously this generated an exception. - The
prettyPrintFile()
method will not strip a trailing?>
from the raw data that follows a__halt_compiler()
statement. - The
prettyPrintFile()
method will not strip an opening<?php
if the file starts with a comment followed by InlineHTML.
PHP-Parser 2.0.0
This release adds complete support for parsing PHP 7 code.
A description of backwards incompatible changes between version 1.x and 2.0 can be found in the upgrading guide.
A complete list of changes between 1.x and 2.0 can be found in the changelog.
There has been only one additional change since version 2.0.0-beta1:
- String parts of encapsed strings are now represented using
Scalar\EncapsStringPart
nodes. Previously raw strings were used. This affects theparts
child ofScalar\Encaps
andExpr\ShellExec
. The change has been done to allow assignment of attributes to encapsed string parts.
PHP-Parser 2.0.0 Beta 1
A description of changes incompatible with version 1.x can be found in the upgrading guide. This changelog lists differences to alpha 1 only.
Fixed
- Fixed issue with too many newlines being stripped at the end of heredoc/nowdoc strings in some cases. (#227)
Changed
- Update group use support to be in line with recent PHP 7.0 builds.
- Renamed
php-parse.php
tophp-parse
and registered it as a composer bin. - Use composer PSR-4 autoloader instead of custom autoloader.
- Specify phpunit as a dev dependency.
Added
- Added
shortArraySyntax
option to pretty printer, to print all arrays using short syntax.
PHP-Parser 1.4.1
Fixed
- Fixed issue with too many newlines being stripped at the end of heredoc/nowdoc strings in some cases. (#227)
PHP-Parser 2.0.0 Alpha 1
A more detailed description of backwards incompatible changes can be found in the upgrading guide.
Removed
- Removed support for running on PHP 5.4. It is however still possible to parse PHP 5.2 and PHP 5.3 code while running on a newer version.
- Removed legacy class name aliases. This includes the old non-namespaced class names and the old names for classes that were renamed for PHP 7 compatibility.
- Removed support for legacy node format. All nodes must have a
getSubNodeNames()
method now.
Added
- Added support for remaining PHP 7 features that were not present in 1.x:
- Group use declarations. These are represented using
Stmt\GroupUse
nodes. Furthermore atype
attribute was added toStmt\UseUse
to handle mixed group use declarations. - Uniform variable syntax.
- Generalized yield operator.
- Scalar type declarations. These are presented using
'bool'
,'int'
,'float'
and'string'
as the type. The PHP 5 parser also accepts these, however they'll beName
instances there. - Unicode escape sequences.
- Group use declarations. These are represented using
- Added
PhpParser\ParserFactory
class, which should be used to create parser instances. - Added
Name::concat()
which concatenates two names. - Added
Name->slice()
which takes a subslice of a name.
Changed
PhpParser\Parser
is now an interface, implemented byParser\Php5
,Parser\Php7
andParser\Multiple
. TheMultiple
parser will try multiple parsers, until one succeeds.- Token constants are now defined on
PhpParser\Parser\Tokens
rather thanPhpParser\Parser
. - The
Name->set()
,Name->append()
,Name->prepend()
andName->setFirst()
methods are deprecated in favor ofName::concat()
andName->slice()
. - The
NodeTraverser
no longer clones nodes by default. The old behavior can be restored by passingtrue
to the constructor. - The constructor for
Scalar
nodes no longer has a default value. E.g.new LNumber()
should now be written asnew LNumber(0)
.
PHP-Parser 1.4.0
Added
- Added interface
PhpParser\Node\FunctionLike
, which is implemented byStmt\ClassMethod
,Stmt\Function_
andExpr\Closure
nodes. This interface provides getters for their common subnodes. - Added
Node\Stmt\ClassLike::getMethod()
to look up a specific method on a class/interface/trait.
Fixed
- Fixed
isPublic()
return value for implicitly public properties and methods that define an additional modifier likestatic
orabstract
. - Properties are now accepted by the trait builder.
- Fixed
__HALT_COMPILER_OFFSET__
support on HHVM.
PHP-Parser 1.3.0
Added
- Errors can now store the attributes of the node/token where the error occurred. Previously only the start line was
stored. - If file positions are enabled in the lexer, errors can now provide column information if it is available. See documentation.
- The parser now provides an experimental error recovery mode, which can be enabled by disabling the
throwOnError
parser option. In this mode the parser will try to construct a partial AST even if the code is not valid PHP. See documentation. - Added support for PHP 7
yield from
expression. It is represented byExpr\YieldFrom
. - Added support for PHP 7 anonymous classes. These are represented by ordinary
Stmt\Class_
nodes with the name set tonull
. Furthermore this implies thatExpr\New_
can now contain aStmt\Class_
in itsclass
subnode.
Fixed
- Fixed registration of PHP 7 aliases, for the case where the old name was used before the new name.
- Fixed handling of precedence when pretty-printing
print
expressions. - Floating point numbers are now pretty-printed with a higher precision.
- Checks for special class names like
self
are now case-insensitive.
PHP-Parser 1.2.2
- The
NameResolver
now resolves parameter type hints when entering the function/method/closure node. As such other visitors running after it will be able to make use of the resolved names at that point already. - The autoloader no longer sets the
unserialize_callback_func
ini option on registration - this is not necessary and may cause issues when running PhpUnit tests with process isolation.
PHP-Parser 1.2.1
This release fixes the registration of the class aliases introduced in version 1.2.0. Previously the old class names could not be used in instanceof
checks under some circumstances.