Commit Graph

918 Commits

Author SHA1 Message Date
Laytan Laats
226f7fb5f1 refactor: remove unused function lastNode 2023-03-25 15:12:21 +01:00
Laytan Laats
74a8771740 refactor: move php7 scanner into php7 package 2023-03-25 15:02:34 +01:00
Laytan Laats
a97686125d refactor!: drop php5 support 2023-03-25 15:00:17 +01:00
Laytan Laats
ffc94c1a63 refactor: move test.php into testdata folder 2023-03-25 14:32:14 +01:00
Laytan Laats
86c10ca380 perf: reduce memory usage by reducing amt of position's created
The positions created were taking GB's of memory and were not being
GC'ed.
2022-09-09 00:40:11 +02:00
i582
4f5cd69ae9 cleanup 2022-06-26 03:42:25 +03:00
Makhnev Petr
67faf89b39
changelog: added v0.8.2 (#30) 2022-06-26 03:40:01 +03:00
i582
2d99e3a9ec readme: updated supported PHP versions 2022-06-26 03:36:20 +03:00
Makhnev Petr
e16671724e
php8.1: added intersection types support (#29) 2022-06-26 03:31:29 +03:00
Makhnev Petr
7f6cd25376
php8.2: added readonly classes support (#26) 2022-06-26 01:18:40 +03:00
Tsygankov-Slava
3dd40d3b5a
readme: fixed cli flags (#25) 2022-06-25 20:09:48 +03:00
Makhnev Petr
8bfffab3ab
changelog: added v0.8.1-rc.1 (#23) 2021-08-09 15:26:26 +05:00
Makhnev Petr
d85f5a4816
php8: fixed a bug with # comments (#22)
Example from issue:
```php
<?php
#
# Comment
#

$a = 100;
```

The problem with the example from the issue is that `#` is immediately followed by a line break.
And since the rule in the lexer for such comments was changed, this case was handled incorrectly.

```
(('#' ^'[') | '//') any_line* when is_not_comment_end => {
   lex.ungetStr("?>")
   lex.addFreeFloatingToken(tkn, token.T_COMMENT, lex.ts, lex.te)
};
```

This rule has one problem, it checks two characters at once, first for the match `#`, and 
then for the mismatch `[`, which leads to the fact that in the case of an empty comment, the first 
matcher will capture `#`, and the second line break (`\n`), which will lead to the fact that `any_line` 
matcher will not work and will not increase the line number.

The next rule added is specifically for this case.

```
'#' newline when is_not_comment_end => {
    lex.ungetStr("?>")
    lex.addFreeFloatingToken(tkn, token.T_COMMENT, lex.ts, lex.te)
};
```
2021-08-02 12:37:08 +03:00
Ruud Kamphuis
d846011a9b
readme: handle parse errors in example (#20) 2021-08-01 22:00:01 +03:00
Makhnev Petr
18acbf96bd
CHANGELOG.md: initial (#19) 2021-08-01 16:44:50 +03:00
Makhnev Petr
50ed139750
php8.1: added first class callable syntax (#18) 2021-07-31 23:50:59 +03:00
Makhnev Petr
13ed0df282
php8.1: grammar improvements (#16)
Renamed 'possible_comma' with 'optional_comma' as in PHP-Parser
Replace all 'identifier' with 'identifier_ex' and all 'T_STRING' with 'identifier' as in PHP-Parser
2021-07-31 23:17:26 +03:00
Makhnev Petr
b256331d90
php8.1: added final modifier for constants in class (#15)
This case is already covered by the existing grammar, so no changes are required.
2021-07-31 22:20:36 +03:00
Makhnev Petr
689cca66c4
.github: setup GitHub related things (#13)
- Added Github Actions
- Replaced `ISSUE_TEMPLATE.md`
2021-07-31 20:01:44 +03:00
i582
7e821b874b Merge remote-tracking branch 'origin/master' 2021-07-31 19:45:42 +03:00
i582
85b5d3ef36 cmd: added file path output before errors 2021-07-31 19:45:26 +03:00
Makhnev Petr
af394e9eb0
php8.1: added enum (#12) 2021-07-31 19:44:09 +03:00
Makhnev Petr
44bbff6073
php8.1: added new octal numbers syntax (#10)
Also fixed a bug where `0X...` and `0B...` were not recognized as valid numbers.
2021-07-31 18:37:01 +03:00
Makhnev Petr
8df80651e0
php8.1: added never type (#8) 2021-07-31 18:06:46 +03:00
Makhnev Petr
8c35b0aef1
php8.1: added readonly modifier (#6) 2021-07-31 18:00:21 +03:00
Ruud Kamphuis
4d0bfa25aa
readme: use correct conf pkg instead of cfg for config (#4) 2021-07-31 13:19:33 +03:00
i582
2488ec3def cnd: default version has been changed to 8.0 2021-07-30 21:03:47 +03:00
Makhnev Petr
72cd222aeb
all: renamed github.com/z7zmey/php-parser with github.com/VKCOM/php-parser 2021-07-30 21:01:34 +03:00
Makhnev Petr
049ce7ddc6
PHP 8 (#1)
PHP 8 Update

- nullsafe operator (?->)
- Remove (real) cast
- Named arguments
- Remove (unset) cast
- Remove {} access
- match expression
- Union types in type hints and static typehint
- Block catch without variable
- Trailing comma in parameter lists
- throw can be used as an expression
- Concatenation precedence
- Declaring properties in the constructor
- Attributes
- Names in the namespace are treated as a single token
- Trailing comma in closure use list
- Check that ::class on object works
- Deferencable changes and arbitrary expressions in new/instanceof
2021-07-30 20:53:27 +03:00
Vadym Slizov
367eff9de6
rename package cfg to conf 2021-02-13 23:54:34 +02:00
Vadym Slizov
9d12f1d162
fix formatting 2021-02-13 23:51:08 +02:00
Vadym Slizov
29477c9552
[#122] compile php5 parser 2021-02-13 23:50:10 +02:00
Vadym Slizov
c8b7fc0786
[#122] compile php5 parser 2021-02-13 23:48:44 +02:00
Vadym Slizov
c3287f4721
Merge pull request #125 from z7zmey/issue-98
[#98] fix panic when heredoc is not closed
2021-02-13 23:10:27 +02:00
Vadym Slizov
e1686cb83c
[#98] fix panic when heredoc is not closed 2021-02-13 23:09:41 +02:00
Vadym Slizov
15e7237b45
Merge pull request #124 from z7zmey/issue-120
[#120] move dog.go from root folder
2021-02-13 22:18:29 +02:00
Vadym Slizov
cb29615397
[#120] update readme 2021-02-13 22:16:54 +02:00
Vadym Slizov
d9bd1df2a2
[#120] move dog.go from root folder 2021-02-13 22:06:52 +02:00
Vadym Slizov
15562c740e
Merge pull request #123 from i582/pmakhnev/fix_parsing_new_expr
internal: fixed parsing of expression new
2021-02-13 21:42:58 +02:00
i582
78492f6456 internal: fixed parsing of anonymous classes
Since now 'ctor_arguments' returns nil, it is
necessary to initialize it to avoid panics.
2021-02-07 07:52:29 +03:00
i582
61523ab396 internal: fixed parsing of expression new
1. Now, for the expression 'new A' the correct
values EndLine, EndPos, and not -1 will be set;
2. Also, for expressions from php5 '$a = &new Foo',
the condition for parsing is fixed when it is necessary
to set the Args values and the initialization of the
NewTkn field is added, in the case when this condition
is false.

## Problem description

The reason why the positions after parsing became
incorrect is that the check that is responsible for
separating expressions like 'new A' and 'new A (args)'
relied on comparison with nil, however, when the parser
was updated, 'ctor_arguments' began to return not nil,
but &ArgumentList{}, so the condition was always true,
and in this case, when calculating the position, the
second argument of the 'NewTokenNodePosition' function
was nil, which is why -1 was returned there.

For the second, the reasons are similar. In addition,
there was a mistake in the number that needs to be
checked. In the expression:

'variable' '=' '&' T_NEW class_name_reference ctor_arguments'

it is necessary to check not 3, but 6 elements for nil.
2021-02-04 07:12:56 +03:00
Vadym Slizov
4d6130d98d
Merge pull request #117 from z7zmey/refactoring
Refactoring
2020-12-29 21:31:14 +02:00
Vadym Slizov
5fd7577b66
Merge branch 'master' into refactoring 2020-12-29 21:28:40 +02:00
Vadym Slizov
e3b133f3de
refactoring: update api 2020-12-29 21:23:22 +02:00
Vadym Slizov
cb4b4e69c4
refactoring: fix naming 2020-12-28 23:01:02 +02:00
Vadym Slizov
0701b3552e
refactoring: fix scanning double dollar in template string 2020-12-28 21:43:55 +02:00
Vadym Slizov
07f49a4d21
refactoring: move internal nodes 2020-12-28 21:31:24 +02:00
Vadym Slizov
bd479007be
refactoring: update traverser 2020-12-28 21:13:08 +02:00
Vadym Slizov
c0465f9605
refactoring: remove "StmtTraitMethodRef" node 2020-12-28 10:47:09 +02:00
Vadym Slizov
c29e8ec0e0
refactoring: update ast structure of "Class", "Interface" and "Trait" nodes 2020-12-28 10:10:24 +02:00