Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

⬆️ Bump nikic/php-parser from 4.18.0 to 5.0.0 #129

Merged
merged 4 commits into from
Jan 12, 2024

Conversation

dependabot[bot]
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Jan 8, 2024

Bumps nikic/php-parser from 4.18.0 to 5.0.0.

Release notes

Sourced from nikic/php-parser's releases.

PHP-Parser 5.0.0

See the upgrading guide for detailed migration instructions. The changelog is relative to PHP-Parser 4.18.0.

Added

  • Added PhpVersion class, which is accepted in a number of places (e.g. ParserFactory, Parser, Lexer, PrettyPrinter) and gives more precise control over the PHP version being targeted.
  • Added PHP 8 parser though it only differs from the PHP 7 parser in concatenation precedence.
  • Added Parser::getTokens() method.
  • Added a Modifiers class, as a replacement for Stmt\Class_::MODIFIER_*.
  • Added support for returning an array or REMOVE_NODE from NodeVisitor::enterNode().
  • Added many additional type annotations. PhpStan is now used.
  • Added a fuzzing target for PHP-Fuzzer, which was how a lot of pretty printer bugs were found.
  • Added isPromoted(), isPublic(), isProtected(), isPrivate() and isReadonly() methods on Param.
  • Added support for class constants in trait builder.
  • Added PrettyPrinter interface.
  • Added support for formatting preservation when toggling static modifiers.
  • The php-parse binary now accepts - as the file name, in which case it will read from stdin.
  • Added support for NodeVisitor::REPLACE_WITH_NULL.
  • Added support for CRLF newlines in the pretty printer, using the new newline option.
  • Visitors can now be passed directly to the NodeTraverser constructor. A separate call to addVisitor() is no longer required.
  • Added support for printing additional attributes (like kind) in NodeDumper.
  • Added rawValue attribute to InterpolatedStringPart and heredoc/nowdoc String_s, which provides the original, unparsed value. It was previously only available for non-interpolated single/double quoted strings.
  • Added Stmt\Block to represent {} code blocks. Previously, such code blocks were flattened into the parent statements array. Stmt\Block will not be created for structures that are typically used with code blocks, for example if ($x) { $y; } will be represented as previously, while if ($x) { { $x; } } will have an extra Stmt\Block wrapper.

Changed

  • PHP 7.4 is now required to run PHP-Parser.
  • Property types have been added where possible.
  • Formatting of the standard pretty printer has been adjusted to match PSR-12 more closely.
  • The internal token representation now uses a PhpParser\Token class, which is compatible with PHP 8 token representation (PhpToken).
  • Array destructuring is now always represented using Expr\List_ nodes, even if it uses [] syntax.
  • Renamed a number of node classes, and moved things that were not real expressions/statements outside the Expr/Stmt hierarchy. Compatibility shims for the old names have been retained.
  • The pretty printer no longer unconditionally wraps yield in parentheses, unless the target version is set to older than PHP 7.0.
  • The pretty printer now defaults to PHP 7.4 as the target version.
  • Print else if { } instead of else { if { } }.
  • The leaveNode() method on visitors is now invoked in reverse order of enterNode().
  • Moved NodeTraverser::REMOVE_NODE etc. to NodeVisitor::REMOVE_NODE. The old constants are still available for compatibility.
  • The Name subnode parts has been replaced by name, which stores the name as a string rather than an array of parts separated by namespace separators. The getParts() method returns the old representation.
  • No longer accept strings for types in Node constructors. Instead, either an Identifier, Name or ComplexType must be passed.
  • Comment::getReformattedText() now normalizes CRLF newlines to LF newlines.
  • The Lexer no longer accepts options. Lexer\Emulative only accepts a PhpVersion. The startLexing(), getTokens() and handleHaltCompiler() methods have been removed. Instead, there is a single method tokenize() returning the tokens.
  • Attribute handling has been moved from the lexer to the parser, and is no longer configurable. The comments, startLine, endLine, startTokenPos, endTokenPos, startFilePos, and endFilePos attributes will always be added.
  • The pretty printer now indents heredoc/nowdoc strings if the target version is >= 7.3 (flexible heredoc/nowdoc).
  • Use visitor to assign comments. This fixes the long-standing issue where comments were assigned to all nodes sharing a starting position. Now only the outer-most node will hold the comments.
  • Improve NodeDumper performance for large dumps.

Removed

  • The PHP 5 parser has been removed. The PHP 7 parser has been adjusted to deal with PHP 5 code more gracefully.
  • Removed deprecated Error constructor taking a line number instead of an attributes array.

... (truncated)

Changelog

Sourced from nikic/php-parser's changelog.

Version 5.0.0 (2024-01-07)

See UPGRADE-5.0 for detailed migration instructions.

Fixed

  • Fixed parent class of PropertyItem and UseItem.

Version 5.0.0-rc1 (2023-12-20)

See UPGRADE-5.0 for detailed migration instructions.

Fixed

  • Fixed parsing of empty files.

