Skip to content

Commit

Permalink
Fixes after review
Browse files Browse the repository at this point in the history
  • Loading branch information
kpbochenek committed Feb 11, 2020
1 parent 9f35c8c commit b0f9eb8
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package scala.meta.internal.implementation

import org.eclipse.lsp4j.Location
import scala.meta.internal.mtags.Semanticdbs
import scala.meta.internal.mtags.{Symbol => MSymbol}
import scala.meta.internal.metals.MetalsEnrichments._
Expand All @@ -11,19 +10,24 @@ 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.{Buffers, BuildTargets, DefinitionProvider, PositionInFile, TokenEditDistance}
import scala.meta.internal.metals.Buffers
import scala.meta.internal.metals.BuildTargets
import scala.meta.internal.metals.DefinitionProvider
import scala.meta.internal.metals.PositionInFile
import scala.meta.internal.metals.TokenEditDistance
import scala.meta.internal.semanticdb.Scala._
import scala.meta.internal.semanticdb.TypeSignature
import scala.collection.mutable
import scala.meta.internal.symtab.GlobalSymbolTable
import scala.util.control.NonFatal
import scala.meta.internal.mtags.Mtags
import java.util.concurrent.ConcurrentLinkedQueue
import java.util.concurrent.ConcurrentHashMap
import java.nio.file.Path
import org.eclipse.lsp4j.Location

