Search in sources :

Example 1 with MultiassignmentExpression

use of com.jetbrains.php.lang.psi.elements.MultiassignmentExpression in project phpinspectionsea by kalessil.

the class ShortListSyntaxCanBeUsedInspector method buildVisitor.

@Override
@NotNull
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) {
    return new BasePhpElementVisitor() {

        public void visitPhpMultiassignmentExpression(MultiassignmentExpression multiassignmentExpression) {
            /* ensure php version is at least PHP 7.1 */
            final PhpLanguageLevel phpVersion = PhpProjectConfigurationFacade.getInstance(holder.getProject()).getLanguageLevel();
            if (phpVersion.compareTo(PhpLanguageLevel.PHP710) < 0) {
                return;
            }
            /* verify if it's dedicated statement and it's the list(...) construction */
            final PsiElement parent = multiassignmentExpression.getParent();
            if (!OpenapiTypesUtil.isStatementImpl(parent)) {
                return;
            }
            final PsiElement listKeyword = multiassignmentExpression.getFirstChild();
            if (null != listKeyword && PhpTokenTypes.kwLIST == listKeyword.getNode().getElementType()) {
                holder.registerProblem(listKeyword, messageAssign, ProblemHighlightType.WEAK_WARNING, new TheLocalFix());
            }
        }

        public void visitPhpForeach(ForeachStatement foreach) {
            /* ensure php version is at least PHP 7.1 */
            final PhpLanguageLevel phpVersion = PhpProjectConfigurationFacade.getInstance(holder.getProject()).getLanguageLevel();
            if (phpVersion.compareTo(PhpLanguageLevel.PHP710) < 0) {
                return;
            }
            final List<Variable> variables = foreach.getVariables();
            if (variables.size() > 0) {
                PsiElement childNode = foreach.getFirstChild();
                while (null != childNode) {
                    if (childNode.getClass() == LeafPsiElement.class && PhpTokenTypes.kwLIST == childNode.getNode().getElementType()) {
                        holder.registerProblem(childNode, messageForeach, ProblemHighlightType.WEAK_WARNING, new TheLocalFix());
                        break;
                    }
                    childNode = childNode.getNextSibling();
                    if (childNode instanceof GroupStatement) {
                        break;
                    }
                }
            }
        }
    };
}
Also used : BasePhpElementVisitor(com.kalessil.phpStorm.phpInspectionsEA.openApi.BasePhpElementVisitor) GroupStatement(com.jetbrains.php.lang.psi.elements.GroupStatement) Variable(com.jetbrains.php.lang.psi.elements.Variable) LeafPsiElement(com.intellij.psi.impl.source.tree.LeafPsiElement) MultiassignmentExpression(com.jetbrains.php.lang.psi.elements.MultiassignmentExpression) PhpLanguageLevel(com.jetbrains.php.config.PhpLanguageLevel) LeafPsiElement(com.intellij.psi.impl.source.tree.LeafPsiElement) PsiElement(com.intellij.psi.PsiElement) ForeachStatement(com.jetbrains.php.lang.psi.elements.ForeachStatement) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

PsiElement (com.intellij.psi.PsiElement)1 LeafPsiElement (com.intellij.psi.impl.source.tree.LeafPsiElement)1 PhpLanguageLevel (com.jetbrains.php.config.PhpLanguageLevel)1 ForeachStatement (com.jetbrains.php.lang.psi.elements.ForeachStatement)1 GroupStatement (com.jetbrains.php.lang.psi.elements.GroupStatement)1 MultiassignmentExpression (com.jetbrains.php.lang.psi.elements.MultiassignmentExpression)1 Variable (com.jetbrains.php.lang.psi.elements.Variable)1 BasePhpElementVisitor (com.kalessil.phpStorm.phpInspectionsEA.openApi.BasePhpElementVisitor)1 NotNull (org.jetbrains.annotations.NotNull)1