| PHP | Bug | WI-55753 | Failed to unload modified plugins: PHP (PHP plugin Auto-Reload support) |
| PHP Quality Tools | Usability | WI-17740 | CodeSniffer gets temporary filename instead of real |
| Plugin: Deployment _ FTP. | Bug | WI-54777 | SSH-Configuration not saved to the Development Settings |
| Core | Bug | IDEA-249530 | Out of Memory Alert dialog is shown when memory is not a problem |
| Core. IDE Settings | Bug | IDEA-209384 | 2018.3.5 importing from 2.4 causes 'Antialiasing->subpixel' setting to not stick between runs |
| Core. Indexing | Bug | IDEA-247316 | Pausing Indexing Applies to All Windows Rather than Current Project |
| Bug | IDEA-249792 | SharedIndexes: indexes should be recalculated on shared index plugin disabling. | |
| Core. Navigation and Search | Bug | IDEA-247358 | Navigate to file: wrong item is focused in the Project View with 'Always Select Open File' enabled |
| Core. Plugin Management | Bug | IDEA-240141 | Plugin 'IDETalk' failed to initialize and will be disabled when opening a project |
| Editor | Bug | IDEA-250462 | Project file isn't opened from command line when another project is already opened and Light Edit frame is focused |
| Editor. Diff and Merge | Bug | IDEA-249139 | Git Diff Viewer - No marks near the scroll |
| Tools. Docker | Feature | IDEA-212147 | Docker. Support --init command line option |
| Bug | IDEA-248828 | Dockerfile Error: <path segment> expected, got '@' | |
| Bug | IDEA-239070 | Clicking image links in docker compose files for Official Images opens wrong URL | |
| Bug | IDEA-250305 | Refactoring of folder name replaces entire line when checking for references | |
| User Interface | Usability | IDEA-230328 | Search everywhere popup opens partially offscreen |
| User Interface. Embedded Browser (JCEF) | Task | IDEA-250780 | inform about missing native libs for JCEF on linux |
| User Interface. Project View | Usability | IDEA-249246 | 'Enter' on a module source or content root opens Project Structure dialog |
| Version Control. Git | Feature | IDEA-249119 | Remember selected options in Git Pull Dialog |
| Bug | IDEA-248332 | git pull --rebase executes only rebase | |
| Bug | IDEA-248796 | Git Merge Dialog: considers all roots with the same name as a single one. | |
| Usability | IDEA-248378 | Git Rebase dialog: onto help popup covers old base when start typing in empty field | |
| Usability | IDEA-248375 | Git Rebase dialog: onto help button is not reachable by keyboard | |
| Usability | IDEA-249240 | The default branch in the merge dialog should be chosen more intelligently | |
| DB Introspection | Bug | DBE-10711 | MongoDB is not introspected when new collection is created |
| SQL Completion | Feature | DBE-10668 | Add an intention to flip 2 sides of a comparison |
| SQL Highlighting | Feature | DBE-11383 | ClickHouse SQL does not know SYSTEM STOP TTL MERGES |
| Bug | DBE-11544 | Support Trailing commas for BigQuery | |
| Bug | DBE-11385 | PostgreSQL Statement level trigger - Syntax Highlighting Issue | |
| Bug | DBE-11380 | Unknown database function 'sysdate' - Snowflake JDBC | |
| Bug | DBE-9899 | Add support to KILL QUERY syntax highlight for Clickhouse dialect | |
| Bug | DBE-11493 | Add BOOLEAN type to BigQuery grammar | |
| Bug | DBE-11433 | Snowflake Geospatial Function Support | |
| Bug | DBE-11118 | DateTime64 column type cannot be recognized | |
| Bug | DBE-11356 | Redshift dialect doesnt regognize key word GENERATED | |
| Bug | DBE-11533 | RATIO_TO_REPORT() function not recognized in Snowflake dialect | |
| Bug | DBE-11432 | DataGrip stopping valid syntax on Redshift | |
| Bug | DBE-11545 | Support window statement in BigQuery | |
| Bug | DBE-11375 | SQLite syntax 'VACUUM INTO 'file' is not recognized | |
| JavaScript. Frameworks | Bug | WEB-37193 | Schematics options aren't respected when creating a new component |
| Bug | WEB-47394 | All Angular schematics do not show up. Error while loading schematics info | |
| Performance | WEB-46800 | High CPU usage when breadcrumbs are enabled | |
| JavaScript. Refactoring | Usability | WEB-47338 | TypeScript Inline Renaming for Generics never works. |
| Node.js | Bug | WEB-47366 | Support ESLint and TypeScript with Yarn PnP and Node.js 10.x |
| TypeScript | Feature | WEB-47397 | TypeScript 4.1: Syntax support for template literal types and mapped type 'as' clauses |
| Performance | WEB-47089 | Awful performance of TypeScript with optics-ts |
PhpStorm 2020.2 introduces a new version of the control flow engine, which is now more powerful than ever. We’ve already shown some improvements in the EAP#1 post. Let’s explore what it offers in more detail by looking at some scenarios from real-life projects. The PhpStorm install was more complicated, the file downloaded was PhpStorm- 2020.2.2.tar.gz I opened the download folder, right clicked and unpacked, then selected the unpacked folder, cut it and created a Software folder in my home directory. Install, configure and run JetBrains IDEs with Projector Server on Linux or in WSL - JetBrains/projector-installer. PHP 8 union types support, new control flow engine for PHP, Extract Class refactoring, full support for GitHub pull requests, brand-new Inspection Widget, su.
Early Access ProgramThe Early Access Program for PhpStorm 2020.2 is in full swing, and today we’ve got Build 4 of the 2020.2 EAP for you.
Read on to learn about the new control flow engine, the Add caret per selected line action, and smart handling of terminal commands.
If you prefer to watch rather than read, check out our EAP video series on the JetBrainsTV YouTube channel. Episode 1 is already available.

