diff --git a/org.eclipse.tm4e.languageconfiguration/src/main/java/org/eclipse/tm4e/languageconfiguration/internal/model/LanguageConfiguration.java b/org.eclipse.tm4e.languageconfiguration/src/main/java/org/eclipse/tm4e/languageconfiguration/internal/model/LanguageConfiguration.java index c544d10a1..7be1dfcdb 100644 --- a/org.eclipse.tm4e.languageconfiguration/src/main/java/org/eclipse/tm4e/languageconfiguration/internal/model/LanguageConfiguration.java +++ b/org.eclipse.tm4e.languageconfiguration/src/main/java/org/eclipse/tm4e/languageconfiguration/internal/model/LanguageConfiguration.java @@ -125,9 +125,14 @@ private static String removeTrailingCommas(final String jsonString) { return null; } - // ex: {"lineComment": "//","blockComment": [ "/*", "*/" ]} final var jsonObj = json.getAsJsonObject(); - final var lineComment = getAsString(jsonObj.get("lineComment")); //$NON-NLS-1$ + final var lineCommentElem = jsonObj.get("lineComment"); //$NON-NLS-1$ + // VS Code also permits {"comment":"#","noIndent":true} here. + // TM4E always inserts line comments at the start of the line, so noIndent + // currently has no effect and is intentionally ignored. + final var lineComment = lineCommentElem != null && lineCommentElem.isJsonObject() + ? getAsString(lineCommentElem.getAsJsonObject().get("comment")) //$NON-NLS-1$ + : getAsString(lineCommentElem); final var blockCommentElem = jsonObj.get("blockComment"); //$NON-NLS-1$ CharacterPair blockComment = null; if (blockCommentElem != null && blockCommentElem.isJsonArray()) { diff --git a/org.eclipse.tm4e.languageconfiguration/src/test/java/org/eclipse/tm4e/languageconfiguration/internal/model/ParsingTest.java b/org.eclipse.tm4e.languageconfiguration/src/test/java/org/eclipse/tm4e/languageconfiguration/internal/model/ParsingTest.java index e114e3900..9d8dff6e7 100644 --- a/org.eclipse.tm4e.languageconfiguration/src/test/java/org/eclipse/tm4e/languageconfiguration/internal/model/ParsingTest.java +++ b/org.eclipse.tm4e.languageconfiguration/src/test/java/org/eclipse/tm4e/languageconfiguration/internal/model/ParsingTest.java @@ -94,6 +94,21 @@ void testCanLoadRustLanguageConfig() throws Exception { assertThat(languageConfiguration.getFolding()).isNull(); } + @Test + void testCanLoadObjectLineComment() { + final var languageConfiguration = loadLanguageConfigFromString(""" + { + "comments": { + "lineComment": { + "comment": "#", + "noIndent": true + } + } + }"""); + + assertThat(castNonNull(languageConfiguration.getComments()).lineComment).isEqualTo("#"); + } + @Test void testLanguagePackLangConfigs() throws IOException { final var count = new AtomicInteger();