From cd4a18be16edf4e79fb975bf7cdfa94296f8e94f Mon Sep 17 00:00:00 2001 From: Katarzyna Marek Date: Thu, 27 Jun 2024 17:14:19 +0200 Subject: [PATCH] fix: try single decode for Windows when `NoSuchFileException` --- .../meta/internal/mtags/MtagsEnrichments.scala | 3 ++- tests/mtest/src/main/scala/tests/Assertions.scala | 10 ++++++++-- .../test/scala/tests/MetalsEnrichmentsSuite.scala | 13 +++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/mtags/src/main/scala-2/scala/meta/internal/mtags/MtagsEnrichments.scala b/mtags/src/main/scala-2/scala/meta/internal/mtags/MtagsEnrichments.scala index bebdc9d40b0..2810ec411a6 100644 --- a/mtags/src/main/scala-2/scala/meta/internal/mtags/MtagsEnrichments.scala +++ b/mtags/src/main/scala-2/scala/meta/internal/mtags/MtagsEnrichments.scala @@ -154,7 +154,8 @@ trait MtagsEnrichments extends ScalametaCommonEnrichments { else f(value) } catch { // fallback to try without decoding - case _: FileSystemNotFoundException if Properties.isWin => + case _: NoSuchFileException | _: FileSystemNotFoundException + if Properties.isWin => f(value) // prevents infinity recursion and double check for double escaped % case _: NoSuchFileException | _: FileSystemNotFoundException diff --git a/tests/mtest/src/main/scala/tests/Assertions.scala b/tests/mtest/src/main/scala/tests/Assertions.scala index 07e8dd470f2..5435b7f937f 100644 --- a/tests/mtest/src/main/scala/tests/Assertions.scala +++ b/tests/mtest/src/main/scala/tests/Assertions.scala @@ -22,13 +22,19 @@ trait Assertions extends munit.Assertions { def assertContains(string: String, substring: String)(implicit loc: Location ): Unit = { - assert(string.contains(substring)) + assert( + string.contains(substring), + s""""$string" should contain "$substring"""" + ) } def assertNotContains(string: String, substring: String)(implicit loc: Location ): Unit = { - assert(!string.contains(substring)) + assert( + !string.contains(substring), + s""""$string" should not contain "$substring"""" + ) } def assertDiffNotEqual[T]( diff --git a/tests/unit/src/test/scala/tests/MetalsEnrichmentsSuite.scala b/tests/unit/src/test/scala/tests/MetalsEnrichmentsSuite.scala index 540f0bdb82b..3e6192b06af 100644 --- a/tests/unit/src/test/scala/tests/MetalsEnrichmentsSuite.scala +++ b/tests/unit/src/test/scala/tests/MetalsEnrichmentsSuite.scala @@ -2,6 +2,7 @@ package tests import java.io.FileOutputStream import java.nio.file.Files +import java.nio.file.NoSuchFileException import java.util.zip.ZipOutputStream import scala.meta.internal.metals.MetalsEnrichments._ @@ -55,4 +56,16 @@ class MetalsEnrichmentsSuite extends BaseSuite { } } + if (isWindows) { + test("encode-decode-at") { + val uri = + "jar:file%3A///C%3A/Users/niander/scoop/persist/coursier/cache/https/myproj%2540myorg.pkgs.visualstudio.com/myproj/_packaging/MyMavenFeed/maven/v1/com/azure/azure-security-keyvault-certificates/4.6.3/azure-security-keyvault-certificates-4.6.3-sources.jar%21/com/azure/security/keyvault/certificates/CertificateClient.java" + try { + uri.toAbsolutePath + } catch { + case e: NoSuchFileException => assertNotContains(e.getMessage(), "@") + } + } + } + }