Skip to content

Commit 4925091

Browse files
committed
Hardlink fake symbols
1 parent 95af95c commit 4925091

File tree

2 files changed

+26
-25
lines changed

2 files changed

+26
-25
lines changed

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -415,12 +415,13 @@ object SymbolScopeOps:
415415
import Scala3.{_, given}
416416
extension (syms: List[SemanticSymbol])
417417
def sscope(using linkMode: LinkMode)(using SemanticSymbolBuilder, TypeOps, Context): s.Scope =
418-
linkMode match {
419-
case LinkMode.SymlinkChildren =>
420-
s.Scope(symlinks = syms.map(_.symbolName))
421-
case LinkMode.HardlinkChildren =>
422-
s.Scope(hardlinks = syms.map(_.symbolInfo(Set.empty)))
423-
}
418+
// if syms contains FakeSymbol, hardlink those symbols
419+
// because fake symbols don't appear in Symbols section.
420+
// If we symlink those fake symbols, we always fail to lookup those symlinked symbols.
421+
if syms.exists(s => s.isInstanceOf[FakeSymbol]) || linkMode == LinkMode.HardlinkChildren then
422+
s.Scope(hardlinks = syms.map(_.symbolInfo(Set.empty)(using LinkMode.HardlinkChildren)))
423+
else
424+
s.Scope(symlinks = syms.map(_.symbolName))
424425

425426
def sscopeOpt(using linkMode: LinkMode)(using SemanticSymbolBuilder, TypeOps, Context): Option[s.Scope] =
426427
if syms.nonEmpty then Some(syms.sscope) else None