final class ImplementationProvider(
semanticdbs: Semanticdbs,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -920,7 +920,10 @@ class MetalsLanguageServer(
position: TextDocumentPositionParams
): CompletableFuture[util.List[Location]] =
CancelTokens { _ =>
val positionInFile = PositionInFile(position.getTextDocument.getUri.toAbsolutePath, position.getPosition)
val positionInFile = PositionInFile(
position.getTextDocument.getUri.toAbsolutePath,
position.getPosition
)
implementationProvider.implementations(positionInFile).asJava
}

Expand Down Expand Up @@ -1057,8 +1060,12 @@ class MetalsLanguageServer(
newParams match {
case None =>
case Some(p) =>
val positionInFile = PositionInFile(p.getTextDocument.getUri.toAbsolutePath, p.getPosition)
val newResult = referencesProvider.references(positionInFile, p.getContext.isIncludeDeclaration)
val positionInFile = PositionInFile(
p.getTextDocument.getUri.toAbsolutePath,
p.getPosition
)
val newResult = referencesProvider
.references(positionInFile, p.getContext.isIncludeDeclaration)
val diff = newResult.locations.length - result.locations.length
val isSameSymbol = newResult.symbol == result.symbol
if (isSameSymbol && diff > 0) {
Expand All @@ -1074,8 +1081,14 @@ class MetalsLanguageServer(
}
def referencesResult(params: ReferenceParams): ReferencesResult = {
val timer = new Timer(time)
val positionInFile = PositionInFile(params.getTextDocument.getUri.toAbsolutePath, params.getPosition)
val result = referencesProvider.references(positionInFile, params.getContext.isIncludeDeclaration)
val positionInFile = PositionInFile(
params.getTextDocument.getUri.toAbsolutePath,
params.getPosition
)
val result = referencesProvider.references(
positionInFile,
params.getContext.isIncludeDeclaration
)
if (config.statistics.isReferences) {
if (result.symbol.isEmpty) {
scribe.info(s"time: found 0 references in $timer")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,13 @@ final class ReferenceProvider(
resizeReferencedPackages()
}

def references(positionInFile: PositionInFile, includeDeclaration: Boolean): ReferencesResult = {
semanticdbs.textDocument(positionInFile.filePath).documentIncludingStale match {
def references(
positionInFile: PositionInFile,
includeDeclaration: Boolean
): ReferencesResult = {
semanticdbs
.textDocument(positionInFile.filePath)
.documentIncludingStale match {
case Some(doc) =>
val ResolvedSymbolOccurrence(distance, maybeOccurrence) =
definition.positionOccurrence(
Expand All @@ -89,7 +94,12 @@ final class ReferenceProvider(
} else {
ReferencesResult(
occurrence.symbol,
allInheritanceReferences(occurrence, doc, positionInFile, _ => true)
allInheritanceReferences(
occurrence,
doc,
positionInFile,
_ => true
)
)
}
case None =>
Expand All @@ -107,7 +117,10 @@ final class ReferenceProvider(
if (shouldCheckImplementation) {
for {
implLoc <- implementation.implementations(positionInFile)
loc <- currentSymbolReferences(locationToPositionInFile(implLoc), includeDeclaration = true).locations
loc <- currentSymbolReferences(
locationToPositionInFile(implLoc),
includeDeclaration = true
).locations
} yield loc
} else {
Nil
Expand Down Expand Up @@ -152,15 +165,21 @@ final class ReferenceProvider(
}

private def currentSymbolReferences(
positionInFile: PositionInFile,
includeDeclaration: Boolean,
checkMatchesText: Boolean = false,
includeSynthetics: Synthetic => Boolean = _ => true
positionInFile: PositionInFile,
includeDeclaration: Boolean,
checkMatchesText: Boolean = false,
includeSynthetics: Synthetic => Boolean = _ => true
): ReferencesResult = {
val referencesResult = for {
doc <- semanticdbs.textDocument(positionInFile.filePath).documentIncludingStale
doc <- semanticdbs
.textDocument(positionInFile.filePath)
.documentIncludingStale
ResolvedSymbolOccurrence(distance, maybeOccurrence) = definition
.positionOccurrence(positionInFile.filePath, positionInFile.position, doc)
.positionOccurrence(
positionInFile.filePath,
positionInFile.position,
doc
)
occurrence <- maybeOccurrence
alternatives = referenceAlternatives(doc, occurrence)
locations = currentSymbolReferences(
Expand Down Expand Up @@ -317,7 +336,10 @@ final class ReferenceProvider(
.fromSymbol(companionSymbol)
.asScala
if loc.getUri.isScalaFilename
companionLocs <- currentSymbolReferences(locationToPositionInFile(loc), includeDeclaration = false).locations :+ loc
companionLocs <- currentSymbolReferences(
locationToPositionInFile(loc),
includeDeclaration = false
).locations :+ loc
} yield companionLocs
results.toList
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package scala.meta.internal.rename
import scala.meta.internal.metals.{Buffers, Compilations, DefinitionProvider, MetalsLanguageClient, PositionInFile, ReferenceProvider, TextEdits}
import scala.meta.internal.metals.Buffers
import scala.meta.internal.metals.Compilations
import scala.meta.internal.metals.DefinitionProvider
import scala.meta.internal.metals.MetalsLanguageClient
import scala.meta.internal.metals.PositionInFile
import scala.meta.internal.metals.ReferenceProvider
import scala.meta.internal.metals.TextEdits
import org.eclipse.lsp4j.RenameParams
import org.eclipse.lsp4j.WorkspaceEdit
import org.eclipse.lsp4j.TextDocumentPositionParams
import org.eclipse.lsp4j.TextEdit

import scala.meta.internal.metals.MetalsEnrichments._
import scala.meta.internal.mtags.{Symbol => MSymbol}
import scala.meta.internal.semanticdb.Scala._
Expand All @@ -17,13 +22,11 @@ import org.eclipse.lsp4j.{Range => LSPRange}
import org.eclipse.lsp4j.jsonrpc.messages.{Either => LSPEither}
import java.net.URI
import java.nio.file.Paths

import org.eclipse.lsp4j.TextDocumentEdit
import org.eclipse.lsp4j.VersionedTextDocumentIdentifier
import org.eclipse.lsp4j.ResourceOperation
import org.eclipse.lsp4j.RenameFile
import java.util.concurrent.ConcurrentLinkedQueue

import scala.meta.internal.async.ConcurrentQueue
import scala.meta.internal.semanticdb.SelectTree
import scala.meta.internal.semanticdb.Synthetic
Expand Down Expand Up @@ -70,10 +73,16 @@ final class RenameProvider(
new WorkspaceEdit()
} else {

val positionInFile = PositionInFile(params.getTextDocument.getUri.toAbsolutePath, params.getPosition)
val positionInFile = PositionInFile(
params.getTextDocument.getUri.toAbsolutePath,
params.getPosition
)

val symbolOccurrence =
definitionProvider.symbolOccurrence(positionInFile.filePath, positionInFile.position)
definitionProvider.symbolOccurrence(
positionInFile.filePath,
positionInFile.position
)
val allReferences = symbolOccurrence match {
case Some((occurrence, doc))
if canRenameSymbol(occurrence.symbol, Some(params.getNewName)) =>
Expand Down

0 comments on commit b0f9eb8

Please sign in to comment.