<table><tr><td style="">mtijink created this revision.<br />mtijink added a project: KDevelop.<br />Restricted Application added a subscriber: kdevelop-devel.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D6342" rel="noreferrer">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>In php 7.0 and php 7.1, new type hints were added. I would like to see those supported in KDevelop.</p>

<p>This patch adds support for most of the new type hints (only "self" is missing), but some types do not get a better resulting DUChain type, since I do not know how to add the types "iterable" and "callable" in the DUChain.</p>

<p>Since this is my first patch, I also have some questions, which I hope you can answer:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">How should I add support for "self"? Adding it as a token gave all kinds of problems.</li>
<li class="remarkup-list-item">How should the "callable" type be represented? It should accept any kind of function, but I only saw support for types with known function signatures</li>
<li class="remarkup-list-item">This patch added some tokens, so they cannot be used as class names and constants anymore. This is a problem, I think, since PHP < 7 still allows e.g. "int" as class name. Another problem is that the newer keywords (e.g. "iterable", "int") can still be used as names for constants (but not for classes etc.), which is not allowed with this code either.</li>
</ul>

<p>Feedback very welcome!</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R52 KDevelop: PHP Support</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D6342" rel="noreferrer">https://phabricator.kde.org/D6342</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>completion/context.cpp<br />
duchain/builders/typebuilder.cpp<br />
duchain/builders/usebuilder.cpp<br />
duchain/expressionvisitor.cpp<br />
duchain/tests/duchain.cpp<br />
parser/php.g<br />
parser/phplexer.cpp</div></div></div><br /><div><strong>To: </strong>mtijink, KDevelop<br /><strong>Cc: </strong>kdevelop-devel, geetamc, Pilzschaf, akshaydeo, surgenight, arrowdodger<br /></div>