diff --git a/python/src/com/jetbrains/python/inspections/PyDictDuplicateKeysInspection.java b/python/src/com/jetbrains/python/inspections/PyDictDuplicateKeysInspection.java index f2dea24b49a5..6d84684438a5 100644 --- a/python/src/com/jetbrains/python/inspections/PyDictDuplicateKeysInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDictDuplicateKeysInspection.java @@ -20,6 +20,7 @@ import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.lang.ASTNode; import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.intellij.util.containers.MultiMap; @@ -115,7 +116,7 @@ public class PyDictDuplicateKeysInspection extends PyInspection { @Nullable private String getKeyValue(@NotNull PsiElement node) { if (node instanceof PyStringLiteralExpression) { - return ((PyStringLiteralExpression)node).getStringValue(); + return wrapStringKey(((PyStringLiteralExpression)node).getStringValue()); } if (node instanceof PyNumericLiteralExpression) { @@ -139,7 +140,7 @@ public class PyDictDuplicateKeysInspection extends PyInspection { if (keys.size() > 1) { for (PsiElement key : keys) { - registerProblem(key, "Dictionary contains duplicate keys '" + keyValue + "'", quickFixes); + registerProblem(key, "Dictionary contains duplicate keys '" + unwrapStringKey(keyValue) + "'", quickFixes); } } } @@ -162,7 +163,7 @@ public class PyDictDuplicateKeysInspection extends PyInspection { final ASTNode node = ((PyKeywordArgument)argument).getKeywordNode(); final String keyValue = ((PyKeywordArgument)argument).getKeyword(); if (node != null && keyValue != null) { - return Pair.createNonNull(node.getPsi(), keyValue); + return Pair.createNonNull(node.getPsi(), wrapStringKey(keyValue)); } } @@ -173,5 +174,15 @@ public class PyDictDuplicateKeysInspection extends PyInspection { final PyExpression callee = expression.getCallee(); return callee != null && "dict".equals(callee.getText()); } + + @NotNull + private static String wrapStringKey(@NotNull String key) { + return "'" + key + "'"; + } + + @NotNull + private static String unwrapStringKey(@NotNull String key) { + return StringUtil.unquoteString(key, '\''); + } } } diff --git a/python/testData/inspections/PyDictDuplicateKeysInspection/test.py b/python/testData/inspections/PyDictDuplicateKeysInspection/test.py index 7b920828d6af..95b3e5acaf6f 100644 --- a/python/testData/inspections/PyDictDuplicateKeysInspection/test.py +++ b/python/testData/inspections/PyDictDuplicateKeysInspection/test.py @@ -39,4 +39,10 @@ d = {0j: 1, 'a': 1, 'a': 2, 'a': 3, +} + +# PY-30423 +a = { + 1: 2, + '1': 2, } \ No newline at end of file