From f9660d5f9780dda91b26b3bed0225a92a7abfd99 Mon Sep 17 00:00:00 2001 From: vzmerr <109077949+vzmerr@users.noreply.github.com> Date: Wed, 20 Jul 2022 11:04:17 +0200 Subject: [PATCH] Multiline string enhance (#4168) optimise the call to wasTripleQuoted, so that it would only get called once remove escaping of " for multilines --- .../metals/formatting/MultilineString.scala | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/metals/src/main/scala/scala/meta/internal/metals/formatting/MultilineString.scala b/metals/src/main/scala/scala/meta/internal/metals/formatting/MultilineString.scala index fbdaae08b39..c79a65c1642 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/formatting/MultilineString.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/formatting/MultilineString.scala @@ -93,28 +93,19 @@ case class MultilineString(userConfig: () => UserConfiguration) line: String, ): Option[(Int, Boolean)] = { var lastTripleQuote = -1 - var escaped = false var tripleQuoteClosed = closedFromPreviousLines var quoteNum = 0 for (i <- 0 until line.size) { val char = line(i) if (char == '"') { - if (!escaped) { - quoteNum = quoteNum + 1 - if (quoteNum == 3) { - lastTripleQuote = i - tripleQuoteClosed = !tripleQuoteClosed - quoteNum = 0 - } - } else { - escaped = !escaped + quoteNum = quoteNum + 1 + if (quoteNum == 3) { + lastTripleQuote = i + tripleQuoteClosed = !tripleQuoteClosed + quoteNum = 0 } - } else if (char == '\\') { - quoteNum = 0 - escaped = !escaped } else { quoteNum = 0 - escaped = false } } if (lastTripleQuote != -1) Some((lastTripleQuote, tripleQuoteClosed)) @@ -441,18 +432,15 @@ case class MultilineString(userConfig: () => UserConfiguration) .find(_.nonEmpty) case (None, "\"") if onlyFourQuotes(splitLines, position) => Some(replaceWithSixQuotes(position)) - case (None, "\n") - if doubleQuoteNotClosed(splitLines, position) && !wasTripleQuoted( - splitLines, - position, - ) => - Some(fixStringNewline(position, splitLines)) case (None, "\n") if wasTripleQuoted( splitLines, position, ) => Some(addTripleQuote(position)) + case (None, "\n") if doubleQuoteNotClosed(splitLines, position) => + Some(fixStringNewline(position, splitLines)) + case _ => None } }