Why an Automated Compatibility Tool?
PHP is a rapidly evolving language, and new versions are regularly released with new features and security improvements. However, with each new version, there may be changes to the language syntax, behavior, and functionality that can cause compatibility issues with code written in earlier versions. It is crucial to keep the codebase clean and organized and maintain PHP compatibility when making customizations.
What's Rector and How can it help?
Rector is a powerful tool that automates the process of refactoring PHP code. It simplifies the codebase, making it easier to read, understand, and maintain.
By incorporating Rector into the customization process, you can save time and effort and reduce the risk of introducing bugs or coding standard violations. Rector can also help ensure that your customizations are aligned with the latest PHP versions and best practices, which can result in better performance, increased security, and a more stable system.
How does Rector work with Sugar?
Rector is not a grep, search and replace tool, it traverses the entire object hierarchies to "understand" what can and cannot be changed without impacting the code's functionality.
For example, if you extend a SugarBean, Rector needs the entire SugarBean class hierarchy loaded to make a decision in its ruling engine.
Having that in mind, Rector will need a working Sugar instance to execute and make recommendations (you can dry-run before it actually changes any code) and update your code automagically.
Who uses Rector?
Rector has been used by Sugar Engineering group for a few years now and has proven to be to work very well in our massive codebase to keep the code simple, clean and multi-php-version compatible. You as a developer must analyze what the tool presents to you as suggestions and make a decision to incorporate those changes. Remember, it's an automated tool that does what is told, so use it with caution.
Best Practices
- Sugar recommends developers code their customizations in the latest Sugar Supported PHP version and keep it backward compatible using Rector.
- Use git to keep track of updated files before you run Rector.
- Run a first pass in your customizations using
--dry-run
so you can see exactly what Rector is/will change and decide to keep it. - Make a copy of your project/customization and run it. If you forget the
--dry-run
argument, it will change your files and can become pretty difficult to track. - Don't use this tool directly in production!