1488 Commits

Author SHA1 Message Date
Nikita Popov
9a230cd333 Update changelog 2022-09-03 22:14:41 +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
8ed76726aa Switch modifierChangeMap to use class name
For better refactoring support, prefer class name over node type.
2022-09-03 19:12:25 +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
a3b0541c71 Support array return from enterNode()
This uses the same semantics as arrays from leaveNode(), i.e. the
returned nodes will not be visited by other visitors. This is open
to change though (but probably should change for both enterNode()
and leaveNode() if it does change?)
2022-09-03 18:38:22 +02:00
Nikita Popov
c42290ae42 Support REMOVE_NODE from enterNode() 2022-09-03 18:15:36 +02:00
Nikita Popov
a44faa6328 Rename Scalar\Encapsed to Scalar\InterpolatedString 2022-09-03 15:14:04 +02:00
Nikita Popov
11caa3b9cc Add compat shim for EncapsedStringPart 2022-09-03 15:08:39 +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
2b562b72a8 Update default of ClassMethod::$flags in docs
This defaults to 0, not Modifiers::PUBLIC.
2022-09-03 11:02:16 +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
9dca6f1d37 Add test for StaticVar rename
Also run these in separate processes, they're not really meaningful
if the classes are already loaded.
2022-09-02 22:54:29 +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
Anton
bf39f6a4e0
Update grammar/README.md (#877) 2022-08-30 20:54:07 +02:00
Nikita Popov
892b07c428 Add some test coverage for Token class 2022-08-29 22:21:50 +02:00
Anton
9857581ee8 Add array/callable to BUILTIN_TYPE_VERSIONS
Listing these is not strictly necessary, in that array/callable
are keywords, and as such don't use the relevant code path. We
can still include them for the sake of completeness.

Closes #872.
2022-08-29 22:09:29 +02:00
Nikita Popov
09c6048df1 Add CONTRIBUTING.md
For now just a mention of the non-standard coding style.
2022-08-29 21:59:07 +02:00
Nikita Popov
3c3bcd3125 Also format the grammar directory 2022-08-29 21:56:41 +02:00
Nikita Popov
a5033e3860 Format tests as well
The unnecessary parentheses for "new" are a bit annoying, but I
can live with it...
2022-08-29 21:52:53 +02:00
Nikita Popov
a2753c8218 Require strict_types in php-cs-fixer config 2022-08-28 23:02:46 +02:00
Nikita Popov
dd63ddbc24 Add php-cs-fixer config and reformat
The formatting in this project has become something of a mess,
because it changed over time. Add a CS fixer config and reformat
to the desired style, which is PSR-12, but with sane brace placement.
2022-08-28 22:57:06 +02:00
Nikita Popov
f62b2bfdec Introduce separate Modifiers class
Use PhpParser\Modifiers::PUBLIC instead of
PhpParser\Node\Stmt\Class_::MODIFIER_PUBLIC, etc. Old constants
of course remain available.

Fixes #476.
2022-08-28 21:20:26 +02:00
Nikita Popov
68fc1ba4cb Always use List_ node for array destructuring
Fixes #471.
2022-08-28 18:48:26 +02:00
Nikita Popov
53b907d405 Fix length bounds check in Name::slice()
The length check did not take into account that there may be a
non-zero offset at this point.

Fixes #875.
2022-08-28 14:55:57 +02:00
Daniel Schmelz
f828b76972 Fix typo 2022-08-28 13:01:12 +02:00
Tomas Votruba
0201a7ee3f
[docs] Add generic types to NodeFinder to allow returning exact type in static analysis (#869) 2022-08-08 21:53:49 +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
34d8681488 Mark NodeVisitorAbstract as abstract class
It doesn't actually have any abstract methods, but doesn't do
anything by itself and is intended for extension only.

Fixes #865.
2022-08-07 16:30:12 +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
Anton
c55c7a2ac3
Add json and ctype as required extensions in composer.json (#864) 2022-08-07 16:00:03 +02:00
Anton
9ef528f3f5 ParserAbstract: remove undefined class in use
Class `PhpParser\Parser\Tokens` not exists in current version
2022-08-07 15:59:06 +02:00
Nikita Popov
e61bb11989 Add additional upgrading notes for pretty printer 2022-07-24 23:06:20 +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
84813dc1e4 Avoid repeatedly downloading archive in run-php-src.sh
When doing local testing, chances are that the archive is already
present.
2022-07-23 22:17:33 +02:00
Nikita Popov
59145a4443 Treat assignments as unary operators
Assignment expressions can be viewed as unary operators where
the whole "$x =" part is the operator.
2022-07-23 21:53:48 +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
a73c8ee03b Add a phpVersion option to the pretty printer
This is currently just used to initialize the default for short
array syntax.

The default target version in 7.0, which also means that the
default for short arrays is flipped to on.
2022-07-23 18:23:39 +02:00