Nikita Popov
953f8c9631
Perform automated test update
2017-01-19 22:25:22 +01:00
Nikita Popov
b0c962911e
Add test porting infrastructure
2017-01-19 22:24:48 +01:00
Nikita Popov
1bfbd7bcc8
Make useExpressionStatement only supported mode
2017-01-19 21:15:26 +01:00
Nikita Popov
065c720c28
Merge branch 'formatPreservingPrint'
2017-01-19 21:06:32 +01:00
Nikita Popov
0c9c8d58ab
Drop deprecated $type subnodes
...
These have been replaced by $flags in 3.0
2017-01-19 21:00:44 +01:00
Nikita Popov
f21309f52f
Add NameResolver mode that does not modify nodes
2016-12-26 21:45:33 +01:00
Nikita Popov
4d2a4d02b0
Add first shot at format preserving pretty printer
2016-12-26 18:28:49 +01:00
Nikita Popov
9b2d35d1ac
Add expression statement mode
2016-12-24 23:54:24 +01:00
Nikita Popov
0f582e1708
Add VarLikeIdentifier
...
For representing Identifiers that have an implicit leading $.
With this done, maybe go one step further?
* Rename VarLikeIdentifier -> VarIdentifier / VarName
* Use VarIdentifier / VarName also as an inner node in Variable.
Not sure if this adds any real value.
2016-12-23 12:39:27 +01:00
Nikita Popov
d32d937d47
Use Identifier for property names as well
2016-12-23 00:25:45 +01:00
Nikita Popov
f46c909b5a
Represent prop in static prop fetch using Identifier
2016-12-23 00:22:30 +01:00
Nikita Popov
a947e731c3
Add useConsistentVariableNodes mode
...
The parameter case is a bit weird, because the subnode is called
"name" here, rather than "var". Nothing we can do about that in
this version though.
The two parser options might be merged. I've kept it separate,
because I think this variable representation should become the
default (or even only representation) in the future, while I'm
less sure about the Identifier thing.
2016-12-23 00:10:59 +01:00
Nikita Popov
122f449960
Represent builtin types using Identifier as well
2016-12-22 22:23:30 +01:00
Nikita Popov
6bcc6c31dd
Add useIdentifierNodes mode to parser
...
In this mode non-namespaced names that are currently represented
using strings will be represented using Identifier nodes instead.
Identifier nodes have a string $name subnode and coerce to string.
This allows preserving attributes and in particular location
information on identifiers.
2016-12-22 21:15:44 +01:00
Felix Becker
3e8c8d248d
Add originalName attribute in NameResolver
...
For now gated behind a preserveOriginalNames option.
2016-12-22 20:25:02 +01:00
Nikita Popov
58970e2a37
Improve LNumber/DNumber pretty printing
...
* Support PHP_INT_MIN
* Support negative binary/octal/hex numbers
* Support INF/-INF/NAN in namespaces
2016-12-11 16:31:59 +01:00
Nikita Popov
c1e0bab4f8
Add support for negative interpolated offsets
...
A late addition to PHP 7.1 which I missed.
2016-12-11 13:44:17 +01:00
Nikita Popov
70319e27ee
Parse 0 in "$a[0]" as LNumber ( #325 )
2016-12-07 20:24:00 +01:00
Nikita Popov
5219f75719
Fix pretty-printing of nullable types
2016-12-06 12:26:21 +01:00
Ondrej Mirtes
a485ecd7ba
NameResolver - resolve Name in NullableType
2016-12-06 12:21:30 +01:00
Nikita Popov
3e158a2313
Wrap List_ in ArrayItem
...
This was correctly done for the 'key'=>list() form, but not for
unkeyed nested lists.
2016-12-01 13:32:37 +01:00
Nikita Popov
bcdfb703d5
Cleanup imports
...
Thanks PhpStorm :)
2016-11-23 22:58:18 +01:00
Nikita Popov
27281e9130
Fix attribute assignment for Error nodes
2016-11-23 22:51:32 +01:00
Nikita Popov
098294beec
Support !!positions parser test mode
...
And use it for the group use prefix position test that was
previously implemented as a separate test.
2016-11-23 22:36:48 +01:00
Nikita Popov
b02f8ac07d
Add support for dumping positions in NodeDumper
2016-11-23 22:25:17 +01:00
Nikita Popov
e52ffc4447
Support recovery from Foo::
2016-11-22 19:47:04 +01:00
Nikita Popov
c5cdd5ad73
Support recovery from free-standing $
2016-11-21 17:01:39 +01:00
Nikita Popov
c0630f8169
Support recovery for new without class name
2016-11-21 16:51:53 +01:00
Nikita Popov
fa7357b483
Represent empty Name::slice() using null
...
Instead of a Name([]) dummy value, that is invalid in other
contexts.
2016-10-22 17:02:38 +02:00
Nikita Popov
91cb82d3d2
Explicitly support Name copy construction
...
It already worked beforehand by accident ... make clear it's
actually supported.
2016-10-22 16:41:58 +02:00
Nikita Popov
7672b974ff
Remove Name::append() and Name::prepend()
2016-10-22 00:25:15 +02:00
Nikita Popov
f99a96e0a2
Introduce ErrorHandler
...
Add ErrorHandler interface, as well as ErrorHandler\Throwing
and ErrorHandler\Collecting. The error handler is passed to
Parser::parse(). This supersedes the throwOnError option.
NameResolver now accepts an ErrorHandler in the ctor.
2016-10-16 22:12:46 +02:00
Nikita Popov
90834bff8e
Add namespacedName attribute on runtime-resolved names
...
The NameResolver now adds a namespacedName attribute on function/
const names which cannot be statically resolved.
2016-10-11 19:44:22 +02:00
Nikita Popov
a910f6a247
Remove $separator arg from Name::toString()
2016-10-09 12:45:15 +02:00
Nikita Popov
caa5c0cc76
Graceful handling for "special" errors
...
Nearly all special errors are now handled gracefully, i.e. the
parser will be able to continue after encountering them. In some
cases the associated error range has been improved using the new
end attribute stack.
To achieve this the error handling code has been moved out of the
node constructors and into special methods in the parser.
2016-10-09 12:38:18 +02:00
Nikita Popov
5e5cb86e83
Remove support for node cloning in traverser
2016-10-09 00:41:55 +02:00
Nikita Popov
f6eb341b15
Fix GroupUse prefix attribute assignment
2016-10-08 23:55:46 +02:00
Nikita Popov
2e5ae28c39
Don't use deprecated getMock()
2016-09-30 20:42:19 +02:00
Nikita Popov
c79ea6d1d3
Support recovery from lexer errors
...
Lexer::startLexing() no longer throws, instead errors can be fetched
using Lexer::getErrors().
Lexer errors now also contain full line and position information.
2016-09-30 20:23:36 +02:00
Nikita Popov
9e5d3bbe25
Remove Error::(get|set)RawLine()
...
These have been superseded by Error::(get|set)StartLine().
2016-09-30 18:30:01 +02:00
Nikita Popov
f3c7dc9d89
Add Error::getMessageWithColumnInfo()
2016-09-30 18:24:43 +02:00
Nikita Popov
c5e0c3d7e2
Catch lexer errors in throwOnError=0 mode
2016-09-30 13:49:34 +02:00
Nikita Popov
ea47b6e0d6
Add NodeAbstract::setDocComment()
2016-09-17 20:51:22 +02:00
Nikita Popov
9e1c535b1d
Update builder tests to use "flags" instead of "type"
2016-09-17 20:51:22 +02:00
Nikita Popov
1ab24d26ee
Add support for PHP 7.1 types to builders
...
This adds support for void, iterable and nullable types.
2016-09-16 13:53:13 +02:00
Nikita Popov
a7120116b0
Merge branch '2.x'
2016-08-30 22:38:34 +02:00
Nikita Popov
83f34e7fa4
Retain comments on blocks on first inner statement
2016-08-30 22:37:51 +02:00
Nikita Popov
d0cfb98133
Merge branch '2.x'
...
Conflicts:
lib/PhpParser/Parser/Php7.php
2016-08-30 22:14:09 +02:00
Nikita Popov
13f7321def
Forbid "=& new" in PHP 7 mode
2016-08-30 22:12:01 +02:00
Nikita Popov
f7cb00d6d3
Add missing canonicalization in test
2016-07-25 21:02:53 +02:00