Open kokx opened 7 years ago
@kokx now @var
works only before assignment, like this
<?php
use My\Job;
/* @var $job Job */
$job = $sm->get(Job::class);
$job->... // type of $job is Job here
Thanks for the comment @mkusher. Unfortunately however, I cannot reproduce that. Even after a re-index and restart of padawan.php it doesn't work. It still tells me that $job
is an object
.
Shouldn't it be /** @var $job Job */
instead of /* @var $job Job */
?
Note two asterisks.
oh, @pbogut is right :)
@pbogut That gives a little different result. It now assigns the current namespace (without class) to the variable. See this screenshot:
(the current namespace here is Debtor\Service
).
Using /** @var Job $job */
does work correctly. So thanks for the hint!
Still, I think it is a good idea to implement the same syntax as NetBeans and PhpStorm, for teams in which different editors are used (such as my team).
@kokx now padawan partially supports doc-comments, which are using double asterisk(and phpstorm understands this syntax too).
@mkusher Yeah, I completely get that. I'm just saying that it would be a nice feature to have (imo not top priority). Since a lot of code bases already use that syntax.
will implement in #80, @kokx @pbogut please checkout my development branch to test the feature. The inline type hinting formats are:
// Eclipse's approach of type hint
/** @var $inst Class */
$inst = new $className();
// phpdoc-like approach
for ($items as $item) {
/** @var Class $item */
}
// also works in closure
array_map($array, function($a, $b) {
/** @var Class $a */
/** @var Class $b */
// or maybe in block ( not available now)
/**
* @var Class $a
* @var Class $b
**/
});
Implement inline
@var
syntax.Sometimes, you know for a fact that some function returns a certain type. However, type hinting won't work because the function is too generic for that. For example, with the ZF2 ServiceManager:
In this case, it would be great to have autocompletion for
$job
as well. However, padawan.php just marks it as a genericobject
.This syntax has been implemented by many IDE's, for example NetBeans.