Skip to content

Commit 569925d

Browse files
committed
semanticdb: drop extension_ for extension methods
1 parent b51151b commit 569925d

File tree

5 files changed

+30
-20
lines changed

5 files changed

+30
-20
lines changed

compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ class ExtractSemanticDB extends Phase:
143143
return
144144
if !excludeDef(tree.symbol)
145145
&& tree.span.hasLength then
146-
registerDefinition(tree.symbol, tree.nameSpan, symbolKinds(tree), tree.source)
146+
registerDefinition(tree.symbol, tree.adjustedNameSpan, symbolKinds(tree), tree.source)
147147
val privateWithin = tree.symbol.privateWithin
148148
if privateWithin.exists then
149149
registerUseGuarded(None, privateWithin, spanOfSymbol(privateWithin, tree.span, tree.source), tree.source)
@@ -283,6 +283,14 @@ class ExtractSemanticDB extends Phase:
283283

284284
end PatternValDef
285285

286+
extension (tree: NamedDefTree):
287+
private def adjustedNameSpan(using Context): Span =
288+
val span = tree.nameSpan
289+
if tree.symbol.is(ExtensionMethod) && tree.name.isExtensionName then
290+
span.withEnd(span.end - ExtractSemanticDB.extensionPrefixLength)
291+
else
292+
span
293+
286294
/** Add semanticdb name of the given symbol to string builder */
287295
private def addSymName(b: StringBuilder, sym: Symbol)(using Context): Unit =
288296

@@ -592,6 +600,8 @@ object ExtractSemanticDB:
592600

593601
val name: String = "extractSemanticDB"
594602

603+
final val extensionPrefixLength = "extension_".length
604+
595605
def write(source: SourceFile, occurrences: List[SymbolOccurrence], symbolInfos: List[SymbolInformation])(using Context): Unit =
596606
def absolutePath(path: Path): Path = path.toAbsolutePath.normalize
597607
def commonPrefix[T](z: T)(i1: Iterable[T], i2: Iterable[T])(app: (T, T) => T): T =

tests/semanticdb/expect/Enums.expect.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ object Enums/*<-_empty_::Enums.*/:
1212
case Hearts/*<-_empty_::Enums.Suits.Hearts.*/, Spades/*<-_empty_::Enums.Suits.Spades.*/, Clubs/*<-_empty_::Enums.Suits.Clubs.*/, Diamonds/*<-_empty_::Enums.Suits.Diamonds.*/
1313

1414
object Suits/*<-_empty_::Enums.Suits.*/:
15-
extension (suit/*<-_empty_::Enums.Suits.extension_isRed().(suit)*/: Suits/*->_empty_::Enums.Suits#*/) def isRed: Boolean /*<-_empty_::Enums.Suits.extension_isRed().*//*->scala::Boolean#*/=
15+
extension (suit/*<-_empty_::Enums.Suits.extension_isRed().(suit)*/: Suits/*->_empty_::Enums.Suits#*/) def isRed/*<-_empty_::Enums.Suits.extension_isRed().*/: Boolean/*->scala::Boolean#*/ =
1616
suit/*->_empty_::Enums.Suits.extension_isRed().(suit)*/ ==/*->scala::Any#`==`().*/ Hearts/*->_empty_::Enums.Suits.Hearts.*/ ||/*->scala::Boolean#`||`().*/ suit/*->_empty_::Enums.Suits.extension_isRed().(suit)*/ ==/*->scala::Any#`==`().*/ Diamonds/*->_empty_::Enums.Suits.Diamonds.*/
1717

18-
extension (suit/*<-_empty_::Enums.Suits.extension_isBlack().(suit)*/: Suits/*->_empty_::Enums.Suits#*/) def isBlack: Boolean /*<-_empty_::Enums.Suits.extension_isBlack().*//*->scala::Boolean#*/= suit/*->_empty_::Enums.Suits.extension_isBlack().(suit)*/ match
18+
extension (suit/*<-_empty_::Enums.Suits.extension_isBlack().(suit)*/: Suits/*->_empty_::Enums.Suits#*/) def isBlack/*<-_empty_::Enums.Suits.extension_isBlack().*/: Boolean/*->scala::Boolean#*/ = suit/*->_empty_::Enums.Suits.extension_isBlack().(suit)*/ match
1919
case Spades/*->_empty_::Enums.Suits.Spades.*/ | Clubs/*->_empty_::Enums.Suits.Clubs.*/ => true
2020
case _ => false
2121

