From ad53d202d1fe6c1e9266325d5c69ae1e0e62a04e Mon Sep 17 00:00:00 2001 From: Kacper Korban Date: Wed, 9 Jun 2021 16:04:02 +0200 Subject: [PATCH] Fix escaping illegal tokens in snippet renderer in scaladoc --- .../tasty/comments/markdown/SnippetRenderer.scala | 8 ++++---- scaladoc/src/dotty/tools/scaladoc/util/html.scala | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scaladoc/src/dotty/tools/scaladoc/tasty/comments/markdown/SnippetRenderer.scala b/scaladoc/src/dotty/tools/scaladoc/tasty/comments/markdown/SnippetRenderer.scala index 0c480fe5ced9..76403af24f7c 100644 --- a/scaladoc/src/dotty/tools/scaladoc/tasty/comments/markdown/SnippetRenderer.scala +++ b/scaladoc/src/dotty/tools/scaladoc/tasty/comments/markdown/SnippetRenderer.scala @@ -3,12 +3,12 @@ package dotty.tools.scaladoc.tasty.comments.markdown import com.vladsch.flexmark.html._ import dotty.tools.scaladoc.snippets._ +import dotty.tools.scaladoc.util.HTML._ case class SnippetLine(content: String, lineNo: Int, classes: Set[String] = Set.empty, messages: Seq[String] = Seq.empty): def withClass(cls: String) = this.copy(classes = classes + cls) - private def escapeQuotes(msg: String): String = msg.replace("\"", """) def toHTML = - val label = if messages.nonEmpty then s"""label="${messages.map(escapeQuotes).mkString("\n")}"""" else "" + val label = if messages.nonEmpty then s"""label="${messages.map(_.escapeReservedTokens).mkString("\n")}"""" else "" s"""$content""" object SnippetRenderer: @@ -89,14 +89,14 @@ object SnippetRenderer: private def wrapCodeLines(codeLines: Seq[String]): Seq[SnippetLine] = val snippetLines = codeLines.zipWithIndex.map { - case (content, idx) => SnippetLine(content, idx) + case (content, idx) => SnippetLine(content.escapeReservedTokens, idx) } wrapHiddenSymbols .andThen(wrapSingleLineComments) .andThen(wrapMultiLineComments) .apply(snippetLines) - private def addCompileMessages(messages: Seq[SnippetCompilerMessage])(codeLines: Seq[SnippetLine]): Seq[SnippetLine] = //TODO add tooltips and stuff + private def addCompileMessages(messages: Seq[SnippetCompilerMessage])(codeLines: Seq[SnippetLine]): Seq[SnippetLine] = val messagesDict = messages.filter(_.position.nonEmpty).groupBy(_.position.get.relativeLine).toMap[Int, Seq[SnippetCompilerMessage]] codeLines.map { line => messagesDict.get(line.lineNo) match diff --git a/scaladoc/src/dotty/tools/scaladoc/util/html.scala b/scaladoc/src/dotty/tools/scaladoc/util/html.scala index 4fe69cd1de3b..63810af47fcd 100644 --- a/scaladoc/src/dotty/tools/scaladoc/util/html.scala +++ b/scaladoc/src/dotty/tools/scaladoc/util/html.scala @@ -35,7 +35,7 @@ object HTML: sb.append(s"") sb - extension (s: String) private def escapeReservedTokens: String = + extension (s: String) def escapeReservedTokens: String = s.replace("&", "&") .replace("<", "<") .replace(">", ">")