Added

  • Added support for printing additional attributes (like kind) in NodeDumper.
  • Added rawValue attribute to InterpolatedStringPart and heredoc/nowdoc String_s, which provides the original, unparsed value. It was previously only available for non-interpolated single/double quoted strings.
  • Added Stmt\Block to represent {} code blocks. Previously, such code blocks were flattened into the parent statements array. Stmt\Block will not be created for structures that are typically used with code blocks, for example if ($x) { $y; } will be represented as previously, while if ($x) { { $x; } } will have an extra Stmt\Block wrapper.

Changed

  • Use visitor to assign comments. This fixes the long-standing issue where comments were assigned to all nodes sharing a starting position. Now only the outer-most node will hold the comments.
  • Don't parse unicode escape sequences when targeting PHP < 7.0.
  • Improve NodeDumper performance for large dumps.

Removed

  • Removed Stmt\Throw_ node, use Expr\Throw_ inside Stmt\Expression instead.
  • Removed ParserFactory::create().

Version 5.0.0-beta1 (2023-09-17)

See UPGRADE-5.0 for detailed migration instructions.

Added

  • Visitors can now be passed directly to the NodeTraverser constructor. A separate call to addVisitor() is no longer required.

... (truncated)

Commits
  • 4a21235 Update documentation links in README
  • fba1d62 Release PHP-Parser 5.0.0
  • 5cc5a67 Upgrading guide tweaks
  • f603e19 Avoid PHPUnit deprecation warnings
  • 1eeeb2d Fix parent class of PropertyItem and UseItem
  • 255000a Release PHP-Parser 5.0.0rc1
  • f7d484a Fix handling of empty input
  • f82a636 Add upgrading nodes for changes since beta1
  • 13a41f0 Fix typos in UPGRADE-5.0.md
  • f666500 Fix NameResolver for class constant native type
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [nikic/php-parser](https://github.com/nikic/PHP-Parser) from 4.18.0 to 5.0.0.
- [Release notes](https://github.com/nikic/PHP-Parser/releases)
- [Changelog](https://github.com/nikic/PHP-Parser/blob/master/CHANGELOG.md)
- [Commits](nikic/PHP-Parser@v4.18.0...v5.0.0)

---
updated-dependencies:
- dependency-name: nikic/php-parser
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
@dependabot dependabot bot requested a review from a team as a code owner January 8, 2024 10:03
@homersimpsons homersimpsons self-assigned this Jan 8, 2024
@homersimpsons homersimpsons force-pushed the dependabot/composer/nikic/php-parser-5.0.0 branch from 8c6c12f to b7d0937 Compare January 9, 2024 13:23
@homersimpsons
Copy link
Collaborator

@ErikSchierboom note that the representation will certainly change in some cases. Is it okay for Exercism ? Maybe there should be a "representationVersion" field in the json. Or you re-run the representer on all the solution when a new commit is pushed ?

@ErikSchierboom
Copy link
Member

@ErikSchierboom note that the representation will certainly change in some cases. Is it okay for Exercism ? Maybe there should be a "representationVersion" field in the json. Or you re-run the representer on all the solution when a new commit is pushed ?

We don't normally re-run the representer on all solutions when a new version is released, as that would be quite costly. We can re-run existing solutions is needed, but even better is that we actually have a version number: https://exercism.org/docs/building/tooling/representers/interface

@homersimpsons
Copy link
Collaborator

@ErikSchierboom note that the representation will certainly change in some cases. Is it okay for Exercism ? Maybe there should be a "representationVersion" field in the json. Or you re-run the representer on all the solution when a new commit is pushed ?

We don't normally re-run the representer on all solutions when a new version is released, as that would be quite costly. We can re-run existing solutions is needed, but even better is that we actually have a version number: https://exercism.org/docs/building/tooling/representers/interface

Oh, thank you, I saw this earlier, but I thought this was the "exercism version" and not the "code representation version", I will update this Pull Request to increase the number.

php-parser v5 made some changes to its pretty-print representation
@homersimpsons
Copy link
Collaborator

homersimpsons commented Jan 10, 2024

@ErikSchierboom I did increase the representer version in c0f2d86

If you think that will cost too much resources I can try to make it backward compatible, but I think this is not worth the changes as this may require more code in the future.

Copy link
Member

@ErikSchierboom ErikSchierboom left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you update the smoke tests to also check for the representation.json file? See https://github.com/exercism/php-representer/tree/main/tests/example-multiple-files for an example test case

- Add test on expected_representation.json
- Remove smoke tests that expect errors (not supported anymore)
@homersimpsons
Copy link
Collaborator

Could you update the smoke tests to also check for the representation.json file? See https://github.com/exercism/php-representer/tree/main/tests/example-multiple-files for an example test case

Done with 89bcd11

Copy link
Member

@ErikSchierboom ErikSchierboom left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@homersimpsons homersimpsons merged commit 4b64a6e into main Jan 12, 2024
2 checks passed
@homersimpsons homersimpsons deleted the dependabot/composer/nikic/php-parser-5.0.0 branch January 12, 2024 10:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants