Giter VIP home page Giter VIP logo

Comments (9)

samsonasik avatar samsonasik commented on July 22, 2024 1

The code is scanned by PHPStan as well, and configured to win over old code, we use php8parser:

php8Parser: @php8Parser

so crash too early when language not yet available can happen. That's hard to make win both php 7.x and php 8.x, we have e2e test for it:

https://github.com/rectorphp/rector/tree/main/e2e

from rector.

felixmosh avatar felixmosh commented on July 22, 2024

I've narrowed it down to this line

$localServicesLead?->getContactDetails()?->getEmail()

from rector.

samsonasik avatar samsonasik commented on July 22, 2024

Could you reproduce at https://getrector.com/demo ?

from rector.

felixmosh avatar felixmosh commented on July 22, 2024

Nope, it looks like it doesn't change the ?-> (probably related to the fact that my php is 7.4 but in the playground it 8+)

from rector.

samsonasik avatar samsonasik commented on July 22, 2024

That seems working ok https://getrector.com/demo/9b2f0d84-d26e-43fd-bb44-4fec8064a8ec

Could you try create minimal reproducible repo? Thank you.

from rector.

felixmosh avatar felixmosh commented on July 22, 2024

Try to run the code from php 7.4

from rector.

samsonasik avatar samsonasik commented on July 22, 2024

That same, still working, php version can be defined from rector config via withPhpversion(), see https://getrector.com/demo/fcf9f36b-47ba-4339-9815-3adcfb829893

The issue may need to be reproduced by real repository, simple one, otherwise, nothing we can do :)

from rector.

samsonasik avatar samsonasik commented on July 22, 2024

Ok, I got it, it syntax error early, which seems expected, tested with php 7.4 vs php 8.0

PHP 7.4

➜   php74 vendor/bin/rector process test.php --dry-run
 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
                                                                                                                        
 [ERROR] Could not process "test.php" file, due to:                                                                     
         "Syntax error, unexpected T_OBJECT_OPERATOR, Syntax error, unexpected T_OBJECT_OPERATOR". On line: 94          

PHP 8.0+

➜  php81 vendor/bin/rector process test.php --dry-run
 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
1 file with changes
===================

1) test.php:3

    ---------- begin diff ----------
@@ @@
 {
     public function run()
     {
-        $localServicesLead?->getContactDetails()?->getEmail();
+        ($nullsafeVariable1 = ($nullsafeVariable2 = $localServicesLead) ? $nullsafeVariable2->getContactDetails() : null) ? $nullsafeVariable1->getEmail() : null;
     }
 }
    ----------- end diff -----------

Applied rules:
 * DowngradeNullsafeToTernaryOperatorRector

I think you need to use php 8.0+ to downgrade it, you can see the example:

https://github.com/rectorphp/rector-src/blob/69872ef5930d31c13bb7c9b1650ff4137269c1a4/.github/workflows/build_scoped_rector.yaml#L38-L42

from rector.

felixmosh avatar felixmosh commented on July 22, 2024

Thank you,

Why should it be restricted to PHP8? the whole point of this lib it that it not runs the code, but travese the AST, no?

from rector.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.