Search in sources :

Example 11 with PyTargetExpression

use of com.jetbrains.python.psi.PyTargetExpression in project intellij-community by JetBrains.

the class PyiRelatedItemLineMarkerProvider method collectNavigationMarkers.

@Override
protected void collectNavigationMarkers(@NotNull PsiElement element, Collection<? super RelatedItemLineMarkerInfo> result) {
    if (element instanceof PyFunction || element instanceof PyTargetExpression || element instanceof PyClass) {
        final PsiElement pythonStub = PyiUtil.getPythonStub((PyElement) element);
        if (pythonStub != null) {
            result.add(createLineMarkerInfo(element, pythonStub, "Has stub item"));
        }
        final PsiElement originalElement = PyiUtil.getOriginalElement((PyElement) element);
        if (originalElement != null) {
            result.add(createLineMarkerInfo(element, originalElement, "Stub for item"));
        }
    }
}
Also used : PyClass(com.jetbrains.python.psi.PyClass) PyTargetExpression(com.jetbrains.python.psi.PyTargetExpression) PyFunction(com.jetbrains.python.psi.PyFunction) PsiElement(com.intellij.psi.PsiElement)

Example 12 with PyTargetExpression

use of com.jetbrains.python.psi.PyTargetExpression in project intellij-community by JetBrains.

the class PyPathEvaluatorTest method testConstants.

public void testConstants() {
    myFixture.configureByText(PythonFileType.INSTANCE, "ROOT_PATH = '/foo'\nTEMPLATES_DIR = os.path.join(ROOT_PATH, 'templates')");
    PyFile file = (PyFile) myFixture.getFile();
    final PyTargetExpression expression = file.findTopLevelAttribute("TEMPLATES_DIR");
    final PyExpression value = expression.findAssignedValue();
    final String result = FileUtil.toSystemIndependentName((String) new PyPathEvaluator("").evaluate(value));
    assertEquals(result, "/foo/templates");
}
Also used : PyPathEvaluator(com.jetbrains.python.psi.impl.PyPathEvaluator) PyTargetExpression(com.jetbrains.python.psi.PyTargetExpression) PyExpression(com.jetbrains.python.psi.PyExpression) PyFile(com.jetbrains.python.psi.PyFile)

Example 13 with PyTargetExpression

use of com.jetbrains.python.psi.PyTargetExpression in project intellij-community by JetBrains.

the class PyTargetElementEvaluator method getElementByReference.

@Nullable
@Override
public PsiElement getElementByReference(@NotNull PsiReference ref, int flags) {
    if ((flags & TargetElementUtil.ELEMENT_NAME_ACCEPTED) == 0) {
        return null;
    }
    final PsiElement element = ref.getElement();
    PsiElement result = ref.resolve();
    Set<PsiElement> visited = new HashSet<>();
    visited.add(result);
    while (result instanceof PyReferenceOwner && (result instanceof PyReferenceExpression || result instanceof PyTargetExpression)) {
        PsiElement nextResult = ((PyReferenceOwner) result).getReference(PyResolveContext.noImplicits()).resolve();
        if (nextResult != null && !visited.contains(nextResult) && PsiTreeUtil.getParentOfType(element, ScopeOwner.class) == PsiTreeUtil.getParentOfType(result, ScopeOwner.class) && (nextResult instanceof PyReferenceExpression || nextResult instanceof PyTargetExpression || nextResult instanceof PyParameter)) {
            visited.add(nextResult);
            result = nextResult;
        } else {
            break;
        }
    }
    return result;
}
Also used : PyReferenceOwner(com.jetbrains.python.psi.PyReferenceOwner) PyTargetExpression(com.jetbrains.python.psi.PyTargetExpression) ScopeOwner(com.jetbrains.python.codeInsight.controlflow.ScopeOwner) PsiElement(com.intellij.psi.PsiElement) HashSet(java.util.HashSet) PyReferenceExpression(com.jetbrains.python.psi.PyReferenceExpression) PyParameter(com.jetbrains.python.psi.PyParameter) Nullable(org.jetbrains.annotations.Nullable)

Example 14 with PyTargetExpression

use of com.jetbrains.python.psi.PyTargetExpression in project intellij-community by JetBrains.

