From 1daedbff66413e355185b013272794c39ed688e5 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 11 Feb 2020 15:50:49 +0100 Subject: [PATCH 1/7] Drop outdated syntax for given import selectors It is `given _`, or `given Type`, never `given` alone. --- .../src/dotty/tools/dotc/ast/TreeInfo.scala | 2 +- .../src/dotty/tools/dotc/core/Contexts.scala | 4 +- .../dotty/tools/dotc/parsing/Parsers.scala | 50 ++++++++----------- .../dotc/semanticdb/ExtractSemanticDB.scala | 10 ++-- .../dotty/tools/dotc/semanticdb/Scala3.scala | 24 ++++----- .../dotty/tools/dotc/semanticdb/Tools.scala | 4 +- .../dotty/tools/dotc/transform/LiftTry.scala | 2 +- .../dotty/tools/dotc/typer/Applications.scala | 2 +- .../dotty/tools/dotc/typer/Implicits.scala | 2 +- .../tools/dotc/typer/ImportSuggestions.scala | 4 +- .../src/dotty/tools/dotc/typer/Inliner.scala | 2 +- .../dotty/tools/dotc/typer/Nullables.scala | 6 +-- .../dotty/tools/dotc/typer/ProtoTypes.scala | 4 +- .../src/dotty/tools/dotc/typer/Typer.scala | 2 +- .../dotc/semanticdb/SemanticdbTests.scala | 4 +- .../dotty/internal/StringContextMacro.scala | 6 +-- library/src/scala/internal/quoted/Expr.scala | 2 +- .../src/scala/internal/quoted/Matcher.scala | 2 +- library/src/scala/internal/quoted/Type.scala | 2 +- library/src/scala/quoted/Expr.scala | 14 +++--- library/src/scala/quoted/Liftable.scala | 4 +- library/src/scala/quoted/QuoteContext.scala | 14 +++--- library/src/scala/quoted/Type.scala | 18 +++---- library/src/scala/quoted/matching/Const.scala | 2 +- .../src/scala/quoted/matching/ExprSeq.scala | 2 +- library/src/scala/quoted/matching/Sym.scala | 2 +- .../src/scala/quoted/matching/package.scala | 2 +- .../src/scala/quoted/unsafe/UnsafeExpr.scala | 12 ++--- library/src/scala/quoted/util/ExprMap.scala | 2 +- .../tasty/reflect/ExtractorsPrinter.scala | 2 +- .../tasty/reflect/SourceCodePrinter.scala | 2 +- .../scala/tasty/reflect/TreeAccumulator.scala | 4 +- library/src/scala/tasty/reflect/TreeMap.scala | 4 +- .../macros-in-same-project-6/Foo.scala | 2 +- tests/neg/i7048e.scala | 4 +- tests/neg/i8050.scala | 4 +- tests/pos/i7048e.scala | 4 +- tests/pos/i7887.scala | 2 +- tests/pos/single-case.scala | 2 +- .../tasty-extractors-owners/quoted_1.scala | 2 +- .../tasty-inspector/i8163.scala | 2 +- .../Macro_1.scala | 6 +-- tests/run-macros/i6803/Macro_1.scala | 4 +- tests/run-macros/i7025/Macros_1.scala | 2 +- tests/run-macros/i7887/Macro_1.scala | 2 +- tests/run-macros/i8007/Macro_1.scala | 2 +- tests/run-macros/i8007/Macro_2.scala | 4 +- tests/run-macros/i8007/Macro_3.scala | 2 +- tests/run-macros/i8007/Test_4.scala | 2 +- .../quote-matcher-runtime/quoted_1.scala | 2 +- .../quote-type-matcher/quoted_1.scala | 2 +- .../tasty-construct-types/Macro_1.scala | 2 +- .../tasty-create-method-symbol/Macro_1.scala | 2 +- tests/run/exports.scala | 2 +- 54 files changed, 134 insertions(+), 140 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/ast/TreeInfo.scala b/compiler/src/dotty/tools/dotc/ast/TreeInfo.scala index e80d9b27a980..e5e73518aa19 100644 --- a/compiler/src/dotty/tools/dotc/ast/TreeInfo.scala +++ b/compiler/src/dotty/tools/dotc/ast/TreeInfo.scala @@ -868,7 +868,7 @@ trait TypedTreeInfo extends TreeInfo[Type] { self: Trees.Instance[Type] => /** Extractor for not-null assertions. * A not-null assertion for reference `x` has the form `x.$asInstanceOf$[x.type & T]`. */ - object AssertNotNull with + object AssertNotNull : def apply(tree: tpd.Tree, tpnn: Type)(using Context): tpd.Tree = tree.select(defn.Any_typeCast).appliedToType(AndType(tree.tpe, tpnn)) diff --git a/compiler/src/dotty/tools/dotc/core/Contexts.scala b/compiler/src/dotty/tools/dotc/core/Contexts.scala index 0750a7483e8b..92a6eee9b285 100644 --- a/compiler/src/dotty/tools/dotc/core/Contexts.scala +++ b/compiler/src/dotty/tools/dotc/core/Contexts.scala @@ -16,7 +16,7 @@ import ast.untpd import Flags.GivenOrImplicit import util.{NoSource, SimpleIdentityMap, SourceFile} import typer.{Implicits, ImportInfo, Inliner, NamerContextOps, SearchHistory, SearchRoot, TypeAssigner, Typer, Nullables} -import Nullables.{NotNullInfo, given} +import Nullables.{NotNullInfo, given _} import Implicits.ContextualImplicits import config.Settings._ import config.Config @@ -599,7 +599,7 @@ object Contexts { def setDebug: this.type = setSetting(base.settings.Ydebug, true) } - extension ops on (c: Context) with + extension ops on (c: Context): def addNotNullInfo(info: NotNullInfo) = c.withNotNullInfos(c.notNullInfos.extendWith(info)) diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index b063a3e35fe2..3b4dab7404df 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -3022,11 +3022,8 @@ object Parsers { */ def importExpr(mkTree: ImportConstr): () => Tree = { - /** '_' | 'given' - */ - def wildcardSelectorId() = - val name = if in.token == GIVEN then nme.EMPTY else nme.WILDCARD - atSpan(in.skipToken()) { Ident(name) } + /** '_' */ + def wildcardSelectorId(name: TermName) = atSpan(in.skipToken()) { Ident(name) } /** ImportSelectors ::= id [‘=>’ id | ‘=>’ ‘_’] [‘,’ ImportSelectors] * | WildCardSelector {‘,’ WildCardSelector} @@ -3034,31 +3031,28 @@ object Parsers { * | ‘_' */ def importSelectors(idOK: Boolean): List[ImportSelector] = - val selToken = in.token - val isWildcard = selToken == USCORE || selToken == GIVEN - val selector = - if isWildcard then - val id = wildcardSelectorId() - if selToken == USCORE then ImportSelector(id) - else atSpan(startOffset(id)) { + val isWildcard = in.token == USCORE || in.token == GIVEN + val selector = atSpan(in.offset) { + in.token match + case USCORE => + ImportSelector(wildcardSelectorId(nme.WILDCARD)) + case GIVEN => + val id = wildcardSelectorId(nme.EMPTY) if in.token == USCORE then in.nextToken() ImportSelector(id) - else if in.token != RBRACE && in.token != COMMA then - ImportSelector(id, bound = infixType()) else - ImportSelector(id) // TODO: drop - } - else - val from = termIdent() - if !idOK then syntaxError(i"named imports cannot follow wildcard imports") - if in.token == ARROW then - atSpan(startOffset(from), in.skipToken()) { - val to = if in.token == USCORE then wildcardIdent() else termIdent() - ImportSelector(from, if to.name == nme.ERROR then EmptyTree else to) - } - else ImportSelector(from) - + ImportSelector(id, bound = infixType()) + case _ => + val from = termIdent() + if !idOK then syntaxError(i"named imports cannot follow wildcard imports") + if in.token == ARROW then + atSpan(startOffset(from), in.skipToken()) { + val to = if in.token == USCORE then wildcardIdent() else termIdent() + ImportSelector(from, if to.name == nme.ERROR then EmptyTree else to) + } + else ImportSelector(from) + } val rest = if in.token == COMMA then in.nextToken() @@ -3069,8 +3063,8 @@ object Parsers { val handleImport: Tree => Tree = tree => in.token match - case USCORE | GIVEN => - mkTree(tree, ImportSelector(wildcardSelectorId()) :: Nil) + case USCORE => + mkTree(tree, ImportSelector(wildcardSelectorId(nme.WILDCARD)) :: Nil) case LBRACE => mkTree(tree, inBraces(importSelectors(idOK = true))) case _ => diff --git a/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala b/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala index 80c434f88118..9435a5f487eb 100644 --- a/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala +++ b/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala @@ -27,7 +27,7 @@ import scala.annotation.{ threadUnsafe => tu, tailrec } * for a description of the format. * TODO: Also extract type information */ -class ExtractSemanticDB extends Phase with +class ExtractSemanticDB extends Phase: import Scala3.{_, given _} import Symbols.{given _} @@ -46,7 +46,7 @@ class ExtractSemanticDB extends Phase with ExtractSemanticDB.write(unit.source, extract.occurrences.toList, extract.symbolInfos.toList) /** Extractor of symbol occurrences from trees */ - class Extractor extends TreeTraverser with + class Extractor extends TreeTraverser: private var nextLocalIdx: Int = 0 @@ -57,7 +57,7 @@ class ExtractSemanticDB extends Phase with private val localBodies = mutable.HashMap[Symbol, Tree]() /** The local symbol(s) starting at given offset */ - private val symsAtOffset = new mutable.HashMap[Int, Set[Symbol]]() with + private val symsAtOffset = new mutable.HashMap[Int, Set[Symbol]](): override def default(key: Int) = Set[Symbol]() /** The extracted symbol occurrences */ @@ -242,7 +242,7 @@ class ExtractSemanticDB extends Phase with name => locals.keys.find(local => local.isTerm && local.owner == funSym && local.name == name) .fold("")(Symbols.LocalPrefix + _) - private object PatternValDef with + private object PatternValDef: def unapply(tree: ValDef)(using Context): Option[(Tree, Tree)] = tree.rhs match @@ -570,7 +570,7 @@ class ExtractSemanticDB extends Phase with registerSymbol(vparam.symbol, symbolName(vparam.symbol), symkinds) traverseTpt(vparam.tpt) -object ExtractSemanticDB with +object ExtractSemanticDB: import java.nio.file.Path import scala.collection.JavaConverters._ import java.nio.file.Files diff --git a/compiler/src/dotty/tools/dotc/semanticdb/Scala3.scala b/compiler/src/dotty/tools/dotc/semanticdb/Scala3.scala index d1d0f628d43c..b38948b3ca93 100644 --- a/compiler/src/dotty/tools/dotc/semanticdb/Scala3.scala +++ b/compiler/src/dotty/tools/dotc/semanticdb/Scala3.scala @@ -15,9 +15,9 @@ import java.lang.Character.{isJavaIdentifierPart, isJavaIdentifierStart} import scala.annotation.internal.sharable import scala.annotation.switch -object Scala3 with +object Scala3: import Symbols._ - import core.NameOps.given + import core.NameOps.{given _} @sharable private val unicodeEscape = raw"\$$u(\p{XDigit}{4})".r @sharable private val locals = raw"local(\d+)".r @@ -25,7 +25,7 @@ object Scala3 with private val WILDCARDTypeName = nme.WILDCARD.toTypeName - enum SymbolKind derives Eql with + enum SymbolKind derives Eql: kind => case Val, Var, Setter, Abstract @@ -38,13 +38,13 @@ object Scala3 with end SymbolKind - object SymbolKind with + object SymbolKind: val ValSet = Set(Val) val VarSet = Set(Var) val emptySet = Set.empty[SymbolKind] end SymbolKind - object Symbols with + object Symbols: val RootPackage: String = "_root_/" val EmptyPackage: String = "_empty_/" @@ -67,7 +67,7 @@ object Scala3 with end Symbols - extension NameOps on (name: Name) with + extension NameOps on (name: Name): def isWildcard = name match case nme.WILDCARD | WILDCARDTypeName => true @@ -89,7 +89,7 @@ object Scala3 with // end NameOps - extension SymbolOps on (sym: Symbol) with + extension SymbolOps on (sym: Symbol): def ifExists(using Context): Option[Symbol] = if sym.exists then Some(sym) else None @@ -128,7 +128,7 @@ object Scala3 with // end SymbolOps - object LocalSymbol with + object LocalSymbol: def unapply(symbolInfo: SymbolInformation): Option[Int] = symbolInfo.symbol match case locals(ints) => @@ -146,7 +146,7 @@ object Scala3 with case '/' | '.' | '#' | ']' | ')' => true case _ => false - extension StringOps on (symbol: String) with + extension StringOps on (symbol: String): def isSymbol: Boolean = !symbol.isEmpty def isRootPackage: Boolean = RootPackage == symbol @@ -171,7 +171,7 @@ object Scala3 with // end StringOps - extension InfoOps on (info: SymbolInformation) with + extension InfoOps on (info: SymbolInformation): def isAbstract: Boolean = (info.properties & SymbolInformation.Property.ABSTRACT.value) != 0 def isFinal: Boolean = (info.properties & SymbolInformation.Property.FINAL.value) != 0 @@ -207,7 +207,7 @@ object Scala3 with // end InfoOps - extension RangeOps on (range: Range) with + extension RangeOps on (range: Range): def hasLength = range.endLine > range.startLine || range.endCharacter > range.startCharacter // end RangeOps @@ -236,7 +236,7 @@ object Scala3 with * * taken from https://github.com/scalameta/scalameta/blob/master/semanticdb/metap/src/main/scala/scala/meta/internal/metap/IdentifierOrdering.scala */ - private class IdentifierOrdering[T <: CharSequence] extends Ordering[T] with + private class IdentifierOrdering[T <: CharSequence] extends Ordering[T]: override def compare(o1: T, o2: T): Int = val len = math.min(o1.length(), o2.length()) diff --git a/compiler/src/dotty/tools/dotc/semanticdb/Tools.scala b/compiler/src/dotty/tools/dotc/semanticdb/Tools.scala index 21d57d28929a..c1f3729f3a32 100644 --- a/compiler/src/dotty/tools/dotc/semanticdb/Tools.scala +++ b/compiler/src/dotty/tools/dotc/semanticdb/Tools.scala @@ -4,9 +4,9 @@ import java.nio.file._ import java.nio.charset.StandardCharsets import scala.collection.JavaConverters._ import dotty.tools.dotc.util.SourceFile -import dotty.tools.dotc.semanticdb.Scala3.{_, given} +import dotty.tools.dotc.semanticdb.Scala3.{_, given _} -object Tools with +object Tools: /** Load SemanticDB TextDocument for a single Scala source file * diff --git a/compiler/src/dotty/tools/dotc/transform/LiftTry.scala b/compiler/src/dotty/tools/dotc/transform/LiftTry.scala index 974ffb28aaa8..da789c32a685 100644 --- a/compiler/src/dotty/tools/dotc/transform/LiftTry.scala +++ b/compiler/src/dotty/tools/dotc/transform/LiftTry.scala @@ -78,5 +78,5 @@ class LiftTry extends MiniPhase with IdentityDenotTransformer { thisPhase => } else tree } -object LiftTry with +object LiftTry: val name = "liftTry" diff --git a/compiler/src/dotty/tools/dotc/typer/Applications.scala b/compiler/src/dotty/tools/dotc/typer/Applications.scala index df7348e180ea..0217f6b2ca78 100644 --- a/compiler/src/dotty/tools/dotc/typer/Applications.scala +++ b/compiler/src/dotty/tools/dotc/typer/Applications.scala @@ -22,7 +22,7 @@ import NameKinds.DefaultGetterName import ProtoTypes._ import Inferencing._ import transform.TypeUtils._ -import Nullables.{postProcessByNameArgs, given} +import Nullables.{postProcessByNameArgs, given _} import collection.mutable import config.Printers.{overload, typr, unapp} diff --git a/compiler/src/dotty/tools/dotc/typer/Implicits.scala b/compiler/src/dotty/tools/dotc/typer/Implicits.scala index 39e1ec9a3779..4a5859363440 100644 --- a/compiler/src/dotty/tools/dotc/typer/Implicits.scala +++ b/compiler/src/dotty/tools/dotc/typer/Implicits.scala @@ -1483,7 +1483,7 @@ trait Implicits { self: Typer => if diff == 0 then // Fall back: if both results are extension method applications, // compare the extension methods instead of their wrappers. - object extMethodApply with + object extMethodApply: def unapply(t: Tree): Option[Type] = t match case t: Applications.ExtMethodApply => Some(methPart(stripApply(t.app)).tpe) case _ => None diff --git a/compiler/src/dotty/tools/dotc/typer/ImportSuggestions.scala b/compiler/src/dotty/tools/dotc/typer/ImportSuggestions.scala index 8f027962c3a3..7dc92b170e2f 100644 --- a/compiler/src/dotty/tools/dotc/typer/ImportSuggestions.scala +++ b/compiler/src/dotty/tools/dotc/typer/ImportSuggestions.scala @@ -16,7 +16,7 @@ import collection.mutable /** This trait defines the method `importSuggestionAddendum` that adds an addendum * to error messages suggesting additional imports. */ -trait ImportSuggestions with +trait ImportSuggestions: this: Typer => import tpd._ @@ -167,7 +167,7 @@ trait ImportSuggestions with def deepTest(ref: TermRef): Boolean = System.currentTimeMillis < deadLine && { - val task = new TimerTask with + val task = new TimerTask: def run() = println(i"Cancelling test of $ref when making suggestions for error in ${ctx.source}") ctx.run.isCancelled = true diff --git a/compiler/src/dotty/tools/dotc/typer/Inliner.scala b/compiler/src/dotty/tools/dotc/typer/Inliner.scala index 054b82c6fb78..e674f01820b0 100644 --- a/compiler/src/dotty/tools/dotc/typer/Inliner.scala +++ b/compiler/src/dotty/tools/dotc/typer/Inliner.scala @@ -24,7 +24,7 @@ import ErrorReporting.errorTree import dotty.tools.dotc.tastyreflect.ReflectionImpl import dotty.tools.dotc.util.{SimpleIdentityMap, SimpleIdentitySet, SourceFile, SourcePosition} import dotty.tools.dotc.parsing.Parsers.Parser -import Nullables.given +import Nullables.{given _} import collection.mutable import reporting.trace diff --git a/compiler/src/dotty/tools/dotc/typer/Nullables.scala b/compiler/src/dotty/tools/dotc/typer/Nullables.scala index 5c42b3e6e8df..b46a7b903774 100644 --- a/compiler/src/dotty/tools/dotc/typer/Nullables.scala +++ b/compiler/src/dotty/tools/dotc/typer/Nullables.scala @@ -370,7 +370,7 @@ object Nullables: def assignmentSpans(using Context): Map[Int, List[Span]] = import ast.untpd._ - object populate extends UntypedTreeTraverser with + object populate extends UntypedTreeTraverser: /** The name offsets of variables that are tracked */ var tracked: Map[Int, List[Span]] = Map.empty @@ -468,7 +468,7 @@ object Nullables: if mt.paramInfos.exists(_.isInstanceOf[ExprType]) && !fn.symbol.is(Inline) => app match case Apply(fn, args) => - val dropNotNull = new TreeMap with + val dropNotNull = new TreeMap: override def transform(t: Tree)(using Context) = t match case AssertNotNull(t0) if t0.symbol.is(Mutable) => nullables.println(i"dropping $t") @@ -481,7 +481,7 @@ object Nullables: t case _ => super.transform(t) - object retyper extends ReTyper with + object retyper extends ReTyper: override def typedUnadapted(t: untpd.Tree, pt: Type, locked: TypeVars)(implicit ctx: Context): Tree = t match case t: ValDef if !t.symbol.is(Lazy) => super.typedUnadapted(t, pt, locked) case t: MemberDef => promote(t) diff --git a/compiler/src/dotty/tools/dotc/typer/ProtoTypes.scala b/compiler/src/dotty/tools/dotc/typer/ProtoTypes.scala index 7656d7cc3ef7..1beb93d07a71 100644 --- a/compiler/src/dotty/tools/dotc/typer/ProtoTypes.scala +++ b/compiler/src/dotty/tools/dotc/typer/ProtoTypes.scala @@ -115,11 +115,11 @@ object ProtoTypes { } /** A class marking ignored prototypes that can be revealed by `deepenProto` */ - case class IgnoredProto(ignored: Type) extends UncachedGroundType with MatchAlways with + case class IgnoredProto(ignored: Type) extends UncachedGroundType with MatchAlways: override def revealIgnored = ignored override def deepenProto(implicit ctx: Context): Type = ignored - object IgnoredProto with + object IgnoredProto: def apply(ignored: Type): IgnoredProto = ignored match case ignored: IgnoredProto => ignored case _ => new IgnoredProto(ignored) diff --git a/compiler/src/dotty/tools/dotc/typer/Typer.scala b/compiler/src/dotty/tools/dotc/typer/Typer.scala index e600c017eab9..1db900a05ee7 100644 --- a/compiler/src/dotty/tools/dotc/typer/Typer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Typer.scala @@ -40,7 +40,7 @@ import dotty.tools.dotc.transform.{PCPCheckAndHeal, Staging, TreeMapWithStages} import transform.SymUtils._ import transform.TypeUtils._ import reporting.trace -import Nullables.{NotNullInfo, given} +import Nullables.{NotNullInfo, given _} import NullOpsDecorator._ object Typer { diff --git a/compiler/test/dotty/tools/dotc/semanticdb/SemanticdbTests.scala b/compiler/test/dotty/tools/dotc/semanticdb/SemanticdbTests.scala index 05aa7086a404..da753c6413ae 100644 --- a/compiler/test/dotty/tools/dotc/semanticdb/SemanticdbTests.scala +++ b/compiler/test/dotty/tools/dotc/semanticdb/SemanticdbTests.scala @@ -19,14 +19,14 @@ import org.junit.experimental.categories.Category import dotty.BootstrappedOnlyTests import dotty.tools.dotc.Main -import dotty.tools.dotc.semanticdb.Scala3.given +import dotty.tools.dotc.semanticdb.Scala3.{given _} import dotty.tools.dotc.util.SourceFile @main def updateExpect = SemanticdbTests().runExpectTest(updateExpectFiles = true) @Category(Array(classOf[BootstrappedOnlyTests])) -class SemanticdbTests with +class SemanticdbTests: val javaFile = FileSystems.getDefault.getPathMatcher("glob:**.java") val scalaFile = FileSystems.getDefault.getPathMatcher("glob:**.scala") val expectFile = FileSystems.getDefault.getPathMatcher("glob:**.expect.scala") diff --git a/library/src-bootstrapped/dotty/internal/StringContextMacro.scala b/library/src-bootstrapped/dotty/internal/StringContextMacro.scala index 23fde323041f..72f90b0df704 100644 --- a/library/src-bootstrapped/dotty/internal/StringContextMacro.scala +++ b/library/src-bootstrapped/dotty/internal/StringContextMacro.scala @@ -82,7 +82,7 @@ object StringContextMacro { * quotes an error if the given Expr does not contain a list of arguments */ def getArgsExprs(argsExpr: Expr[Seq[Any]])(using qctx: QuoteContext): Option[List[Expr[Any]]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} argsExpr.unseal.underlyingArgument match { case Typed(Repeated(args, _), _) => Some(args.map(_.seal)) @@ -99,7 +99,7 @@ object StringContextMacro { * @return the Expr containing the formatted and interpolated String or an error/warning if the parameters are not correct */ private def interpolate(strCtxExpr: Expr[StringContext], argsExpr: Expr[Seq[Any]])(using qctx: QuoteContext): Expr[String] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val sourceFile = strCtxExpr.unseal.pos.sourceFile val (partsExpr, parts) = getPartsExprs(strCtxExpr) match { @@ -165,7 +165,7 @@ object StringContextMacro { * @return the Expr containing the formatted and interpolated String or an error/warning report if the parameters are not correct */ def interpolate(parts0 : List[String], args : List[Expr[Any]], argsExpr: Expr[Seq[Any]], reporter : Reporter)(using qctx: QuoteContext) : Expr[String] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} /** Checks if the number of arguments are the same as the number of formatting strings * diff --git a/library/src/scala/internal/quoted/Expr.scala b/library/src/scala/internal/quoted/Expr.scala index 370f34e44e62..a706f9d8d462 100644 --- a/library/src/scala/internal/quoted/Expr.scala +++ b/library/src/scala/internal/quoted/Expr.scala @@ -34,7 +34,7 @@ object Expr { */ def unapply[TypeBindings <: Tuple, Tup <: Tuple](scrutineeExpr: scala.quoted.Expr[_])(using patternExpr: scala.quoted.Expr[_], hasTypeSplices: Boolean, qctx: QuoteContext): Option[Tup] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} new Matcher.QuoteMatcher[qctx.type].termMatch(scrutineeExpr.unseal, patternExpr.unseal, hasTypeSplices).asInstanceOf[Option[Tup]] } diff --git a/library/src/scala/internal/quoted/Matcher.scala b/library/src/scala/internal/quoted/Matcher.scala index 5392889f2ff0..7c9c12e4bb21 100644 --- a/library/src/scala/internal/quoted/Matcher.scala +++ b/library/src/scala/internal/quoted/Matcher.scala @@ -13,7 +13,7 @@ private[quoted] object Matcher { // TODO use flag from qctx.tasty.rootContext. Maybe -debug or add -debug-macros private final val debug = false - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} import Matching._ /** A map relating equivalent symbols from the scrutinee and the pattern diff --git a/library/src/scala/internal/quoted/Type.scala b/library/src/scala/internal/quoted/Type.scala index e6a247a21faf..c3af769c8f3a 100644 --- a/library/src/scala/internal/quoted/Type.scala +++ b/library/src/scala/internal/quoted/Type.scala @@ -26,7 +26,7 @@ object Type { */ def unapply[TypeBindings <: Tuple, Tup <: Tuple](scrutineeType: scala.quoted.Type[_])(using patternType: scala.quoted.Type[_], hasTypeSplices: Boolean, qctx: QuoteContext): Option[Tup] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} new Matcher.QuoteMatcher[qctx.type].typeTreeMatch(scrutineeType.unseal, patternType.unseal, hasTypeSplices).asInstanceOf[Option[Tup]] } diff --git a/library/src/scala/quoted/Expr.scala b/library/src/scala/quoted/Expr.scala index 466734f60bdf..dd163c664b38 100644 --- a/library/src/scala/quoted/Expr.scala +++ b/library/src/scala/quoted/Expr.scala @@ -53,7 +53,7 @@ object Expr { * ``` */ def betaReduce[F, Args <: Tuple, R, G](f: Expr[F])(using tf: TupledFunction[F, Args => R], tg: TupledFunction[G, TupleOfExpr[Args] => Expr[R]], qctx: QuoteContext): G = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} tg.untupled(args => qctx.tasty.internal.betaReduce(f.unseal, args.toArray.toList.map(_.asInstanceOf[QuoteContext => Expr[_]](qctx).unseal)).seal.asInstanceOf[Expr[R]]) } @@ -66,19 +66,19 @@ object Expr { * ``` */ def betaReduceGiven[F, Args <: Tuple, R, G](f: Expr[F])(using tf: TupledFunction[F, Args ?=> R], tg: TupledFunction[G, TupleOfExpr[Args] => Expr[R]], qctx: QuoteContext): G = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} tg.untupled(args => qctx.tasty.internal.betaReduce(f.unseal, args.toArray.toList.map(_.asInstanceOf[QuoteContext => Expr[_]](qctx).unseal)).seal.asInstanceOf[Expr[R]]) } /** Returns a null expresssion equivalent to `'{null}` */ def nullExpr: QuoteContext ?=> Expr[Null] = qctx ?=> { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} Literal(Constant(null)).seal.asInstanceOf[Expr[Null]] } /** Returns a unit expresssion equivalent to `'{}` or `'{()}` */ def unitExpr: QuoteContext ?=> Expr[Unit] = qctx ?=> { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} Literal(Constant(())).seal.asInstanceOf[Expr[Unit]] } @@ -87,7 +87,7 @@ object Expr { * will be equivalent to `'{ $s1; $s2; ...; $e }`. */ def block[T](statements: List[Expr[_]], expr: Expr[T])(using qctx: QuoteContext): Expr[T] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} Block(statements.map(_.unseal), expr.unseal).seal.asInstanceOf[Expr[T]] } @@ -107,7 +107,7 @@ object Expr { * ``` */ def ofSeq[T](xs: Seq[Expr[T]])(using tp: Type[T], qctx: QuoteContext): Expr[Seq[T]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} Repeated(xs.map(_.unseal).toList, tp.unseal).seal.asInstanceOf[Expr[Seq[T]]] } @@ -184,7 +184,7 @@ object Expr { /** Given a tuple of the form `(Expr[A1], ..., Expr[An])`, outputs a tuple `Expr[(A1, ..., An)]`. */ def ofTuple[T <: Tuple: Tuple.IsMappedBy[Expr]: Type](tup: T)(using qctx: QuoteContext): Expr[Tuple.InverseMap[T, Expr]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val elems: Seq[Expr[_]] = tup.asInstanceOf[Product].productIterator.toSeq.asInstanceOf[Seq[Expr[_]]] ofTuple(elems).cast[Tuple.InverseMap[T, Expr]] } diff --git a/library/src/scala/quoted/Liftable.scala b/library/src/scala/quoted/Liftable.scala index 81c47f6071d3..a755c03e7c54 100644 --- a/library/src/scala/quoted/Liftable.scala +++ b/library/src/scala/quoted/Liftable.scala @@ -32,7 +32,7 @@ object Liftable { private class PrimitiveLiftable[T <: Unit | Null | Int | Boolean | Byte | Short | Int | Long | Float | Double | Char | String] extends Liftable[T] { /** Lift a primitive value `n` into `'{ n }` */ def toExpr(x: T) = qctx ?=> { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} Literal(Constant(x)).seal.asInstanceOf[Expr[T]] } } @@ -40,7 +40,7 @@ object Liftable { given ClassIsLiftable[T] as Liftable[Class[T]] = new Liftable[Class[T]] { /** Lift a `Class[T]` into `'{ classOf[T] }` */ def toExpr(x: Class[T]) = qctx ?=> { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} Ref(defn.Predef_classOf).appliedToType(Type(x)).seal.asInstanceOf[Expr[Class[T]]] } } diff --git a/library/src/scala/quoted/QuoteContext.scala b/library/src/scala/quoted/QuoteContext.scala index e169f7ef5fb5..9e235c30e844 100644 --- a/library/src/scala/quoted/QuoteContext.scala +++ b/library/src/scala/quoted/QuoteContext.scala @@ -8,29 +8,29 @@ import scala.quoted.show.SyntaxHighlight * It contains the low-level Typed AST API `tasty` meta-programming API. * This API does not have the static type guarantiees that `Expr` and `Type` provide. * - * @param tasty Typed AST API. Usage: `def f(qctx: QuoteContext) = { import qctx.tasty.{_, given}; ... }`. + * @param tasty Typed AST API. Usage: `def f(qctx: QuoteContext) = { import qctx.tasty.{_, given _}; ... }`. */ class QuoteContext(val tasty: scala.tasty.Reflection) { def show(expr: Expr[_], syntaxHighlight: SyntaxHighlight): String = { - import tasty.{_, given} + import tasty.{_, given _} expr.unseal.showWith(syntaxHighlight) } def show(tpe: Type[_], syntaxHighlight: SyntaxHighlight): String = { - import tasty.{_, given} + import tasty.{_, given _} tpe.unseal.showWith(syntaxHighlight) } /** Report an error at the position of the macro expansion */ def error(msg: => String): Unit = { - import tasty.{_, given} + import tasty.{_, given _} tasty.error(msg, rootPosition) } /** Report an error at the on the position of `expr` */ def error(msg: => String, expr: Expr[Any]): Unit = { - import tasty.{_, given} + import tasty.{_, given _} tasty.error(msg, expr.unseal.pos) } @@ -47,13 +47,13 @@ class QuoteContext(val tasty: scala.tasty.Reflection) { /** Report a warning */ def warning(msg: => String): Unit = { - import tasty.{_, given} + import tasty.{_, given _} tasty.warning(msg, rootPosition) } /** Report a warning at the on the position of `expr` */ def warning(msg: => String, expr: Expr[_]): Unit = { - import tasty.{_, given} + import tasty.{_, given _} tasty.warning(msg, expr.unseal.pos) } diff --git a/library/src/scala/quoted/Type.scala b/library/src/scala/quoted/Type.scala index 465070c400c3..d2b281472a72 100644 --- a/library/src/scala/quoted/Type.scala +++ b/library/src/scala/quoted/Type.scala @@ -18,47 +18,47 @@ class Type[T <: AnyKind] private[scala] { object Type { given UnitTag(using qctx: QuoteContext) as Type[Unit] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} defn.UnitType.seal.asInstanceOf[quoted.Type[Unit]] } given BooleanTag(using qctx: QuoteContext) as Type[Boolean] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} defn.BooleanType.seal.asInstanceOf[quoted.Type[Boolean]] } given ByteTag(using qctx: QuoteContext) as Type[Byte] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} defn.ByteType.seal.asInstanceOf[quoted.Type[Byte]] } given CharTag(using qctx: QuoteContext) as Type[Char] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} defn.CharType.seal.asInstanceOf[quoted.Type[Char]] } given ShortTag(using qctx: QuoteContext) as Type[Short] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} defn.ShortType.seal.asInstanceOf[quoted.Type[Short]] } given IntTag(using qctx: QuoteContext) as Type[Int] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} defn.IntType.seal.asInstanceOf[quoted.Type[Int]] } given LongTag(using qctx: QuoteContext) as Type[Long] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} defn.LongType.seal.asInstanceOf[quoted.Type[Long]] } given FloatTag(using qctx: QuoteContext) as Type[Float] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} defn.FloatType.seal.asInstanceOf[quoted.Type[Float]] } given DoubleTag(using qctx: QuoteContext) as Type[Double] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} defn.DoubleType.seal.asInstanceOf[quoted.Type[Double]] } diff --git a/library/src/scala/quoted/matching/Const.scala b/library/src/scala/quoted/matching/Const.scala index d2cc1b378adb..e8c91bdcbe63 100644 --- a/library/src/scala/quoted/matching/Const.scala +++ b/library/src/scala/quoted/matching/Const.scala @@ -15,7 +15,7 @@ package matching object Const { def unapply[T](expr: Expr[T])(using qctx: QuoteContext): Option[T] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} def rec(tree: Term): Option[T] = tree match { case Literal(c) => Some(c.value.asInstanceOf[T]) case Block(Nil, e) => rec(e) diff --git a/library/src/scala/quoted/matching/ExprSeq.scala b/library/src/scala/quoted/matching/ExprSeq.scala index fc4933e4a0a4..f8a6f28b9671 100644 --- a/library/src/scala/quoted/matching/ExprSeq.scala +++ b/library/src/scala/quoted/matching/ExprSeq.scala @@ -17,7 +17,7 @@ object ExprSeq { * ``` */ def unapply[T](expr: Expr[Seq[T]])(using qctx: QuoteContext): Option[Seq[Expr[T]]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} def rec(tree: Term): Option[Seq[Expr[T]]] = tree match { case Typed(Repeated(elems, _), _) => Some(elems.map(x => x.seal.asInstanceOf[Expr[T]])) case Block(Nil, e) => rec(e) diff --git a/library/src/scala/quoted/matching/Sym.scala b/library/src/scala/quoted/matching/Sym.scala index 0521576f1930..68cd3a9edc5b 100644 --- a/library/src/scala/quoted/matching/Sym.scala +++ b/library/src/scala/quoted/matching/Sym.scala @@ -22,7 +22,7 @@ class Sym[T <: AnyKind] private[scala](val name: String, private[Sym] val id: Ob object Sym { def unapply[T](expr: Expr[T])(using qctx: QuoteContext): Option[Sym[T]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} expr.unseal match { case ref: Ident => val sym = ref.symbol diff --git a/library/src/scala/quoted/matching/package.scala b/library/src/scala/quoted/matching/package.scala index 88374d273af5..4ddf474f11d7 100644 --- a/library/src/scala/quoted/matching/package.scala +++ b/library/src/scala/quoted/matching/package.scala @@ -11,7 +11,7 @@ package object matching { * @param qctx current context */ def summonExpr[T](using tpe: Type[T])(using qctx: QuoteContext): Option[Expr[T]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} searchImplicit(tpe.unseal.tpe) match { case iss: ImplicitSearchSuccess => Some(iss.tree.seal.asInstanceOf[Expr[T]]) case isf: ImplicitSearchFailure => None diff --git a/library/src/scala/quoted/unsafe/UnsafeExpr.scala b/library/src/scala/quoted/unsafe/UnsafeExpr.scala index 53ab3d46f089..fb3d62e85209 100644 --- a/library/src/scala/quoted/unsafe/UnsafeExpr.scala +++ b/library/src/scala/quoted/unsafe/UnsafeExpr.scala @@ -20,7 +20,7 @@ object UnsafeExpr { * change the parameter semantics as by-value parameter could be re-evaluated. */ def underlyingArgument[T](expr: Expr[T])(using qctx: QuoteContext): Expr[T] = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} expr.unseal.underlyingArgument.seal.asInstanceOf[Expr[T]] } @@ -39,31 +39,31 @@ object UnsafeExpr { * ``` */ def open[T1, R, X](f: Expr[T1 => R])(content: (Expr[R], [t] => Expr[t] => Expr[T1] => Expr[t]) => X)(using qctx: QuoteContext): X = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} val (params, bodyExpr) = paramsAndBody[R](f) content(bodyExpr, [t] => (e: Expr[t]) => (v: Expr[T1]) => bodyFn[t](e.unseal, params, List(v.unseal)).seal.asInstanceOf[Expr[t]]) } def open[T1, T2, R, X](f: Expr[(T1, T2) => R])(content: (Expr[R], [t] => Expr[t] => (Expr[T1], Expr[T2]) => Expr[t]) => X)(using qctx: QuoteContext)(using DummyImplicit): X = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} val (params, bodyExpr) = paramsAndBody[R](f) content(bodyExpr, [t] => (e: Expr[t]) => (v1: Expr[T1], v2: Expr[T2]) => bodyFn[t](e.unseal, params, List(v1.unseal, v2.unseal)).seal.asInstanceOf[Expr[t]]) } def open[T1, T2, T3, R, X](f: Expr[(T1, T2, T3) => R])(content: (Expr[R], [t] => Expr[t] => (Expr[T1], Expr[T2], Expr[T3]) => Expr[t]) => X)(using qctx: QuoteContext)(using DummyImplicit, DummyImplicit): X = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} val (params, bodyExpr) = paramsAndBody[R](f) content(bodyExpr, [t] => (e: Expr[t]) => (v1: Expr[T1], v2: Expr[T2], v3: Expr[T3]) => bodyFn[t](e.unseal, params, List(v1.unseal, v2.unseal, v3.unseal)).seal.asInstanceOf[Expr[t]]) } private def paramsAndBody[R](using qctx: QuoteContext)(f: Expr[Any]): (List[qctx.tasty.ValDef], Expr[R]) = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} val Block(List(DefDef("$anonfun", Nil, List(params), _, Some(body))), Closure(Ident("$anonfun"), None)) = f.unseal.etaExpand (params, body.seal.asInstanceOf[Expr[R]]) } private def bodyFn[t](using qctx: QuoteContext)(e: qctx.tasty.Term, params: List[qctx.tasty.ValDef], args: List[qctx.tasty.Term]): qctx.tasty.Term = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} val map = params.map(_.symbol).zip(args).toMap new TreeMap { override def transformTerm(tree: Term)(using ctx: Context): Term = diff --git a/library/src/scala/quoted/util/ExprMap.scala b/library/src/scala/quoted/util/ExprMap.scala index 56ac5dbedd6a..80f83a96c49e 100644 --- a/library/src/scala/quoted/util/ExprMap.scala +++ b/library/src/scala/quoted/util/ExprMap.scala @@ -9,7 +9,7 @@ trait ExprMap { /** Map subexpressions an expression `e` with a type `tpe` */ def transformChildren[T](e: Expr[T])(using qctx: QuoteContext, tpe: Type[T]): Expr[T] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} final class MapChildren() { def transformStatement(tree: Statement)(using ctx: Context): Statement = { diff --git a/library/src/scala/tasty/reflect/ExtractorsPrinter.scala b/library/src/scala/tasty/reflect/ExtractorsPrinter.scala index 4ad5b5cfd363..0b2c1c49f715 100644 --- a/library/src/scala/tasty/reflect/ExtractorsPrinter.scala +++ b/library/src/scala/tasty/reflect/ExtractorsPrinter.scala @@ -2,7 +2,7 @@ package scala.tasty package reflect class ExtractorsPrinter[R <: Reflection & Singleton](val tasty: R) extends Printer[R] { - import tasty.{_, given} + import tasty.{_, given _} def showTree(tree: Tree)(using ctx: Context): String = new Buffer().visitTree(tree).result() diff --git a/library/src/scala/tasty/reflect/SourceCodePrinter.scala b/library/src/scala/tasty/reflect/SourceCodePrinter.scala index 606b952cb191..c77dc92ef0d5 100644 --- a/library/src/scala/tasty/reflect/SourceCodePrinter.scala +++ b/library/src/scala/tasty/reflect/SourceCodePrinter.scala @@ -6,7 +6,7 @@ import scala.quoted.show.SyntaxHighlight /** Printer for fully elaborated representation of the source code */ class SourceCodePrinter[R <: Reflection & Singleton](val tasty: R)(syntaxHighlight: SyntaxHighlight) extends Printer[R] { - import tasty.{_, given} + import tasty.{_, given _} import syntaxHighlight._ def showTree(tree: Tree)(using ctx: Context): String = diff --git a/library/src/scala/tasty/reflect/TreeAccumulator.scala b/library/src/scala/tasty/reflect/TreeAccumulator.scala index 5f21afd0593b..4d0b493b3d8a 100644 --- a/library/src/scala/tasty/reflect/TreeAccumulator.scala +++ b/library/src/scala/tasty/reflect/TreeAccumulator.scala @@ -7,7 +7,7 @@ package reflect * ``` * class MyTreeAccumulator[R <: scala.tasty.Reflection & Singleton](val reflect: R) * extends scala.tasty.reflect.TreeAccumulator[X] { - * import reflect.{given, _} + * import reflect.{given _, _} * def foldTree(x: X, tree: Tree)(using ctx: Context): X = ... * } * ``` @@ -15,7 +15,7 @@ package reflect trait TreeAccumulator[X] { val reflect: Reflection - import reflect.{given, _} + import reflect.{given _, _} // Ties the knot of the traversal: call `foldOver(x, tree))` to dive in the `tree` node. def foldTree(x: X, tree: Tree)(using ctx: Context): X diff --git a/library/src/scala/tasty/reflect/TreeMap.scala b/library/src/scala/tasty/reflect/TreeMap.scala index 5cf52c000976..e363d1c9a132 100644 --- a/library/src/scala/tasty/reflect/TreeMap.scala +++ b/library/src/scala/tasty/reflect/TreeMap.scala @@ -7,7 +7,7 @@ package reflect * ``` * class MyTreeMap[R <: scala.tasty.Reflection & Singleton](val reflect: R) * extends scala.tasty.reflect.TreeMap { - * import reflect.{given, _} + * import reflect.{given _, _} * override def transformTree(tree: Tree)(using ctx: Context): Tree = ... * } * ``` @@ -15,7 +15,7 @@ package reflect trait TreeMap { val reflect: Reflection - import reflect.{given, _} + import reflect.{given _, _} def transformTree(tree: Tree)(using ctx: Context): Tree = { tree match { diff --git a/tests/neg-macros/macros-in-same-project-6/Foo.scala b/tests/neg-macros/macros-in-same-project-6/Foo.scala index e877c774a5fa..08097785f6a1 100644 --- a/tests/neg-macros/macros-in-same-project-6/Foo.scala +++ b/tests/neg-macros/macros-in-same-project-6/Foo.scala @@ -5,7 +5,7 @@ object Foo { inline def myMacro(): Unit = ${ aMacroImplementation } def aMacroImplementation(using qctx: QuoteContext) : Expr[Unit] = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} error("some error", rootPosition) throw new NoClassDefFoundError("Bar$") } diff --git a/tests/neg/i7048e.scala b/tests/neg/i7048e.scala index 6a5a4debae46..610d0c7711e9 100644 --- a/tests/neg/i7048e.scala +++ b/tests/neg/i7048e.scala @@ -1,4 +1,4 @@ -import scala.quoted.{given, _} +import scala.quoted.{given _, _} abstract class Test { type T @@ -13,7 +13,7 @@ abstract class Test { { val t: Test = this - import t.{given} + import t.{given _} println(summon[Type[t.T]].show) // val r = '{Option.empty[t.T]} // access to value t from wrong staging level val r2 = '{Option.empty[${t.T}]} // works diff --git a/tests/neg/i8050.scala b/tests/neg/i8050.scala index 8b72b09bc275..905361fe4e49 100644 --- a/tests/neg/i8050.scala +++ b/tests/neg/i8050.scala @@ -1,5 +1,5 @@ -object stuff with +object stuff: def exec(dir: Int) = ??? -extension on (a: Int) with +extension on (a: Int): inline def exec: Unit = stuff.exec("aaa") // error diff --git a/tests/pos/i7048e.scala b/tests/pos/i7048e.scala index 3234edfeb9c5..a516faf24990 100644 --- a/tests/pos/i7048e.scala +++ b/tests/pos/i7048e.scala @@ -1,4 +1,4 @@ -import scala.quoted.{given, _} +import scala.quoted.{given _, _} abstract class Test { type T @@ -13,7 +13,7 @@ abstract class Test { { val t: Test = this - import t.{given} + import t.{given _} println(summon[Type[t.T]].show) // val r = '{Option.empty[t.T]} // access to value t from wrong staging level val r2 = '{Option.empty[${t.T}]} diff --git a/tests/pos/i7887.scala b/tests/pos/i7887.scala index e505aa02fb6c..587c0f4df6c7 100644 --- a/tests/pos/i7887.scala +++ b/tests/pos/i7887.scala @@ -1,5 +1,5 @@ def typed[A](using t: quoted.Type[A], qctx: quoted.QuoteContext): Unit = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} '{ type T = $t ${'{???}.cast[T]} diff --git a/tests/pos/single-case.scala b/tests/pos/single-case.scala index 82466ec31733..2552f05129a6 100644 --- a/tests/pos/single-case.scala +++ b/tests/pos/single-case.scala @@ -1,4 +1,4 @@ -object test with +object test: try println("hi") diff --git a/tests/run-custom-args/Yretain-trees/tasty-extractors-owners/quoted_1.scala b/tests/run-custom-args/Yretain-trees/tasty-extractors-owners/quoted_1.scala index 6951e5e71e90..3c198379df85 100644 --- a/tests/run-custom-args/Yretain-trees/tasty-extractors-owners/quoted_1.scala +++ b/tests/run-custom-args/Yretain-trees/tasty-extractors-owners/quoted_1.scala @@ -19,7 +19,7 @@ object Macros { } class MyTraverser[R <: scala.tasty.Reflection & Singleton](val reflect: R)(buff: StringBuilder) extends scala.tasty.reflect.TreeTraverser { - import reflect.{given, _} + import reflect.{given _, _} override def traverseTree(tree: Tree)(implicit ctx: Context): Unit = { tree match { case tree @ DefDef(name, _, _, _, _) => diff --git a/tests/run-custom-args/tasty-inspector/i8163.scala b/tests/run-custom-args/tasty-inspector/i8163.scala index 944e3f46ede0..1742b93b8278 100644 --- a/tests/run-custom-args/tasty-inspector/i8163.scala +++ b/tests/run-custom-args/tasty-inspector/i8163.scala @@ -21,7 +21,7 @@ class TestInspector() extends TastyInspector: inspectClass(reflect)(root) private def inspectClass(reflect: Reflection)(tree: reflect.Tree): Unit = - import reflect.{given,_} + import reflect.{given _, _} tree match { case t: reflect.PackageClause => t.stats.map( m => inspectClass(reflect)(m) ) diff --git a/tests/run-macros/gestalt-type-toolbox-reflect/Macro_1.scala b/tests/run-macros/gestalt-type-toolbox-reflect/Macro_1.scala index 00f59e9e15e1..4f08ca8a76f0 100644 --- a/tests/run-macros/gestalt-type-toolbox-reflect/Macro_1.scala +++ b/tests/run-macros/gestalt-type-toolbox-reflect/Macro_1.scala @@ -43,7 +43,7 @@ object TypeToolbox { inline def fieldIn[T](inline mem: String): String = ${fieldInImpl('[T], 'mem)} private def fieldInImpl(t: Type[_], mem: Expr[String])(using qctx: QuoteContext) : Expr[String] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val field = t.unseal.symbol.field(mem.value) Expr(if field.isNoSymbol then "" else field.name) } @@ -57,7 +57,7 @@ object TypeToolbox { inline def methodIn[T](inline mem: String): Seq[String] = ${methodInImpl('[T], 'mem)} private def methodInImpl(t: Type[_], mem: Expr[String])(using qctx: QuoteContext) : Expr[Seq[String]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} Expr(t.unseal.symbol.classMethod(mem.value).map(_.name)) } @@ -69,7 +69,7 @@ object TypeToolbox { inline def method[T](inline mem: String): Seq[String] = ${methodImpl('[T], 'mem)} private def methodImpl(t: Type[_], mem: Expr[String])(using qctx: QuoteContext) : Expr[Seq[String]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} Expr(t.unseal.symbol.method(mem.value).map(_.name)) } diff --git a/tests/run-macros/i6803/Macro_1.scala b/tests/run-macros/i6803/Macro_1.scala index b88e51825c3e..288904bba029 100644 --- a/tests/run-macros/i6803/Macro_1.scala +++ b/tests/run-macros/i6803/Macro_1.scala @@ -9,7 +9,7 @@ object AsObject { def unsafe(i: Int): LineNo = new LineNo(i) inline given LineNo = ${impl} private def impl(using qctx: QuoteContext): Expr[LineNo] = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} '{unsafe(${Expr(rootPosition.startLine)})} } } @@ -21,7 +21,7 @@ package AsPackage { def unsafe(i: Int): LineNo = new LineNo(i) inline given LineNo = ${impl} private def impl(using qctx: QuoteContext): Expr[LineNo] = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} '{unsafe(${Expr(rootPosition.startLine)})} } } diff --git a/tests/run-macros/i7025/Macros_1.scala b/tests/run-macros/i7025/Macros_1.scala index 838b70a78ce6..21ff73b7781f 100644 --- a/tests/run-macros/i7025/Macros_1.scala +++ b/tests/run-macros/i7025/Macros_1.scala @@ -4,7 +4,7 @@ object Macros { inline def debug: Unit = ${Macros.debugImpl} def debugImpl(using qctx: QuoteContext): Expr[Unit] = { - import qctx.tasty.{given, _} + import qctx.tasty.{given _, _} def nearestEnclosingDef(owner: Symbol): Symbol = if owner.isClassDef then owner diff --git a/tests/run-macros/i7887/Macro_1.scala b/tests/run-macros/i7887/Macro_1.scala index e076111b3032..69ea476a3c83 100644 --- a/tests/run-macros/i7887/Macro_1.scala +++ b/tests/run-macros/i7887/Macro_1.scala @@ -1,5 +1,5 @@ def myMacroImpl(a: quoted.Expr[_])(using qctx: quoted.QuoteContext) = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} def typed[A] = { implicit val t: quoted.Type[A] = a.unseal.tpe.widen.seal.asInstanceOf[quoted.Type[A]] '{ diff --git a/tests/run-macros/i8007/Macro_1.scala b/tests/run-macros/i8007/Macro_1.scala index a4c44c1f69c5..d592d92760ea 100644 --- a/tests/run-macros/i8007/Macro_1.scala +++ b/tests/run-macros/i8007/Macro_1.scala @@ -17,7 +17,7 @@ object Macro1 { ${ test1Impl('value) } def test1Impl[T: Type](value: Expr[T])(using qctx: QuoteContext): Expr[List[String]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val mirrorTpe = '[Mirror.Of[T]] diff --git a/tests/run-macros/i8007/Macro_2.scala b/tests/run-macros/i8007/Macro_2.scala index 6f7d80f49815..76e5a63b5367 100644 --- a/tests/run-macros/i8007/Macro_2.scala +++ b/tests/run-macros/i8007/Macro_2.scala @@ -21,7 +21,7 @@ object Macro2 { } def derived[T: Type](ev: Expr[Mirror.Of[T]])(using qctx: QuoteContext): Expr[JsonEncoder[T]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val fields = ev match { case '{ $m: Mirror.ProductOf[T] { type MirroredElemLabels = $t } } => @@ -43,7 +43,7 @@ object Macro2 { inline def test2[T](value: =>T): Unit = ${ test2Impl('value) } def test2Impl[T: Type](value: Expr[T])(using qctx: QuoteContext): Expr[Unit] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val mirrorTpe = '[Mirror.Of[T]] val mirrorExpr = summonExpr(using mirrorTpe).get diff --git a/tests/run-macros/i8007/Macro_3.scala b/tests/run-macros/i8007/Macro_3.scala index d9d3cff58e0a..2ae4e11bdaa4 100644 --- a/tests/run-macros/i8007/Macro_3.scala +++ b/tests/run-macros/i8007/Macro_3.scala @@ -33,7 +33,7 @@ object Eq { } given derived[T: Type](using qctx: QuoteContext) as Expr[Eq[T]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val ev: Expr[Mirror.Of[T]] = summonExpr(using '[Mirror.Of[T]]).get diff --git a/tests/run-macros/i8007/Test_4.scala b/tests/run-macros/i8007/Test_4.scala index 1809d2e023eb..f9cc926c4819 100644 --- a/tests/run-macros/i8007/Test_4.scala +++ b/tests/run-macros/i8007/Test_4.scala @@ -12,7 +12,7 @@ enum Opt[+T] { @main def Test() = { import Opt._ - import Eq.{given, _} + import Eq.{given _, _} val t1 = test1(Person("Test", 23)) println(t1) diff --git a/tests/run-macros/quote-matcher-runtime/quoted_1.scala b/tests/run-macros/quote-matcher-runtime/quoted_1.scala index b6b52232065d..1901c2c9e8b0 100644 --- a/tests/run-macros/quote-matcher-runtime/quoted_1.scala +++ b/tests/run-macros/quote-matcher-runtime/quoted_1.scala @@ -7,7 +7,7 @@ object Macros { inline def matches[A, B](inline a: A, inline b: B): Unit = ${impl('a, 'b)} private def impl[A, B](a: Expr[A], b: Expr[B])(using qctx: QuoteContext) : Expr[Unit] = { - import qctx.tasty.{Bind => _, given, _} + import qctx.tasty.{Bind => _, given _, _} val res = scala.internal.quoted.Expr.unapply[Tuple, Tuple](a)(using b, true, qctx).map { tup => tup.toArray.toList.map { diff --git a/tests/run-macros/quote-type-matcher/quoted_1.scala b/tests/run-macros/quote-type-matcher/quoted_1.scala index 376d0e99a54f..35f82a1181f2 100644 --- a/tests/run-macros/quote-type-matcher/quoted_1.scala +++ b/tests/run-macros/quote-type-matcher/quoted_1.scala @@ -7,7 +7,7 @@ object Macros { inline def matches[A, B]: Unit = ${ matchesExpr('[A], '[B]) } private def matchesExpr[A, B](a: Type[A], b: Type[B])(using qctx: QuoteContext) : Expr[Unit] = { - import qctx.tasty.{Bind => _, given, _} + import qctx.tasty.{Bind => _, given _, _} val res = scala.internal.quoted.Type.unapply[Tuple, Tuple](a)(using b, true, qctx).map { tup => tup.toArray.toList.map { diff --git a/tests/run-macros/tasty-construct-types/Macro_1.scala b/tests/run-macros/tasty-construct-types/Macro_1.scala index f95e2e83bf88..bf091a7ac620 100644 --- a/tests/run-macros/tasty-construct-types/Macro_1.scala +++ b/tests/run-macros/tasty-construct-types/Macro_1.scala @@ -12,7 +12,7 @@ object Macros { class TestAnnotation extends scala.annotation.Annotation def theTestBlockImpl(using qctx : QuoteContext) : Expr[Unit] = { - import qctx.tasty.{_,given} + import qctx.tasty.{_,given _} val x1T = ConstantType(Constant(1)) val x2T = OrType(ConstantType(Constant(1)), ConstantType(Constant(2))) diff --git a/tests/run-macros/tasty-create-method-symbol/Macro_1.scala b/tests/run-macros/tasty-create-method-symbol/Macro_1.scala index ec9dd9f0ff84..def91a4ed8fd 100644 --- a/tests/run-macros/tasty-create-method-symbol/Macro_1.scala +++ b/tests/run-macros/tasty-create-method-symbol/Macro_1.scala @@ -5,7 +5,7 @@ object Macros { inline def theTestBlock : Unit = ${ theTestBlockImpl } def theTestBlockImpl(using qctx: QuoteContext) : Expr[Unit] = { - import qctx.tasty.{_,given} + import qctx.tasty.{_, given _} // simple smoke test val sym1 : Symbol = Symbol.newMethod( diff --git a/tests/run/exports.scala b/tests/run/exports.scala index 288cc70aa880..6fb5de88322b 100644 --- a/tests/run/exports.scala +++ b/tests/run/exports.scala @@ -18,7 +18,7 @@ object Test extends App { object Copier { val printer = new Printer - export printer.{given, _} + export printer.{given _, _} export Scanner.{scan => scanIt, _} val config2 = summon[Config] From fc4b25a9129c83f7a718c1f8abbb723f8ddfa892 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 11 Feb 2020 16:35:59 +0100 Subject: [PATCH 2/7] Drop more outdated import given selectors --- .../reference/contextual/derivation-macro.md | 4 ++-- docs/docs/reference/metaprogramming/macros.md | 2 +- .../reference/metaprogramming/tasty-reflect.md | 10 +++++----- .../src/scala/tasty/reflect/TreeTraverser.scala | 2 +- .../app/Main.scala | 2 +- tastydoc/src/dotty/tastydoc/TastyExtractor.scala | 16 ++++++++-------- .../src/dotty/tastydoc/TastyTypeConverter.scala | 4 ++-- .../src/dotty/tastydoc/representations.scala | 14 +++++++------- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/docs/reference/contextual/derivation-macro.md b/docs/docs/reference/contextual/derivation-macro.md index e648ef0e8322..a85b7ba837f6 100644 --- a/docs/docs/reference/contextual/derivation-macro.md +++ b/docs/docs/reference/contextual/derivation-macro.md @@ -42,7 +42,7 @@ from the signature. The body of the `derived` method is shown below: ```scala given derived[T: Type](using qctx: QuoteContext) as Expr[Eq[T]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val ev: Expr[Mirror.Of[T]] = summonExpr(using '[Mirror.Of[T]]).get @@ -176,7 +176,7 @@ object Eq { } given derived[T: Type](using qctx: QuoteContext) as Expr[Eq[T]] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val ev: Expr[Mirror.Of[T]] = summonExpr(using '[Mirror.Of[T]]).get diff --git a/docs/docs/reference/metaprogramming/macros.md b/docs/docs/reference/metaprogramming/macros.md index 40c18c2221ec..101cefa9efec 100644 --- a/docs/docs/reference/metaprogramming/macros.md +++ b/docs/docs/reference/metaprogramming/macros.md @@ -221,7 +221,7 @@ Here’s a compiler that maps an expression given in the interpreted language to quoted Scala code of type `Expr[Int]`. The compiler takes an environment that maps variable names to Scala `Expr`s. ```scala -import scala.quoted.{given, _} +import scala.quoted.{given _, _} def compile(e: Exp, env: Map[String, Expr[Int]]): Expr[Int] = e match { case Num(n) => diff --git a/docs/docs/reference/metaprogramming/tasty-reflect.md b/docs/docs/reference/metaprogramming/tasty-reflect.md index af3257c26192..a748848c087c 100644 --- a/docs/docs/reference/metaprogramming/tasty-reflect.md +++ b/docs/docs/reference/metaprogramming/tasty-reflect.md @@ -29,14 +29,14 @@ import scala.quoted._ inline def natConst(x: => Int): Int = ${natConstImpl('{x})} def natConstImpl(x: Expr[Int])(using qctx: QuoteContext): Expr[Int] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} ... } ``` ### Sealing and Unsealing -`import qctx.tasty.{_, given}` will provide an `unseal` extension method on `quoted.Expr` +`import qctx.tasty.{_, given _}` will provide an `unseal` extension method on `quoted.Expr` and `quoted.Type` which returns a `qctx.tasty.Term` that represents the tree of the expression and `qctx.tasty.TypeTree` that represents the tree of the type respectively. It will also import all extractors and methods on TASTy Reflect @@ -44,7 +44,7 @@ trees. For example the `Literal(_)` extractor used below. ```scala def natConstImpl(x: Expr[Int])(using qctx: QuoteContext): Expr[Int] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val xTree: Term = x.unseal xTree match { case Inlined(_, _, Literal(Constant(n: Int))) => @@ -81,7 +81,7 @@ operation expression passed while calling the `macro` below. inline def macro(param: => Boolean): Unit = ${ macroImpl('param) } def macroImpl(param: Expr[Boolean])(using qctx: QuoteContext): Expr[Unit] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} import util._ param.unseal.underlyingArgument match { @@ -103,7 +103,7 @@ point. ```scala def macroImpl()(qctx: QuoteContext): Expr[Unit] = { - import qctx.tasty.{_, given} + import qctx.tasty.{_, given _} val pos = rootPosition val path = pos.sourceFile.jpath.toString diff --git a/library/src/scala/tasty/reflect/TreeTraverser.scala b/library/src/scala/tasty/reflect/TreeTraverser.scala index 4159883b4351..97285edd41b1 100644 --- a/library/src/scala/tasty/reflect/TreeTraverser.scala +++ b/library/src/scala/tasty/reflect/TreeTraverser.scala @@ -7,7 +7,7 @@ package reflect * ``` * class MyTraverser[R <: scala.tasty.Reflection & Singleton](val reflect: R) * extends scala.tasty.reflect.TreeTraverser { - * import reflect.{given, _} + * import reflect.{given _, _} * override def traverseTree(tree: Tree)(using ctx: Context): Unit = ... * } * ``` diff --git a/sbt-dotty/sbt-test/sbt-dotty/tasty-inspector-example-project/app/Main.scala b/sbt-dotty/sbt-test/sbt-dotty/tasty-inspector-example-project/app/Main.scala index 2adfc215c442..f12d0ed5e140 100644 --- a/sbt-dotty/sbt-test/sbt-dotty/tasty-inspector-example-project/app/Main.scala +++ b/sbt-dotty/sbt-test/sbt-dotty/tasty-inspector-example-project/app/Main.scala @@ -7,7 +7,7 @@ object Main extends App { val inspector = new TastyInspector { protected def processCompilationUnit(reflect: Reflection)(root: reflect.Tree): Unit = { - import reflect.{given, _} + import reflect.{given _, _} val tastyStr = root.show println(tastyStr) } diff --git a/tastydoc/src/dotty/tastydoc/TastyExtractor.scala b/tastydoc/src/dotty/tastydoc/TastyExtractor.scala index 065b498debaf..1251be0ca078 100644 --- a/tastydoc/src/dotty/tastydoc/TastyExtractor.scala +++ b/tastydoc/src/dotty/tastydoc/TastyExtractor.scala @@ -8,14 +8,14 @@ import dotty.tastydoc.representations._ /** A trait containing useful methods for extracting information from the reflect API */ trait TastyExtractor extends TastyTypeConverter with CommentParser with CommentCleaner{ def extractPath(reflect: Reflection)(symbol: reflect.Symbol) : List[String] = { - import reflect.{given, _} + import reflect.{given _, _} val pathArray = symbol.show.split("\\.") // NOTE: this should print w/o colors, inspect afterwards pathArray.iterator.slice(0, pathArray.length - 1).toList } def extractModifiers(reflect: Reflection)(flags: reflect.Flags, privateWithin: Option[reflect.Type], protectedWithin: Option[reflect.Type]) : (List[String], Option[Reference], Option[Reference]) = { - import reflect.{given, _} + import reflect.{given _, _} (((if(flags.is(Flags.Override)) "override" else "") :: (if(flags.is(Flags.Private)) "private" else ""):: @@ -40,7 +40,7 @@ trait TastyExtractor extends TastyTypeConverter with CommentParser with CommentC } def extractComments(reflect: Reflection)(comment: Option[reflect.Comment], rep: Representation) : (Map[String, EmulatedPackageRepresentation], String) => Option[Comment] = { - import reflect.{given, _} + import reflect.{given _, _} comment match { case Some(com) => @@ -59,7 +59,7 @@ trait TastyExtractor extends TastyTypeConverter with CommentParser with CommentC } def extractClassMembers(reflect: Reflection)(body: List[reflect.Statement], symbol: reflect.Symbol, parentRepresentation: Some[Representation])(using mutablePackagesMap: scala.collection.mutable.HashMap[String, EmulatedPackageRepresentation]) : List[Representation with Modifiers] = { - import reflect.{given, _} + import reflect.{given _, _} /** Filter fields which shouldn't be displayed in the doc */ @@ -99,7 +99,7 @@ trait TastyExtractor extends TastyTypeConverter with CommentParser with CommentC } def extractParents(reflect: Reflection)(parents: List[reflect.Tree]): List[Reference] = { - import reflect.{given, _} + import reflect.{given _, _} val parentsReferences = parents.map{ case c: TypeTree => convertTypeToReference(reflect)(c.tpe) @@ -118,7 +118,7 @@ trait TastyExtractor extends TastyTypeConverter with CommentParser with CommentC * @return (is case, is a trait, is an object, the kind as a String) */ def extractKind(reflect: Reflection)(flags: reflect.Flags): (Boolean, Boolean, Boolean, String) = { - import reflect.{given, _} + import reflect.{given _, _} val isCase = flags.is(reflect.Flags.Case) val isTrait = flags.is(reflect.Flags.Trait) @@ -143,7 +143,7 @@ trait TastyExtractor extends TastyTypeConverter with CommentParser with CommentC } def extractCompanion(reflect: Reflection)(companionModule: Option[reflect.Symbol], companionClass: Option[reflect.Symbol], companionIsObject: Boolean): Option[CompanionReference] = { - import reflect.{given, _} + import reflect.{given _, _} if(companionIsObject){ companionModule match { @@ -165,7 +165,7 @@ trait TastyExtractor extends TastyTypeConverter with CommentParser with CommentC } def extractAnnotations(reflect: Reflection)(annots: List[reflect.Term]): List[TypeReference] = { - import reflect.{given, _} + import reflect.{given _, _} def keepAnnot(label: String, link: String): Boolean = { !(label == "SourceFile" && link == "/internal") && diff --git a/tastydoc/src/dotty/tastydoc/TastyTypeConverter.scala b/tastydoc/src/dotty/tastydoc/TastyTypeConverter.scala index 8c21268c9012..ee5938abb64e 100644 --- a/tastydoc/src/dotty/tastydoc/TastyTypeConverter.scala +++ b/tastydoc/src/dotty/tastydoc/TastyTypeConverter.scala @@ -7,7 +7,7 @@ import dotty.tastydoc.references._ trait TastyTypeConverter { def convertTypeOrBoundsToReference(reflect: Reflection)(typeOrBounds: reflect.TypeOrBounds): Reference = { - import reflect.{given, _} + import reflect.{given _, _} def anyOrNothing(reference: Reference): Boolean = reference match { case TypeReference("Any", "/scala", _, _) => true @@ -30,7 +30,7 @@ trait TastyTypeConverter { } def convertTypeToReference(reflect: Reflection)(tp: reflect.Type): Reference = { - import reflect.{given, _} + import reflect.{given _, _} //Inner method to avoid passing the reflection each time def inner(tp: reflect.Type): Reference = tp match { diff --git a/tastydoc/src/dotty/tastydoc/representations.scala b/tastydoc/src/dotty/tastydoc/representations.scala index 54bb9cd37f34..98e2bad3093f 100644 --- a/tastydoc/src/dotty/tastydoc/representations.scala +++ b/tastydoc/src/dotty/tastydoc/representations.scala @@ -83,7 +83,7 @@ object representations extends TastyExtractor { } class PackageRepresentation(reflect: Reflection, internal: reflect.PackageClause, override val parentRepresentation: Option[Representation])(using mutablePackagesMap: scala.collection.mutable.HashMap[String, EmulatedPackageRepresentation]) extends Representation with Members { - import reflect.{given, _} + import reflect.{given _, _} override val (name, path) = extractPackageNameAndPath(internal.pid.show) override val members = internal.stats.map(convertToRepresentation(reflect)(_, Some(this))) @@ -93,7 +93,7 @@ object representations extends TastyExtractor { } class ImportRepresentation(reflect: Reflection, internal: reflect.Import, override val parentRepresentation: Option[Representation])(using mutablePackagesMap: scala.collection.mutable.HashMap[String, EmulatedPackageRepresentation]) extends Representation { - import reflect.{given, _} + import reflect.{given _, _} override val name = if (internal.selectors.size > 1){ internal.selectors.map(_.toString).mkString("{", ", ", "}") @@ -107,7 +107,7 @@ object representations extends TastyExtractor { } class ClassRepresentation(reflect: Reflection, internal: reflect.ClassDef, override val parentRepresentation: Option[Representation])(using mutablePackagesMap: scala.collection.mutable.HashMap[String, EmulatedPackageRepresentation]) extends Representation with Members with Parents with Modifiers with Companion with Constructors with TypeParams { - import reflect.{given, _} + import reflect.{given _, _} override val path = extractPath(reflect)(internal.symbol) override val parents = extractParents(reflect)(internal.parents) @@ -143,7 +143,7 @@ object representations extends TastyExtractor { } class DefRepresentation(reflect: Reflection, internal: reflect.DefDef, override val parentRepresentation: Option[Representation])(using mutablePackagesMap: scala.collection.mutable.HashMap[String, EmulatedPackageRepresentation]) extends Representation with Modifiers with TypeParams with MultipleParamList with ReturnValue { - import reflect.{given, _} + import reflect.{given _, _} override val name = internal.name override val path = extractPath(reflect)(internal.symbol) @@ -162,7 +162,7 @@ object representations extends TastyExtractor { } class ValRepresentation(reflect: Reflection, internal: reflect.ValDef, override val parentRepresentation: Option[Representation])(using mutablePackagesMap: scala.collection.mutable.HashMap[String, EmulatedPackageRepresentation]) extends Representation with Modifiers with ReturnValue { - import reflect.{given, _} + import reflect.{given _, _} override val name = internal.name override val path = extractPath(reflect)(internal.symbol) @@ -175,7 +175,7 @@ object representations extends TastyExtractor { } class TypeRepresentation(reflect: Reflection, internal: reflect.TypeDef, override val parentRepresentation: Option[Representation])(using mutablePackagesMap: scala.collection.mutable.HashMap[String, EmulatedPackageRepresentation]) extends Representation with Modifiers with TypeParams { - import reflect.{given, _} + import reflect.{given _, _} override val name = internal.name override val path = extractPath(reflect)(internal.symbol) @@ -192,7 +192,7 @@ object representations extends TastyExtractor { } def convertToRepresentation(reflect: Reflection)(tree: reflect.Tree, parentRepresentation: Option[Representation])(using mutablePackagesMap: scala.collection.mutable.HashMap[String, EmulatedPackageRepresentation]): Representation = { - import reflect.{given, _} + import reflect.{given _, _} tree match { case t: reflect.PackageClause => From 0beb6115539306b1f2982d9cb5969bfc987b1cc6 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 11 Feb 2020 16:40:25 +0100 Subject: [PATCH 3/7] change given import in CB --- community-build/community-projects/intent | 2 +- community-build/community-projects/minitest | 2 +- community-build/community-projects/scalatest | 2 +- community-build/community-projects/shapeless | 2 +- community-build/community-projects/sourcecode | 2 +- community-build/community-projects/utest | 2 +- community-build/community-projects/xml-interpolator | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/community-build/community-projects/intent b/community-build/community-projects/intent index eaa371728969..1eaf2595767d 160000 --- a/community-build/community-projects/intent +++ b/community-build/community-projects/intent @@ -1 +1 @@ -Subproject commit eaa3717289691ea9a63e57554090d2d1a4af47c9 +Subproject commit 1eaf2595767dd6d8795927772c2f8305087fc826 diff --git a/community-build/community-projects/minitest b/community-build/community-projects/minitest index bda6c70aaeff..2519e32e8966 160000 --- a/community-build/community-projects/minitest +++ b/community-build/community-projects/minitest @@ -1 +1 @@ -Subproject commit bda6c70aaeff686769dc4ac38ce31573bec93a08 +Subproject commit 2519e32e896658ec6af4485b1d816968d732b48b diff --git a/community-build/community-projects/scalatest b/community-build/community-projects/scalatest index ddf5f3dcaf7c..01f7aaafcffb 160000 --- a/community-build/community-projects/scalatest +++ b/community-build/community-projects/scalatest @@ -1 +1 @@ -Subproject commit ddf5f3dcaf7c0e7893464a658e71020f2acc942c +Subproject commit 01f7aaafcffbb70f7ce6234a4c32b3dda0e4e5c1 diff --git a/community-build/community-projects/shapeless b/community-build/community-projects/shapeless index 34afa34d1b50..93fa0e18238f 160000 --- a/community-build/community-projects/shapeless +++ b/community-build/community-projects/shapeless @@ -1 +1 @@ -Subproject commit 34afa34d1b5000590beeb88e3d027d792675b8c6 +Subproject commit 93fa0e18238fa9e804a47a2252c2039074722057 diff --git a/community-build/community-projects/sourcecode b/community-build/community-projects/sourcecode index 9355583297d3..c5925bd7897a 160000 --- a/community-build/community-projects/sourcecode +++ b/community-build/community-projects/sourcecode @@ -1 +1 @@ -Subproject commit 9355583297d3f25f8dda8707d9c86eadd897119b +Subproject commit c5925bd7897ad6e00e0560e815899cbb8a2eb429 diff --git a/community-build/community-projects/utest b/community-build/community-projects/utest index e3a528df6f71..f273216caec3 160000 --- a/community-build/community-projects/utest +++ b/community-build/community-projects/utest @@ -1 +1 @@ -Subproject commit e3a528df6f71e424d8341c9e6bdf7231f5dc5e5b +Subproject commit f273216caec39f220065db855c1a846a8f81a9e2 diff --git a/community-build/community-projects/xml-interpolator b/community-build/community-projects/xml-interpolator index 5fbcc74d8016..5febf011eca2 160000 --- a/community-build/community-projects/xml-interpolator +++ b/community-build/community-projects/xml-interpolator @@ -1 +1 @@ -Subproject commit 5fbcc74d8016e4914bb9f4c8776c7d7f17317c65 +Subproject commit 5febf011eca21c180dfe8805345c3bc4e7f55140 From 9ea94d8fbd821049b6fbcc798d0b613b42c8931e Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 11 Feb 2020 17:49:37 +0100 Subject: [PATCH 4/7] change given import in CB (2) --- community-build/community-projects/munit | 2 +- community-build/community-projects/sourcecode | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/community-build/community-projects/munit b/community-build/community-projects/munit index 17db2aa50172..d3a77a8ac8b1 160000 --- a/community-build/community-projects/munit +++ b/community-build/community-projects/munit @@ -1 +1 @@ -Subproject commit 17db2aa50172fe2811ee7c6799c0530b1a211be0 +Subproject commit d3a77a8ac8b1c4900a79011a7ad988712af67d72 diff --git a/community-build/community-projects/sourcecode b/community-build/community-projects/sourcecode index c5925bd7897a..609ef3f28d54 160000 --- a/community-build/community-projects/sourcecode +++ b/community-build/community-projects/sourcecode @@ -1 +1 @@ -Subproject commit c5925bd7897ad6e00e0560e815899cbb8a2eb429 +Subproject commit 609ef3f28d5408336508193c30d9a11a1252321e From 1c39c8a56571d8c3562f5fd2208fdafb986de4b6 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 11 Feb 2020 17:24:08 +0100 Subject: [PATCH 5/7] Drop `with` + `` syntax It's now `:` instead of the trailing `with`. --- community-build/community-projects/intent | 2 +- compiler/src/dotty/tools/dotc/parsing/Parsers.scala | 10 ++-------- compiler/src/dotty/tools/dotc/parsing/Tokens.scala | 4 ++-- .../dotty/tools/dotc/semanticdb/SemanticdbTests.scala | 2 +- tests/pos/new-with.scala | 1 - 5 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 tests/pos/new-with.scala diff --git a/community-build/community-projects/intent b/community-build/community-projects/intent index 1eaf2595767d..ed27ad8c248c 160000 --- a/community-build/community-projects/intent +++ b/community-build/community-projects/intent @@ -1 +1 @@ -Subproject commit 1eaf2595767dd6d8795927772c2f8305087fc826 +Subproject commit ed27ad8c248cc879504cd14939f1c505a9bb2060 diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index 3b4dab7404df..ba0dbaced777 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -646,15 +646,13 @@ object Parsers { else body() case _ => body() - /** If indentation is not significant, check that this is not the start of a - * statement that's indented relative to the current region. - * TODO: Drop if `with` is required before indented template definitions. + /** Check that this is not the start of a statement that's indented relative to the current region. */ def checkNextNotIndented(): Unit = in.currentRegion match case r: IndentSignificantRegion if in.isNewLine => val nextIndentWidth = in.indentWidth(in.next.offset) if r.indentWidth < nextIndentWidth then - warning(i"Line is indented too far to the right, or a `{` is missing", in.next.offset) + warning(i"Line is indented too far to the right, or a `{` or `:` is missing", in.next.offset) case _ => /* -------- REWRITES ----------------------------------------------------------- */ @@ -1292,10 +1290,6 @@ object Parsers { in.nextToken() if in.token != INDENT then syntaxError(i"indented definitions expected") - else if in.token == WITH then - in.nextToken() - if in.token != LBRACE && in.token != INDENT then - syntaxError(i"indented definitions or `{` expected") else newLineOptWhenFollowedBy(LBRACE) diff --git a/compiler/src/dotty/tools/dotc/parsing/Tokens.scala b/compiler/src/dotty/tools/dotc/parsing/Tokens.scala index adc99bf5f8be..31a77e51933e 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Tokens.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Tokens.scala @@ -257,7 +257,7 @@ object Tokens extends TokensCommon { AT, CASE) final val canEndStatTokens: TokenSet = atomicExprTokens | BitSet( - TYPE, GIVEN, RPAREN, RBRACE, RBRACKET, OUTDENT) // TODO: remove GIVEN once old import syntax is dropped + TYPE, RPAREN, RBRACE, RBRACKET, OUTDENT) // TODO: remove GIVEN once old import syntax is dropped /** Tokens that stop a lookahead scan search for a `<-`, `then`, or `do`. * Used for disambiguating between old and new syntax. @@ -272,7 +272,7 @@ object Tokens extends TokensCommon { final val closingRegionTokens = BitSet(RBRACE, CASE) | statCtdTokens final val canStartIndentTokens: BitSet = - statCtdTokens | BitSet(COLONEOL, EQUALS, ARROW, LARROW, WHILE, TRY, FOR, IF, WITH) + statCtdTokens | BitSet(COLONEOL, EQUALS, ARROW, LARROW, WHILE, TRY, FOR, IF) // `if` is excluded because it often comes after `else` which makes for awkward indentation rules TODO: try to do without the exception /** Faced with the choice between a type and a formal parameter, the following diff --git a/compiler/test/dotty/tools/dotc/semanticdb/SemanticdbTests.scala b/compiler/test/dotty/tools/dotc/semanticdb/SemanticdbTests.scala index da753c6413ae..de21de573254 100644 --- a/compiler/test/dotty/tools/dotc/semanticdb/SemanticdbTests.scala +++ b/compiler/test/dotty/tools/dotc/semanticdb/SemanticdbTests.scala @@ -121,7 +121,7 @@ class SemanticdbTests: end SemanticdbTests -object SemanticdbTests with +object SemanticdbTests: /** Prettyprint a text document with symbol occurrences next to each resolved identifier. * * Useful for testing purposes to ensure that SymbolOccurrence values make sense and are correct. diff --git a/tests/pos/new-with.scala b/tests/pos/new-with.scala deleted file mode 100644 index a4a18e2406d5..000000000000 --- a/tests/pos/new-with.scala +++ /dev/null @@ -1 +0,0 @@ -val x = new with { } // error \ No newline at end of file From 84fdb03a8b559c7489fc6ce42edbc26ce9772d72 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 11 Feb 2020 22:23:54 +0100 Subject: [PATCH 6/7] change with in CB (2) --- community-build/community-projects/intent | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community-build/community-projects/intent b/community-build/community-projects/intent index ed27ad8c248c..ee91e5a8f9b0 160000 --- a/community-build/community-projects/intent +++ b/community-build/community-projects/intent @@ -1 +1 @@ -Subproject commit ed27ad8c248cc879504cd14939f1c505a9bb2060 +Subproject commit ee91e5a8f9b05c46b088628ac35fdf68a18a8188 From da645f3f5f39be2abbf7b285ff695f21e6db8e09 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 11 Feb 2020 23:14:16 +0100 Subject: [PATCH 7/7] Change with to `:` in xml interpolator --- community-build/community-projects/xml-interpolator | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community-build/community-projects/xml-interpolator b/community-build/community-projects/xml-interpolator index 5febf011eca2..bf2440fb6539 160000 --- a/community-build/community-projects/xml-interpolator +++ b/community-build/community-projects/xml-interpolator @@ -1 +1 @@ -Subproject commit 5febf011eca21c180dfe8805345c3bc4e7f55140 +Subproject commit bf2440fb65399c5c34e587e3d314d8d0cc4f98c3