mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Do not resolve PyReferenceExpression
This commit is contained in:
@@ -20,7 +20,6 @@ import com.intellij.lang.annotation.HighlightSeverity;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiReferenceBase;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
@@ -28,7 +27,6 @@ import com.jetbrains.python.inspections.PyStringFormatParser;
|
||||
import com.jetbrains.python.inspections.PyStringFormatParser.NewStyleSubstitutionChunk;
|
||||
import com.jetbrains.python.psi.*;
|
||||
import com.jetbrains.python.psi.impl.PyPsiUtils;
|
||||
import com.jetbrains.python.psi.resolve.PyResolveContext;
|
||||
import com.jetbrains.python.psi.types.TypeEvalContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -41,7 +39,6 @@ public class PySubstitutionChunkReference extends PsiReferenceBase<PyStringLiter
|
||||
private final int myPosition;
|
||||
@NotNull private final PyStringFormatParser.SubstitutionChunk myChunk;
|
||||
private final boolean myIsPercent;
|
||||
private final TypeEvalContext myTypeEvalContext;
|
||||
|
||||
public PySubstitutionChunkReference(@NotNull final PyStringLiteralExpression element,
|
||||
@NotNull final PyStringFormatParser.SubstitutionChunk chunk, final int position) {
|
||||
@@ -49,9 +46,6 @@ public class PySubstitutionChunkReference extends PsiReferenceBase<PyStringLiter
|
||||
myChunk = chunk;
|
||||
myPosition = position;
|
||||
myIsPercent = chunk instanceof PyStringFormatParser.PercentSubstitutionChunk;
|
||||
|
||||
final PsiFile file = element.getContainingFile();
|
||||
myTypeEvalContext = TypeEvalContext.codeAnalysis(file.getProject(), file);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -174,7 +168,6 @@ public class PySubstitutionChunkReference extends PsiReferenceBase<PyStringLiter
|
||||
|
||||
@Nullable
|
||||
private Ref<PyExpression> resolveStringIndex(@NotNull PyExpression valueExpr, @NotNull String indexElement) {
|
||||
final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext);
|
||||
if (valueExpr instanceof PyCallExpression) {
|
||||
return resolveDictCall((PyCallExpression)valueExpr, indexElement, false);
|
||||
}
|
||||
@@ -183,11 +176,7 @@ public class PySubstitutionChunkReference extends PsiReferenceBase<PyStringLiter
|
||||
if (resolvedRef != null) return resolvedRef;
|
||||
}
|
||||
else if (valueExpr instanceof PyReferenceExpression) {
|
||||
PsiElement element = ((PyReferenceExpression)valueExpr).followAssignmentsChain(resolveContext).getElement();
|
||||
|
||||
if (element != valueExpr && element instanceof PyExpression) {
|
||||
return resolveStringIndex((PyExpression)element, indexElement);
|
||||
}
|
||||
return Ref.create(valueExpr);
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -195,7 +184,6 @@ public class PySubstitutionChunkReference extends PsiReferenceBase<PyStringLiter
|
||||
|
||||
@Nullable
|
||||
private Ref<PyExpression> resolveNumericIndex(@NotNull PyExpression valueExpr, @NotNull Integer index) {
|
||||
final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext);
|
||||
if (PyUtil.instanceOf(valueExpr, PyListLiteralExpression.class, PyTupleExpression.class, PyStringLiteralExpression.class)) {
|
||||
Ref<PyExpression> elementRef = getElementByIndex(valueExpr, index);
|
||||
if (elementRef != null) return elementRef;
|
||||
@@ -204,12 +192,7 @@ public class PySubstitutionChunkReference extends PsiReferenceBase<PyStringLiter
|
||||
return getElementFromDictLiteral((PyDictLiteralExpression)valueExpr, index);
|
||||
}
|
||||
else if (valueExpr instanceof PyReferenceExpression) {
|
||||
PsiElement element = ((PyReferenceExpression)valueExpr).followAssignmentsChain(resolveContext).getElement();
|
||||
|
||||
if (element != null && element != valueExpr && element instanceof PyExpression) {
|
||||
//noinspection ConstantConditions
|
||||
return resolveNumericIndex(PyPsiUtils.flattenParens((PyExpression)element), index);
|
||||
}
|
||||
return Ref.create(valueExpr);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
list = [1, 2, 3]
|
||||
"{foo[1]}".format(foo=list)
|
||||
<warning descr="Too few arguments for format string">"{foo[3]}"</warning>.format(foo=list)
|
||||
"{foo[3]}".format(foo=list)
|
||||
|
||||
tuple = (1, 2, 3)
|
||||
"{foo[1]}".format(foo=tuple)
|
||||
<warning descr="Too few arguments for format string">"{foo[3]}"</warning>.format(foo=tuple)
|
||||
"{foo[3]}".format(foo=tuple)
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
d = {"a": 1}
|
||||
"{foo[a]}".format(foo=d)
|
||||
<warning descr="Too few arguments for format string">"{foo[b]}"</warning>.format(foo=d)
|
||||
"{foo[b]}".format(foo=d)
|
||||
|
||||
d_num = {1: 1}
|
||||
"{foo[1]}".format(foo=d_num)
|
||||
<warning descr="Too few arguments for format string">"{foo[2]}"</warning>.format(foo=d_num)
|
||||
"{foo[2]}".format(foo=d_num)
|
||||
Reference in New Issue
Block a user