tests/semanticdb/metac.expect

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ advanced/C# => class C [typeparam T ] extends Object { self: C[T] => +3 decls }
5757
advanced/C#[T] => typeparam T
5858
advanced/C#`<init>`(). => primary ctor <init> [typeparam T ](): C[T]
5959
advanced/C#t(). => method t => T
60-
advanced/HKClass# => class HKClass [typeparam F [unknown T: <?>] <: <?>] extends Object { self: HKClass[F] => +3 decls }
61-
advanced/HKClass#[F] => typeparam F [unknown T: <?>] <: <?>
62-
advanced/HKClass#`<init>`(). => primary ctor <init> [typeparam F [unknown T: <?>] <: <?>](): HKClass[F]
60+
advanced/HKClass# => class HKClass [typeparam F [typeparam T ] <: <?>] extends Object { self: HKClass[F] => +3 decls }
61+
advanced/HKClass#[F] => typeparam F [typeparam T ] <: <?>
62+
advanced/HKClass#`<init>`(). => primary ctor <init> [typeparam F [typeparam T ] <: <?>](): HKClass[F]
6363
advanced/HKClass#foo(). => method foo [typeparam T , typeparam U ](param x: F[T, U]): String
6464
advanced/HKClass#foo().(x) => param x: F[T, U]
6565
advanced/HKClass#foo().[T] => typeparam T
@@ -323,8 +323,8 @@ example/Anonymous#foo. => val method foo Foo
323323
example/Anonymous#locally(). => method locally [typeparam A ](param x: A): A
324324
example/Anonymous#locally().(x) => param x: A
325325
example/Anonymous#locally().[A] => typeparam A
326-
example/Anonymous#m1(). => method m1 [typeparam T [unknown _: <?>]]: Nothing
327-
example/Anonymous#m1().[T] => typeparam T [unknown _: <?>]
326+
example/Anonymous#m1(). => method m1 [typeparam T [type _ ]]: Nothing
327+
example/Anonymous#m1().[T] => typeparam T [type _ ]
328328
example/Anonymous#m2(). => method m2 => Map[_, List[_] forSome { type _ }] forSome { type _ }
329329
local0 => val local x: Function1[Int, Int]
330330
local1 => final class $anon extends Object with Foo { self: $anon => +1 decls }
@@ -1325,9 +1325,9 @@ ext/Extension$package.readInto(). => method readInto [typeparam T ](param s: Str
13251325
ext/Extension$package.readInto().(s) => param s: String
13261326
ext/Extension$package.readInto().(x$2) => implicit param x$2: Read[T]
13271327
ext/Extension$package.readInto().[T] => typeparam T
1328-
ext/Functor# => trait Functor [typeparam F [unknown _: <?>]] extends Object { self: Functor[F] => +3 decls }
1329-
ext/Functor#[F] => typeparam F [unknown _: <?>]
1330-
ext/Functor#`<init>`(). => primary ctor <init> [typeparam F [unknown _: <?>]](): Functor[F]
1328+
ext/Functor# => trait Functor [typeparam F [type _ ]] extends Object { self: Functor[F] => +3 decls }
1329+
ext/Functor#[F] => typeparam F [type _ ]
1330+
ext/Functor#`<init>`(). => primary ctor <init> [typeparam F [type _ ]](): Functor[F]
13311331
ext/Functor#map(). => abstract method map [typeparam T , typeparam U ](param t: F[T])(param f: Function1[T, U]): F[U]
13321332
ext/Functor#map().(f) => param f: Function1[T, U]
13331333
ext/Functor#map().(t) => param t: F[T]
@@ -3862,12 +3862,12 @@ _empty_/Copy# => trait Copy [typeparam In <: Txn[In], typeparam Out <: Txn[Out
38623862
_empty_/Copy#[In] => typeparam In <: Txn[In]
38633863
_empty_/Copy#[Out] => typeparam Out <: Txn[Out]
38643864
_empty_/Copy#`<init>`(). => primary ctor <init> [typeparam In <: Txn[In], typeparam Out <: Txn[Out]](): Copy[In, Out]
3865-
_empty_/Copy#apply(). => method apply [typeparam Repr [unknown ~: <?>] <: Elem[~]](param in: Repr[In]): Repr[Out]
3865+
_empty_/Copy#apply(). => method apply [typeparam Repr [typeparam ~ <: Txn[~]] <: Elem[~]](param in: Repr[In]): Repr[Out]
38663866
_empty_/Copy#apply().(in) => param in: Repr[In]
3867-
_empty_/Copy#apply().[Repr] => typeparam Repr [unknown ~: <?>] <: Elem[~]
3868-
_empty_/Copy#copyImpl(). => abstract method copyImpl [typeparam Repr [unknown ~: <?>] <: Elem[~]](param in: Repr[In]): Repr[Out]
3867+
_empty_/Copy#apply().[Repr] => typeparam Repr [typeparam ~ <: Txn[~]] <: Elem[~]
3868+
_empty_/Copy#copyImpl(). => abstract method copyImpl [typeparam Repr [typeparam ~ <: Txn[~]] <: Elem[~]](param in: Repr[In]): Repr[Out]
38693869
_empty_/Copy#copyImpl().(in) => param in: Repr[In]
3870-
_empty_/Copy#copyImpl().[Repr] => typeparam Repr [unknown ~: <?>] <: Elem[~]
3870+
_empty_/Copy#copyImpl().[Repr] => typeparam Repr [typeparam ~ <: Txn[~]] <: Elem[~]
38713871
_empty_/Elem# => trait Elem [typeparam T <: Txn[T]] extends Object { self: Elem[T] => +2 decls }
38723872
_empty_/Elem#[T] => typeparam T <: Txn[T]
38733873
_empty_/Elem#`<init>`(). => primary ctor <init> [typeparam T <: Txn[T]](): Elem[T]
@@ -4026,10 +4026,10 @@ _empty_/Concrete# => class Concrete extends NullaryTest[Int, List] { self: Concr
40264026
_empty_/Concrete#`<init>`(). => primary ctor <init> (): Concrete
40274027
_empty_/Concrete#nullary2(). => method nullary2 => Int
40284028
_empty_/Concrete#nullary3(). => method nullary3 => List[Int]
4029-
_empty_/NullaryTest# => abstract class NullaryTest [typeparam T , typeparam m [unknown s: <?>]] extends Object { self: NullaryTest[T, m] => +9 decls }
4029+
_empty_/NullaryTest# => abstract class NullaryTest [typeparam T , typeparam m [typeparam s ]] extends Object { self: NullaryTest[T, m] => +9 decls }
40304030
_empty_/NullaryTest#[T] => typeparam T
4031-
_empty_/NullaryTest#[m] => typeparam m [unknown s: <?>]
4032-
_empty_/NullaryTest#`<init>`(). => primary ctor <init> [typeparam T , typeparam m [unknown s: <?>]](): NullaryTest[T, m]
4031+
_empty_/NullaryTest#[m] => typeparam m [typeparam s ]
4032+
_empty_/NullaryTest#`<init>`(). => primary ctor <init> [typeparam T , typeparam m [typeparam s ]](): NullaryTest[T, m]
40334033
_empty_/NullaryTest#nullary(). => method nullary => String
40344034
_empty_/NullaryTest#nullary2(). => abstract method nullary2 => T
40354035
_empty_/NullaryTest#nullary3(). => abstract method nullary3 => m[T]
@@ -4460,8 +4460,8 @@ types/Test.C#TypeType.T5# => type T5 [typeparam U ] = U
44604460
types/Test.C#TypeType.T5#[U] => typeparam U
44614461
types/Test.C#TypeType.m2(). => method m2 [typeparam T2 = C]: Nothing
44624462
types/Test.C#TypeType.m2().[T2] => typeparam T2 = C
4463-
types/Test.C#TypeType.m3(). => method m3 [typeparam M3 [unknown _: <?>]]: Nothing
4464-
types/Test.C#TypeType.m3().[M3] => typeparam M3 [unknown _: <?>]
4463+
types/Test.C#TypeType.m3(). => method m3 [typeparam M3 [type _ ]]: Nothing
4464+
types/Test.C#TypeType.m3().[M3] => typeparam M3 [type _ ]
44654465
types/Test.C#`<init>`(). => primary ctor <init> (): C
44664466
types/Test.C#annType1. => val method annType1 T @ann[T]
44674467
types/Test.C#annType2. => val method annType2 T @ann1 @ann2
@@ -4482,8 +4482,8 @@ types/Test.C#superType2. => val method superType2 Int
44824482
types/Test.C#superType3. => val method superType3 Int
44834483
types/Test.C#thisType1. => val method thisType1 C.this.type
44844484
types/Test.C#thisType2. => val method thisType2 C.this.type
4485-
types/Test.C#typeLambda1(). => method typeLambda1 [typeparam M [unknown _: <?>]]: Nothing
4486-
types/Test.C#typeLambda1().[M] => typeparam M [unknown _: <?>]
4485+
types/Test.C#typeLambda1(). => method typeLambda1 [typeparam M [type _ ]]: Nothing
4486+
types/Test.C#typeLambda1().[M] => typeparam M [type _ ]
44874487
types/Test.C#typeRef1. => val method typeRef1 C
44884488
types/Test.C#typeRef2. => val method typeRef2 p.C
44894489
types/Test.C#typeRef3. => val method typeRef3 T#C

0 commit comments

Comments
 (0)