@@ -49,7 +49,7 @@ object Enums/*<-_empty_::Enums.*/:
4949
object <:</*<-_empty_::Enums.`<:<`.*/ :
5050
given [T] as /*<-_empty_::Enums.`<:<`.given_T().*//*<-_empty_::Enums.`<:<`.given_T().[T]*/(T/*->_empty_::Enums.`<:<`.given_T().[T]*/ <:</*->_empty_::Enums.`<:<`#*/ T/*->_empty_::Enums.`<:<`.given_T().[T]*/) = Refl/*->_empty_::Enums.`<:<`.Refl.*//*->_empty_::Enums.`<:<`.Refl.apply().*/()
5151

52-
extension [A/*<-_empty_::Enums.extension_unwrap().[A]*/, B/*<-_empty_::Enums.extension_unwrap().[B]*/](opt/*<-_empty_::Enums.extension_unwrap().(opt)*/: Option/*->scala::Option#*/[A/*->_empty_::Enums.extension_unwrap().[A]*/]) def unwrap(using ev:/*<-_empty_::Enums.extension_unwrap().*//*<-_empty_::Enums.extension_unwrap().(ev)*/ A/*->_empty_::Enums.extension_unwrap().[A]*/ <:</*->_empty_::Enums.`<:<`#*/ Option/*->scala::Option#*/[B/*->_empty_::Enums.extension_unwrap().[B]*/]): Option/*->scala::Option#*/[B/*->_empty_::Enums.extension_unwrap().[B]*/] = ev/*->_empty_::Enums.extension_unwrap().(ev)*/ match
52+
extension [A/*<-_empty_::Enums.extension_unwrap().[A]*/, B/*<-_empty_::Enums.extension_unwrap().[B]*/](opt/*<-_empty_::Enums.extension_unwrap().(opt)*/: Option/*->scala::Option#*/[A/*->_empty_::Enums.extension_unwrap().[A]*/]) def unwrap/*<-_empty_::Enums.extension_unwrap().*/(using ev/*<-_empty_::Enums.extension_unwrap().(ev)*/: A/*->_empty_::Enums.extension_unwrap().[A]*/ <:</*->_empty_::Enums.`<:<`#*/ Option/*->scala::Option#*/[B/*->_empty_::Enums.extension_unwrap().[B]*/]): Option/*->scala::Option#*/[B/*->_empty_::Enums.extension_unwrap().[B]*/] = ev/*->_empty_::Enums.extension_unwrap().(ev)*/ match
5353
case Refl/*->_empty_::Enums.`<:<`.Refl.*//*->_empty_::Enums.`<:<`.Refl.unapply().*/() => opt/*->_empty_::Enums.extension_unwrap().(opt)*/.flatMap/*->scala::Option#flatMap().*/(identity/*->scala::Predef.identity().*//*->local0*/[Option/*->scala::Option#*/[B/*->_empty_::Enums.extension_unwrap().[B]*/]])
5454

5555
val some1/*<-_empty_::Enums.some1.*/ = /*->_empty_::Enums.extension_unwrap().*/Some/*->scala::Some.*//*->scala::Some.apply().*/(Some/*->scala::Some.*//*->scala::Some.apply().*/(1))/*->_empty_::Enums.`<:<`.given_T().*/.unwrap

tests/semanticdb/expect/Givens.expect.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,23 @@ package b
44
object Givens/*<-a::b::Givens.*/:
55

66
extension [A/*<-a::b::Givens.extension_sayHello().[A]*/](any/*<-a::b::Givens.extension_sayHello().(any)*/: A/*->a::b::Givens.extension_sayHello().[A]*/)
7-
def sayHello = s"Hello/*<-a::b::Givens.extension_sayHello().*//*->scala::StringContext.apply().*/, I am $any/*->a::b::Givens.extension_sayHello().(any)*/"/*->scala::StringContext#s().*/
7+
def sayHello/*<-a::b::Givens.extension_sayHello().*/ = s"/*->scala::StringContext.apply().*/Hello, I am $any/*->a::b::Givens.extension_sayHello().(any)*/"/*->scala::StringContext#s().*/
88

