diff --git a/json/src/com/jetbrains/jsonSchema/extension/JsonLikePsiWalker.java b/json/src/com/jetbrains/jsonSchema/extension/JsonLikePsiWalker.java index 7d2d06be074f..a3f5315cd980 100644 --- a/json/src/com/jetbrains/jsonSchema/extension/JsonLikePsiWalker.java +++ b/json/src/com/jetbrains/jsonSchema/extension/JsonLikePsiWalker.java @@ -37,6 +37,7 @@ public interface JsonLikePsiWalker { boolean requiresNameQuotes(); default boolean requiresValueQuotes() { return true; } boolean allowsSingleQuotes(); + default boolean isValidIdentifier(String string, Project project) { return true; } boolean hasMissingCommaAfter(@NotNull PsiElement element); diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java index 3e6968f38ffb..1fda75a56b2a 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java @@ -160,7 +160,7 @@ public class JsonSchemaCompletionContributor extends CompletionContributor { myResultConsumer = resultConsumer; myVariants = new HashSet<>(); myWalker = JsonLikePsiWalker.getWalker(myPosition, myRootSchema); - myWrapInQuotes = myWalker != null && myWalker.requiresNameQuotes() && !(position.getParent() instanceof JsonStringLiteral); + myWrapInQuotes = !(position.getParent() instanceof JsonStringLiteral); myInsideStringLiteral = position.getParent() instanceof JsonStringLiteral; } @@ -392,7 +392,8 @@ public class JsonSchemaCompletionContributor extends CompletionContributor { @SuppressWarnings("SameParameterValue") @Nullable final String description, @Nullable final String altText, @Nullable InsertHandler handler) { - LookupElementBuilder builder = LookupElementBuilder.create(!myWrapInQuotes ? StringUtil.unquoteString(key) : key); + String unquoted = StringUtil.unquoteString(key); + LookupElementBuilder builder = LookupElementBuilder.create(!shouldWrapInQuotes(unquoted) ? unquoted : key); if (altText != null) { builder = builder.withPresentableText(altText); } @@ -405,13 +406,17 @@ public class JsonSchemaCompletionContributor extends CompletionContributor { myVariants.add(builder); } + private boolean shouldWrapInQuotes(String key) { + return myWrapInQuotes && myWalker != null && (myWalker.requiresNameQuotes() || !myWalker.isValidIdentifier(key, myProject)); + } + private void addPropertyVariant(@NotNull String key, @NotNull JsonSchemaObject jsonSchemaObject, boolean hasValue, boolean insertComma) { final Collection variants = new JsonSchemaResolver(myProject, jsonSchemaObject).resolve(); jsonSchemaObject = ObjectUtils.coalesce(ContainerUtil.getFirstItem(variants), jsonSchemaObject); - key = !myWrapInQuotes ? key : StringUtil.wrapWithDoubleQuote(key); + key = !shouldWrapInQuotes(key) ? key : StringUtil.wrapWithDoubleQuote(key); LookupElementBuilder builder = LookupElementBuilder.create(key); final String typeText = JsonSchemaDocumentationProvider.getBestDocumentation(true, jsonSchemaObject); diff --git a/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaPerformanceTest.java b/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaPerformanceTest.java index c06868da40f8..7b36e2e07566 100644 --- a/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaPerformanceTest.java +++ b/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaPerformanceTest.java @@ -28,7 +28,7 @@ public class JsonSchemaPerformanceTest extends JsonSchemaHeavyAbstractTest { } public void testSwaggerHighlighting() { - doPerformanceTest(8000, "swagger"); + doPerformanceTest(8300, "swagger"); } public void testTsLintSchema() {