Skip to content

Commit

Permalink
Finding Refs and Rename works with inheritance
Browse files Browse the repository at this point in the history
  • Loading branch information
kpbochenek committed Feb 7, 2020
1 parent 6bc1d46 commit 87330da
Show file tree
Hide file tree
Showing 10 changed files with 408 additions and 150 deletions.
Original file line number Diff line number Diff line change
@@ -1,19 +1,35 @@
package scala.meta.internal.implementation

import java.nio.file.Path
import java.util.concurrent.{ConcurrentHashMap, ConcurrentLinkedQueue}

import org.eclipse.lsp4j.{Location, TextDocumentPositionParams}
import org.eclipse.lsp4j.Location
import org.eclipse.lsp4j.TextDocumentPositionParams

import scala.collection.mutable
import scala.meta.internal.mtags.Semanticdbs
import scala.meta.internal.mtags.{Symbol => MSymbol}
import scala.meta.internal.metals.MetalsEnrichments._
import scala.meta.internal.metals.{Buffers, BuildTargets, DefinitionProvider, TokenEditDistance}
import scala.meta.internal.mtags.{GlobalSymbolIndex, Mtags, Semanticdbs, Symbol => MSymbol}
import scala.meta.io.AbsolutePath
import scala.meta.internal.semanticdb.TextDocuments
import scala.meta.internal.semanticdb.SymbolOccurrence
import scala.meta.internal.semanticdb.ClassSignature
import scala.meta.internal.semanticdb.TypeRef
import scala.meta.internal.semanticdb.Signature
import scala.meta.internal.semanticdb.TextDocument
import java.util.concurrent.ConcurrentHashMap
import java.nio.file.Path

import scala.meta.internal.semanticdb.SymbolInformation
import scala.meta.internal.semanticdb.MethodSignature
import scala.meta.internal.mtags.GlobalSymbolIndex
import scala.meta.internal.metals.BuildTargets
import scala.meta.internal.metals.Buffers
import scala.meta.internal.metals.DefinitionProvider
import scala.meta.internal.metals.TokenEditDistance
import scala.meta.internal.semanticdb.Scala._
import scala.meta.internal.semanticdb.{ClassSignature, MethodSignature, Signature, SymbolInformation, SymbolOccurrence, TextDocument, TextDocuments, TypeRef, TypeSignature}
import scala.meta.internal.semanticdb.TypeSignature
import scala.collection.mutable
import scala.meta.internal.symtab.GlobalSymbolTable
import scala.meta.io.AbsolutePath
import scala.util.control.NonFatal
import scala.meta.internal.mtags.Mtags
import java.util.concurrent.ConcurrentLinkedQueue

final class ImplementationProvider(
semanticdbs: Semanticdbs,
Expand Down Expand Up @@ -127,9 +143,10 @@ final class ImplementationProvider(
}

def topMethodParents(
symbol: String,
textDocument: TextDocument
): Seq[(Location, ClassSignature)] = {
doc: TextDocument,
symbol: String
): Seq[Location] = {
val textDocument = findSemanticDbForSymbol(symbol).getOrElse(doc)

def findClassInfo(owner: String) = {
if (owner.nonEmpty) {
Expand Down Expand Up @@ -163,7 +180,7 @@ final class ImplementationProvider(
sig: ClassSignature,
childInfo: SymbolInformation,
childASF: Map[String, String] = Map.empty
): Seq[(Location, ClassSignature)] = {
): Seq[Location] = {
sig.parents.flatMap {
case parentSym: TypeRef =>
val parentTextDocument = findSemanticDbForSymbol(parentSym.symbol)
Expand Down Expand Up @@ -205,7 +222,7 @@ final class ImplementationProvider(
asSeenFrom: Map[String, String],
search: String => Option[SymbolInformation],
parentTextDocument: Option[TextDocument]
): Option[(Location, ClassSignature)] = {
): Option[Location] = {
val matchingSymbol = MethodImplementation.findParentSymbol(
childInfo,
sig,
Expand All @@ -229,7 +246,7 @@ final class ImplementationProvider(
buffer
)
revised <- distance.toRevised(range.toLSP)
} yield (new Location(source.toNIO.toUri().toString(), revised), sig)
} yield new Location(source.toNIO.toUri.toString, revised)
}

private def symbolLocationsFromContext(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
package scala.meta.internal.metals

import java.util.Collections
import java.{util => ju}
import java.util.Collections

import org.eclipse.lsp4j.{Location, Position, TextDocumentPositionParams}
import org.eclipse.lsp4j.TextDocumentPositionParams
import org.eclipse.lsp4j.Location

import scala.concurrent.{ExecutionContext, Future}
import scala.meta.pc.CancelToken
import scala.meta.inputs.Input
import scala.meta.internal.metals.MetalsEnrichments._
import scala.meta.internal.mtags._
import scala.meta.internal.mtags.GlobalSymbolIndex
import scala.meta.internal.mtags.Mtags
import scala.meta.internal.mtags.Semanticdbs
import scala.meta.internal.mtags.Symbol
import scala.meta.internal.mtags.SymbolDefinition
import scala.meta.internal.semanticdb.Scala._
import scala.meta.internal.semanticdb.{SymbolOccurrence, TextDocument}
import scala.meta.internal.semanticdb.TextDocument
import scala.meta.io.AbsolutePath
import scala.meta.pc.CancelToken
import scala.concurrent.Future
import scala.concurrent.ExecutionContext
import scala.meta.internal.semanticdb.SymbolOccurrence
import org.eclipse.lsp4j.Position

/**
* Implements goto definition that works even in code that doesn't parse.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package scala.meta.internal.metals

import org.eclipse.lsp4j.{DocumentHighlight, DocumentHighlightKind, TextDocumentPositionParams}
import org.eclipse.lsp4j.DocumentHighlight
import org.eclipse.lsp4j.DocumentHighlightKind
import org.eclipse.lsp4j.TextDocumentPositionParams

import scala.meta.internal.metals.MetalsEnrichments._
import scala.meta.internal.mtags.DefinitionAlternatives.GlobalSymbol
import scala.meta.internal.mtags.{Semanticdbs, Symbol}
import scala.meta.internal.semanticdb.Scala.{Descriptor, Symbols}
import scala.meta.internal.semanticdb.{SymbolInformation, SymbolOccurrence, TextDocument}
import scala.meta.internal.mtags.Semanticdbs
import scala.meta.internal.mtags.Symbol
import scala.meta.internal.semanticdb.Scala.Descriptor
import scala.meta.internal.semanticdb.Scala.Symbols
import scala.meta.internal.semanticdb.SymbolInformation
import scala.meta.internal.semanticdb.SymbolOccurrence
import scala.meta.internal.semanticdb.TextDocument

final class DocumentHighlightProvider(
definitionProvider: DefinitionProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,8 @@ class MetalsLanguageServer(
semanticdbs,
buffers,
definitionProvider,
implementationProvider
implementationProvider,
languageClient
)
renameProvider = new RenameProvider(
referencesProvider,
Expand Down Expand Up @@ -1016,7 +1017,9 @@ class MetalsLanguageServer(
def references(
params: ReferenceParams
): CompletableFuture[util.List[Location]] =
CancelTokens { _ => referencesSync(params) }
CancelTokens { _ =>
referencesSync(params)
}

def referencesSync(params: ReferenceParams): util.List[Location] =
referencesResult(params).locations.asJava
Expand Down
Loading

0 comments on commit 87330da

Please sign in to comment.