diff --git a/presentation-compiler/src/main/dotty/tools/pc/AutoImports.scala b/presentation-compiler/src/main/dotty/tools/pc/AutoImports.scala index f9a1dcb15316..18a325b6cf84 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/AutoImports.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/AutoImports.scala @@ -2,7 +2,6 @@ package dotty.tools.pc import scala.annotation.tailrec import scala.jdk.CollectionConverters.* -import scala.meta.internal.mtags.KeywordWrapper import scala.meta.internal.pc.AutoImportPosition import scala.meta.pc.PresentationCompilerConfig diff --git a/presentation-compiler/src/main/dotty/tools/pc/ExtractMethodProvider.scala b/presentation-compiler/src/main/dotty/tools/pc/ExtractMethodProvider.scala index 0534a5471fff..cbdc39a90118 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/ExtractMethodProvider.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/ExtractMethodProvider.scala @@ -51,7 +51,8 @@ final class ExtractMethodProvider( val newctx = driver.currentCtx.fresh.setCompilationUnit(unit) Interactive.contextOfPath(path)(using newctx) val indexedCtx = IndexedContext(locatedCtx) - val printer = ShortenedTypePrinter(search, IncludeDefaultParam.Never)(using indexedCtx) + val printer = + ShortenedTypePrinter(search, IncludeDefaultParam.Never)(using indexedCtx) def prettyPrint(tpe: Type) = def prettyPrintReturnType(tpe: Type): String = tpe match diff --git a/presentation-compiler/src/main/dotty/tools/pc/HoverProvider.scala b/presentation-compiler/src/main/dotty/tools/pc/HoverProvider.scala index 9e8d85063c20..cdd4b273bdcc 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/HoverProvider.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/HoverProvider.scala @@ -89,7 +89,9 @@ object HoverProvider: ctx.fresh.setCompilationUnit(unit) Interactive.contextOfPath(enclosing)(using newctx) case None => ctx - val printer = ShortenedTypePrinter(search, IncludeDefaultParam.Include)(using IndexedContext(printerContext)) + val printer = ShortenedTypePrinter(search, IncludeDefaultParam.Include)( + using IndexedContext(printerContext) + ) MetalsInteractive.enclosingSymbolsWithExpressionType( enclosing, pos, diff --git a/presentation-compiler/src/main/dotty/tools/pc/PcCollector.scala b/presentation-compiler/src/main/dotty/tools/pc/PcCollector.scala index 05652d9c9457..7b9cf7acd4a7 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/PcCollector.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/PcCollector.scala @@ -315,8 +315,8 @@ abstract class PcCollector[T]( case _ => resultAllOccurences().toList def resultAllOccurences(): Set[T] = - def noTreeFilter = (tree: Tree) => true - def noSoughtFilter = (f: Symbol => Boolean) => true + def noTreeFilter = (_: Tree) => true + def noSoughtFilter = (_: Symbol => Boolean) => true traverseSought(noTreeFilter, noSoughtFilter) diff --git a/presentation-compiler/src/main/dotty/tools/pc/PcDefinitionProvider.scala b/presentation-compiler/src/main/dotty/tools/pc/PcDefinitionProvider.scala index 35b8092388e1..f3fb9de3ebd7 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/PcDefinitionProvider.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/PcDefinitionProvider.scala @@ -9,7 +9,6 @@ import scala.meta.pc.DefinitionResult import scala.meta.pc.OffsetParams import scala.meta.pc.SymbolSearch -import dotty.tools.dotc.CompilationUnit import dotty.tools.dotc.ast.NavigateAST import dotty.tools.dotc.ast.tpd.* import dotty.tools.dotc.ast.untpd @@ -43,8 +42,6 @@ class PcDefinitionProvider( uri, SourceFile.virtual(filePath.toString, params.text) ) - val unit = driver.currentCtx.run.units.head - val tree = unit.tpdTree val pos = driver.sourcePosition(params) val path = @@ -56,7 +53,7 @@ class PcDefinitionProvider( if findTypeDef then findTypeDefinitions(path, pos, indexedContext) else findDefinitions(path, pos, indexedContext) - if result.locations().isEmpty() then fallbackToUntyped(unit, pos)(using ctx) + if result.locations().isEmpty() then fallbackToUntyped(pos)(using ctx) else result end definitions @@ -72,8 +69,8 @@ class PcDefinitionProvider( * @param pos cursor position * @return definition result */ - private def fallbackToUntyped(unit: CompilationUnit, pos: SourcePosition)( - using ctx: Context + private def fallbackToUntyped(pos: SourcePosition)(using + ctx: Context ) = lazy val untpdPath = NavigateAST .untypedPath(pos.span) diff --git a/presentation-compiler/src/main/dotty/tools/pc/completions/CompletionProvider.scala b/presentation-compiler/src/main/dotty/tools/pc/completions/CompletionProvider.scala index c6fba914b6fa..4a52299fb89a 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/completions/CompletionProvider.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/completions/CompletionProvider.scala @@ -150,7 +150,10 @@ class CompletionProvider( path: List[Tree], indexedContext: IndexedContext )(using ctx: Context): CompletionItem = - val printer = ShortenedTypePrinter(search, IncludeDefaultParam.ResolveLater)(using indexedContext) + val printer = + ShortenedTypePrinter(search, IncludeDefaultParam.ResolveLater)(using + indexedContext + ) val editRange = completionPos.toEditRange // For overloaded signatures we get multiple symbols, so we need diff --git a/presentation-compiler/src/main/dotty/tools/pc/completions/CompletionValue.scala b/presentation-compiler/src/main/dotty/tools/pc/completions/CompletionValue.scala index 0762ef445193..87aa022bba7d 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/completions/CompletionValue.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/completions/CompletionValue.scala @@ -34,7 +34,9 @@ sealed trait CompletionValue: /** * Label with potentially attached description. */ - def labelWithDescription(printer: ShortenedTypePrinter)(using Context): String = + def labelWithDescription(printer: ShortenedTypePrinter)(using + Context + ): String = label def lspTags(using Context): List[CompletionItemTag] = Nil end CompletionValue @@ -83,7 +85,9 @@ object CompletionValue: else s"${label}${description(printer)}" else s"${label}: ${description(printer)}" - override def description(printer: ShortenedTypePrinter)(using Context): String = + override def description(printer: ShortenedTypePrinter)(using + Context + ): String = printer.completionSymbol(symbol) end Symbolic @@ -111,7 +115,9 @@ object CompletionValue: ) extends Symbolic: override def completionItemKind(using Context): CompletionItemKind = CompletionItemKind.Method - override def description(printer: ShortenedTypePrinter)(using Context): String = + override def description(printer: ShortenedTypePrinter)(using + Context + ): String = s"${printer.completionSymbol(symbol)} (extension)" /** @@ -148,7 +154,9 @@ object CompletionValue: override def insertText: Option[String] = Some(label.replace("$", "$$")) override def completionItemKind(using Context): CompletionItemKind = CompletionItemKind.Field - override def description(printer: ShortenedTypePrinter)(using Context): String = + override def description(printer: ShortenedTypePrinter)(using + Context + ): String = ": " + printer.tpe(tpe) override def labelWithDescription(printer: ShortenedTypePrinter)(using @@ -199,7 +207,9 @@ object CompletionValue: isWorkspace: Boolean = false, isExtension: Boolean = false ) extends Symbolic: - override def description(printer: ShortenedTypePrinter)(using Context): String = + override def description( + printer: ShortenedTypePrinter + )(using Context): String = if isExtension then s"${printer.completionSymbol(symbol)} (extension)" else super.description(printer) end Interpolator @@ -212,7 +222,9 @@ object CompletionValue: ) extends CompletionValue: override def completionItemKind(using Context): CompletionItemKind = CompletionItemKind.Enum - override def description(printer: ShortenedTypePrinter)(using Context): String = + override def description(printer: ShortenedTypePrinter)(using + Context + ): String = desc case class CaseKeyword( @@ -239,7 +251,9 @@ object CompletionValue: override def completionItemKind(using Context): CompletionItemKind = CompletionItemKind.Snippet - override def description(printer: ShortenedTypePrinter)(using Context): String = + override def description(printer: ShortenedTypePrinter)(using + Context + ): String = description override def insertMode: Option[InsertTextMode] = Some(InsertTextMode.AsIs) diff --git a/presentation-compiler/src/main/dotty/tools/pc/completions/KeywordsCompletions.scala b/presentation-compiler/src/main/dotty/tools/pc/completions/KeywordsCompletions.scala index 14017486e96f..a5eb23b26ed3 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/completions/KeywordsCompletions.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/completions/KeywordsCompletions.scala @@ -20,7 +20,7 @@ object KeywordsCompletions: comments: List[Comment] )(using ctx: Context): List[CompletionValue] = lazy val notInComment = - checkIfNotInComment(completionPos.cursorPos, path, comments) + checkIfNotInComment(completionPos.cursorPos, comments) path match case Nil if completionPos.query.isEmpty => @@ -69,9 +69,8 @@ object KeywordsCompletions: private def checkIfNotInComment( pos: SourcePosition, - path: List[Tree], comments: List[Comment] - )(using ctx: Context): Boolean = + ): Boolean = !comments.exists(_.span.contains(pos.span)) private def isPackage(enclosing: List[Tree]): Boolean = diff --git a/presentation-compiler/src/main/dotty/tools/pc/completions/MatchCaseCompletions.scala b/presentation-compiler/src/main/dotty/tools/pc/completions/MatchCaseCompletions.scala index 16c2404e1ff8..0949d050a59c 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/completions/MatchCaseCompletions.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/completions/MatchCaseCompletions.scala @@ -241,7 +241,6 @@ object CaseKeywordCompletion: completionPos, clientSupportsSnippets ) - val result = ListBuffer.empty[CompletionValue] val tpe = selector.tpe.widen.bounds.hi match case tr @ TypeRef(_, _) => tr.underlying case t => t diff --git a/presentation-compiler/src/main/dotty/tools/pc/printer/ShortenedTypePrinter.scala b/presentation-compiler/src/main/dotty/tools/pc/printer/ShortenedTypePrinter.scala index 6110fed44290..da47953355c4 100644 --- a/presentation-compiler/src/main/dotty/tools/pc/printer/ShortenedTypePrinter.scala +++ b/presentation-compiler/src/main/dotty/tools/pc/printer/ShortenedTypePrinter.scala @@ -2,59 +2,52 @@ package dotty.tools.pc.printer import scala.collection.mutable import scala.meta.internal.jdk.CollectionConverters.* -import scala.meta.internal.metals.Report import scala.meta.internal.metals.ReportContext import scala.meta.pc.SymbolDocumentation import scala.meta.pc.SymbolSearch -import scala.util.Failure -import scala.util.Success -import scala.util.Try import dotty.tools.dotc.core.Contexts.Context import dotty.tools.dotc.core.Flags import dotty.tools.dotc.core.Flags.* import dotty.tools.dotc.core.NameKinds.EvidenceParamName import dotty.tools.dotc.core.NameOps.* +import dotty.tools.dotc.core.Names import dotty.tools.dotc.core.Names.Name +import dotty.tools.dotc.core.Names.NameOrdering import dotty.tools.dotc.core.StdNames import dotty.tools.dotc.core.Symbols.NoSymbol import dotty.tools.dotc.core.Symbols.Symbol import dotty.tools.dotc.core.Types.* import dotty.tools.dotc.core.Types.Type -import dotty.tools.pc.IndexedContext -import dotty.tools.pc.Params -import dotty.tools.pc.utils.MtagsEnrichments.* -import dotty.tools.dotc.printing.PlainPrinter -import dotty.tools.dotc.printing.Texts.Text -import dotty.tools.dotc.core.Decorators.show import dotty.tools.dotc.printing.RefinedPrinter -import dotty.tools.dotc.printing.Formatting.ShownDef.ctxShow -import dotty.tools.dotc.typer.ImportInfo -import dotty.tools.dotc.core.Annotations.Annotation -import dotty.tools.pc.IndexedContext.Result +import dotty.tools.dotc.printing.Texts.Text import dotty.tools.pc.AutoImports.AutoImportsGenerator -import org.eclipse.lsp4j.TextEdit -import dotty.tools.dotc.core.Names import dotty.tools.pc.AutoImports.ImportSel import dotty.tools.pc.AutoImports.ImportSel.Direct import dotty.tools.pc.AutoImports.ImportSel.Rename -import dotty.tools.dotc.core.Names.NameOrdering +import dotty.tools.pc.IndexedContext +import dotty.tools.pc.IndexedContext.Result +import dotty.tools.pc.Params +import dotty.tools.pc.utils.MtagsEnrichments.* + +import org.eclipse.lsp4j.TextEdit /** * A type printer that shortens types by replacing fully qualified names with shortened versions. * * The printer supports symbol renames found in scope and will use the rename if it is available. * It also handlse custom renames as specified in the `renameConfigMap` parameter. - * */ class ShortenedTypePrinter( symbolSearch: SymbolSearch, - includeDefaultParam: ShortenedTypePrinter.IncludeDefaultParam = IncludeDefaultParam.ResolveLater, + includeDefaultParam: ShortenedTypePrinter.IncludeDefaultParam = + IncludeDefaultParam.ResolveLater, isTextEdit: Boolean = false, - renameConfigMap: Map[Symbol, String] = Map.empty, -)(using indexedCtx: IndexedContext, reportCtx: ReportContext) extends RefinedPrinter(indexedCtx.ctx): - var missingImports: mutable.ListBuffer[ImportSel] = mutable.ListBuffer.empty - + renameConfigMap: Map[Symbol, String] = Map.empty +)(using indexedCtx: IndexedContext, reportCtx: ReportContext) + extends RefinedPrinter(indexedCtx.ctx): + private val missingImports: mutable.ListBuffer[ImportSel] = + mutable.ListBuffer.empty private val defaultWidth = 1000 private val methodFlags = @@ -91,8 +84,7 @@ class ShortenedTypePrinter( * that are shortend by "tryShortenName" method, and cached. */ def imports(autoImportsGen: AutoImportsGenerator): List[TextEdit] = - missingImports - .toList + missingImports.toList .filterNot(selector => selector.sym.isRoot) .sortBy(_.sym.effectiveName) .flatMap(selector => autoImportsGen.renderImports(List(selector))) @@ -103,62 +95,74 @@ class ShortenedTypePrinter( val prefixAfterRename: List[Symbol] def toPrefixText: Text = - Str(rename) ~ prefixAfterRename.foldLeft(Text())((acc, sym) => acc ~ "." ~ toText(sym.name)) ~ "." - - case class Found(owner: Symbol, rename: String, prefixAfterRename: List[Symbol]) extends SymbolRenameSearchResult - case class Missing(owner: Symbol, rename: String, prefixAfterRename: List[Symbol]) extends SymbolRenameSearchResult - + Str(rename) ~ prefixAfterRename.foldLeft(Text())((acc, sym) => + acc ~ "." ~ toText(sym.name) + ) ~ "." + + case class Found( + owner: Symbol, + rename: String, + prefixAfterRename: List[Symbol] + ) extends SymbolRenameSearchResult + case class Missing( + owner: Symbol, + rename: String, + prefixAfterRename: List[Symbol] + ) extends SymbolRenameSearchResult /** * In shortened type printer, we don't want to omit the prefix unless it is empty package * All the logic for prefix omitting is implemented in `trimPrefixToScope` */ - override protected def isOmittablePrefix(sym: Symbol): Boolean = isEmptyPrefix(sym) + override protected def isOmittablePrefix(sym: Symbol): Boolean = + isEmptyPrefix(sym) - private def findPrefixRename(prefix: Symbol): Option[SymbolRenameSearchResult] = + private def findPrefixRename( + prefix: Symbol + ): Option[SymbolRenameSearchResult] = def ownersAfterRename(owner: Symbol): List[Symbol] = prefix.ownersIterator.takeWhile(_ != owner).toList prefix.ownersIterator.flatMap { owner => val prefixAfterRename = ownersAfterRename(owner) - val currentRenamesSearchResult = indexedCtx.rename(owner).map(Found(owner, _, prefixAfterRename)) - lazy val configRenamesSearchResult = renameConfigMap.get(owner).map(Missing(owner, _, prefixAfterRename)) + val currentRenamesSearchResult = + indexedCtx.rename(owner).map(Found(owner, _, prefixAfterRename)) + lazy val configRenamesSearchResult = + renameConfigMap.get(owner).map(Missing(owner, _, prefixAfterRename)) currentRenamesSearchResult orElse configRenamesSearchResult }.nextOption private def isAccessibleStatically(sym: Symbol): Boolean = sym.isStatic || // Java static - sym.maybeOwner.ownersIterator.forall { s => s.is(Package) || s.is(Module) } + sym.maybeOwner.ownersIterator.forall { s => + s.is(Package) || s.is(Module) + } private def optionalRootPrefix(sym: Symbol): Text = // If the symbol has toplevel clash we need to prepend `_root_.` to the symbol to disambiguate // it from the local symbol. It is only required when we are computing text for text edit. - if isTextEdit && indexedCtx.toplevelClashes(sym) then - Str("_root_.") - else - Text() + if isTextEdit && indexedCtx.toplevelClashes(sym) then Str("_root_.") + else Text() override protected def trimPrefixToScope(tp: NamedType): Text = def handleRenames(prefix: Symbol): Option[Text] = val maybePrefixRename = findPrefixRename(prefix) - // check if there is a conflict with a renamed import - if maybePrefixRename.flatMap { importRename => indexedCtx.findSymbol(importRename.rename) }.isDefined then + if maybePrefixRename.exists(importRename => indexedCtx.findSymbol(importRename.rename).isDefined) then Some(super.trimPrefixToScope(tp)) else - maybePrefixRename.map { - case res: Found => res.toPrefixText - // there is no import for any prefix owner present, but there is one set in the configuration - case res: Missing => - val importSel = if res.owner.name.show == res.rename then - ImportSel.Direct(res.owner) - else - ImportSel.Rename(res.owner, res.rename) - - missingImports += importSel - res.toPrefixText - } + maybePrefixRename.map { + case res: Found => res.toPrefixText + case res: Missing => + val importSel = + if res.owner.name.show == res.rename then + ImportSel.Direct(res.owner) + else ImportSel.Rename(res.owner, res.rename) + + missingImports += importSel + res.toPrefixText + } val maybeRenamedPrefix: Option[Text] = handleRenames(tp.symbol.maybeOwner) val trimmedPrefix: Text = @@ -166,7 +170,6 @@ class ShortenedTypePrinter( maybeRenamedPrefix.getOrElse(super.trimPrefixToScope(tp)) else indexedCtx.lookupSym(tp.symbol) match - // symbol is missing and is accessible statically, we can import it and add proper prefix case Result.Missing if isAccessibleStatically(tp.symbol) => maybeRenamedPrefix.getOrElse: @@ -174,13 +177,13 @@ class ShortenedTypePrinter( Text() // the symbol is in scope, we can omit the prefix case Result.InScope => Text() - // the sybmol is in conflict, we have to include prefix to avoid ambiguity - case Result.Conflict => maybeRenamedPrefix.getOrElse(super.trimPrefixToScope(tp)) + // the symbol is in conflict, we have to include prefix to avoid ambiguity + case Result.Conflict => + maybeRenamedPrefix.getOrElse(super.trimPrefixToScope(tp)) case _ => super.trimPrefixToScope(tp) optionalRootPrefix(tp.symbol) ~ trimmedPrefix - override protected def selectionString(tp: NamedType): String = indexedCtx.rename(tp.symbol) match case Some(value) => value @@ -193,10 +196,9 @@ class ShortenedTypePrinter( case _ => super.toText(tp) override def toTextSingleton(tp: SingletonType): Text = - tp match { + tp match case ConstantType(const) => toText(const) - case _ => toTextRef(tp) ~ ".type" - } + case _ => toTextRef(tp) ~ ".type" def tpe(tpe: Type): String = toText(tpe).mkString(defaultWidth, false) @@ -241,11 +243,9 @@ class ShortenedTypePrinter( val info = sym.info.widenTermRefExpr val typeSymbol = info.typeSymbol - if sym.is(Flags.Package) || sym.isClass then - " " + fullNameString(sym.owner) + if sym.is(Flags.Package) || sym.isClass then " " + fullNameString(sym.owner) else if sym.is(Flags.Module) || typeSymbol.is(Flags.Module) then - if typeSymbol != NoSymbol then - " " + fullNameString(typeSymbol.owner) + if typeSymbol != NoSymbol then " " + fullNameString(typeSymbol.owner) else " " + fullNameString(sym.owner) else if sym.is(Flags.Method) then defaultMethodSignature(sym, info, onlyMethodParams = true) diff --git a/presentation-compiler/test/dotty/tools/pc/base/BasePcDefinitionSuite.scala b/presentation-compiler/test/dotty/tools/pc/base/BasePcDefinitionSuite.scala index 1ad9a7704c6b..a4e67bbdac17 100644 --- a/presentation-compiler/test/dotty/tools/pc/base/BasePcDefinitionSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/base/BasePcDefinitionSuite.scala @@ -1,6 +1,5 @@ package dotty.tools.pc.base -import java.net.URI import java.nio.file.Paths import scala.meta.internal.metals.CompilerOffsetParams diff --git a/presentation-compiler/test/dotty/tools/pc/tests/NoIndentSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/NoIndentSuite.scala index 448fe31f789c..1be816bb8d81 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/NoIndentSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/NoIndentSuite.scala @@ -3,7 +3,6 @@ package dotty.tools.pc.tests import java.nio.file.Path import dotty.tools.pc.base.{BaseCompletionSuite, BaseExtractMethodSuite} -import dotty.tools.pc.utils.MockEntries import org.junit.Test diff --git a/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionArgSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionArgSuite.scala index 1d5f5cd39766..6843242499b6 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionArgSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionArgSuite.scala @@ -3,9 +3,9 @@ package dotty.tools.pc.tests.completion import dotty.tools.pc.base.BaseCompletionSuite import org.junit.FixMethodOrder +import org.junit.Ignore import org.junit.Test import org.junit.runners.MethodSorters -import org.junit.Ignore @FixMethodOrder(MethodSorters.NAME_ASCENDING) class CompletionArgSuite extends BaseCompletionSuite: @@ -575,7 +575,7 @@ class CompletionArgSuite extends BaseCompletionSuite: """|foo = : Int |fooBar = : Int |""".stripMargin, - topLines = Some(2), + topLines = Some(2) ) @Test def `case-class-apply1` = @@ -589,7 +589,7 @@ class CompletionArgSuite extends BaseCompletionSuite: |} |""".stripMargin, """|foo = : Int - |""".stripMargin, + |""".stripMargin ) @Test def `case-class-apply2` = @@ -603,7 +603,7 @@ class CompletionArgSuite extends BaseCompletionSuite: |} |""".stripMargin, """|fooBar = : Int - |""".stripMargin, + |""".stripMargin ) @Ignore @@ -623,7 +623,7 @@ class CompletionArgSuite extends BaseCompletionSuite: |""".stripMargin, """|foo = : Int |foo = a : Int - |""".stripMargin, + |""".stripMargin ) @Ignore @@ -643,7 +643,7 @@ class CompletionArgSuite extends BaseCompletionSuite: |""".stripMargin, """|fooBar = : Int |fooBar = a : Int - |""".stripMargin, + |""".stripMargin ) @Test def `case-class-for-comp` = @@ -661,6 +661,5 @@ class CompletionArgSuite extends BaseCompletionSuite: |fooBar = : Int |fooBar = a : Int |""".stripMargin, - topLines = Some(4), + topLines = Some(4) ) - diff --git a/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionOverrideSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionOverrideSuite.scala index 2dd6b12b8a02..690427688705 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionOverrideSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionOverrideSuite.scala @@ -11,7 +11,12 @@ class CompletionOverrideSuite extends BaseCompletionSuite: override protected def mockEntries: MockEntries = new MockEntries: override def documentations: Set[SymbolDocumentation] = Set( - MockDocumentation("java/nio/file/SimpleFileVisitor#visitFile().", "visitFile", Seq(), Seq("file", "attrs")) + MockDocumentation( + "java/nio/file/SimpleFileVisitor#visitFile().", + "visitFile", + Seq(), + Seq("file", "attrs") + ) ) @Test def `basic` = @@ -890,7 +895,7 @@ class CompletionOverrideSuite extends BaseCompletionSuite: topLines = Some(3) ) - @Test def `pathdependent` = + @Test def `path-dependent` = checkEdit( """|trait Over { | object Outer { diff --git a/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionSuite.scala index 25a8a53ece89..3c0b3e66308c 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/completion/CompletionSuite.scala @@ -11,10 +11,30 @@ class CompletionSuite extends BaseCompletionSuite: override protected def mockEntries: MockEntries = new MockEntries: override def documentations: Set[SymbolDocumentation] = Set( - MockDocumentation("java/lang/String#substring().", "substring", Seq(), Seq("beginIndex")), - MockDocumentation("java/lang/String#substring(+1).", "substring", Seq(), Seq("beginIndex", "endIndex")), - MockDocumentation("java/nio/file/Files#readAttributes().", "readAttributes", Seq("A"), Seq("path", "type", "options")), - MockDocumentation("java/nio/file/Files#readAttributes(+1).", "readAttributes", Seq(), Seq("path", "attributes", "options")) + MockDocumentation( + "java/lang/String#substring().", + "substring", + Seq(), + Seq("beginIndex") + ), + MockDocumentation( + "java/lang/String#substring(+1).", + "substring", + Seq(), + Seq("beginIndex", "endIndex") + ), + MockDocumentation( + "java/nio/file/Files#readAttributes().", + "readAttributes", + Seq("A"), + Seq("path", "type", "options") + ), + MockDocumentation( + "java/nio/file/Files#readAttributes(+1).", + "readAttributes", + Seq(), + Seq("path", "attributes", "options") + ) ) @Test def scope = @@ -252,7 +272,7 @@ class CompletionSuite extends BaseCompletionSuite: |Paths - java.nio.file |PathMatcher - java.nio.file |""".stripMargin, - filter = _.contains("java.nio.file") + filter = _.contains("java.nio.file") ) @Test def import4 = diff --git a/presentation-compiler/test/dotty/tools/pc/tests/edit/AutoImplementAbstractMembersSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/edit/AutoImplementAbstractMembersSuite.scala index 5d452db261f4..a0cf2bbc63cb 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/edit/AutoImplementAbstractMembersSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/edit/AutoImplementAbstractMembersSuite.scala @@ -1134,7 +1134,7 @@ class AutoImplementAbstractMembersSuite extends BaseCodeActionSuite: |""".stripMargin ) - @Test def `testtest` = + @Test def `path-dependent-type-arg` = checkEdit( """|package a |import scala.deriving.Mirror diff --git a/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverNamedArgSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverNamedArgSuite.scala index 21ded6678442..caf3d66e0ecf 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverNamedArgSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverNamedArgSuite.scala @@ -5,7 +5,7 @@ import scala.meta.pc.SymbolDocumentation import dotty.tools.pc.base.BaseHoverSuite import dotty.tools.pc.utils.MockEntries -import org.junit.{Ignore, Test} +import org.junit.Test class HoverNamedArgSuite extends BaseHoverSuite: diff --git a/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverRangeSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverRangeSuite.scala index b5a7d65c73e4..9191cb47af04 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverRangeSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverRangeSuite.scala @@ -235,7 +235,7 @@ class HoverRangeSuite extends BaseHoverSuite: |inline transparent def foo(i: Int): Foo""".stripMargin.hoverRange ) - @Test def `deptypes` = + @Test def `dep-types` = check( """|trait A |object A1 extends A diff --git a/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverTermSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverTermSuite.scala index 32bdcaa91daf..7ce81464fbd6 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverTermSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/hover/HoverTermSuite.scala @@ -400,10 +400,10 @@ class HoverTermSuite extends BaseHoverSuite: @Test def `annot` = check( - """| + """|import scala.annotation.tailrec | |object O { - | @<> + | @<> | def hello(n: Int): Int = { | if (i == 0) 0 | else hello( n - 1) diff --git a/presentation-compiler/test/dotty/tools/pc/tests/signaturehelp/SignatureHelpDocSuite.scala b/presentation-compiler/test/dotty/tools/pc/tests/signaturehelp/SignatureHelpDocSuite.scala index 523bfc33bc05..85bce16a2b52 100644 --- a/presentation-compiler/test/dotty/tools/pc/tests/signaturehelp/SignatureHelpDocSuite.scala +++ b/presentation-compiler/test/dotty/tools/pc/tests/signaturehelp/SignatureHelpDocSuite.scala @@ -11,28 +11,118 @@ class SignatureHelpDocSuite extends BaseSignatureHelpSuite: override protected def mockEntries: MockEntries = new MockEntries: override def documentations: Set[SymbolDocumentation] = Set( - MockDocumentation("java/lang/String#substring().", "substring", Seq(), Seq("beginIndex")), - MockDocumentation("java/lang/String#substring(+1).", "substring", Seq(), Seq("beginIndex", "endIndex")), - MockDocumentation("java/lang/String#valueOf().", "valueOf", Seq(), Seq("obj")), - MockDocumentation("java/lang/String#valueOf(+1).", "valueOf", Seq(), Seq("data")), - MockDocumentation("java/lang/String#valueOf(+2).", "valueOf", Seq(), Seq("data", "offset", "count")), - MockDocumentation("java/lang/String#valueOf(+3).", "valueOf", Seq(), Seq("b")), - MockDocumentation("java/lang/String#valueOf(+4).", "valueOf", Seq(), Seq("c")), - MockDocumentation("java/lang/String#valueOf(+5).", "valueOf", Seq(), Seq("i")), - MockDocumentation("java/lang/String#valueOf(+6).", "valueOf", Seq(), Seq("l")), - MockDocumentation("java/lang/String#valueOf(+7).", "valueOf", Seq(), Seq("f")), - MockDocumentation("java/lang/String#valueOf(+8).", "valueOf", Seq(), Seq("d")), - MockDocumentation("java/io/File#``().", "", Seq(), Seq("pathname")), - MockDocumentation("java/io/File#``(+1).", "", Seq(), Seq("parent", "child")), - MockDocumentation("java/io/File#``(+2).", "", Seq(), Seq("parent", "child")), - MockDocumentation("java/io/File#``(+3).", "", Seq(), Seq("uri")), + MockDocumentation( + "java/lang/String#substring().", + "substring", + Seq(), + Seq("beginIndex") + ), + MockDocumentation( + "java/lang/String#substring(+1).", + "substring", + Seq(), + Seq("beginIndex", "endIndex") + ), + MockDocumentation( + "java/lang/String#valueOf().", + "valueOf", + Seq(), + Seq("obj") + ), + MockDocumentation( + "java/lang/String#valueOf(+1).", + "valueOf", + Seq(), + Seq("data") + ), + MockDocumentation( + "java/lang/String#valueOf(+2).", + "valueOf", + Seq(), + Seq("data", "offset", "count") + ), + MockDocumentation( + "java/lang/String#valueOf(+3).", + "valueOf", + Seq(), + Seq("b") + ), + MockDocumentation( + "java/lang/String#valueOf(+4).", + "valueOf", + Seq(), + Seq("c") + ), + MockDocumentation( + "java/lang/String#valueOf(+5).", + "valueOf", + Seq(), + Seq("i") + ), + MockDocumentation( + "java/lang/String#valueOf(+6).", + "valueOf", + Seq(), + Seq("l") + ), + MockDocumentation( + "java/lang/String#valueOf(+7).", + "valueOf", + Seq(), + Seq("f") + ), + MockDocumentation( + "java/lang/String#valueOf(+8).", + "valueOf", + Seq(), + Seq("d") + ), + MockDocumentation( + "java/io/File#``().", + "", + Seq(), + Seq("pathname") + ), + MockDocumentation( + "java/io/File#``(+1).", + "", + Seq(), + Seq("parent", "child") + ), + MockDocumentation( + "java/io/File#``(+2).", + "", + Seq(), + Seq("parent", "child") + ), + MockDocumentation( + "java/io/File#``(+3).", + "", + Seq(), + Seq("uri") + ), ScalaMockDocumentation("scala/Some#", "Some"), - ScalaMockDocumentation("scala/Option#fold().", "fold", List("ifEmpty", "f")), + ScalaMockDocumentation( + "scala/Option#fold().", + "fold", + List("ifEmpty", "f") + ), ScalaMockDocumentation("scala/Option.apply().", "apply", List("x")), - ScalaMockDocumentation("scala/collection/immutable/List#map().", "map", List("f")), - ScalaMockDocumentation("scala/collection/LinearSeqOps#foldLeft().", "foldLeft", List("z", "op")), - ScalaMockDocumentation("scala/util/control/Exception.Catch#", "Catch", List("pf", "fin", "rethrow")) - + ScalaMockDocumentation( + "scala/collection/immutable/List#map().", + "map", + List("f") + ), + ScalaMockDocumentation( + "scala/collection/LinearSeqOps#foldLeft().", + "foldLeft", + List("z", "op") + ), + ScalaMockDocumentation( + "scala/util/control/Exception.Catch#", + "Catch", + List("pf", "fin", "rethrow") + ) ) @Test def `curry` = diff --git a/presentation-compiler/test/dotty/tools/pc/utils/TestingWorkspaceSearch.scala b/presentation-compiler/test/dotty/tools/pc/utils/TestingWorkspaceSearch.scala index 90035c41330f..ebbb29769ebb 100644 --- a/presentation-compiler/test/dotty/tools/pc/utils/TestingWorkspaceSearch.scala +++ b/presentation-compiler/test/dotty/tools/pc/utils/TestingWorkspaceSearch.scala @@ -16,7 +16,6 @@ import dotty.tools.dotc.core.Symbols.* import dotty.tools.dotc.interactive.InteractiveDriver import dotty.tools.dotc.semanticdb.SemanticSymbolBuilder import dotty.tools.pc.CompilerSearchVisitor -import java.nio.file.Files object TestingWorkspaceSearch: def empty: TestingWorkspaceSearch = new TestingWorkspaceSearch(Nil) diff --git a/project/Build.scala b/project/Build.scala index b27aa1254343..ed2ff9d7d243 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -1156,6 +1156,7 @@ object Build { val mtagsVersion = "0.11.12+45-45df705d-SNAPSHOT" // Will be set to stable release after 0.11.13 is published Seq( + scalacOptions += "-Wunused:all", libraryDependencies ++= Seq( "org.lz4" % "lz4-java" % "1.8.0", "io.get-coursier" % "interface" % "1.0.13",