Nikita Popov
1dea9111a2
NodeDumper: Resolve type for include/use as well
2016-07-25 14:04:04 +02:00
Nikita Popov
174e6c3cab
NodeDumper: Print modifiers as strings
2016-07-25 13:53:49 +02:00
Nikita Popov
18129480ae
Rename $type subnode to $flags
...
Type makes it sound like a type-hint, and on a number of other nodes
$type is used for exactly that. Use $flags to hold modifiers instead.
2016-07-25 13:33:19 +02:00
Nikita Popov
867ae5148d
Bring Trait constructor in line with Class/interface
2016-07-22 17:01:51 +02:00
Nikita Popov
537b59d4d1
PHP 7.1: Support multi-catch
...
Catch::$type is now an array Catch::$types.
2016-07-22 15:40:00 +02:00
Nikita Popov
7ff12b8fcb
Remove deprecated Comment methods
2016-07-09 22:00:39 +02:00
Nikita Popov
574665b45b
PHP 7.1: list() with keys
...
Expr\List will now contain ArrayItems instead of plain variables.
I'm reusing ArrayItem, because code handling list() must also handle
arrays, and this allows both to go through the same code path.
This also renames Expr\List->vars to ->items.
TODO: Should Expr\List be dropped in favor of Expr\Array with an
extra flag?
2016-07-09 21:55:55 +02:00
Nikita Popov
437890d386
PHP 7: Short destructuring syntax
...
Potentially the pretty printer should force use of [] in assignment
context, instead of relying on the existance of the right attribute.
2016-07-06 23:43:23 +02:00
Nikita Popov
1edf72c040
PHP 7: Support nullable types
...
Using a new NullableType node.
2016-07-06 18:36:18 +02:00
Nikita Popov
5ea2a76d80
PHP 7.1: Class constant visibility support
2016-07-05 23:01:06 +02:00
Nikita Popov
5044fce1ff
PHP 7.1: Add void+iterable support
...
In PHP 7 mode, these will now be represented as strings 'void'
and 'iterable'.
2016-07-05 22:35:27 +02:00
Nikita Popov
96cbd48df6
Improve error recovery quality
...
In particular, support recovering from a missing trailing semicolon,
while keeping the rest of the expression.
2016-04-20 16:47:50 +02:00
Nikita Popov
e45e31c218
Fix new.test and code test runner
...
Using only the basename leads to collisions...
2016-04-20 15:03:18 +02:00
algo13
371c783344
Escape all low control characters in strings
2016-04-19 17:45:39 +02:00
Nikita Popov
5a6e7dd452
Avoid superfluous newline when printing Nops
2016-04-19 15:10:51 +02:00
Nikita Popov
90eb1165d1
Switch Exit kind attribute to flag
...
To be consistent with everything else.
2016-04-19 14:51:05 +02:00
Nikita Popov
e7869b9f14
Forbid invalid octals in PHP 7 mode
2016-04-18 13:59:18 +02:00
Nikita Popov
4c7ad7e194
Allow nop statements before namespace declaration
2016-04-16 21:39:49 +02:00
lvht
39f93f09f9
Add setReturnType() method to function/method builders
...
Also support scalar type hints in existing setTypeHint() method on params.
2016-04-09 18:41:38 +09:00
Nikita Popov
8cacc85913
"Fix" HHVM build
2016-04-07 12:27:08 +09:00
Nikita Popov
588e6a4d4c
Add string kinds and doc string labels
...
Scalar\String_ and Scalar\Encapsed now have an additional "kind"
attribute, which may be one of:
* String_::KIND_SINGLE_QUOTED
* String_::KIND_DOUBLE_QUOTED
* String_::KIND_NOWDOC
* String_::KIND_HEREDOC
Additionally, if the string kind is one of the latter two, an
attribute "docLabel" is provided, which contains the doc string
label (STR in <<<STR) that was originally used.
The pretty printer will try to take the original kind of the string,
as well as the used doc string label into account.
2016-04-07 12:09:00 +09:00
Nikita Popov
52cb5ecec7
Fix comment reformatting for some cases
...
It did not correctly deal with non-standard comments containing
indented lines.
2016-04-07 11:47:40 +09:00
Nikita Popov
14de71898e
Fix nop statement comment assignment
...
Keep around the start attributes on the lookahead token around in
a separate parser property.
2016-04-05 19:19:15 +09:00
Nikita Popov
5fa8493675
Make canonicalization less aggressive
2016-04-05 10:37:45 +09:00
Nikita Popov
b31a973fa7
Another fix for B"" handling
...
The lexer fix also need to account for uppercase B.
2016-04-04 22:07:50 +09:00
Nikita Popov
9ac3592190
Handle uppercase B"" prefix
2016-04-02 21:15:49 +09:00
Nikita Popov
35011d2e4d
Deduplicate attribute assignment code a bit
2016-04-02 08:02:58 +09:00
Nikita Popov
15a2388d75
Add start file offset to Comments
2016-04-02 07:54:01 +09:00
Nikita Popov
68b4c0388a
Fix Serializer/XML test output indent
...
This causes a failure here, but not on another machine, not sure
why.
2016-04-02 07:27:01 +09:00
Nikita Popov
eb4bfe1366
Add sanity check for leaveNode() return value
2016-03-27 14:52:15 +02:00
Nikita Popov
f493219c7d
Move "kind" attribute handling out of lexer
...
Doesn't belong there and will cause issue with multiple assignments.
2016-03-10 12:55:15 +01:00
Nikita Popov
aa199120c7
Add kind attribute for arrays
...
To distinguish array() and [] syntax. The pretty printer respects
this attribute. The shortArraySyntax pretty printer option acts as
a default in case the attribute is not specified.
2016-03-09 21:31:54 +01:00
Nikita Popov
ae30f97af6
Add "kind" attribute to LNumbers
...
Kind specifies whether the number was formatted as decimal, octal,
binary or hex. The pretty printer reproduces the number kind (but
not necessarily the exact formatting).
2016-03-09 21:10:55 +01:00
Nikita Popov
47c342a3e4
Add "kind" attribute to Stmt\Exit_
...
Attribute specifies whether this is a "die" or an "exit" and the
pretty printer behaves accordingly.
2016-03-09 20:20:36 +01:00
Nikita Popov
7eac2cfd8b
Introduce Nop statement to collect dangling comments
...
A Nop statement will be inserted into statement lists if there are
any trailing comments in the list (which would otherwise not be
associated with any node).
The pretty printer output currently still contains a superfluous
newline.
2016-03-09 19:48:36 +01:00
Nikita Popov
a0c216bf4b
Add dumpComments option to NodeDumper
...
Adding this as an option to avoid breaking people's tests.
Some of the test results show pretty clearly that we are incorrectly
assigning the same comment multiple times for nested nodes (mentioned
in #36 ).
2016-03-09 19:48:36 +01:00
Nikita Popov
9829bf69cd
Fix issue #251
2016-02-28 20:28:32 +01:00
Nikita Popov
a73aa7eec1
Pretty printer test coverage
...
Our output for yield / yield from is currently not very nice, but
also not easy to change.
2016-02-20 21:49:21 +01:00
Nikita Popov
1fe8f09caa
Fix __halt_compiler() pretty printing edge case
...
We can't strip the <?php at the end of a __halt_compiler() segment
in file mode.
Fixed by being a bit more explicit in prettyPrintFile() about what
we want to do...
2016-02-20 18:24:32 +01:00
Nikita Popov
d6361136e1
Update semi-reserved keyword list
...
Magic constant names have been added after the PHP 7 release.
We do not support and likely will not support __halt_compiler here
due to lexer limitations.
2016-02-09 13:30:39 +01:00
Nikita Popov
6dffb72ce0
Merge branch '1.x'
2016-01-15 22:02:35 +01:00
Nikita Popov
eb73441032
Support hashbang before namespace declaration
...
Fixes issue #243 .
2016-01-15 22:01:51 +01:00
Nikita Popov
719ca71d4a
Distinguish declare(); and declare(){}
...
It makes semantic difference and the latter form is actually
forbidden for strict_types.
This sets Declare->stmts to null for the body-less case.
2015-12-07 12:12:00 +01:00
Nikita Popov
a9074c7444
Introduce Scalar\EncapsedStringPart
2015-12-03 22:55:07 +01:00
Nikita Popov
98d28d7aa0
Drop test failing on HHVM
...
Can readd if Travis ever updates the HHVM version again, I
remember this being fixed ages ago.
2015-10-03 12:17:41 +02:00
Nikita Popov
e4b837e0c4
Split up pretty printer test in stmt/expr
...
The list was getting unweildly.
Also improve error message when parsing fails in pretty printer
test and extend some tests.
2015-10-02 11:16:12 +02:00
Aydin
2b9c5a62cb
Multiple init test for for loop
2015-10-02 11:03:33 +02:00
Aydin
99e89743bd
More PrettyPrinter tests
2015-10-02 11:03:32 +02:00
Nikita Popov
39a039fa42
Add option for short array syntax in pretty printer
2015-09-21 15:12:59 +08:00
Nikita Popov
b2961915a6
Fix XML serialization test
...
I have no idea why this suddenly turned up *now*
2015-09-21 14:29:24 +08:00
Nikita Popov
eecaf1e93b
Merge branch '1.x'
...
Conflicts:
grammar/rebuildParsers.php
lib/PhpParser/Parser.php
2015-09-19 22:07:29 +08:00
Nikita Popov
950ada4cba
Fix issue #227
...
Use \z instead of $.
2015-09-19 22:05:23 +08:00
Dmitry Patsura
e3a9356178
Use composer PSR-4 autoloader
2015-09-16 22:02:00 +09:00
Nikita Popov
fe6755ff4c
Use more helpful code test names
2015-08-25 21:36:08 +02:00
Nikita Popov
f57d217e91
Update group use support
...
To conform with current PHP 7 implementation
* Allow use \Foo\{Bar};
* Disallow use Foo\{\Bar};
* Disallow missing trailing semicolon (that was a bug)
2015-08-20 16:42:49 +02:00
Nikita Popov
dc85742034
Merge branch '1.x'
...
Conflicts:
CHANGELOG.md
composer.json
test/PhpParser/ParserTest.php
2015-07-14 19:43:49 +02:00
Nikita Popov
b9afcdfd92
Revert "Make tests compatible with PHP 7"
...
This reverts commit 91295a0790
.
This should no longer be necessary.
Conflicts:
test/PhpParser/ParserTest.php
2015-07-14 19:21:57 +02:00
Nikita Popov
feb82eed33
Disable cloning in traverser by default
2015-07-14 17:39:56 +02:00
Nikita Popov
0ef15c111a
Merge branch '1.x'
2015-07-14 17:08:28 +02:00
Nikita Popov
d341d94976
Add ClassLike::getMethod($name)
...
To allow getting individual method with a given name.
2015-07-14 17:07:45 +02:00
Nikita Popov
0265c28e6e
Switch NameResolver resolve methods to be immutable
...
To make it theoretically possible to expose this as API.
Add slice() method to Name to allow this. Deprecate existing mutable
Name APIs.
2015-07-12 23:56:57 +02:00
Nikita Popov
5bd8cb84de
Add dummy ParserFactory test
...
:/
2015-07-12 22:53:17 +02:00
Nikita Popov
ebeeae19a6
Merge branch '1.x'
2015-07-12 22:12:28 +02:00
Nikita Popov
5ede167835
Fix infinite recursion in Use builder __call
2015-07-12 22:11:43 +02:00
Nikita Popov
21e51c8cf6
Add some tests for Multiple parser
2015-07-12 22:00:02 +02:00
Nikita Popov
e7a2abb03b
Merge branch '1.x'
2015-07-11 22:33:19 +02:00
Nikita Popov
b862de1f5b
Support properties in trait builder
2015-07-11 22:31:45 +02:00
Nikita Popov
8090531acd
Fix pretty printing of const derefs for 5.x
...
(FOO)[0] is only supported on 7.x
2015-07-09 12:38:30 +02:00
Nikita Popov
1d62e9d8cc
Fix implicit visibility for properties as well
...
Also switch to using PPP mask.
2015-07-05 20:17:52 +02:00
Lisachenko Alexander
2a3bc608dc
Add broken test for implicit public nodes
2015-07-05 20:17:49 +02:00
Nikita Popov
90ab32f046
Merge branch '1.x'
2015-07-05 20:16:41 +02:00
Nikita Popov
7434a682e5
Fix implicit visibility for properties as well
...
Also switch to using PPP mask.
2015-07-05 20:16:21 +02:00
Lisachenko Alexander
5e6627c895
Add broken test for implicit public nodes
2015-07-05 20:10:47 +02:00
Nikita Popov
f872fa9b0b
Merge branch '1.x'
2015-07-04 14:40:53 +02:00
Nikita Popov
d5668f536d
Fix __HALT_COMPILER_OFFSET__ support on HHVM
2015-07-04 13:15:48 +02:00
Nikita Popov
9c9a8cddce
Merge branch '1.x'
2015-06-20 12:34:36 +02:00
Nikita Popov
fd7ee2e083
Add missing regex anchor
2015-06-20 12:34:10 +02:00
Nikita Popov
f2b7a31509
Rename ParserInterface to Parser
...
And drop the alias of Parser to Parser\Php5.
2015-06-20 11:47:25 +02:00
Nikita Popov
d8312a09a3
Split parsing tests into code tests and other stuff
...
And run the other stuff against Php5 and Php7 parsers.
Also move canonicalize() from CodeTestAbstract into a free-standing
function.
2015-06-20 11:44:29 +02:00
Nikita Popov
ef9a154d09
Add support for unicode escape sequences
...
Only parsed if the PHP 7 parser is used.
2015-06-13 20:51:02 +02:00
Nikita Popov
0da72fad00
Support scalar type declarations
2015-06-13 20:16:09 +02:00
Nikita Popov
71fa7c6674
Support UVS in pretty printer
...
Try to generate interoperable code where possible (but not
everything can be expressed in PHP 5).
2015-06-13 20:01:01 +02:00
Nikita Popov
f3f24e03ae
Support running against PHP 7 testsuite
2015-06-13 19:09:24 +02:00
Nikita Popov
bc21514ecf
Move token constants into separate class
...
As these are shared between Php5 and Php7 parsers they should be
in some common place, otherwise we'd have to always reference either
one or the other.
2015-06-13 18:39:55 +02:00
Nikita Popov
04e05907c3
Fix CRLF issue in Serializer\XML test
...
No idea why this suddenly turned up now.
2015-06-13 18:20:05 +02:00
Nikita Popov
61e060694d
Implement generalized yield operator
...
And split tokens.y off, so I don't waste time debugging this again...
2015-06-13 18:11:40 +02:00
Nikita Popov
602b9807eb
Import some UVS tests
2015-06-13 15:42:09 +02:00
Nikita Popov
f372a4c4ab
Move modeline handling into CodeTestAbstract
2015-06-13 15:10:46 +02:00
Nikita Popov
d18dcc0c7f
Implement UVS
2015-06-13 14:59:24 +02:00
Nikita Popov
74c57eef0e
Test PHP 5 and PHP 7 parsers
...
At this point they should return the same result.
2015-06-13 13:56:45 +02:00
Nikita Popov
dca46febc9
Implement semi-reserved identifiers
2015-06-13 12:47:13 +02:00
Nikita Popov
1a1bd1448d
Support mixed group use declarations
2015-06-13 11:27:38 +02:00
Nikita Popov
9620f79cdc
Add partial group use support
...
Supported via Stmt\GroupUse which has Name $prefix in addition to
the usual.
Still missing: Mixed group uses.
2015-06-12 23:05:28 +02:00
Nikita Popov
5d1e3be7d4
Anonymize some callbacks
2015-05-02 22:35:15 +02:00
Nikita Popov
cc75dd3612
Drop support for PHP 7 aliases
2015-05-02 22:21:12 +02:00
Nikita Popov
5f621c5adc
Drop support for legacy aliases from v0.9
2015-05-02 22:19:25 +02:00
Nikita Popov
29b9015f51
Drop support for old Node format
2015-05-02 22:17:34 +02:00
Nikita Popov
8b64195cf2
Try .17G print if .16G is not enough
...
This should be enough for all cases, because: A double has 53 bits
of mantissa (including the implicit 1 bit), which is 53*ln(2)/ln(10)
= 15.95 decimal digits. However the leading decimal digit may encode
less than the usual 3.32 bits, which will push this over the edge to
requiring 17 decimal digits.
2015-05-02 11:48:55 +02:00
Nikita Popov
9caa51b3a5
Add some more tests
2015-05-01 20:18:04 +02:00
Nikita Popov
648800f07f
Increase float pretty printing precision
...
This removes the reliance on the "precision" ini setting.
Furthermore the default of precision=14 is not sufficient.
2015-05-01 19:15:33 +02:00
Nikita Popov
23bf4f0c13
Add some error documentation
2015-04-30 21:58:45 +02:00
Nikita Popov
272ab6c8d8
Add some recovery tests
2015-04-30 19:02:51 +02:00
Nikita Popov
0731b47655
Don't distinguish test-fail / test
...
With error recovery this is fluid. Using .test for everything.
2015-04-30 17:45:36 +02:00
Nikita Popov
3b7d8e8b5d
Enable basic error recovery
...
Adding only a single recovery rule for now.
The API is now:
* throwOnError parser option must be disabled.
* List of Errors is available through $parser->getErrors(). This
method is available either way.
* If no recovery is possible $parser->parse() will return null.
(Obviously only if throwOnError is disabled).
2015-04-30 17:41:57 +02:00
Nikita Popov
a35c2a2067
Add column info to EOF errors
...
EOF errors are now located one past the end of the file.
2015-04-27 15:37:41 +02:00
Nikita Popov
55b2ead967
Make special class name checks case insensitive
2015-04-26 23:13:27 +02:00
Nikita Popov
e1a0ec3724
Add support for anonymous classes
...
Has not landed upstream yet, but syntax is unlikely to change.
2015-04-26 23:04:31 +02:00
Nikita Popov
338bc1f8e7
Fix "print" pretty-printing
...
Precedence was previously ignored.
2015-04-26 11:56:04 +02:00
Nikita Popov
ab80054e97
Add support for "yield from"
2015-04-26 11:56:02 +02:00
Nikita Popov
c8454271e1
Make column info 1-based
2015-04-18 21:20:45 +02:00
Nikita Popov
62f83a0dc2
Add column info for non-syntax errors where relatively precise
...
Should it also be added if only rough information is available? E.g.
spanning an entire class?
2015-04-18 13:27:58 +02:00
Nikita Popov
611fa5c7f1
Test parser position information (syntax errors)
2015-04-18 13:27:57 +02:00
Nikita Popov
4defbc2174
Make Error column info attribute based
2015-04-18 12:51:26 +02:00
Gerrit Addiks
33a39fae06
added column-numbers to syntax errors
2015-04-18 10:14:49 +02:00
Nikita Popov
617bf0aa41
Fix registering of PHP 7 aliases
...
The previous approach was causing issues, because "instanceof"
does not invoke the autoloader.
2015-03-24 20:04:50 +01:00
Nikita Popov
dce19b074b
Strict type compliance
...
Were this library to be fully annotated with scalar types and
return types where possible and were strict types to be enabled
for all files, the test suite would now pass.
2015-03-24 11:19:17 +01:00
Matthieu Napoli
729c7bde0c
#184 Add a flag to NodeTraverser to avoid cloning nodes
2015-03-22 11:19:04 +13:00
Nikita Popov
8982315b4e
Rename Cast\Object as well
...
As it will very likely be soft-reserved in PHP 7.
Old alias is still available, as usual.
2015-03-21 18:57:55 +01:00
Nikita Popov
7ec277e1e1
Replace another Scalar\String occurance
...
Also canonicalize NameResover tests to avoid those pesky CRLF
issues.
2015-03-21 18:47:20 +01:00
Nikita Popov
1a627872f0
Rename nodes for compat with PHP 7
...
The old names will still be available on PHP 5.x.
2015-03-20 21:49:38 +01:00
Nikita Popov
592836c4dc
Add support for T_HASHBANG (HHVM)
2015-03-14 19:53:08 +01:00
Nikita Popov
251e689283
Add support for spaceship operator (<=>) [PHP 7]
...
Added as Expr\BinaryOp\Spaceship.
2015-03-12 23:13:31 +01:00
Nikita Popov
01f4be6b4d
Add support for null coalesce operator (??) [PHP 7]
...
Added as Expr\BinaryOp\Coalesce.
2015-03-12 22:45:56 +01:00
Nikita Popov
dc28449d81
Drop whitespace after ... varargs collection
...
Also drop an obsolete pretty printer test.
2015-03-12 22:19:34 +01:00
Nikita Popov
3ad0d4b310
Add support for return type declarations [PHP 7]
...
This adds an additional "returnType" subnode to Stmt\Function_,
Stmt\ClassMethod and Expr\Closure, as well as the corresponding
support in the name resolver and pretty printer.
2015-03-12 22:16:12 +01:00
Nikita Popov
4dbf067b4b
Add a few more string interpolation tests
...
Originally wanted to simplify the pretty-printer output, but ...
edge cases everywhere :/
2015-03-11 20:01:26 +01:00
Nikita Popov
0c34706799
Add "use" builder
2015-03-10 16:05:55 +01:00
Nikita Popov
f9fc2fc9ee
Add support for global namespace in NS builder
...
NULL argument can now be used to create a global namespace {} block.
2015-03-10 15:28:19 +01:00
Nikita Popov
a2d7e8977a
Use real properties for storing subnodes
...
Instead of storing subnodes in a subNodes dictionary, they are
now stored as simple properties. This requires declarating the
properties, assigning them in the constructor, overriding
the getSubNodeNames() method and passing NULL to the first argument
of the NodeAbstract constructor.
[Deprecated: It's still possible to use the old mode of operation
for custom nodes by passing an array of subnodes to the constructor.]
The only behavior difference this should cause is that getSubNodeNames()
will always return the original subnode names and skip any additional
properties that were dynamically added. E.g. this means that the
"namespacedName" node added by the NameResolver visitor is not treated
as a subnode, but as a dynamic property instead.
This change improves performance and memory usage.
2015-03-09 08:54:20 +01:00
Thomas Ruiz
73cace360d
Implicit public should not generate as explicit public
2015-03-08 20:21:01 +01:00
Nikita Popov
d56ff5a351
Fix lexer tests for HHVM
...
HHVM does not throw warnings from token_get_all()
for invalid chars and unterminated comments. This
is not really integral functionality, so I'm okay
to just skip it to get a passing HHVM build.
2015-02-26 19:19:40 +01:00
Nikita Popov
3028bc8081
And make it work on PHP 5 as well...
2015-02-26 16:40:21 +01:00
Nikita Popov
91295a0790
Make tests compatible with PHP 7
...
When parsing on PHP 7 we will no longer be able to deal with
code that contains invalid octal literals. Currently we'll fatal,
after engine exceptions land we'll throw an exception instead.
2015-02-26 16:26:29 +01:00
Tom Rochette
1366e833a1
Move getMethods() to new ClassLike node
...
Class_, Interface_ and Trait_ extend the ClassLike node, which
provides the getMethods() method.
2015-01-31 22:59:38 +01:00
Nikita Popov
6930feac43
Add some tests for pretty printing expressions
2015-01-18 19:57:09 +01:00
Nikita Popov
0a445c7656
Test lexer returning invalid token
2015-01-18 00:11:10 +01:00
Nikita Popov
9689763e20
Cover both DONT_TRAVERSE_CHILDREN cases
2015-01-18 00:10:01 +01:00
Nikita Popov
4071c4645d
Add NodeTraverser::DONT_TRAVERSE_CHILDREN support
2015-01-11 22:13:58 +01:00
Nikita Popov
4cd2b95a23
Fix 5.3 build and some small cleanups
2014-12-19 18:54:56 +01:00
Nikita Popov
7ab88416ac
Enforce Name|string for names in builders
...
While array (with name components) could technically be allowed (as
they are supported by the Name node itself), more likely than not
an array would due to incorrect usage of the API (e.g. array instead
of variadics).
2014-12-19 18:50:16 +01:00
Nikita Popov
ba625063e7
Support fully-qualified and ns-relative names in builders
2014-12-19 18:48:21 +01:00
Nikita Popov
b4b93ccb21
Add integration test for builders
2014-12-19 18:35:19 +01:00
Stepan Anchugov
01643e06d3
Add namespace builder
2014-12-19 18:19:33 +01:00
Nikita Popov
4387454fe0
Add trait builder (for completeness...)
2014-12-19 17:59:23 +01:00
Nikita Popov
e69c9ee38c
Fix attribute assigment test with crlf newlines
2014-12-19 17:28:22 +01:00
Nikita Popov
894c3f787d
Add test for attribute assignment by parser
...
Weird that this wasn't tested yet...
2014-12-19 00:37:38 +01:00
Nikita Popov
46975107a7
Support token position attributes in lexer
...
Also change endFilePos semantics to refer to the last character that
is *included* in the token, rather than one past the last character.
This ensures that all end* attributes have the same semantics.
2014-12-19 00:37:36 +01:00
Nikita Popov
2438848487
Add support for doc comments in builders
2014-12-13 13:44:40 +01:00
nikic
8507af6f4a
Add missing require in tests
...
Test files aren't autoloaded, so this was order-dependent.
2014-11-27 21:01:56 +01:00
nikic
7c98ad6f9b
Support file offsets in emulative lexer as well
...
Also run normal lexer tests against emulative lexer and fix a bug
in __halt_compiler() handling found as a result.
2014-11-27 20:57:38 +01:00
Máximo Cuadros Ortiz
d774dbc1b7
Add optional startFilePos and endFilePos attributes
...
The lexer can now optionally add startFilePos and endFilePos
attributes, which are offsets in to the lexed code string.
The end offset currently points one past the last character of
the token - this is pending further discussion.
The attributes are not added by default and have to be enabled
using the new 'usedAttributes' lexer option:
$lexer = new Lexer([
'usedAttributes' => [
'comments', 'startLine', 'endLine',
'startFilePos', 'endFilePos'
]
]);
2014-11-27 20:38:29 +01:00
nikic
e26e63e9b0
Error on final or abstract properties
2014-11-13 20:25:52 +01:00
nikic
0f69f12b94
Use "public" visibility when not explicitly given
...
Fixes issue #143
2014-11-13 20:21:21 +01:00
nikic
7fbdb79a08
Fix whitespace when printing trait alias modifiers
2014-11-03 16:16:15 +01:00
Arne Blankerts
6fad8ff32a
Make NameResolver resolve trait alias and precedence names
2014-11-03 16:06:43 +01:00
nikic
66fd29cb58
Use stricter assertions where possible
2014-09-30 20:38:09 +02:00
nikic
69701430c1
Cover remaining constant scalar expressions
2014-09-28 13:05:23 +02:00
nikic
6dc24fa9f5
Fix coverage annotations
2014-09-28 12:49:12 +02:00
nikic
3e1665bbbd
Disallow new without a class name
...
Fixes #137 .
2014-09-28 12:41:35 +02:00
nikic
6423864160
Add Autoloader tests
2014-09-12 13:45:34 +02:00
nikic
fd064dac6c
Very that node type is valid in XML unserializer
2014-09-12 00:39:59 +02:00
nikic
d9bd550414
Fix XML unserializer
2014-09-12 00:37:21 +02:00
nikic
94eca2ce44
Remove deprecated Template and TemplateLoader
2014-09-12 00:25:30 +02:00
nikic
452e1c0180
Add constant dereferencing, a list-minute 5.6 change
2014-08-31 16:14:36 +02:00
nikic
6d0589d14f
Ensure that special class names are unqualified
...
Replicates the PHP error message
2014-08-11 22:04:52 +02:00
nikic
ef121e690c
Preserve case of "static" class name
2014-08-11 21:44:50 +02:00
Elliot Levin
c0340053d1
Fix case sensitivity for special class names
2014-08-11 21:41:54 +02:00
nikic
1f143393e5
Rewrite namespace handling code
...
Add a check for disallowed statements between braced namespaces
while at it.
2014-04-21 15:16:00 +02:00
nikic
4743e9b0b8
Update constant scalar expression support
2014-04-19 22:53:13 +02:00
nikic
91f6880734
Improve pretty printing of empty statement lists
...
The pStmts() method now also includes the leading \n, however only
if the statement list is non-empty.
2014-03-27 12:31:21 +01:00
nikic
a5e0bbcb62
Support use function/const in name resolver
2014-03-26 23:28:32 +01:00
nikic
3b7829b011
Add support for function and constant import (PHP 5.6)
2014-03-26 22:33:45 +01:00
nikic
bea89a0bf2
Add support for constant scalar expressions (PHP 5.6)
2014-03-26 21:48:12 +01:00
nikic
cda6f575f0
Add support for pow operator (PHP 5.6)
2014-03-26 19:18:16 +01:00
nikic
b5bcfa1168
Add support for argument unpacking (PHP 5.6)
2014-03-26 18:42:46 +01:00
nikic
96f1151ab2
Add support for variadic parameters (PHP 5.6)
2014-03-26 18:23:30 +01:00
nikic
f5be0d30f7
Guarantee that subnodes are always in the right order
2014-03-22 14:49:56 +01:00
Tomáš Polomský
c8c233f900
Correctly pretty print negative floats
2014-03-22 14:24:35 +01:00
nikic
70077039b4
Add Scalar\MagicConst->getName()
...
Return magic constant name, e.g. __CLASS__.
Resolves #95 .
2014-02-21 18:16:18 +01:00
nikic
1c8481bff6
Merge branch '0.9'
...
Conflicts:
lib/PhpParser/Lexer.php
lib/PhpParser/Node/Stmt/Class.php
lib/PhpParser/Node/Stmt/ClassMethod.php
lib/PhpParser/Node/Stmt/Interface.php
lib/PhpParser/Node/Stmt/Namespace.php
lib/PhpParser/Node/Stmt/UseUse.php
lib/PhpParser/Parser.php
2014-02-12 20:23:12 +01:00
Martin Hasoň
118f28344d
Synchronized error messages with native php error messages
2014-02-12 20:19:48 +01:00
nikic
f82862ec9c
Port library to use namespaces, with BC for old names
2014-02-06 20:29:35 +01:00
Jean-François Simon
7f4ab26732
Fix name resolver (class names are case insensitive)
2013-11-15 20:27:56 +01:00
Charles Sprayberry
700847e295
Add NodeTraverser::removeVisitor()
2013-09-28 13:21:30 +02:00
nikic
77c08a75c9
Fix pretty printing of include
expressions
2013-07-27 16:23:27 +02:00
Florent
12faad529e
Add interface builder
2013-05-23 15:14:58 +02:00
nikic
08f0cde6f9
Add prettyPrintFile() method
2013-04-15 20:53:23 +02:00
nikic
75ec7a3e78
Looks like I forgot to git add some files...
2013-02-14 21:49:08 +01:00
nikic
81d20bf10e
Pretty print namespaces in semicolon-style if possible
2013-01-15 18:21:42 +01:00
nikic
db18906dfc
Rename PrettyPrinter_Zend to PrettyPrinter_Default
2013-01-15 17:43:36 +01:00
nikic
fbaa1e5fc3
Add information on expected tokens to syntax errors
...
This now mimics the error messages provided by PHP itself (pre 5.4).
2013-01-15 17:30:14 +01:00
nikic
df17d62b40
Fix switch formatting
...
The switch cases were not indented and fall-through cases had an
unnecessary additional newline.
Patch by @pscheit (PR #39 ).
2012-10-31 17:46:48 +01:00
nikic
ac6f221c50
Better prededence and associativity handling in pretty printer
...
Previously the pretty printer added unnecessary and odd-looking parentheses
when several operators with the same precedence were chained:
'a' . 'b' . 'c' . 'd' . 'e'
// was printed as
'a' . ('b' . ('c' . ('d' . 'e')))
Another issue reported as part of #39 was that assignments inside closures
were wrapped in parentheses:
function() {
$a = $b;
}
// was printed as
function() {
($a = $b);
}
This was caused by the automatic precedence handling, which just regarded
the closure as an ordinal nested expression.
With the new system the $predenceMap of PrettyPrinterAbstract contains both
precedence and associativity and there is a new method pPrec() which prints
a node taking precedence and associativity into account.
For simpler usage there are additional function pInfixOp(), pPrefixOp() and
pPostfixOp().
Prints not going through pPrec() do not have any precedence handling (fixing
the closure issue).
2012-10-31 17:34:06 +01:00
nikic
9e43acee2c
Scalar_String::create() -> Scalar_String::parse()
...
Directly creating the node isn't necessary anymore, the token only needs
to be parsed. This makes it consistent with the other scalar parsing
methods and removes the need to pass $arguments around.
2012-10-19 15:17:08 +02:00
nikic
9d8e13b4a9
Fix Switch subnode order
...
Not that it makes much of a difference, but could have caused issues with
"out of order" visiting of nodes.
2012-10-19 14:54:56 +02:00
nikic
af5d288fb3
Add support for expressions in empty (PHP 5.5)
...
Apart from the grammar modifications this also renames the Empty subnode
from var to expr. This breaks BC.
2012-09-07 23:42:01 +02:00
nikic
f6c1ab6657
Adjust list and yield parsing, update prettyprinter
...
* nested list()s will now create nested List nodes (instead of just
nested arrays)
* yield $k => $v was parsed with key and value swapped. This is now fixed
* the pretty printer now works with the newly added language constructs
2012-09-07 23:41:59 +02:00
nikic
4259b44a84
Add support for constant dereferencing (PHP 5.5)
...
Examples: "foo"[2], [1, 2, 3][2]
2012-09-07 23:41:58 +02:00
nikic
417a8bb07e
Add support for yield expressions (PHP 5.5)
...
This adds a new Yield expression type, with subnodes key and value.
2012-09-07 23:41:57 +02:00
nikic
ae3774f0f2
Add support for finally clauses (PHP 5.5)
...
This adds a new finallyStmts subnode to the TryCatch node. If there is
no finally clause it will be null.
2012-09-07 23:41:56 +02:00
nikic
f8f1e17e41
Add support for list() in foreach (PHP 5.5)
...
Example: foreach ($coords as list($x, $y)) { ... }
This change slightly breaks backwards compatability, as it changes the
node structure for the previously existing `list(...) = $foo` assignments.
Those no longer have a dedicated `AssignList` node; instead they are
parsed as a normal `Assign` node with a `List` as `var`. Similarly the
use in `foreach` will generate a `List` for `valueVar`.
2012-09-07 23:41:55 +02:00
nikic
5a947e9843
Fix parsing of $foo =& new Bar;
...
By-reference assignments of new expressions are now parsed as AssignRef
(instead of just Assign).
Closes issue #31 .
2012-07-23 11:36:47 +02:00
nikic
eb5991227d
Add Class->getMethods() function
2012-07-07 16:24:07 +02:00
nikic
4137d7a7a8
Add modifier accessors for ClassMethod etc
2012-07-07 16:08:37 +02:00
nikic
4972124468
Fix test failures due to precision differences
...
Travis 5.2 seems to have changed the float output precision, so a test was
failing. Now the numbers in the expected output are also provided by PHP,
so they should be the same.
2012-06-08 18:19:37 +02:00
nikic
44ed30957f
Fix two tests which would fail on x64
2012-06-08 18:09:42 +02:00
nikic
35ec185558
Make $line argument for Comment optional
...
Also add setLine() method.
2012-06-08 17:55:35 +02:00
Jon Cave
0911b2e1ce
Add line number information to comments
...
Line numbers are stored in the $line property of the PHPParser_Comment
and PHPParser_Comment_Doc classes and can be retrieved with getLine().
2012-06-06 14:33:38 +01:00
nikic
e16513a0eb
Fix parsing of new expressions in parenthesis
...
The new dereferencing syntaxes (new Foo)->bar and (new Foo)['bar'] were
causing a shift/reduce conflict with the '(' expr ')' rule. When
(new Foo) was encountered (without dereference operators following) the
parser thus threw a parse error.
The fix simply adds a special '(' new_expr ')' rule to expr. This does not
remove the shift/reduce conflict itself, but makes it irrelevant.
This fixes issue #20 .
2012-05-12 14:11:10 +02:00
nikic
81e53ce0ff
Insert comments when pretty printing
...
This changset also adds unit tests for Comments and adds a way to test the
pretty printer.
2012-05-11 16:18:14 +02:00
nikic
a824a2aba7
Fix $node->getDocComment()
...
getDocComment() now returns the last comment (given that it is a doc
comment). setDocComment() no longer exists, as it doesn't make sense
with the comment objects anymore. getAttribute() now returns by reference,
so it also works in reference contexts.
2012-05-06 18:24:26 +02:00
nikic
9d96dd1796
Adjust XML unserializer for new comments attribute
2012-05-06 18:12:02 +02:00
nikic
603582fe50
Add test coverage for two things
2012-05-06 17:58:31 +02:00
nikic
e587e3f4c6
Collect normal comments too, not only doc comments
...
Comments and doc comments are now saved in the 'comments' attribute, as an
array. The are instances of PHPParser_Comment[_Doc].
2012-05-06 17:49:04 +02:00
nikic
dd711f2a04
Generalize the attribute generation for nodes
...
Now two arrays are fetched from the lexer: $startAttributes and
$endAttributes. When constructing the attributes for a node, the
$startAttributes from the first token of the node and the $endAttributes
of the last token of the node are merged.
Now the end line is saved in the endLine attribute.
2012-05-05 17:34:27 +02:00
nikic
2f5ebf7c4d
Store line and doc comment as attributes
2012-05-04 10:16:59 +02:00
nikic
3701e02d32
Use inject-once approach for lexer
...
Now the lexer is injected only once when creating the parser. Instead of
$parser = new PHPParser_Parser;
$parser->parse(new PHPParser_Lexer($code));
$parser->parse(new PHPParser_Lexer($code2));
you write:
$parser = new PHPParser_Parser(new PHPParser_Lexer);
$parser->parse($code);
$parser->parse($code2);
2012-05-04 10:16:46 +02:00
nikic
9329c91591
Merge branch 'codeGeneration'
...
* codeGeneration:
Add docs for templates
Add a filesystem template loader.
Add simple templating support.
Add usage example for builders to docs
Add function builder
Add ability to specify arrays as default values
Add property builder
Add parameter builder
Add method builder
Add class builder
2012-04-23 13:32:16 +02:00
nikic
5b27fb40ce
Fix line numbers for some list structures
...
When defining a list in the grammar the list elements have to get a separate
rule, otherwise they'll all be assigned the same line number.
2012-04-19 00:52:44 +02:00
nikic
a45360ccaf
Add tests for node attributes
...
Also fix the @inheritDoc declarations and do some whitespace normalization
2012-04-19 00:22:31 +02:00
nikic
337da5648c
Fix XML unserializer
...
The subNodes array was not initialized, so for empty nodes it would just
be null. Due to the addition of attributes for nodes those have to be
initialized too.
2012-04-04 14:06:08 +02:00
nikic
e17bd0b17f
Remove duplicate bootstrap.php
...
The tests had a separate bootstrap.php, which basically replicated the main
bootstrap.php.
2012-04-04 13:50:21 +02:00
nikic
a048112e2c
Add a filesystem template loader.
...
The template loaders loads templates from a base directory (and can
optionally use a suffix). For example
$templateLoader = new PHPParser_TemplateLoader(
$parser, './templates', '.php'
);
// loads ./templates/TestTemplate.php
$templateLoader->load('TestTemplate');
Again the implementation is not optimal. The loader probably shouldn't
intantiate the Template itself, but instead should accept a
TemplateFactory. This seemed like overkill to me, so I left it out.
2012-04-03 23:52:00 +02:00
nikic
19c1f80589
Add simple templating support.
...
Templates use __name__ placeholders. A variant of the placeholder with a
capitalized first latter can be accessed using __Name__ (this is useful
for camel case identifiers, e.g. get__Name__).
Currently the implemention is not particularly clean, because the Template
instantiates a Lexer itself. Fixing this requires a major refactoring of
the lexer/parser interface.
2012-04-03 22:47:41 +02:00
nikic
77d58a4151
Fix NameResolver tests on PHP 5.2
2012-03-17 13:52:17 +01:00
nikic
b8b68a969c
Add function builder
2012-03-11 09:02:52 +01:00
nikic
9e5c95b6aa
Add ability to specify arrays as default values
2012-03-11 08:53:04 +01:00
nikic
3ce3542032
Add property builder
2012-03-11 08:42:13 +01:00
nikic
4c8351fa86
Add parameter builder
2012-03-11 00:06:02 +01:00
nikic
48f0322aef
Add method builder
2012-03-10 23:25:26 +01:00
nikic
88e1f2eeab
Add class builder
2012-03-10 17:56:56 +01:00
nikic
e856fe3944
Remove obsolete test skip
...
The test no longer depends on PHP 5.4, so don't skip it.
2012-03-10 10:55:34 +01:00
nikic
0c0515c7de
Replace /e modifier with callback + eval()
...
As this also fixes the overescaping issue, some stuff in the tests can be written more nicely now.
2012-03-02 00:28:46 +01:00
nikic
10ba9f8dda
Add some tests for the emulative lexer
2012-02-21 18:45:07 +01:00
nikic
cf3117d82d
Fix parsing of integers that overflow into floats
...
Integers in hex/oct/bin notation that overflowed into floats were parsed incorrectly.
2012-01-15 16:54:48 +01:00
nikic
c5c7aa5125
Add initial version of an emulative lexer
...
The emulative lexer allows lexing of PHP 5.4 on PHP 5.3 and PHP 5.2.
2011-12-18 17:03:11 +01:00
nikic
94d4c30a72
Fully Cover and fix NameResolver
...
Previously type hints were not resolved due to a typo. Also trait uses were not resolved.
2011-12-10 12:11:53 +01:00
nikic
df691065a6
Fix __halt_compiler() usage in namespace
...
This fixes the only left bug that was reported by parsing the PHP testsuite :)
2011-12-07 18:36:38 +01:00
nikic
8bdb478785
Cover Parser.php as much as possible
2011-12-07 18:17:05 +01:00
nikic
80065965d3
[5.4] Add new \e escape sequence (0x1B/27)
2011-12-04 17:35:30 +01:00
nikic
1449cc2092
Disallow array deref using alternative syntax
...
f(){0} and a::b(){0} aren't allowed anymore (in compliance with PHP).
$a->b(){0} support stays for now (for technical reason).
2011-12-04 17:07:17 +01:00
nikic
db3181aff1
More test coverage and doc string parsing fixes
...
The parser didn't account for the additional newline after the content of doc strings, which is left there by the tokenizer for some reason. Additoinally esacape sequences were parsed in nowdoc strings.
Additionally this contains some minor changes to the grammar: Some _list nonterminals were refactored to have the possible single elements in a reparate rule and only assemble those single elements. (This reduces duplication and gives better assignment of line number context.)
2011-12-04 16:52:43 +01:00
nikic
c3df371998
Cover, fix and cleanup XML unserializer
2011-12-03 15:15:20 +01:00
nikic
b49c55c9e5
Cover NodeTraverser and bugs it found
...
a) ->traverseNode() now operates on a clone of the node, otherwise the original node will be modified too
b) before nodes were passed to the following visitor unchanged, even though they were already changed in the tree
2011-12-02 17:52:03 +01:00
nikic
8c2bf0373c
Some more test improvements (+ fixes)
2011-11-27 21:50:19 +01:00
Francis Besset
efbf49814e
Launch test with trait only with PHP 5.4
2011-11-27 21:28:08 +01:00
nikic
6ef6e1dab3
Cover errors (and fix errors for namespace names)
2011-11-27 12:58:20 +01:00
nikic
21dc9b32f4
Add test coverage for all nodes
2011-11-27 11:20:35 +01:00
nikic
03a0449b1a
Add tests for other scalar types
2011-11-26 17:10:18 +01:00
nikic
933bebb9b8
Fix parsing of special int syntaxes
...
Also add the means to test code parsing.
2011-11-26 16:09:39 +01:00
nikic
3b02facf0c
Add an example
2011-11-12 18:29:50 +01:00
nikic
2ec6ae4b03
Make NameResolver add namespacedName subnodes
2011-11-12 13:24:59 +01:00
nikic
c94a4767df
Add tests for XML serialization
...
Also fix the invalid namespace URIs I used.
2011-11-06 18:09:32 +01:00
nikic
5f0a1535ff
Fix unit tests
2011-10-26 18:35:37 +02:00
nikic
69b298c4b5
Recognize halt_compiler() ?> (without ;)
2011-10-18 18:03:28 +02:00
nikic
ab72f98570
Add NameResolver
...
The NameResolver visitor tries to resolve all names to fully qualified names. It will resolve all non-dynamic names, apart from unqualified function and constant names. The latter can not be resolved properly without running the code.
2011-09-28 20:14:27 +02:00
nikic
62183807ee
Add test coverage for Node_Name
...
And fix bugs found while doing so.
2011-09-28 18:11:28 +02:00
nikic
d53173c2f3
Don't use references in NodeTraverser
...
Stop using reference magic in the NodeTraverser. Instead use normal return values. Additionally enfore that an array is passed to ->traverse().
2011-09-24 23:39:05 +02:00
nikic
df7cb44eed
Use seperate Name node classes instead of type subnode
2011-09-24 16:53:40 +02:00
nikic
a551bbc5a4
Add PHPParser_Node interface
2011-09-21 21:43:19 +02:00
nikic
847cdbc5c6
Swap argument order for ArrayItem
2011-09-02 19:49:46 +02:00
nikic
17a81b5c8f
Properly parse escape sequences:
...
* Add support for oct and hex escape sequences
* Take used quote type into account when parsing encapsed strings
2011-08-20 10:40:27 +02:00
nikic
299893066d
Fix NodeTraverser by putting to-be-deleted and to-be-merged nodes into the same queue. Additionally do not further iterate queued nodes.
2011-08-19 17:19:27 +02:00
nikic
e0fe21287d
Add specialized constructors for all expression nodes apart from lambda
2011-08-11 10:25:51 +02:00
nikic
d9a23f2dc7
Add specialized constructors for Expr_Array*, make Variable an Expr
2011-08-11 08:13:01 +02:00
nikic
1da728321f
Rename tests from Unit_ to PHPParser_Tests_
2011-08-10 11:13:37 +02:00
nikic
f67ff50550
Give all Scalar nodes and the special nodes Name and Variable specialized constructors for easier use
2011-08-09 15:07:05 +02:00
nikic
ae46aeda7f
Don't save whether a string is binary anymore. The binary flag isn't going to be used in the next couple of years, so it doesn't make sense to unnecessarily complicate things.
2011-08-09 14:19:44 +02:00
nikic
197b8e6967
Don't save quote type for strings anymore (as it is irrelevant for script execution)
2011-08-09 14:12:15 +02:00
nikic
2c68d1c09e
Update testsuite
2011-08-09 12:42:12 +02:00
nikic
962c4dc0f0
Add some more unit tests
2011-07-13 23:07:05 +02:00
nikic
cc80385aae
Fix incorrect line number extraction
2011-07-13 13:27:14 +02:00
nikic
a6f97681f6
Start adding Unit test (PHPUnit)
2011-07-13 13:03:37 +02:00
nikic
b24d0e2dc4
Rename PHPParser_ParseErrorException to PHPParser_Error
2011-06-05 18:52:41 +02:00
nikic
83a2077f0e
Add Autoloader
2011-06-05 18:47:52 +02:00
nikic
620525a5da
Prefix all classes with PHPParser_
2011-06-05 18:40:04 +02:00
nikic
d82bbb3bea
Throw ParseErrorException on error instead of error callback
...
As long as the parser isn't reentrant having an error callback doesn't really make sense and only complicates everything.
2011-06-03 17:44:23 +02:00
nikic
b80f326b6a
Fix problem with indented strings by introducing PrettyPrinter->pSafe
2011-06-02 22:52:24 +02:00
nikic
fabe44ecb1
fix doccomment
2011-06-02 11:39:33 +02:00
nikic
5e91c622cc
Measure time spent in parser, pretty printer and comparison
2011-06-01 20:00:52 +02:00
nikic
3213cf85cb
Add known issues
2011-05-31 18:33:38 +02:00
nikic
2fb0206deb
Add missing rules to parser to allow a::${b}
2011-05-31 17:28:22 +02:00
nikic
4f3260f670
Add doccomments and slightly change some APIs
2011-05-31 16:33:11 +02:00
nikic
e6b356af45
Fix some pretty printing issues
2011-05-30 22:11:11 +02:00
nikic
8a3074db38
Decouple NodeDumper from NodeAbstract
2011-05-30 19:21:25 +02:00
nikic
22ea3d6a70
Make Node_Scalar instanceof Node_Expr
2011-05-30 18:01:38 +02:00
nikic
43b41e382f
Further work on PrettyPrinter
2011-05-29 21:06:43 +02:00
nikic
489f8c8b56
Fix some prettyprinting issues
2011-05-29 20:38:36 +02:00
nikic
15e268cd8b
Parse escape sequences in encapsed strings too
2011-05-29 20:06:53 +02:00
nikic
3c13dce680
Further work on PrettyPrinter. Add possibility to test PrettyPrinter correctness
2011-05-29 17:33:03 +02:00