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