PRs are welcome, will gladly help with any questions you may have, but pls try to avoid unnecessary refactoring and features that may cause considerable performance degradation, as such PRs won't be accepted. If in doubt, create an issue to discuss whether feature will be acceptable before starting investing into the solution.
If you need help with building the project or understanding the code, feel free to drop at https://t.me/klesun_productions, we can chat there ;)
Autocomplete keys of associative arrays defined in other functions.
Jetbrains Repository: 9927-deep-assoc-completion
(a bit more relaxed usage guide can be found here)
-
When you are going to type an associative key of a variable, like in
$user['']
, put caret between quotes and pressctrl
+space
. The plugin will analyze your code, determine what keys does$user
have and suggest completion. -
To go to the key definition, hover on it and press
ctrl
+click
or put carret on it and pressctrl
+b
. -
You can specify function argument type using
@param SomeType $varName = Some::phpExpression()
, like@param $anime = ['genre' => 'shounen', 'studio' => 'Shaft']
.=
is mandatory and expression must be a valid php expression. Class methods can be specified either with complete namespace like\Very\Long\Namespace\ClassName::funcName()
, or with justClassName::funcName()
.You can specify
@return
array keys as well:/** * @return array [ * 'success' => true, * 'formObject' => new Form, * 'errors' => [], * ] */ public static function processForm($arr);
-
Phpstorm does not give you method name completion when object is located in an associative array? Don't be sad, this plugin is exactly what you need!
-
Did you ever want an ability to find out which exactly test case does phpunit mean by the
with data set "17"
without manually counting them? You can find this feature in Tools -> deep-assoc-completion -> To N-th Test. It moves your caret to the test case with the order you specify in the popup. If there are multiple@dataProvider
functions in the file, the function caret is currently in will be used. This action will work correctly only on more or less straightforward@dataProvider
-s.
-
Extremely useful for small private helper functions - you don't need to document args in each of them to get completion.
- Start creating a new project in Intelliji Idea.
- Select
Intelliji Platform Plugin
. - Select a phpstorm or IDEA Ultimate installation directory as
Project SDK
(java version is 8). - Select
deep-assoc-completion
project folder asProject location
. - In
Project Structure -> Libraries
addphp/lib/php.jar
,php/lib/php-openapi.jar
andtwig/lib/twig.jar
fromYourPhpStormDirectory/plugins/[php|twig]
(in case of IDEA Ultimate, thephp
andtwig
plugins should be installed, and the location isHomeOrMyDocumentsDir/.IntellijIdea20XX.X/config/plugins/[php|twig]/lib
). - In
Project Structure -> Modules -> Dependencies
setScope
ofphp
,php-openapi
andtwig
toProvided
.
To build a jar use Build -> Prepare Plugin ... For Deployment
. To debug use Run -> Debug
. Since phpstorm project takes about a minute to start, you must find Run -> Reload Changed Classes
very useful for micro changes.
To use compiled .jar
in your phpstorm go to Settings -> Plugins -> Install plugin from disk
and select the .jar
we compiled earlier.
Shutout my thanks to the JetBrains for continuously supplying me an open source IDE license for this plugin development.