From d7eb53335ae7b0a1e1003d93d1df9d89acb3a2bf Mon Sep 17 00:00:00 2001 From: Alexey Alekhin Date: Thu, 12 Apr 2018 18:02:40 +0200 Subject: [PATCH] Use absolute/relative paths more consistently --- .../scala/scala/meta/metals/MetalsServices.scala | 2 +- .../scala/scala/meta/metals/Semanticdbs.scala | 5 +++-- .../main/scala/scala/meta/metals/Workspace.scala | 9 ++++----- .../meta/metals/compiler/CompilerConfig.scala | 16 ++++++++++------ 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/metals/src/main/scala/scala/meta/metals/MetalsServices.scala b/metals/src/main/scala/scala/meta/metals/MetalsServices.scala index a88b068e6dc..87e31a6a9ff 100644 --- a/metals/src/main/scala/scala/meta/metals/MetalsServices.scala +++ b/metals/src/main/scala/scala/meta/metals/MetalsServices.scala @@ -478,7 +478,7 @@ class MetalsServices( path: AbsolutePath )(fallback: => Unit): Unit = { logger.info(s"File $path changed") - path.toNIO match { + path.toRelative(cwd) match { case Semanticdbs.File() => fileSystemSemanticdbSubscriber.onNext(path) case CompilerConfig.File() => diff --git a/metals/src/main/scala/scala/meta/metals/Semanticdbs.scala b/metals/src/main/scala/scala/meta/metals/Semanticdbs.scala index 0a8a8ae5c39..5ef8e55e6fb 100644 --- a/metals/src/main/scala/scala/meta/metals/Semanticdbs.scala +++ b/metals/src/main/scala/scala/meta/metals/Semanticdbs.scala @@ -12,16 +12,17 @@ import scala.tools.nsc.reporters.StoreReporter import scala.util.control.NonFatal import scala.{meta => m} import com.typesafe.scalalogging.LazyLogging -import java.nio.file.Path import org.langmeta.inputs.Input import org.langmeta.internal.io.PathIO import org.langmeta.internal.semanticdb.schema.Database import org.langmeta.io.AbsolutePath +import org.langmeta.io.RelativePath object Semanticdbs extends LazyLogging { object File { - def unapply(path: Path): Boolean = PathIO.extension(path) == "semanticdb" + def unapply(path: RelativePath): Boolean = + PathIO.extension(path.toNIO) == "semanticdb" } def toSemanticdb( diff --git a/metals/src/main/scala/scala/meta/metals/Workspace.scala b/metals/src/main/scala/scala/meta/metals/Workspace.scala index 87eede43527..4044744f5d1 100644 --- a/metals/src/main/scala/scala/meta/metals/Workspace.scala +++ b/metals/src/main/scala/scala/meta/metals/Workspace.scala @@ -7,14 +7,13 @@ import java.nio.file.SimpleFileVisitor import java.nio.file.attribute.BasicFileAttributes import org.langmeta.internal.io.FileIO import org.langmeta.io.AbsolutePath -import org.langmeta.io.RelativePath import scala.meta.metals.compiler.CompilerConfig import scala.meta.metals.sbtserver.SbtServer object Workspace { def compilerConfigFiles(cwd: AbsolutePath): Iterable[AbsolutePath] = { - val configDir = cwd.resolve(RelativePath(CompilerConfig.Directory)) + val configDir = CompilerConfig.dir(cwd) if (configDir.isDirectory) { FileIO.listAllFilesRecursively(configDir) } else { @@ -34,9 +33,9 @@ object Workspace { file: Path, attrs: BasicFileAttributes ): FileVisitResult = { - file match { - case Semanticdbs.File() => - action(AbsolutePath(file)) + val absPath = AbsolutePath(file) + absPath.toRelative(cwd) match { + case Semanticdbs.File() => action(absPath) case _ => // ignore, to avoid spamming console. } FileVisitResult.CONTINUE diff --git a/metals/src/main/scala/scala/meta/metals/compiler/CompilerConfig.scala b/metals/src/main/scala/scala/meta/metals/compiler/CompilerConfig.scala index 6f87d54d763..7acb06c1863 100644 --- a/metals/src/main/scala/scala/meta/metals/compiler/CompilerConfig.scala +++ b/metals/src/main/scala/scala/meta/metals/compiler/CompilerConfig.scala @@ -6,9 +6,9 @@ import java.util.Properties import scala.tools.nsc.settings.ScalaVersion import scala.tools.nsc.settings.SpecificScalaVersion import com.typesafe.scalalogging.LazyLogging -import java.nio.file.Path import org.langmeta.internal.io.PathIO import org.langmeta.io.AbsolutePath +import org.langmeta.io.RelativePath import scala.util.control.NonFatal /** @@ -58,12 +58,16 @@ case class CompilerConfig( } object CompilerConfig extends LazyLogging { - val Directory: Path = Paths.get(".metals").resolve("buildinfo") + private val relativeDir: RelativePath = + RelativePath(".metals").resolve("buildinfo") + + def dir(cwd: AbsolutePath): AbsolutePath = + cwd.resolve(relativeDir) + object File { - def unapply(path: Path): Boolean = { - Files.exists(path) && - path.getParent.getParent.endsWith(Directory) && - PathIO.extension(path) == "properties" + def unapply(path: RelativePath): Boolean = { + path.toNIO.startsWith(relativeDir.toNIO) && + PathIO.extension(path.toNIO) == "properties" } }