Hack Language Support in PhpStorm Postponed
Hack is a programming language for HHVM by Facebook. Support for Hack has been the most-voted feature request in our PhpStorm issue tracker for quite a while. We have announced in our roadmap that we would investigate the possibility of introducing Hack support in the IDE by PhpStorm 9 release. So here is an update on this.
Our team has conducted a thorough investigation and developed a prototype. We’ve reached a decision to postpone Hack language support in PhpStorm. Let me shed some light on our reasons.
- We agree with Facebook that it’s not viable to write support for Hack from scratch.
- We’re unable to deliver the level of functionality & quality expected from an IDE by JetBrains, with the currently available Hack tooling APIs.
- Official tooling is coming via Nuclide, an IDE by Facebook.
The entire concept of getting Hack in PhpStorm was based on reliance on Hacklang built-in tooling support, including typechecker, reference resolution, and completion, all of which are part of the normal distribution package. Initial prototyping showed that using this approach was feasible, but further we went into development, the more we found it to be unsuitable for anything more serious than experiments.
Why we don’t want to write our own support for Hack
You might ask, “Why doesn’t JetBrains just write their own support for Hack?”. The answer is, “Hack is not PHP.”
We’d have to provide full support for a complete new language, which entails implementing a parser, type checker, navigation, completion, inspections, and so on. No part of PHP support that we have now can be reused for Hack, given the fundamental differences between the languages. We’d then have to maintain and enhance it, closely following the evolution of Hacklang.
All this would require a significant effort from our side, thus delaying other improvements and features that need to be implemented in other subsystems of PhpStorm. This would affect over 300,000 PHP developers using PhpStorm. Given the current adoption rate of Hack, we believe this is a trade-off that we should not rationally make.
With the current Hack tooling API, we’re unable to deliver the level of functionality & quality expected from an IDE by JetBrains
During our initial investigation, we relied on HHVM and Hack tooling running within self-contained Vagrant images, providing users with both runtime and IDE tools (annotations, completion, and so on). That was the only way to bring to all the platforms supported by PhpStorm (as HHVM itself is still not cross-platform), and to have the user environment set up and running with relative ease. Code completion and analysis were quite limited – similar to what Facebook provided for vi and Emacs users, plus some basic navigation. In addition, the way of reaching API services (via command line/SSH) has proved to be unsuitable for anything more serious than experiments, especially from the perspective of editor performance and stability.
We expected that, as our scheduled release approached, Hacklang tooling would mature, the APIs would become more suitable for real-world workloads, and the user experience would improve. Unfortunately that hasn’t been the case. As far as we know, the previously discussed improvement of the initial API is no longer part of HHVM/Hack strategy, and a completely new API to be used by Nuclide is being built. More on that below.
Given our team’s focus on prioritizing performance and editing experience, and despite our desire to bring Hack support into PhpStorm, with the current state of its tooling APIs we’re unable to provide the level of support that would meet either JetBrains’ quality standards or our customers’ expectations.
Official tooling: Nuclide, an IDE by Facebook
Some time ago Facebook announced Nuclide, a unified IDE for Hack/React/Flow. Nuclide is described as a set of packages for Atom editor. All advancements in Hack tooling API seem to be going into those packages. While these are supposed to be reusable by third parties, they have yet to be published, documented and tested for real-world usage.
While we look forward to the final result of Facebook’s effort, so far their focus has seemed to shift from the vision initially discussed. Bringing these services (and their configuration) into the picture would significantly complicate setup for PhpStorm users. As such, this effectively removes any possible integration from the PhpStorm 9 release timeframe.
Given the above, we’ve decided to postpone Hack language support in PhpStorm until either Hack language seems greater adoption or the options for integrating with the original tooling change dramatically.
We hope this answers the most urgent questions you’ve raised about Hack. Let’s live and see how things pan out.
Develop with pleasure!
– JetBrains PhpStorm Team
Subscribe to Blog updates
Thanks, we've got you!
PHP Turns 25: A Short History of PHP and 50% PhpStorm Discount
Rasmus Lerdorf introduced PHP to the world exactly 25 years ago today. The JetBrains team would like to take this opportunity to thank you all for your continued support for PHP over the years, and invite you to celebrate this anniversary together. The much-anticipated release of PHP 8 is schedul…
PhpStorm 2019.1 released: Debug Twig and Blade, Locate Dead Code, Enjoy Improved Autocompletion, New Refactorings & Quick-Fixes, and more
PhpStorm 2019.1 is now available for you! This major release brings with it support for debugging Twig and Blade templates, locating dead code, new and improved refactorings, intentions, and quick-fixes, enhanced performance and stability, and much more! Explore the top new features and download…
Nikita Popov joins PhpStorm Team
We are very happy to announce that starting this year, Nikita Popov, a well-known long-time PHP ecosystem contributor, is joining JetBrains to work with the PhpStorm team! The focus of his work – improving the PHP ecosystem – will remain the same. And of course, we are excited to explore what become…
PhpStorm 2018.3 released: DQL, PHP 7.3, Multi-host Deployment, PHP CS Fixer, new refactorings, and more
PhpStorm 2018.3 is now available! This major release brings with it a lot of new powerful features and improvements, including DQL support, PHP CS Fixer, remote deployment to multiple hosts, new intention actions and improved refactorings, support for GitHub Pull Requests and Git submodules, …