@@ -8,6 +8,13 @@ import dotty.tools.dotc.semanticdb.Scala3.{_, given _}
88
99object Tools :
1010
11+ /** Converts a Path to a String that is URI encoded, without forcing absolute paths. */
12+ def mkURIstring (path : Path ): String =
13+ // Calling `.toUri` on a relative path will convert it to absolute. Iteration through its parts instead preserves
14+ // the resulting URI as relative.
15+ val uriParts = for part <- path.asScala yield new java.net.URI (null , null , part.toString, null )
16+ uriParts.mkString(" /" )
17+
1118 /** Load SemanticDB TextDocument for a single Scala source file
1219 *
1320 * @param scalaAbsolutePath Absolute path to a Scala source file.
@@ -19,16 +26,16 @@ object Tools:
1926 scalaRelativePath : Path ,
2027 semanticdbAbsolutePath : Path
2128 ): TextDocument =
22- val reluri = scalaRelativePath.toString
29+ val reluri = mkURIstring( scalaRelativePath)
2330 val sdocs = parseTextDocuments(semanticdbAbsolutePath)
2431 sdocs.documents.find(_.uri == reluri) match
25- case None => throw new NoSuchElementException (reluri )
32+ case None => throw new NoSuchElementException (s " $scalaRelativePath " )
2633 case Some (document) =>
2734 val text = new String (Files .readAllBytes(scalaAbsolutePath), StandardCharsets .UTF_8 )
2835 // Assert the SemanticDB payload is in-sync with the contents of the Scala file on disk.
2936 val md5FingerprintOnDisk = internal.MD5 .compute(text)
3037 if document.md5 != md5FingerprintOnDisk
31- throw new IllegalArgumentException (" stale semanticdb: " + reluri )
38+ throw new IllegalArgumentException (s " stale semanticdb: $scalaRelativePath " )
3239 else
3340 // Update text document to include full text contents of the file.
3441 document.copy(text = text)
0 commit comments