99
extension [B/*<-a::b::Givens.extension_sayGoodbye().[B]*//*<-a::b::Givens.extension_saySoLong().[B]*/](any/*<-a::b::Givens.extension_sayGoodbye().(any)*//*<-a::b::Givens.extension_saySoLong().(any)*/: B/*->a::b::Givens.extension_sayGoodbye().[B]*//*->a::b::Givens.extension_saySoLong().[B]*/)
10-
def sayGoodbye = s"Goodb/*<-a::b::Givens.extension_sayGoodbye().*//*->scala::StringContext.apply().*/ye, from $any/*->a::b::Givens.extension_sayGoodbye().(any)*/"/*->scala::StringContext#s().*/
11-
def saySoLong = s"So Lo/*<-a::b::Givens.extension_saySoLong().*//*->scala::StringContext.apply().*/ng, from $any/*->a::b::Givens.extension_saySoLong().(any)*/"/*->scala::StringContext#s().*/
10+
def sayGoodbye/*<-a::b::Givens.extension_sayGoodbye().*/ = s"/*->scala::StringContext.apply().*/Goodbye, from $any/*->a::b::Givens.extension_sayGoodbye().(any)*/"/*->scala::StringContext#s().*/
11+
def saySoLong/*<-a::b::Givens.extension_saySoLong().*/ = s"/*->scala::StringContext.apply().*/So Long, from $any/*->a::b::Givens.extension_saySoLong().(any)*/"/*->scala::StringContext#s().*/
1212

1313
val hello1/*<-a::b::Givens.hello1.*/ = /*->a::b::Givens.extension_sayHello().*/1.sayHello
1414
val goodbye1/*<-a::b::Givens.goodbye1.*/ = /*->a::b::Givens.extension_sayGoodbye().*/1.sayGoodbye
1515
val soLong1/*<-a::b::Givens.soLong1.*/ = /*->a::b::Givens.extension_saySoLong().*/1.saySoLong
1616

1717
trait Monoid/*<-a::b::Givens.Monoid#*/[A/*<-a::b::Givens.Monoid#[A]*/]:
1818
def empty/*<-a::b::Givens.Monoid#empty().*/: A/*->a::b::Givens.Monoid#[A]*/
19-
extension (x/*<-a::b::Givens.Monoid#extension_combine().(x)*/: A/*->a::b::Givens.Monoid#[A]*/) def combine(y: A): A
20-
/*<-a::b::Givens.Monoid#extension_combine().*//*<-a::b::Givens.Monoid#extension_combine().(y)*//*->a::b::Givens.Monoid#[A]*//*->a::b::Givens.Monoid#[A]*/
19+
extension (x/*<-a::b::Givens.Monoid#extension_combine().(x)*/: A/*->a::b::Givens.Monoid#[A]*/) def combine/*<-a::b::Givens.Monoid#extension_combine().*/(y/*<-a::b::Givens.Monoid#extension_combine().(y)*/: A/*->a::b::Givens.Monoid#[A]*/): A/*->a::b::Givens.Monoid#[A]*/
20+
2121
given Monoid[String]:
2222
/*<-a::b::Givens.given_Monoid_String.*//*->a::b::Givens.Monoid#*//*->scala::Predef.String#*/ def empty/*<-a::b::Givens.given_Monoid_String.empty().*/ = ""
23-
extension (x/*<-a::b::Givens.given_Monoid_String.extension_combine().(x)*/: String/*->scala::Predef.String#*/) def combine(y: String/*<-a::b::Givens.given_Monoid_String.extension_combine().*//*<-a::b::Givens.given_Monoid_String.extension_combine().(y)*//*->scala::Predef.String#*/) = x/*->a::b::Givens.given_Monoid_String.extension_combine().(x)*/ +/*->java::lang::String#`+`().*/ y/*->a::b::Givens.given_Monoid_String.extension_combine().(y)*/
23+
extension (x/*<-a::b::Givens.given_Monoid_String.extension_combine().(x)*/: String/*->scala::Predef.String#*/) def combine/*<-a::b::Givens.given_Monoid_String.extension_combine().*/(y/*<-a::b::Givens.given_Monoid_String.extension_combine().(y)*/: String/*->scala::Predef.String#*/) = x/*->a::b::Givens.given_Monoid_String.extension_combine().(x)*/ +/*->java::lang::String#`+`().*/ y/*->a::b::Givens.given_Monoid_String.extension_combine().(y)*/
2424

