From c691bebad21b93a450531d5783bcb213c3aa57bf Mon Sep 17 00:00:00 2001 From: Martijn Hoekstra Date: Sat, 28 Mar 2020 21:48:15 +0100 Subject: [PATCH 1/6] failing positions --- .../tools/dotc/parsing/PositionTest.scala | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 compiler/test/dotty/tools/dotc/parsing/PositionTest.scala diff --git a/compiler/test/dotty/tools/dotc/parsing/PositionTest.scala b/compiler/test/dotty/tools/dotc/parsing/PositionTest.scala new file mode 100644 index 000000000000..97b79a559989 --- /dev/null +++ b/compiler/test/dotty/tools/dotc/parsing/PositionTest.scala @@ -0,0 +1,43 @@ +package dotty.tools +package dotc +package parsing + +import ast.untpd._ +import org.junit.Test + +class PositionTest extends ParserTest { + + val tq = "\"\"\"" + val program = s""" + |class A { + | val expr = 42 + | val s0 = s"string1" + | val s1 = s"string1$${expr}string2" + | val s2 = s"string1$${expr}string2$${expr}string3" + | val s0m = s${tq}string1${tq} + | val s1m = s${tq}string1$${expr}string2${tq} + | val s2m = s${tq}string1$${expr}string2$${expr}string3${tq} + |}""".stripMargin + + @Test + def interpolationLiteralPosition: Unit = { + val t = parseText(program) + t match { + case PackageDef(_, List(TypeDef(_, Template(_, _, _, statements: List[Tree])))) => { + val interpolations = statements.collect{ case ValDef(_, _, InterpolatedString(_, int)) => int } + val lits = interpolations.flatten.flatMap { + case l @ Literal(_) => List(l) + case Thicket(trees) => trees.collect { case l @ Literal(_) => l } + } + for { + lit <- lits + Literal(c) = lit + str <- List(c.value).collect { case str: String => str} + } { + val fromPos = program.substring(lit.span.start, lit.span.end) + assert(fromPos == str, s"$fromPos == $str") + } + } + } + } +} \ No newline at end of file From a8040df67c5d801dcada4c1a0ab3573842dd7a44 Mon Sep 17 00:00:00 2001 From: Martijn Hoekstra Date: Sun, 29 Mar 2020 13:12:41 +0200 Subject: [PATCH 2/6] offset correction for stringlit interpolation --- compiler/src/dotty/tools/dotc/parsing/Parsers.scala | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index cacfbc9d0ff9..7510a0be6914 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -1245,12 +1245,16 @@ object Parsers { } }) - if (in.token == STRINGPART) - nextSegment(in.offset + (if (isTripleQuoted) 3 else 1)) + var offsetCorrection = if isTripleQuoted then 3 else 1 + def offset = { + val result = in.offset + offsetCorrection + offsetCorrection = 0 + result + } while (in.token == STRINGPART) - nextSegment(in.offset) + nextSegment(offset) if (in.token == STRINGLIT) - segmentBuf += literal(inPattern = inPattern, negOffset = in.offset, inStringInterpolation = true) + segmentBuf += literal(inPattern = inPattern, negOffset = offset, inStringInterpolation = true) InterpolatedString(interpolator, segmentBuf.toList) } From e55aa855504e8e822a0b649bdc2ec26cf6dde36b Mon Sep 17 00:00:00 2001 From: Martijn Hoekstra Date: Sun, 29 Mar 2020 13:51:49 +0200 Subject: [PATCH 3/6] adjust repl test position fix is a big word -- I'm not sure where it's pointing now is any better than where it was. --- compiler/test-resources/repl/i6676 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/test-resources/repl/i6676 b/compiler/test-resources/repl/i6676 index 9fc239ca9855..38136fa0c8bb 100644 --- a/compiler/test-resources/repl/i6676 +++ b/compiler/test-resources/repl/i6676 @@ -7,8 +7,8 @@ scala> xml" | ';' expected, but eof found scala> xml"" 1 | xml"" - | ^ - | value xml is not a member of StringContext + | ^ + | value xml is not a member of StringContext scala> xml""" 1 | xml""" | ^ From 506a9c4fb7f2bb5f7694e62c75475e36a9cebbae Mon Sep 17 00:00:00 2001 From: Martijn Hoekstra Date: Mon, 30 Mar 2020 11:33:56 +0200 Subject: [PATCH 4/6] incorporate review --- .../src/dotty/tools/dotc/ast/Desugar.scala | 2 +- .../dotty/tools/dotc/parsing/Parsers.scala | 10 ++--- compiler/test-resources/repl/i6676 | 4 +- .../tools/dotc/parsing/PositionTest.scala | 43 ------------------- 4 files changed, 6 insertions(+), 53 deletions(-) delete mode 100644 compiler/test/dotty/tools/dotc/parsing/PositionTest.scala diff --git a/compiler/src/dotty/tools/dotc/ast/Desugar.scala b/compiler/src/dotty/tools/dotc/ast/Desugar.scala index c3a43f244e69..5017b0ae5458 100644 --- a/compiler/src/dotty/tools/dotc/ast/Desugar.scala +++ b/compiler/src/dotty/tools/dotc/ast/Desugar.scala @@ -1665,7 +1665,7 @@ object desugar { case t => t } // This is a deliberate departure from scalac, where StringContext is not rooted (See #4732) - Apply(Select(Apply(scalaDot(nme.StringContext), strs), id), elems) + Apply(Select(Apply(scalaDot(nme.StringContext).withSpan(tree.span), strs), id), elems) case PostfixOp(t, op) => if ((ctx.mode is Mode.Type) && !isBackquoted(op) && op.name == tpnme.raw.STAR) { val seqType = if (ctx.compilationUnit.isJava) defn.ArrayType else defn.SeqType diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index 7510a0be6914..f79900313bc6 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -1246,15 +1246,11 @@ object Parsers { }) var offsetCorrection = if isTripleQuoted then 3 else 1 - def offset = { - val result = in.offset + offsetCorrection - offsetCorrection = 0 - result - } while (in.token == STRINGPART) - nextSegment(offset) + nextSegment(in.offset + offsetCorrection) + offsetCorrection = 0 if (in.token == STRINGLIT) - segmentBuf += literal(inPattern = inPattern, negOffset = offset, inStringInterpolation = true) + segmentBuf += literal(inPattern = inPattern, negOffset = in.offset + offsetCorrection, inStringInterpolation = true) InterpolatedString(interpolator, segmentBuf.toList) } diff --git a/compiler/test-resources/repl/i6676 b/compiler/test-resources/repl/i6676 index 38136fa0c8bb..519225183e43 100644 --- a/compiler/test-resources/repl/i6676 +++ b/compiler/test-resources/repl/i6676 @@ -7,8 +7,8 @@ scala> xml" | ';' expected, but eof found scala> xml"" 1 | xml"" - | ^ - | value xml is not a member of StringContext + | ^^^^^ + | value xml is not a member of StringContext scala> xml""" 1 | xml""" | ^ diff --git a/compiler/test/dotty/tools/dotc/parsing/PositionTest.scala b/compiler/test/dotty/tools/dotc/parsing/PositionTest.scala deleted file mode 100644 index 97b79a559989..000000000000 --- a/compiler/test/dotty/tools/dotc/parsing/PositionTest.scala +++ /dev/null @@ -1,43 +0,0 @@ -package dotty.tools -package dotc -package parsing - -import ast.untpd._ -import org.junit.Test - -class PositionTest extends ParserTest { - - val tq = "\"\"\"" - val program = s""" - |class A { - | val expr = 42 - | val s0 = s"string1" - | val s1 = s"string1$${expr}string2" - | val s2 = s"string1$${expr}string2$${expr}string3" - | val s0m = s${tq}string1${tq} - | val s1m = s${tq}string1$${expr}string2${tq} - | val s2m = s${tq}string1$${expr}string2$${expr}string3${tq} - |}""".stripMargin - - @Test - def interpolationLiteralPosition: Unit = { - val t = parseText(program) - t match { - case PackageDef(_, List(TypeDef(_, Template(_, _, _, statements: List[Tree])))) => { - val interpolations = statements.collect{ case ValDef(_, _, InterpolatedString(_, int)) => int } - val lits = interpolations.flatten.flatMap { - case l @ Literal(_) => List(l) - case Thicket(trees) => trees.collect { case l @ Literal(_) => l } - } - for { - lit <- lits - Literal(c) = lit - str <- List(c.value).collect { case str: String => str} - } { - val fromPos = program.substring(lit.span.start, lit.span.end) - assert(fromPos == str, s"$fromPos == $str") - } - } - } - } -} \ No newline at end of file From c3432fff5891a7b828bd68709b439a0f3246e550 Mon Sep 17 00:00:00 2001 From: Martijn Hoekstra Date: Mon, 30 Mar 2020 13:02:44 +0200 Subject: [PATCH 5/6] update expect --- tests/semanticdb/expect/Givens.expect.scala | 6 ++-- .../expect/ImplicitConversion.expect.scala | 6 ++-- tests/semanticdb/metac.expect | 29 +++++++++++-------- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/tests/semanticdb/expect/Givens.expect.scala b/tests/semanticdb/expect/Givens.expect.scala index 432250bf3a52..4c8df727c652 100644 --- a/tests/semanticdb/expect/Givens.expect.scala +++ b/tests/semanticdb/expect/Givens.expect.scala @@ -4,11 +4,11 @@ package b object Givens/*<-a::b::Givens.*/: extension on [A](any: A): - def /*<-a::b::Givens.extension_sayHello_A.*//*<-a::b::Givens.extension_sayHello_A.sayHello().[A]*//*<-a::b::Givens.extension_sayHello_A.sayHello().(any)*//*->a::b::Givens.extension_sayHello_A.sayHello().[A]*/sayHello/*<-a::b::Givens.extension_sayHello_A.sayHello().*/ = s"/*->scala::StringContext.apply().*/Hello, I am $any/*->a::b::Givens.extension_sayHello_A.sayHello().(any)*//*->scala::StringContext#s().*/" + def /*<-a::b::Givens.extension_sayHello_A.*//*<-a::b::Givens.extension_sayHello_A.sayHello().[A]*//*<-a::b::Givens.extension_sayHello_A.sayHello().(any)*//*->a::b::Givens.extension_sayHello_A.sayHello().[A]*/sayHello/*<-a::b::Givens.extension_sayHello_A.sayHello().*/ = s"Hello, I am $any"/*->scala::StringContext.*//*->a::b::Givens.extension_sayHello_A.sayHello().(any)*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/ extension on [B](any: B): - def sa/*<-a::b::Givens.extension_sayGoodbye_B.*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*//*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*->a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*/yGoodbye/*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().*/ = s"/*->scala::StringContext.apply().*/Goodbye, from $any/*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*//*->scala::StringContext#s().*/" - def saySoLong/*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().*/ = s"/*->scala::StringContext.apply().*/So Long, from $any/*->a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*//*->scala::StringContext#s().*/" + def sa/*<-a::b::Givens.extension_sayGoodbye_B.*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*//*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*->a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*/yGoodbye/*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().*/ = s"Goodbye, from $any"/*->scala::StringContext.*//*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/ + def saySoLong/*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().*/ = s"So Long, from $any"/*->scala::StringContext.*//*->a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/ val hello1/*<-a::b::Givens.hello1.*/ = /*->a::b::Givens.extension_sayHello_A.sayHello().*/1.sayHello val goodbye1/*<-a::b::Givens.goodbye1.*/ = /*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().*/1.sayGoodbye diff --git a/tests/semanticdb/expect/ImplicitConversion.expect.scala b/tests/semanticdb/expect/ImplicitConversion.expect.scala index 0d13a0af558c..5739e5e50529 100644 --- a/tests/semanticdb/expect/ImplicitConversion.expect.scala +++ b/tests/semanticdb/expect/ImplicitConversion.expect.scala @@ -21,10 +21,10 @@ class ImplicitConversion/*<-example::ImplicitConversion#*/ { val x/*<-example::ImplicitConversion#x.*/: Int/*->scala::Int#*/ = /*->example::ImplicitConversion#string2Number().*/message/*->example::ImplicitConversion#message.*/ // interpolators - s"/*->scala::StringContext.apply().*/Hello $message/*->example::ImplicitConversion#message.*/ $number/*->example::ImplicitConversion#number.*//*->scala::StringContext#s().*/" - /*->scala::Predef.augmentString().*/s"""/*->scala::StringContext.apply().*/Hello + s"Hello $message/*->example::ImplicitConversion#message.*/ $number"/*->scala::StringContext.*//*->example::ImplicitConversion#number.*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/ + /*->scala::Predef.augmentString().*/s"""Hello |$message/*->example::ImplicitConversion#message.*/ - |$number/*->example::ImplicitConversion#number.*//*->scala::StringContext#s().*/""".stripMargin/*->scala::collection::StringOps#stripMargin(+1).*/ + |$number"""/*->scala::StringContext.*//*->example::ImplicitConversion#number.*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/.stripMargin/*->scala::collection::StringOps#stripMargin(+1).*/ val a/*<-example::ImplicitConversion#a.*/: Int/*->scala::Int#*/ = /*->scala::Char.char2int().*/char/*->example::ImplicitConversion#char.*/ val b/*<-example::ImplicitConversion#b.*/: Long/*->scala::Long#*/ = /*->scala::Char.char2long().*/char/*->example::ImplicitConversion#char.*/ diff --git a/tests/semanticdb/metac.expect b/tests/semanticdb/metac.expect index 1c554e0649f3..f37d3940228d 100644 --- a/tests/semanticdb/metac.expect +++ b/tests/semanticdb/metac.expect @@ -1269,7 +1269,7 @@ Uri => Givens.scala Text => empty Language => Scala Symbols => 31 entries -Occurrences => 72 entries +Occurrences => 75 entries Symbols: a/b/Givens. => final object Givens @@ -1313,9 +1313,10 @@ Occurrences: [5:19..5:22): any <- a/b/Givens.extension_sayHello_A.sayHello().(any) [5:24..5:25): A -> a/b/Givens.extension_sayHello_A.sayHello().[A] [6:8..6:16): sayHello <- a/b/Givens.extension_sayHello_A.sayHello(). -[6:21..6:21): -> scala/StringContext.apply(). +[6:25..6:38): o, I am $any" -> scala/StringContext. [6:34..6:37): any -> a/b/Givens.extension_sayHello_A.sayHello().(any) -[6:37..6:37): -> scala/StringContext#s(). +[6:38..6:38): -> scala/StringContext#s(). +[6:38..6:38): -> scala/StringContext.apply(). [8:16..9:10): <- a/b/Givens.extension_sayGoodbye_B. [8:16..8:17): B <- a/b/Givens.extension_sayGoodbye_B.sayGoodbye().[B] [8:16..8:17): B <- a/b/Givens.extension_sayGoodbye_B.saySoLong().[B] @@ -1324,13 +1325,15 @@ Occurrences: [8:24..8:25): B -> a/b/Givens.extension_sayGoodbye_B.sayGoodbye().[B] [8:24..8:25): B -> a/b/Givens.extension_sayGoodbye_B.saySoLong().[B] [9:8..9:18): sayGoodbye <- a/b/Givens.extension_sayGoodbye_B.sayGoodbye(). -[9:23..9:23): -> scala/StringContext.apply(). +[9:29..9:42): e, from $any" -> scala/StringContext. [9:38..9:41): any -> a/b/Givens.extension_sayGoodbye_B.sayGoodbye().(any) -[9:41..9:41): -> scala/StringContext#s(). +[9:42..9:42): -> scala/StringContext#s(). +[9:42..9:42): -> scala/StringContext.apply(). [10:8..10:17): saySoLong <- a/b/Givens.extension_sayGoodbye_B.saySoLong(). -[10:22..10:22): -> scala/StringContext.apply(). +[10:28..10:41): g, from $any" -> scala/StringContext. [10:37..10:40): any -> a/b/Givens.extension_sayGoodbye_B.saySoLong().(any) -[10:40..10:40): -> scala/StringContext#s(). +[10:41..10:41): -> scala/StringContext#s(). +[10:41..10:41): -> scala/StringContext.apply(). [12:6..12:12): hello1 <- a/b/Givens.hello1. [12:15..12:15): -> a/b/Givens.extension_sayHello_A.sayHello(). [13:6..13:14): goodbye1 <- a/b/Givens.goodbye1. @@ -1387,7 +1390,7 @@ Uri => ImplicitConversion.scala Text => empty Language => Scala Symbols => 23 entries -Occurrences => 62 entries +Occurrences => 64 entries Symbols: example/ImplicitConversion# => class ImplicitConversion @@ -1442,15 +1445,17 @@ Occurrences: [20:9..20:12): Int -> scala/Int# [20:15..20:15): -> example/ImplicitConversion#string2Number(). [20:15..20:22): message -> example/ImplicitConversion#message. -[23:4..23:4): -> scala/StringContext.apply(). [23:11..23:18): message -> example/ImplicitConversion#message. +[23:14..23:27): sage $number" -> scala/StringContext. [23:20..23:26): number -> example/ImplicitConversion#number. -[23:26..23:26): -> scala/StringContext#s(). +[23:27..23:27): -> scala/StringContext#s(). +[23:27..23:27): -> scala/StringContext.apply(). [24:2..24:2): -> scala/Predef.augmentString(). -[24:6..24:6): -> scala/StringContext.apply(). [25:7..25:14): message -> example/ImplicitConversion#message. +[26:3..26:16): |$number""" -> scala/StringContext. [26:7..26:13): number -> example/ImplicitConversion#number. -[26:13..26:13): -> scala/StringContext#s(). +[26:16..26:16): -> scala/StringContext#s(). +[26:16..26:16): -> scala/StringContext.apply(). [26:17..26:28): stripMargin -> scala/collection/StringOps#stripMargin(+1). [28:6..28:7): a <- example/ImplicitConversion#a. [28:9..28:12): Int -> scala/Int# From 31e946445265bf57aa1d6193deaf470c8222a2e6 Mon Sep 17 00:00:00 2001 From: Martijn Hoekstra Date: Mon, 30 Mar 2020 16:05:22 +0200 Subject: [PATCH 6/6] alternative position correction --- .../src/dotty/tools/dotc/ast/Desugar.scala | 2 +- tests/semanticdb/expect/Givens.expect.scala | 6 ++-- .../expect/ImplicitConversion.expect.scala | 6 ++-- tests/semanticdb/metac.expect | 29 ++++++++----------- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/ast/Desugar.scala b/compiler/src/dotty/tools/dotc/ast/Desugar.scala index 5017b0ae5458..97aba9d9e106 100644 --- a/compiler/src/dotty/tools/dotc/ast/Desugar.scala +++ b/compiler/src/dotty/tools/dotc/ast/Desugar.scala @@ -1665,7 +1665,7 @@ object desugar { case t => t } // This is a deliberate departure from scalac, where StringContext is not rooted (See #4732) - Apply(Select(Apply(scalaDot(nme.StringContext).withSpan(tree.span), strs), id), elems) + Apply(Select(Apply(scalaDot(nme.StringContext), strs), id).withSpan(tree.span), elems) case PostfixOp(t, op) => if ((ctx.mode is Mode.Type) && !isBackquoted(op) && op.name == tpnme.raw.STAR) { val seqType = if (ctx.compilationUnit.isJava) defn.ArrayType else defn.SeqType diff --git a/tests/semanticdb/expect/Givens.expect.scala b/tests/semanticdb/expect/Givens.expect.scala index 4c8df727c652..95af643e9ddd 100644 --- a/tests/semanticdb/expect/Givens.expect.scala +++ b/tests/semanticdb/expect/Givens.expect.scala @@ -4,11 +4,11 @@ package b object Givens/*<-a::b::Givens.*/: extension on [A](any: A): - def /*<-a::b::Givens.extension_sayHello_A.*//*<-a::b::Givens.extension_sayHello_A.sayHello().[A]*//*<-a::b::Givens.extension_sayHello_A.sayHello().(any)*//*->a::b::Givens.extension_sayHello_A.sayHello().[A]*/sayHello/*<-a::b::Givens.extension_sayHello_A.sayHello().*/ = s"Hello, I am $any"/*->scala::StringContext.*//*->a::b::Givens.extension_sayHello_A.sayHello().(any)*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/ + def /*<-a::b::Givens.extension_sayHello_A.*//*<-a::b::Givens.extension_sayHello_A.sayHello().[A]*//*<-a::b::Givens.extension_sayHello_A.sayHello().(any)*//*->a::b::Givens.extension_sayHello_A.sayHello().[A]*/sayHello/*<-a::b::Givens.extension_sayHello_A.sayHello().*/ = s"/*->scala::StringContext.apply().*/Hello, I am $any/*->a::b::Givens.extension_sayHello_A.sayHello().(any)*/"/*->scala::StringContext#s().*/ extension on [B](any: B): - def sa/*<-a::b::Givens.extension_sayGoodbye_B.*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*//*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*->a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*/yGoodbye/*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().*/ = s"Goodbye, from $any"/*->scala::StringContext.*//*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/ - def saySoLong/*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().*/ = s"So Long, from $any"/*->scala::StringContext.*//*->a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/ + def sa/*<-a::b::Givens.extension_sayGoodbye_B.*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*//*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*->a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*/yGoodbye/*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().*/ = s"/*->scala::StringContext.apply().*/Goodbye, from $any/*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*/"/*->scala::StringContext#s().*/ + def saySoLong/*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().*/ = s"/*->scala::StringContext.apply().*/So Long, from $any/*->a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*/"/*->scala::StringContext#s().*/ val hello1/*<-a::b::Givens.hello1.*/ = /*->a::b::Givens.extension_sayHello_A.sayHello().*/1.sayHello val goodbye1/*<-a::b::Givens.goodbye1.*/ = /*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().*/1.sayGoodbye diff --git a/tests/semanticdb/expect/ImplicitConversion.expect.scala b/tests/semanticdb/expect/ImplicitConversion.expect.scala index 5739e5e50529..07b7a8eea820 100644 --- a/tests/semanticdb/expect/ImplicitConversion.expect.scala +++ b/tests/semanticdb/expect/ImplicitConversion.expect.scala @@ -21,10 +21,10 @@ class ImplicitConversion/*<-example::ImplicitConversion#*/ { val x/*<-example::ImplicitConversion#x.*/: Int/*->scala::Int#*/ = /*->example::ImplicitConversion#string2Number().*/message/*->example::ImplicitConversion#message.*/ // interpolators - s"Hello $message/*->example::ImplicitConversion#message.*/ $number"/*->scala::StringContext.*//*->example::ImplicitConversion#number.*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/ - /*->scala::Predef.augmentString().*/s"""Hello + s"/*->scala::StringContext.apply().*/Hello $message/*->example::ImplicitConversion#message.*/ $number/*->example::ImplicitConversion#number.*/"/*->scala::StringContext#s().*/ + /*->scala::Predef.augmentString().*/s"""/*->scala::StringContext.apply().*/Hello |$message/*->example::ImplicitConversion#message.*/ - |$number"""/*->scala::StringContext.*//*->example::ImplicitConversion#number.*//*->scala::StringContext#s().*//*->scala::StringContext.apply().*/.stripMargin/*->scala::collection::StringOps#stripMargin(+1).*/ + |$number/*->example::ImplicitConversion#number.*/"""/*->scala::StringContext#s().*/.stripMargin/*->scala::collection::StringOps#stripMargin(+1).*/ val a/*<-example::ImplicitConversion#a.*/: Int/*->scala::Int#*/ = /*->scala::Char.char2int().*/char/*->example::ImplicitConversion#char.*/ val b/*<-example::ImplicitConversion#b.*/: Long/*->scala::Long#*/ = /*->scala::Char.char2long().*/char/*->example::ImplicitConversion#char.*/ diff --git a/tests/semanticdb/metac.expect b/tests/semanticdb/metac.expect index f37d3940228d..c38dec38b944 100644 --- a/tests/semanticdb/metac.expect +++ b/tests/semanticdb/metac.expect @@ -1269,7 +1269,7 @@ Uri => Givens.scala Text => empty Language => Scala Symbols => 31 entries -Occurrences => 75 entries +Occurrences => 72 entries Symbols: a/b/Givens. => final object Givens @@ -1313,10 +1313,9 @@ Occurrences: [5:19..5:22): any <- a/b/Givens.extension_sayHello_A.sayHello().(any) [5:24..5:25): A -> a/b/Givens.extension_sayHello_A.sayHello().[A] [6:8..6:16): sayHello <- a/b/Givens.extension_sayHello_A.sayHello(). -[6:25..6:38): o, I am $any" -> scala/StringContext. +[6:21..6:21): -> scala/StringContext.apply(). [6:34..6:37): any -> a/b/Givens.extension_sayHello_A.sayHello().(any) -[6:38..6:38): -> scala/StringContext#s(). -[6:38..6:38): -> scala/StringContext.apply(). +[6:37..6:38): " -> scala/StringContext#s(). [8:16..9:10): <- a/b/Givens.extension_sayGoodbye_B. [8:16..8:17): B <- a/b/Givens.extension_sayGoodbye_B.sayGoodbye().[B] [8:16..8:17): B <- a/b/Givens.extension_sayGoodbye_B.saySoLong().[B] @@ -1325,15 +1324,13 @@ Occurrences: [8:24..8:25): B -> a/b/Givens.extension_sayGoodbye_B.sayGoodbye().[B] [8:24..8:25): B -> a/b/Givens.extension_sayGoodbye_B.saySoLong().[B] [9:8..9:18): sayGoodbye <- a/b/Givens.extension_sayGoodbye_B.sayGoodbye(). -[9:29..9:42): e, from $any" -> scala/StringContext. +[9:23..9:23): -> scala/StringContext.apply(). [9:38..9:41): any -> a/b/Givens.extension_sayGoodbye_B.sayGoodbye().(any) -[9:42..9:42): -> scala/StringContext#s(). -[9:42..9:42): -> scala/StringContext.apply(). +[9:41..9:42): " -> scala/StringContext#s(). [10:8..10:17): saySoLong <- a/b/Givens.extension_sayGoodbye_B.saySoLong(). -[10:28..10:41): g, from $any" -> scala/StringContext. +[10:22..10:22): -> scala/StringContext.apply(). [10:37..10:40): any -> a/b/Givens.extension_sayGoodbye_B.saySoLong().(any) -[10:41..10:41): -> scala/StringContext#s(). -[10:41..10:41): -> scala/StringContext.apply(). +[10:40..10:41): " -> scala/StringContext#s(). [12:6..12:12): hello1 <- a/b/Givens.hello1. [12:15..12:15): -> a/b/Givens.extension_sayHello_A.sayHello(). [13:6..13:14): goodbye1 <- a/b/Givens.goodbye1. @@ -1390,7 +1387,7 @@ Uri => ImplicitConversion.scala Text => empty Language => Scala Symbols => 23 entries -Occurrences => 64 entries +Occurrences => 62 entries Symbols: example/ImplicitConversion# => class ImplicitConversion @@ -1445,17 +1442,15 @@ Occurrences: [20:9..20:12): Int -> scala/Int# [20:15..20:15): -> example/ImplicitConversion#string2Number(). [20:15..20:22): message -> example/ImplicitConversion#message. +[23:4..23:4): -> scala/StringContext.apply(). [23:11..23:18): message -> example/ImplicitConversion#message. -[23:14..23:27): sage $number" -> scala/StringContext. [23:20..23:26): number -> example/ImplicitConversion#number. -[23:27..23:27): -> scala/StringContext#s(). -[23:27..23:27): -> scala/StringContext.apply(). +[23:26..23:27): " -> scala/StringContext#s(). [24:2..24:2): -> scala/Predef.augmentString(). +[24:6..24:6): -> scala/StringContext.apply(). [25:7..25:14): message -> example/ImplicitConversion#message. -[26:3..26:16): |$number""" -> scala/StringContext. [26:7..26:13): number -> example/ImplicitConversion#number. -[26:16..26:16): -> scala/StringContext#s(). -[26:16..26:16): -> scala/StringContext.apply(). +[26:15..26:16): " -> scala/StringContext#s(). [26:17..26:28): stripMargin -> scala/collection/StringOps#stripMargin(+1). [28:6..28:7): a <- example/ImplicitConversion#a. [28:9..28:12): Int -> scala/Int#