Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inline @var syntax #73

Open
kokx opened this issue Dec 21, 2016 · 8 comments
Open

Inline @var syntax #73

kokx opened this issue Dec 21, 2016 · 8 comments

Comments

@kokx
Copy link
Contributor

kokx commented Dec 21, 2016

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:

<?php
use My\Job;

$job = $sm->get(Job::class);
/* @var $job Job */

$job->...

In this case, it would be great to have autocompletion for $job as well. However, padawan.php just marks it as a generic object.

This syntax has been implemented by many IDE's, for example NetBeans.

@mkusher
Copy link
Member

mkusher commented Dec 21, 2016

@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

@kokx
Copy link
Contributor Author

kokx commented Dec 21, 2016

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.

@pbogut
Copy link
Member

pbogut commented Dec 21, 2016

Shouldn't it be /** @var $job Job */ instead of /* @var $job Job */ ?
Note two asterisks.

@mkusher
Copy link
Member

mkusher commented Dec 21, 2016

oh, @pbogut is right :)

@kokx
Copy link
Contributor Author

kokx commented Dec 21, 2016

@pbogut That gives a little different result. It now assigns the current namespace (without class) to the variable. See this screenshot:

var-inline-mistake
(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).

@mkusher
Copy link
Member

mkusher commented Dec 21, 2016

@kokx now padawan partially supports doc-comments, which are using double asterisk(and phpstorm understands this syntax too).

@kokx
Copy link
Contributor Author

kokx commented Dec 21, 2016

@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.

@halftan
Copy link
Contributor

halftan commented Dec 30, 2016

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
     **/
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants