Nikita Popov
950bf8f1d1
Adjust tests to work on 32-bit
...
Fixes #662 .
2022-11-12 16:19:15 +01:00
Nikita Popov
4ce9781260
Fix parsing of large hex floats containing "e"
...
These ended up taking the code path for normal floats and being
cast to zero.
2022-11-12 16:15:32 +01:00
Nikita Popov
b0edd4c411
Bail out on PHP tags in removed code
...
If dropping a node would drop PHP tags, bail out of formatting
preservation. This will lose formatting, but at least produce
legal code.
Closes GH-884.
2022-09-21 20:42:21 +02:00
Nikita Popov
bad10e1618
Add more tests for formatting preservation with InlineHTML
...
It's all broken...
2022-09-21 20:28:52 +02:00
Nikita Popov
4bcdf74b8b
Add support for perserving formatting for static modifier change
...
Closes GH-891.
2022-09-21 18:56:58 +02:00
Abdul Malik Ikhsan
46558ed9a5
Show missing format preservation when adding static modifier to closure
2022-09-21 18:49:23 +02:00
Nikita Popov
0dd85ebd34
Support readonly before DNF type
...
This makes us match the PHP 8.2 handling of readonly. Handling of
"readonly" functions is moved to the parser to allow distinguishing
them from readonly properties with DNF types. We have to uglify the
grammar to avoid some shift/reduce conflicts. Thank you WordPress.
2022-09-18 15:32:34 +02:00
Nikita Popov
f7b448fa15
Bail out on list insertion of non-Node
...
PhpStan correctly detected that this is not supported. We could
add support for it, but for now just make sure it doesn't crash.
2022-09-17 21:14:31 +02:00
Nikita Popov
032b102146
Remove deprecated Error constructor
...
And use this chance to provide accurate position information for
namespace errors.
2022-09-11 22:05:47 +02:00
Nikita Popov
9b46dffb12
Fix formatting preservation for alternative elseif/else syntax
...
Test taken from PR #797 .
2022-09-11 16:58:35 +02:00
Nikita Popov
44c6a97705
Fix empty list insertion of multiple attributes
2022-09-04 09:25:36 +02:00
Nikita Popov
a772853307
Fix formatting preservation for match
2022-09-03 21:02:34 +02:00
Nikita Popov
c585a2d766
Switch list insertion maps to use class name
...
Also highlights that the list insertion entry for Expr\Match
was not used.
2022-09-03 20:56:06 +02:00
Nikita Popov
5f3ad31501
Fix ArrayItem entries in pretty printer maps
...
The tests were written in such a way that the regression was not
caught.
2022-09-03 19:04:22 +02:00
Nikita Popov
4917c71a91
Rename Stmt\UseUse to UseItem
2022-09-03 18:59:48 +02:00
Nikita Popov
e1345f0c09
Rename Stmt\PropertyProperty to PropertyItem
2022-09-03 18:55:22 +02:00
Nikita Popov
03ccfa3dd4
Rename Stmt\DeclareDeclare to DeclareItem
2022-09-03 18:45:28 +02:00
Nikita Popov
a44faa6328
Rename Scalar\Encapsed to Scalar\InterpolatedString
2022-09-03 15:14:04 +02:00
Nikita Popov
f4ec6a1e53
Rename Scalar\EncapsedStringPart to InterpolatedStringPart
...
It is no longer an expression node, which unfortunately does
require a more awkward type for the Encaps node.
2022-09-03 13:25:23 +02:00
Nikita Popov
23835d20ef
Rename Scalar\LNumber to Scalar\Int_
2022-09-03 12:07:38 +02:00
Nikita Popov
66b20bd6bc
Rename Scalar\DNumber to Scalar\Float_
2022-09-03 11:56:06 +02:00
Nikita Popov
f5b56a5c4c
Remove MODIFIER_ prefix from node dumps
...
These constants are now called Modifiers::PUBLIC rather than
Class_::MODIFIER_PUBLIC etc, so update the dumped name as well.
2022-09-03 11:00:13 +02:00
Nikita Popov
a2608f0b74
Support empty list insertion for attributes
2022-09-03 10:52:01 +02:00
Nikita Popov
035c1c7cd2
Rename Stmt\StaticVar to StaticVar
...
This is part of a statement, not a statement by itself.
2022-09-02 22:51:13 +02:00
Nikita Popov
8be56afd2d
Rename Expr\ArrayItem to ArrayItem
...
Array items are not expressions by themselves.
2022-09-02 22:41:10 +02:00
Nikita Popov
0933986293
Make sure Array nodes can not contain null
...
Now that destructuring is always represented using List nodes,
make sure that Array nodes can no longer contain null elements,
so well-typed code doesn't have to deal with them unnecessarily.
If an array does contain empty elements, these are now result in
an error and are represented as a ArrayItem with Error value if
error recovery is used.
The implementation is a bit tricky because at the time the Array
node is created, we cannot tell whether it will be used in a
creation or destructuring context. For this reason the error
reporting is delayed parsing has finished.
Closes #876 .
2022-09-01 22:12:58 +02:00
Nikita Popov
68fc1ba4cb
Always use List_ node for array destructuring
...
Fixes #471 .
2022-08-28 18:48:26 +02:00
George Peter Banyard
9b2a01aa0c
Add support for DNF types ( #862 )
2022-08-07 17:10:11 +02:00
Nikita Popov
652fb0c6c1
Print trailing comma in param list if supported
2022-08-07 16:43:53 +02:00
Anton
ea9d6b2238
Always use pMaybeMultiline() for function parameters
...
Closes GH-861.
2022-08-07 16:34:26 +02:00
Nikita Popov
1f504d2c7d
Don't trim in Comment::getReformattedText()
...
In the past, single-line comments were stored together with the
trailing newline. Later we switched to the PHP8 comment
representation, where the trailing newline is not part of the
comment anymore. As such, there is also no need to trim here.
This is split out from GH-867.
2022-08-07 16:19:39 +02:00
Nikita Popov
cf0cd6003e
Improve heuristic for escaping in single quoted strings
...
It is idiomatic to not escape backslashes if they are followed by
a non-special character.
2022-07-24 22:56:44 +02:00
Nikita Popov
646b490735
Don't force newline after doc string when targeting PHP >= 7.3
2022-07-24 22:15:42 +02:00
Nikita Popov
c218db3e16
Add additional test case for assignment precedence
...
This is a case where the parentheses around the assignment *are*
important.
2022-07-23 22:18:37 +02:00
Nikita Popov
7bf6348240
Remove inc/dec from precedence map
...
Inc/dec are primitive expressions that only accept a variable
operand, rather than a general expression operand.
2022-07-23 21:48:10 +02:00
Nikita Popov
0ea134a507
Add PHP 8 parser with correct concatenation precedence
...
The PHP 7 and PHP 8 parsers use the same grammar file and only
differ in token precedence.
2022-06-19 20:07:17 +02:00
Nikita Popov
e3ff8cf035
Add support for true type
...
The null/false types were alread accepted previously, even though
they are only legal as standalone types since PHP 8.2.
2022-06-19 11:06:39 +02:00
Nikita Popov
b0469d127e
Rename Expr\ClosureUse -> ClosureUse
...
This is not a real expression, treat it similarly to Node\Arg
or Node\Param.
The old name is retained as an alias for compatibility.
2022-06-12 21:55:56 +02:00
Nikita Popov
55f29b152c
Improve ParserFactory version targeting
...
Most users will want to pick createForNewestSupportedVersion()
or getForHostVersion(). The currently default is the former,
which can lead to unwanted surprised due to PHP BC breaks for
users that actually want the latter. Make this choice more
explicit.
2022-06-12 18:56:18 +02:00
Nikita Popov
d3d1297c0d
Remove PHP 5 parser
2022-06-12 18:18:50 +02:00
Nikita Popov
b6d11da541
Add space after "use" during empty list insertion as well
2022-06-05 22:59:08 +02:00
Nikita Popov
aff98bbf16
Use PHP 8.0 token representation
...
Migrate everything to use PhpToken-compatible token representation,
rather than the legacy array/string representation.
2022-06-05 17:44:42 +02:00
Tomas Votruba
7c445bb608
Remove space before return type in insertionMap ( #841 )
...
* remove space before colon in PrettyPrinterAbstract
* update tests
2022-06-04 23:23:07 +02:00
Nikita Popov
27fe7a68c0
Include space after closure use
2022-06-04 13:22:58 +02:00
Dominik Peters
6c0b63d9af
Change print order of modifiers
...
Print abstract/final before visibility modifiers, in line with
PSR-12.
Closes #826 .
2022-06-04 13:19:07 +02:00
Nikita Popov
87387caf8f
Remove space before return type in pretty printer
2022-06-04 13:01:02 +02:00
Tomas Votruba
678ccbe072
[PHP 8.2] Add readonly class support ( #834 )
...
RFC: https://wiki.php.net/rfc/readonly_classes
PHP implementation: php/php-src#7305
2022-05-15 23:19:31 +02:00
Nikita Popov
4122ff3a91
Make NullsafeMethodCall extend from CallLike
2021-11-14 17:43:29 +01:00
Nikita Popov
4bfc4595ed
Support reserved keywords as enum cases
...
Fixes #807 .
2021-10-17 20:20:35 +02:00
Nikita Popov
08501991d4
Don't make VariadicPlaceholder an expression
...
And don't store it in an Arg.
2021-09-12 21:59:26 +02:00