2525
inline given int2String/*<-a::b::Givens.int2String().*/ as Conversion/*->scala::Conversion#*/[Int/*->scala::Int#*/, String/*->scala::Predef.String#*/] = _.toString/*->scala::Any#toString().*/
2626

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
inline val a = "/*<-_empty_::toplevel$package.*//*<-_empty_::toplevel$package.a.*/"
2-
extension (x/*<-_empty_::toplevel$package.extension_combine().(x)*/: Int/*->scala::Int#*/) def combine (y: Int) /*<-_empty_::toplevel$package.extension_combine().*//*<-_empty_::toplevel$package.extension_combine().(y)*//*->scala::Int#*/= x/*->_empty_::toplevel$package.extension_combine().(x)*/ +/*->scala::Int#`+`(+4).*/ y/*->_empty_::toplevel$package.extension_combine().(y)*/
2+
extension (x/*<-_empty_::toplevel$package.extension_combine().(x)*/: Int/*->scala::Int#*/) def combine/*<-_empty_::toplevel$package.extension_combine().*/ (y/*<-_empty_::toplevel$package.extension_combine().(y)*/: Int/*->scala::Int#*/) = x/*->_empty_::toplevel$package.extension_combine().(x)*/ +/*->scala::Int#`+`(+4).*/ y/*->_empty_::toplevel$package.extension_combine().(y)*/
33
def combine/*<-_empty_::toplevel$package.combine().*/(x/*<-_empty_::toplevel$package.combine().(x)*/: Int/*->scala::Int#*/, y/*<-_empty_::toplevel$package.combine().(y)*/: Int/*->scala::Int#*/, z/*<-_empty_::toplevel$package.combine().(z)*/: Int/*->scala::Int#*/) = x/*->_empty_::toplevel$package.combine().(x)*/ +/*->scala::Int#`+`(+4).*/ y/*->_empty_::toplevel$package.combine().(y)*/ +/*->scala::Int#`+`(+4).*/ z/*->_empty_::toplevel$package.combine().(z)*/
44
def combine/*<-_empty_::toplevel$package.combine(+1).*/ = 0
55
def foo/*<-_empty_::toplevel$package.foo().*/ = "foo"