PhpStorm 2020.2 introduces a new version of the control flow engine, which is now more powerful than ever. We’ve already shown some improvements in the EAP#1 post. Let’s explore what it offers in more detail by looking at some scenarios from real-life projects.
Let’s start with the new Condition always true inspection:
In this code snippet, PhpStorm understands that $item must always have the type FOFTable, as otherwise the function returns false. As a result, is_object($item) is always true, and the whole ternary operation can be simplified.
To help you more easily understand what’s going on, the inspection message provides detailed information about the cause. There is also a quick-fix that lets you navigate to the expression that uniquely defines the current value.
Here is another example of this inspection in action:
PhpStorm knows that as part of the elseif chain, the case with $stubContent null has already been covered, so the last condition can be simplified.
There are several other new inspections based on the new engine, including Expression is always ‘null’, Result of ‘instanceof’ is always ‘true’, and Variable is always true/false when reached. Let’s look at them in more detail.
Suppose we have the following non-trivial hierarchy:
Inside ConfigEntityBase, we have the following code:
Because ConfigEntityBase implements ThirdPartySettingsInterface, the expression is always true. PhpStorm highlights it as redundant and displays a warning that suggests unwrapping the if statement for clarity.
PhpStorm not only analyzes conditions but also tracks the values of variables. It can suggest increasing code readability by replacing the always true/false variables with the corresponding boolean values.
Hinshaw live update. In this example, the ternary operator makes sure that $empty is always true in the first branch, so we can safely replace the variable with just the true value.
The inspection is disabled on purpose for the case below. This is because, according to our investigations, such code is often used to quickly change the default value:
In addition to true/false values, PhpStorm now also tracks the null value of the variable. Let’s take a look at the Expression is always ‘null’ inspection.
In this example, PhpStorm builds the control flow and sees that the assigned null value isn’t rewritten, neither by a new assignment nor by a pass-by-reference call. The IDE highlights the usage of $default and suggests simplifying the expression to make it more clear.
The new Add Caret Per Selected Line action creates carets at the end of each selected line, and deselects the lines. Invoke it using the shortcut Alt+Shift+G on Windows/Linux or ⌥⇧G on macOS.

PhpStorm has many features that can help you do specific jobs faster. In the upcoming v2020.2, if you run certain commands from the built-in terminal, the IDE will now suggest using existing IDE features instead.
Let’s say you want to check commit logs. If you type gitlog in the built-in terminal, the IDE will highlight the command in a different color, indicating that it can be handled by the IDE itself. Press Ctrl+Enter, and the IDE will open the Git tool window on the Log tab so you can explore commit logs with less effort.
This is still a work in progress, so we’d love to hear what other PHP-related commands you would like PhpStorm to handle in a similar fashion.
If you don’t find this feature useful in your workflow, you can disable smart commands by unchecking Smart command handling in Preferences/Settings | Tools | Terminal.
The full list of changes, including bug-fixes and improvements, is available in the release notes.
Please report any problems you find to our issue tracker, or by commenting on this post. Your feedback is much appreciated, and the most active EAPers will get special limited-edition gifts from us!
Your JetBrains PhpStorm team
The Drive to Develop
