From 7c28db7e0b2cac44218e5b2c99ad860ab81e276e Mon Sep 17 00:00:00 2001 From: kasiaMarek Date: Fri, 10 Jan 2025 16:38:04 +0100 Subject: [PATCH 1/3] improvement: look for definition in pc only for local symbols in the current tree --- .../internal/pc/PcDefinitionProvider.scala | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/mtags/src/main/scala-3/scala/meta/internal/pc/PcDefinitionProvider.scala b/mtags/src/main/scala-3/scala/meta/internal/pc/PcDefinitionProvider.scala index c8dd4cd124c..cf2426e1362 100644 --- a/mtags/src/main/scala-3/scala/meta/internal/pc/PcDefinitionProvider.scala +++ b/mtags/src/main/scala-3/scala/meta/internal/pc/PcDefinitionProvider.scala @@ -1,6 +1,8 @@ package scala.meta.internal.pc +import java.net.URI import java.nio.file.Paths +import java.time.LocalDateTime import java.util.ArrayList import scala.annotation.tailrec @@ -19,7 +21,9 @@ import dotty.tools.dotc.core.Flags import dotty.tools.dotc.core.Flags.ModuleClass import dotty.tools.dotc.core.Symbols.* import dotty.tools.dotc.interactive.Interactive +import dotty.tools.dotc.interactive.Interactive.Include import dotty.tools.dotc.interactive.InteractiveDriver +import dotty.tools.dotc.transform.SymUtils.isLocal import dotty.tools.dotc.util.SourceFile import dotty.tools.dotc.util.SourcePosition import org.eclipse.lsp4j.Location @@ -51,10 +55,10 @@ class PcDefinitionProvider( given ctx: Context = driver.localContext(params) val indexedContext = IndexedContext(ctx) val result = - if findTypeDef then findTypeDefinitions(path, pos, indexedContext) - else findDefinitions(path, pos, indexedContext) + if findTypeDef then findTypeDefinitions(path, pos, indexedContext, uri) + else findDefinitions(path, pos, indexedContext, uri) - if result.locations().isEmpty() then fallbackToUntyped(pos)(using ctx) + if result.locations().isEmpty() then fallbackToUntyped(pos, uri)(using ctx) else result end definitions @@ -70,23 +74,24 @@ class PcDefinitionProvider( * @param pos cursor position * @return definition result */ - private def fallbackToUntyped(pos: SourcePosition)(using Context) = + private def fallbackToUntyped(pos: SourcePosition, uri: URI)(using Context) = lazy val untpdPath = NavigateAST .untypedPath(pos.span) .collect { case t: untpd.Tree => t } - definitionsForSymbol(untpdPath.headOption.map(_.symbol).toList, pos) + definitionsForSymbol(untpdPath.headOption.map(_.symbol).toList, uri) end fallbackToUntyped private def findDefinitions( path: List[Tree], pos: SourcePosition, indexed: IndexedContext, + uri: URI, ): DefinitionResult = import indexed.ctx definitionsForSymbol( MetalsInteractive.enclosingSymbols(path, pos, indexed), - pos, + uri ) end findDefinitions @@ -94,6 +99,7 @@ class PcDefinitionProvider( path: List[Tree], pos: SourcePosition, indexed: IndexedContext, + uri: URI, ): DefinitionResult = import indexed.ctx val enclosing = path.expandRangeToEnclosingApply(pos) @@ -106,25 +112,24 @@ class PcDefinitionProvider( case Nil => path.headOption match case Some(value: Literal) => - definitionsForSymbol(List(value.tpe.widen.typeSymbol), pos) + definitionsForSymbol(List(value.tpe.widen.typeSymbol), uri) case _ => DefinitionResultImpl.empty case _ => - definitionsForSymbol(typeSymbols, pos) + definitionsForSymbol(typeSymbols, uri) end findTypeDefinitions private def definitionsForSymbol( symbols: List[Symbol], - pos: SourcePosition, + uri: URI )(using ctx: Context): DefinitionResult = symbols match case symbols @ (sym :: other) => - val isLocal = sym.source == pos.source - if isLocal then + if sym.isLocal then @tailrec def findDefsForSymbol(sym: Symbol): DefinitionResult = - val defs = - Interactive.findDefinitions(List(sym), driver, false, false) + val include = Include.definitions | Include.local + val defs = Interactive.findTreesMatching(driver.openedTrees(uri), include, sym) defs.headOption match case Some(srcTree) => val pos = srcTree.namePos From 2c9cf5e988c5d6c8dc95939441427f90ef922b63 Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Tue, 21 Jan 2025 15:21:24 +0100 Subject: [PATCH 2/3] chore: Increase sbt xmx and do not publish docs for mtags --- bin/test.sh | 4 ++-- build.sbt | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/bin/test.sh b/bin/test.sh index 239c9f9bd59..2ba6fd3c664 100755 --- a/bin/test.sh +++ b/bin/test.sh @@ -15,8 +15,8 @@ cat ~/.local/share/scalacli/bloop/daemon/output rm .jvmopts touch .jvmopts -echo "-Xss4m" >> .jvmopts -echo "-Xmx1G" >> .jvmopts +echo "-Xss4m" >> .jvmopts +echo "-Xmx2G" >> .jvmopts echo "-XX:ReservedCodeCacheSize=1024m" >> .jvmopts echo "-XX:+TieredCompilation" >> .jvmopts echo "-Dfile.encoding=UTF-8" >> .jvmopts diff --git a/build.sbt b/build.sbt index 48847293353..ffcbf396782 100644 --- a/build.sbt +++ b/build.sbt @@ -198,6 +198,7 @@ val sharedScalacOptions = List( ) val sharedSettings = sharedJavacOptions ++ sharedScalacOptions ++ List( + Compile / packageDoc / publishArtifact := false, libraryDependencies ++= crossSetting( scalaVersion.value, if2 = List( @@ -316,8 +317,6 @@ val mtagsSettings = List( (ThisBuild / baseDirectory).value / "mtags", scalaVersion.value, ), - // @note needed to deal with issues with dottyDoc - Compile / doc / sources := Seq.empty, libraryDependencies ++= Seq( "com.lihaoyi" %% "geny" % V.genyVersion, "com.thoughtworks.qdox" % "qdox" % V.qdox, // for java mtags From 31c9c149358ef4dc80afa94e407afa45de204451 Mon Sep 17 00:00:00 2001 From: kasiaMarek Date: Tue, 21 Jan 2025 18:15:07 +0100 Subject: [PATCH 3/3] search using pc in go to def for all defined in the same file --- .../meta/internal/pc/PcDefinitionProvider.scala | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/mtags/src/main/scala-3/scala/meta/internal/pc/PcDefinitionProvider.scala b/mtags/src/main/scala-3/scala/meta/internal/pc/PcDefinitionProvider.scala index cf2426e1362..a8e72ebc293 100644 --- a/mtags/src/main/scala-3/scala/meta/internal/pc/PcDefinitionProvider.scala +++ b/mtags/src/main/scala-3/scala/meta/internal/pc/PcDefinitionProvider.scala @@ -79,7 +79,7 @@ class PcDefinitionProvider( .untypedPath(pos.span) .collect { case t: untpd.Tree => t } - definitionsForSymbol(untpdPath.headOption.map(_.symbol).toList, uri) + definitionsForSymbol(untpdPath.headOption.map(_.symbol).toList, uri, pos) end fallbackToUntyped private def findDefinitions( @@ -91,7 +91,8 @@ class PcDefinitionProvider( import indexed.ctx definitionsForSymbol( MetalsInteractive.enclosingSymbols(path, pos, indexed), - uri + uri, + pos ) end findDefinitions @@ -112,20 +113,22 @@ class PcDefinitionProvider( case Nil => path.headOption match case Some(value: Literal) => - definitionsForSymbol(List(value.tpe.widen.typeSymbol), uri) + definitionsForSymbol(List(value.tpe.widen.typeSymbol), uri, pos) case _ => DefinitionResultImpl.empty case _ => - definitionsForSymbol(typeSymbols, uri) + definitionsForSymbol(typeSymbols, uri, pos) end findTypeDefinitions private def definitionsForSymbol( symbols: List[Symbol], - uri: URI + uri: URI, + pos: SourcePosition )(using ctx: Context): DefinitionResult = symbols match case symbols @ (sym :: other) => - if sym.isLocal then + val isLocal = sym.source == pos.source + if isLocal then @tailrec def findDefsForSymbol(sym: Symbol): DefinitionResult = val include = Include.definitions | Include.local