Comments (9)
The code is scanned by PHPStan as well, and configured to win over old code, we use php8parser:
rector/config/phpstan/parser.neon
Line 20 in 62cf2ca
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.
I've narrowed it down to this line
$localServicesLead?->getContactDetails()?->getEmail()
from rector.
Could you reproduce at https://getrector.com/demo ?
from rector.
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.
That seems working ok https://getrector.com/demo/9b2f0d84-d26e-43fd-bb44-4fec8064a8ec
Could you try create minimal reproducible repo? Thank you.
from rector.
Try to run the code from php 7.4
from rector.
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.
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:
from rector.
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)
- Return types being overwritten incorrectly HOT 1
- DeadCode rule fail to remove some params HOT 7
- deadCode + codeQuality - Static methods called in `callable` are removed
- Incorrect behavior of AddMethodCallBasedStrictParamTypeRector
- Incorrect behavior of JoinStringConcatRector for multiple \n
- Could not process "C:\xampp72\htdocs\oldboys\atk\ui\smarty\Smarty_Compiler.class.php" file, due to: 1" HOT 2
- Incorrect behavior of AddParamTypeBasedOnPHPUnitDataProviderRector
- Incorrect behavior of SeparateMultiUseImportsRector
- Replace ParameterBagInterface with #[Autowire()] attribute HOT 1
- Incorrect behavior of ExplicitBoolCompareRector - double variable assignment in condition HOT 1
- Incorrect behavior of StrictArrayParamDimFetchRector HOT 1
- How to ignore rules or paths? Documentation outdated! HOT 5
- Incorrect behavior of ParamTypeByMethodCallTypeRector HOT 1
- Incorrect behavior of AddMethodCallBasedStrictParamTypeRector, BoolReturnTypeFromBooleanStrictReturnsRector, ReturnUnionTypeRector HOT 1
- Rector Error Report Post HOT 2
- "System error: "Class League\OAuth2\Client\Grant\RefreshToken was not found while trying to analyse it - red properly." HOT 2
- Incorrect behavior of RemoveNonExistingVarAnnotationRector HOT 4
- Incorrect behavior of NullToStrictStringFuncCallArgRector HOT 5
- Could not to remove positional value from annotation HOT 1
- `UnusedForeachValueToArrayKeysRector` removes values that are used HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rector.