tests/semanticdb/metac.expect

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -855,7 +855,7 @@ Occurrences:
855855
[13:9..13:14): Suits <- _empty_/Enums.Suits.
856856
[14:15..14:19): suit <- _empty_/Enums.Suits.extension_isRed().(suit)
857857
[14:21..14:26): Suits -> _empty_/Enums.Suits#
858-
[14:32..14:47): isRed: Boolean <- _empty_/Enums.Suits.extension_isRed().
858+
[14:32..14:37): isRed <- _empty_/Enums.Suits.extension_isRed().
859859
[14:39..14:46): Boolean -> scala/Boolean#
860860
[15:6..15:10): suit -> _empty_/Enums.Suits.extension_isRed().(suit)
861861
[15:11..15:13): == -> scala/Any#`==`().
@@ -866,7 +866,7 @@ Occurrences:
866866
[15:32..15:40): Diamonds -> _empty_/Enums.Suits.Diamonds.
867867
[17:15..17:19): suit <- _empty_/Enums.Suits.extension_isBlack().(suit)
868868
[17:21..17:26): Suits -> _empty_/Enums.Suits#
869-
[17:32..17:49): isBlack: Boolean <- _empty_/Enums.Suits.extension_isBlack().
869+
[17:32..17:39): isBlack <- _empty_/Enums.Suits.extension_isBlack().
870870
[17:41..17:48): Boolean -> scala/Boolean#
871871
[17:51..17:55): suit -> _empty_/Enums.Suits.extension_isBlack().(suit)
872872
[18:11..18:17): Spades -> _empty_/Enums.Suits.Spades.
@@ -951,7 +951,7 @@ Occurrences:
951951
[51:19..51:22): opt <- _empty_/Enums.extension_unwrap().(opt)
952952
[51:24..51:30): Option -> scala/Option#
953953
[51:31..51:32): A -> _empty_/Enums.extension_unwrap().[A]
954-
[51:39..51:55): unwrap(using ev: <- _empty_/Enums.extension_unwrap().
954+
[51:39..51:45): unwrap <- _empty_/Enums.extension_unwrap().
955955
[51:52..51:54): ev <- _empty_/Enums.extension_unwrap().(ev)
956956
[51:56..51:57): A -> _empty_/Enums.extension_unwrap().[A]
957957
[51:58..51:61): <:< -> _empty_/Enums.`<:<`#
@@ -1274,7 +1274,7 @@ Occurrences:
12741274
[5:13..5:14): A <- a/b/Givens.extension_sayHello().[A]
12751275
[5:16..5:19): any <- a/b/Givens.extension_sayHello().(any)
12761276
[5:21..5:22): A -> a/b/Givens.extension_sayHello().[A]
1277-
[6:8..6:26): sayHello = s"Hello <- a/b/Givens.extension_sayHello().
1277+
[6:8..6:16): sayHello <- a/b/Givens.extension_sayHello().
12781278
[6:21..6:21): -> scala/StringContext.apply().
12791279
[6:34..6:37): any -> a/b/Givens.extension_sayHello().(any)
12801280
[6:37..6:38): " -> scala/StringContext#s().
@@ -1284,11 +1284,11 @@ Occurrences:
12841284
[8:16..8:19): any <- a/b/Givens.extension_saySoLong().(any)
12851285
[8:21..8:22): B -> a/b/Givens.extension_sayGoodbye().[B]
12861286
[8:21..8:22): B -> a/b/Givens.extension_saySoLong().[B]
1287-
[9:8..9:28): sayGoodbye = s"Goodb <- a/b/Givens.extension_sayGoodbye().
1287+
[9:8..9:18): sayGoodbye <- a/b/Givens.extension_sayGoodbye().
12881288
[9:23..9:23): -> scala/StringContext.apply().
12891289
[9:38..9:41): any -> a/b/Givens.extension_sayGoodbye().(any)
12901290
[9:41..9:42): " -> scala/StringContext#s().
1291-
[10:8..10:27): saySoLong = s"So Lo <- a/b/Givens.extension_saySoLong().
1291+
[10:8..10:17): saySoLong <- a/b/Givens.extension_saySoLong().
12921292
[10:22..10:22): -> scala/StringContext.apply().
12931293
[10:37..10:40): any -> a/b/Givens.extension_saySoLong().(any)
12941294
[10:40..10:41): " -> scala/StringContext#s().
@@ -1305,7 +1305,7 @@ Occurrences:
13051305
[17:15..17:16): A -> a/b/Givens.Monoid#[A]
13061306
[18:15..18:16): x <- a/b/Givens.Monoid#extension_combine().(x)
13071307
[18:18..18:19): A -> a/b/Givens.Monoid#[A]
1308-
[18:25..19:0): <- a/b/Givens.Monoid#extension_combine().
1308+
[18:25..18:32): combine <- a/b/Givens.Monoid#extension_combine().
13091309
[18:33..18:34): y <- a/b/Givens.Monoid#extension_combine().(y)
13101310
[18:36..18:37): A -> a/b/Givens.Monoid#[A]
13111311
[18:40..18:41): A -> a/b/Givens.Monoid#[A]
@@ -1315,7 +1315,7 @@ Occurrences:
13151315
[21:8..21:13): empty <- a/b/Givens.given_Monoid_String.empty().
13161316
[22:15..22:16): x <- a/b/Givens.given_Monoid_String.extension_combine().(x)
13171317
[22:18..22:24): String -> scala/Predef.String#
1318-
[22:30..22:47): combine(y: String <- a/b/Givens.given_Monoid_String.extension_combine().
1318+
[22:30..22:37): combine <- a/b/Givens.given_Monoid_String.extension_combine().
13191319
[22:38..22:39): y <- a/b/Givens.given_Monoid_String.extension_combine().(y)
13201320
[22:41..22:47): String -> scala/Predef.String#
13211321
[22:51..22:52): x -> a/b/Givens.given_Monoid_String.extension_combine().(x)
@@ -3943,7 +3943,7 @@ Occurrences:
39433943
[0:11..0:12): a <- _empty_/toplevel$package.a.
39443944
[1:11..1:12): x <- _empty_/toplevel$package.extension_combine().(x)
39453945
[1:14..1:17): Int -> scala/Int#
3946-
[1:23..1:40): combine (y: Int) <- _empty_/toplevel$package.extension_combine().
3946+
[1:23..1:30): combine <- _empty_/toplevel$package.extension_combine().
39473947
[1:32..1:33): y <- _empty_/toplevel$package.extension_combine().(y)
39483948
[1:35..1:38): Int -> scala/Int#
39493949
[1:42..1:43): x -> _empty_/toplevel$package.extension_combine().(x)

0 commit comments

Comments
 (0)