the class PyAssignmentMappingTest method testSubscribedSource.

public void testSubscribedSource() throws Exception {
    Map<String, PsiElement> marks = loadTest();
    Assert.assertEquals(2, marks.size());
    // const -> ref foo -> subscr expr;
    PsiElement src = marks.get("<src>").getParent().getParent();
    // ident -> target expr
    PsiElement dst = marks.get("<dst>").getParent();
    Assert.assertTrue(dst instanceof PyTargetExpression);
    PyAssignmentStatement stmt = (PyAssignmentStatement) dst.getParent();
    List<Pair<PyExpression, PyExpression>> mapping = stmt.getTargetsToValuesMapping();
    Assert.assertEquals(1, mapping.size());
    Pair<PyExpression, PyExpression> pair = mapping.get(0);
    Assert.assertEquals(dst, pair.getFirst());
    Assert.assertEquals(src, pair.getSecond());
}
Also used : PyTargetExpression(com.jetbrains.python.psi.PyTargetExpression) PyExpression(com.jetbrains.python.psi.PyExpression) PyAssignmentStatement(com.jetbrains.python.psi.PyAssignmentStatement) PsiElement(com.intellij.psi.PsiElement) Pair(com.intellij.openapi.util.Pair)

Example 15 with PyTargetExpression

use of com.jetbrains.python.psi.PyTargetExpression in project intellij-community by JetBrains.

the class PyAssignmentMappingTest method testSimple.

public void testSimple() throws Exception {
    Map<String, PsiElement> marks = loadTest();
    Assert.assertEquals(2, marks.size());
    // const -> expr;
    PsiElement src = marks.get("<src>").getParent();
    // ident -> target expr
    PsiElement dst = marks.get("<dst>").getParent();
    Assert.assertTrue(dst instanceof PyTargetExpression);
    PyAssignmentStatement stmt = (PyAssignmentStatement) dst.getParent();
    List<Pair<PyExpression, PyExpression>> mapping = stmt.getTargetsToValuesMapping();
    Assert.assertEquals(1, mapping.size());
    Pair<PyExpression, PyExpression> pair = mapping.get(0);
    Assert.assertEquals(dst, pair.getFirst());
    Assert.assertEquals(src, pair.getSecond());
}
Also used : PyTargetExpression(com.jetbrains.python.psi.PyTargetExpression) PyExpression(com.jetbrains.python.psi.PyExpression) PyAssignmentStatement(com.jetbrains.python.psi.PyAssignmentStatement) PsiElement(com.intellij.psi.PsiElement) Pair(com.intellij.openapi.util.Pair)

Aggregations

PyTargetExpression (com.jetbrains.python.psi.PyTargetExpression)16 PsiElement (com.intellij.psi.PsiElement)11 PyExpression (com.jetbrains.python.psi.PyExpression)7 Pair (com.intellij.openapi.util.Pair)6 PyAssignmentStatement (com.jetbrains.python.psi.PyAssignmentStatement)6 PyClass (com.jetbrains.python.psi.PyClass)3 PyFunction (com.jetbrains.python.psi.PyFunction)3 PyReferenceExpression (com.jetbrains.python.psi.PyReferenceExpression)3 VirtualFile (com.intellij.openapi.vfs.VirtualFile)2 PsiReference (com.intellij.psi.PsiReference)2 PyUtil (com.jetbrains.python.psi.PyUtil)2 Nullable (org.jetbrains.annotations.Nullable)2 LineMarkerInfo (com.intellij.codeInsight.daemon.LineMarkerInfo)1 Editor (com.intellij.openapi.editor.Editor)1 OpenFileDescriptor (com.intellij.openapi.fileEditor.OpenFileDescriptor)1 PsiFile (com.intellij.psi.PsiFile)1 PsiNameIdentifierOwner (com.intellij.psi.PsiNameIdentifierOwner)1 RenameProcessor (com.intellij.refactoring.rename.RenameProcessor)1 VariableInplaceRenamer (com.intellij.refactoring.rename.inplace.VariableInplaceRenamer)1 PyCustomMember (com.jetbrains.python.codeInsight.PyCustomMember)1