Bug Report
| Subject |
Details |
| Rector version |
v2.1.4 |
StringClassNameToClassConstantRector is replacing strings with leading backslashes, causing potential string mismatches.
I have a legacy application that stores the user's selection of a class in the database. At some point it was updated to use ::class which does not have leading backslashes, but some data remains with the leading backslash.
So e.g. the code:
if ($var == 'Foo\Bar' || $var == '\Foo\Bar') {}
gets replaced with:
if ($var == \Foo\Bar::class || $var == \Foo\Bar::class) {}
Minimal PHP Code Causing Issue
https://getrector.com/demo/3b6c7c8d-cf8f-464e-90d6-0e2bffe91f78
Expected Behaviour
I expect it not to change the comparison. Options might include leaving it unchanged or to have the leading slash when doing string comparisons?
if ($var == \Foo\Bar::class || $var == '\' . \Foo\Bar::class) {}
It might not just be for string comparisons. What if it was to output to the browser or was used as an api result, where it is actually being used as a string?
Note: I saw #9343 but I believe this is a slightly different issue - that one the outcome was to change the configuration, but I think that would only handle having one or the other but not both?
Bug Report
StringClassNameToClassConstantRector is replacing strings with leading backslashes, causing potential string mismatches.
I have a legacy application that stores the user's selection of a class in the database. At some point it was updated to use ::class which does not have leading backslashes, but some data remains with the leading backslash.
So e.g. the code:
gets replaced with:
Minimal PHP Code Causing Issue
https://getrector.com/demo/3b6c7c8d-cf8f-464e-90d6-0e2bffe91f78
Expected Behaviour
I expect it not to change the comparison. Options might include leaving it unchanged or to have the leading slash when doing string comparisons?
It might not just be for string comparisons. What if it was to output to the browser or was used as an api result, where it is actually being used as a string?
Note: I saw #9343 but I believe this is a slightly different issue - that one the outcome was to change the configuration, but I think that would only handle having one or the other but not both?