ea9d6b2238
Always use pMaybeMultiline() for function parameters
...
Closes GH-861.
2022-08-07 16:34:26 +02:00
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
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
646b490735
Don't force newline after doc string when targeting PHP >= 7.3
2022-07-24 22:15:42 +02:00
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
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
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
1e89658cae
Add PhpVersion class
2022-07-23 17:52:59 +02:00
5aae65e627
Add Parser::getLexer() method
...
Not sure if this is going to stick, but for now this makes it
easier to obtain the Lexer instance when creating the parser via
ParserFactory.
2022-06-19 21:05:31 +02:00
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
c878d7195d
Move token mapping from lexer to parser
...
This allows a different token mapping per parser.
2022-06-19 18:05:52 +02:00
71ed641cd4
Handle true/false/null types in builder APIs
2022-06-19 11:10:43 +02:00
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
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
3fd30f64bc
Remove deprecated param builder method
2022-06-12 21:14:22 +02:00
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
d3d1297c0d
Remove PHP 5 parser
2022-06-12 18:18:50 +02:00
b6d11da541
Add space after "use" during empty list insertion as well
2022-06-05 22:59:08 +02:00
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
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
27fe7a68c0
Include space after closure use
2022-06-04 13:22:58 +02:00
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
87387caf8f
Remove space before return type in pretty printer
2022-06-04 13:01:02 +02:00
9c5eb3ccba
Add some missing type annotations
2022-06-04 12:48:12 +02:00
e727475d08
Support readonly as function name
...
This special case was added after the PHP 8.1 release.
2022-05-31 23:18:52 +02:00
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
5d83adcc0e
[String_] Add rawValue attribute ( #831 )
2022-05-15 23:04:59 +02:00
3bf0082455
[DNumber] Add rawValue attribute to hold the original value ( #833 )
2022-05-15 18:12:28 +02:00
d3eb10aca1
[LNumber] Add rawValue attribute to LNumber to allow numeric separator etc. ( #832 )
2022-05-15 18:09:05 +02:00
f09f22760e
Declare namespacedName property
...
For historical reasons, this property is used by the NameResolver
(in default mode). Declare it explicitly, rather than using a doc
comment.
2021-11-27 21:02:58 +01:00
d4cb98ae38
Fix typo in property name
...
This test was working on a dynamic "subNode" property, rather
than an actual subnode (either subNode1 or subNode2).
This test is generally not very valuable, I think it dates back
to a time where __get()/__set() were used.
2021-11-27 20:57:41 +01:00
68d2a52b42
Avoid creation of dynamic property in test
...
This test requires a property that is not a subnode -- but it does
not need to be dynamic, a declared property works just as well.
2021-11-27 20:53:55 +01:00
63f8699143
Add CallLike test for NullsafeMethodCall
2021-11-14 17:44:47 +01:00
4122ff3a91
Make NullsafeMethodCall extend from CallLike
2021-11-14 17:43:29 +01:00
99a24b6a55
Added builders for enum and enum case
2021-11-05 22:26:04 +01:00
4bfc4595ed
Support reserved keywords as enum cases
...
Fixes #807 .
2021-10-17 20:20:35 +02:00
54f19a0a66
Fixed array value evaluation with unpacked array
2021-10-11 21:35:21 +02:00
a45fb2a621
Add CallLike parent class
...
This provides a helper to determine whether a call is a first-class
callable, and a way to strip the args type to Arg[] if it isn't.
2021-09-12 22:29:08 +02:00
08501991d4
Don't make VariadicPlaceholder an expression
...
And don't store it in an Arg.
2021-09-12 21:59:26 +02:00
632ead3a82
Print comma before comments for new array item ( #805 )
...
Print comma before rather than after comments. Also switch to multiline mode if inserting an item with comments.
Fixes #804 .
2021-09-12 21:51:25 +02:00
13549aa794
Add support for first-class callables
...
I'm somewhat unsure about the AST structure here.
VariadicPlaceholder is not a general expression. Maybe Arg->expr
should be Expr|VariadicPlaceholder? Or possibly the call arguments
should be an array of Arg|VariadicPlaceholder?
2021-09-03 17:18:40 +02:00
def24f2224
Add support for explicit octal literals
2021-09-03 16:29:30 +02:00
cfeb195205
Add test for new in initializer
...
This already works because we don't validate initializer contents,
everything is accepted from a parser perspective.
2021-09-03 15:10:29 +02:00
ace6c67a8a
Add support for intersection types
2021-09-03 15:06:33 +02:00
0483391aca
Introduce ComplexType base class
...
With the upcoming addition of intersection types, a type can
be Identifier|Name|NullableType|UnionType|IntersectionType, which
is quite the mouthful. Give NullableType and UnionType a common
base class ComplexType, which does not have any behavior, but
allows to write these types (and check them in instanceof) more
easily.
2021-09-02 18:35:05 +02:00
9aebf377fc
Allow multiple modifiers for property promotion
...
Fixes issue #800 .
2021-08-08 19:12:44 +02:00
55c4269232
Add support for new PHP 8.1 modifiers ( #796 )
...
Implement support for readonly properties (https://wiki.php.net/rfc/readonly_properties_v2 ) and
final class contstants (https://wiki.php.net/rfc/final_class_const ).
2021-07-21 12:43:29 +02:00
a8b5ed4306
Fix JSON encoding test on PHP 8.1
...
Duplicate the test expectation for a different order.
2021-07-21 11:49:28 +02:00
c758510a37
Add support for PHP 8.1
...
With the introduction of intersection types, PHP now lexes the
token '&' either as T_AMPERSAND_(NOT_)FOLLOWED_BY_VAR_OR_VARARG.
This completely breaks parsing of any code containing '&'.
Fix this by canonicalizing to the new token format (unconditionally,
independent of emulation) and adjusting the parser to use the two
new tokens.
This doesn't add actual support for intersection types yet.
2021-07-09 16:52:58 +02:00
3fb73520c1
Add handling for Enum(Case)s in NameResolver
2021-07-03 15:09:11 +02:00