diff --git a/python/src/com/jetbrains/python/codeInsight/PySubstitutionChunkReference.java b/python/src/com/jetbrains/python/codeInsight/PySubstitutionChunkReference.java index c573bc2d6249..d6ee29edf234 100644 --- a/python/src/com/jetbrains/python/codeInsight/PySubstitutionChunkReference.java +++ b/python/src/com/jetbrains/python/codeInsight/PySubstitutionChunkReference.java @@ -25,6 +25,7 @@ import com.intellij.psi.PsiReferenceBase; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.ArrayUtil; 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; @@ -130,7 +131,7 @@ public class PySubstitutionChunkReference extends PsiReferenceBase resolveKeywordFormat(@NotNull PyArgumentList argumentList) { final Ref valueExprRef = getKeyValueFromArguments(argumentList); - final String indexElement = ((PyStringFormatParser.NewStyleSubstitutionChunk)myChunk).getMappingKeyElementIndex(); + final String indexElement = myChunk instanceof NewStyleSubstitutionChunk ? ((NewStyleSubstitutionChunk)myChunk).getMappingKeyElementIndex() : null; if (valueExprRef != null && !valueExprRef.isNull() && indexElement != null) { final PyExpression valueExpr = PyPsiUtils.flattenParens(valueExprRef.get()); assert valueExpr != null; diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/convertToFString/NewStyleConvertToFStringProcessor.java b/python/src/com/jetbrains/python/codeInsight/intentions/convertToFString/NewStyleConvertToFStringProcessor.java index a93ddbea51e4..26f53e76fa29 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/convertToFString/NewStyleConvertToFStringProcessor.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/convertToFString/NewStyleConvertToFStringProcessor.java @@ -53,7 +53,7 @@ public class NewStyleConvertToFStringProcessor extends BaseConvertToFStringProce @NotNull @Override protected PySubstitutionChunkReference createReference(@NotNull Field field) { - return new PySubstitutionChunkReference(myPyString, field, ObjectUtils.chooseNotNull(field.getAutoPosition(), 0), false); + return new PySubstitutionChunkReference(myPyString, field, ObjectUtils.chooseNotNull(field.getAutoPosition(), 0)); } @Override diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/convertToFString/OldStyleConvertToFStringProcessor.java b/python/src/com/jetbrains/python/codeInsight/intentions/convertToFString/OldStyleConvertToFStringProcessor.java index 347640a6819e..4c8524e4f45a 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/convertToFString/OldStyleConvertToFStringProcessor.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/convertToFString/OldStyleConvertToFStringProcessor.java @@ -22,6 +22,8 @@ import com.intellij.util.ObjectUtils; import com.jetbrains.python.codeInsight.PySubstitutionChunkReference; import com.jetbrains.python.inspections.PyStringFormatParser; import com.jetbrains.python.inspections.PyStringFormatParser.SubstitutionChunk; +import com.jetbrains.python.inspections.PyStringFormatParser.PercentSubstitutionChunk; +import com.jetbrains.python.inspections.PyStringFormatParser.NewStyleSubstitutionChunk; import com.jetbrains.python.psi.PyBinaryExpression; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyStringLiteralExpression; @@ -50,7 +52,7 @@ public class OldStyleConvertToFStringProcessor extends BaseConvertToFStringProce @NotNull @Override protected PySubstitutionChunkReference createReference(@NotNull SubstitutionChunk chunk) { - return new PySubstitutionChunkReference(myPyString, chunk, ObjectUtils.chooseNotNull(chunk.getAutoPosition(), 0), true); + return new PySubstitutionChunkReference(myPyString, chunk, ObjectUtils.chooseNotNull(chunk.getAutoPosition(), 0)); } @Override @@ -92,7 +94,9 @@ public class OldStyleConvertToFStringProcessor extends BaseConvertToFStringProce widthAndPrecision += "." + subsChunk.getPrecision(); } - final String conversionFlags = subsChunk.getConversionFlags(); + final String conversionFlags = subsChunk instanceof PercentSubstitutionChunk ? + ((PercentSubstitutionChunk)subsChunk).getConversionFlags() : + ((NewStyleSubstitutionChunk)subsChunk).getConversion(); fStringText.append("{"); final PySubstitutionChunkReference reference = createReference(subsChunk); diff --git a/python/src/com/jetbrains/python/inspections/PyNewStyleStringFormatParser.java b/python/src/com/jetbrains/python/inspections/PyNewStyleStringFormatParser.java index da85ed4832b5..edc2e44ad29d 100644 --- a/python/src/com/jetbrains/python/inspections/PyNewStyleStringFormatParser.java +++ b/python/src/com/jetbrains/python/inspections/PyNewStyleStringFormatParser.java @@ -258,7 +258,7 @@ public class PyNewStyleStringFormatParser { int endOffset, int autoPosition, int depth) { - super(leftBraceOffset); + super(leftBraceOffset, endOffset); myNodeText = nodeText; myLeftBraceOffset = leftBraceOffset; myAttributesAndLookups = attrAndLookupBounds; @@ -269,7 +269,6 @@ public class PyNewStyleStringFormatParser { myEndOffset = endOffset; myDepth = depth; - setEndIndex(myEndOffset); final String name = getFirstName(); if (name.isEmpty()) { setAutoPosition(autoPosition); diff --git a/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java b/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java index 466cdd2048d1..1cc8a453867a 100644 --- a/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java @@ -31,7 +31,6 @@ import com.jetbrains.python.codeInsight.PySubstitutionChunkReference; import com.jetbrains.python.inspections.quickfix.PyAddSpecifierToFormatQuickFix; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyBuiltinCache; -import com.jetbrains.python.psi.impl.PyPsiUtils; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.types.*; import org.jetbrains.annotations.Nls; @@ -650,9 +649,7 @@ public class PyStringFormatInspection extends PyInspection { if (((PyUnionType)callType).getMembers().stream().allMatch(PyType::isBuiltin)) return 1; } - else { - return 1; - } + return -1; } ) ); @@ -663,8 +660,6 @@ public class PyStringFormatInspection extends PyInspection { else { return -1; } - - return -1; } private static PyReturnStatement[] getFunctionReturnValues(@NotNull PyCallExpression callExpression, diff --git a/python/src/com/jetbrains/python/inspections/PyStringFormatParser.java b/python/src/com/jetbrains/python/inspections/PyStringFormatParser.java index a5cceea72173..e08ebaccbf72 100644 --- a/python/src/com/jetbrains/python/inspections/PyStringFormatParser.java +++ b/python/src/com/jetbrains/python/inspections/PyStringFormatParser.java @@ -74,6 +74,8 @@ public class PyStringFormatParser { @Nullable private Integer myPosition; @Nullable private Integer myAutoPosition; + private char myConversionType; + public SubstitutionChunk(int startIndex, int endIndex) { super(startIndex, endIndex); } @@ -108,6 +110,14 @@ public class PyStringFormatParser { myAutoPosition = autoPosition; } + public char getConversionType() { + return myConversionType; + } + + public void setConversionType(char conversionType) { + myConversionType = conversionType; + } + @Nullable public String getPrecision() { return myPrecision; @@ -139,21 +149,12 @@ public class PyStringFormatParser { public static class PercentSubstitutionChunk extends SubstitutionChunk { @Nullable private String myConversionFlags; private char myLengthModifier; - private char myConversionType; private boolean myUnclosedMapping; public PercentSubstitutionChunk(int startIndex) { super(startIndex, startIndex); } - public char getConversionType() { - return myConversionType; - } - - private void setConversionType(char conversionType) { - myConversionType = conversionType; - } - @Nullable public String getConversionFlags() { return myConversionFlags; @@ -184,7 +185,6 @@ public class PyStringFormatParser { @Nullable private String myConversion; @Nullable private String myMappingKeyAttributeName; @Nullable private String myMappingKeyElementIndex; - private char myConversionType; private boolean signOption; private boolean zeroPadding; private boolean alternateForm; @@ -211,14 +211,6 @@ public class PyStringFormatParser { this.signOption = true; } - public char getConversionType() { - return myConversionType; - } - - public void setConversionType(char conversionType) { - myConversionType = conversionType; - } - public boolean useAlternateForm() { return alternateForm; } diff --git a/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.java b/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.java index 7dfe8b9e403e..bed07197dc2a 100644 --- a/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.java +++ b/python/src/com/jetbrains/python/inspections/unresolvedReference/PyUnresolvedReferencesInspection.java @@ -41,7 +41,6 @@ import com.jetbrains.python.PyCustomType; import com.jetbrains.python.PyNames; import com.jetbrains.python.codeInsight.PyCodeInsightSettings; import com.jetbrains.python.codeInsight.PyCustomMember; -import com.jetbrains.python.codeInsight.PyFunctionTypeCommentReferenceContributor; import com.jetbrains.python.codeInsight.PySubstitutionChunkReference; import com.jetbrains.python.codeInsight.controlflow.ScopeOwner; import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;