diff --git a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java index 84855f3f4..767a4c3bd 100644 --- a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java +++ b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java @@ -13,8 +13,12 @@ *******************************************************************************/ package org.eclipse.lsp4e.test.edit; -import static org.junit.jupiter.api.Assertions.*; -import static org.junit.jupiter.api.Assumptions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -31,6 +35,7 @@ import java.util.List; import java.util.Random; import java.util.UUID; +import java.util.stream.Stream; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.resources.IFile; @@ -40,6 +45,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextViewer; import org.eclipse.lsp4e.LSPEclipseUtils; @@ -50,6 +56,8 @@ import org.eclipse.lsp4j.CompletionTriggerKind; import org.eclipse.lsp4j.CreateFile; import org.eclipse.lsp4j.Location; +import org.eclipse.lsp4j.MarkupContent; +import org.eclipse.lsp4j.MarkupKind; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.RenameFile; @@ -71,6 +79,9 @@ import org.junit.jupiter.api.condition.OS; import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; public class LSPEclipseUtilsTest extends AbstractTestWithProject { @@ -612,4 +623,19 @@ public void parseRange_shouldReturnNullRange_NoFragment() { Range actual = LSPEclipseUtils.parseRange("file:///a/b"); assertNull(actual); } + + public static Stream getHtmlDocString() { + return Stream.of( // + Arguments.of(Either.forLeft(null), null), // + Arguments.of(Either.forLeft("test"), "

test

"), // + Arguments.of(Either.forRight(new MarkupContent(MarkupKind.MARKDOWN, "# hi!")), "

hi!

\n") // + ); + } + + @ParameterizedTest + @MethodSource + void getHtmlDocString(Either<@Nullable String, MarkupContent> arg, String expected) throws Exception { + assertEquals(expected, LSPEclipseUtils.getHtmlDocString(arg)); + } + } diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java index 2a14d8874..dd3c78e37 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java @@ -21,7 +21,7 @@ *******************************************************************************/ package org.eclipse.lsp4e; -import static org.eclipse.lsp4e.internal.NullSafetyHelper.*; +import static org.eclipse.lsp4e.internal.NullSafetyHelper.castNonNull; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -48,9 +48,6 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import org.commonmark.node.Node; -import org.commonmark.parser.Parser; -import org.commonmark.renderer.html.HtmlRenderer; import org.eclipse.core.filebuffers.FileBuffers; import org.eclipse.core.filebuffers.IFileBuffer; import org.eclipse.core.filebuffers.ITextFileBuffer; @@ -92,6 +89,7 @@ import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.lsp4e.internal.ArrayUtil; import org.eclipse.lsp4e.internal.DocumentInputStream; +import org.eclipse.lsp4e.internal.MarkdownUtil; import org.eclipse.lsp4e.internal.ResourceForUriCache; import org.eclipse.lsp4e.refactoring.CreateFileChange; import org.eclipse.lsp4e.refactoring.DeleteExternalFile; @@ -1493,10 +1491,7 @@ public static List getDocumentContentTypes(IDocument document) { String kind = markupContent.getKind(); if (MARKDOWN.equalsIgnoreCase(kind) || MD.equalsIgnoreCase(kind)) { try { - Parser parser = Parser.builder().build(); - Node document = parser.parse(text); - HtmlRenderer renderer = HtmlRenderer.builder().build(); - return renderer.render(document); + return MarkdownUtil.renderToHtml(text); } catch (Exception e) { LanguageServerPlugin.logError(e); return htmlParagraph(text); diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/internal/MarkdownUtil.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/internal/MarkdownUtil.java index 209250fea..9b4979c5b 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/internal/MarkdownUtil.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/internal/MarkdownUtil.java @@ -27,7 +27,7 @@ public class MarkdownUtil { private static final List EXTENSIONS = List.of(TablesExtension.create()); /** - * Singleton instance, as both classes are thread-safe, see + * Singleton instances, as both classes are thread-safe, see * https://github.com/commonmark/commonmark-java?tab=readme-ov-file#thread-safety */ private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS).build();