Skip to content

Commit d70d69b

Browse files
Merge pull request #5761 from poechsel/master
SemanticDB generator
2 parents 71dbcab + 4abf222 commit d70d69b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1638
-293
lines changed

compiler/src/dotty/tools/dotc/tastyreflect/FlagsOpsImpl.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ trait FlagsOpsImpl extends scala.tasty.reflect.FlagsOps with CoreImpl {
4343
def StableRealizable: Flags = core.Flags.StableRealizable
4444
def Param: Flags = core.Flags.Param
4545
def ParamAccessor: Flags = core.Flags.ParamAccessor
46+
def Enum: Flags = core.Flags.Enum
47+
def ModuleClass: Flags = core.Flags.ModuleClass
48+
def PrivateLocal: Flags = core.Flags.PrivateLocal
49+
def Package: Flags = core.Flags.Package
50+
def ImplClass: Flags = core.Flags.ImplClass
4651
}
4752

4853
}

compiler/src/dotty/tools/dotc/tastyreflect/ImportSelectorOpsImpl.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dotty.tools.dotc.tastyreflect
22

33
import dotty.tools.dotc.ast.{Trees, untpd}
44
import dotty.tools.dotc.core.StdNames.nme
5+
import dotty.tools.dotc.core.Decorators._
56

67
trait ImportSelectorOpsImpl extends scala.tasty.reflect.ImportSelectorOps with CoreImpl {
78

compiler/src/dotty/tools/dotc/tastyreflect/PatternOpsImpl.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ trait PatternOpsImpl extends scala.tasty.reflect.PatternOps with CoreImpl {
3636
def PatternDeco(pattern: Pattern): PatternAPI = new PatternAPI {
3737
def pos(implicit ctx: Context): Position = pattern.sourcePos
3838
def tpe(implicit ctx: Context): Type = pattern.tpe.stripTypeVar
39+
def symbol(implicit ctx: Context): Symbol = pattern.symbol
3940
}
4041

4142
object Pattern extends PatternModule {

compiler/src/dotty/tools/dotc/tastyreflect/SymbolOpsImpl.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ trait SymbolOpsImpl extends scala.tasty.reflect.SymbolOps with CoreImpl {
3030

3131
def owner(implicit ctx: Context): Symbol = symbol.owner
3232

33+
def isLocalDummy(implicit ctx: Context): Boolean = symbol.isLocalDummy
34+
def isRefinementClass(implicit ctx: Context): Boolean = symbol.isRefinementClass
35+
def isAliasType(implicit ctx: Context): Boolean = symbol.isAliasType
36+
def isAnonymousClass(implicit ctx: Context): Boolean = symbol.isAnonymousClass
37+
def isAnonymousFunction(implicit ctx: Context): Boolean = symbol.isAnonymousFunction
38+
def isAbstractType(implicit ctx: Context): Boolean = symbol.isAbstractType
39+
def isClassConstructor(implicit ctx: Context): Boolean = symbol.isClassConstructor
40+
3341
def localContext(implicit ctx: Context): Context = {
3442
if (symbol.exists) ctx.withOwner(symbol)
3543
else ctx
@@ -167,6 +175,11 @@ trait SymbolOpsImpl extends scala.tasty.reflect.SymbolOps with CoreImpl {
167175
if (sym.exists) Some(sym.asTerm) else None
168176
}
169177

178+
def moduleClass(implicit ctx: Context): Option[Symbol] = {
179+
val sym = symbol.moduleClass
180+
if (sym.exists) Some(sym.asTerm) else None
181+
}
182+
170183
private def isField(sym: Symbol)(implicit ctx: Context): Boolean = sym.isTerm && !sym.is(Flags.Method)
171184
}
172185

compiler/src/dotty/tools/dotc/tastyreflect/TypeOrBoundsOpsImpl.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ trait TypeOrBoundsOpsImpl extends scala.tasty.reflect.TypeOrBoundsOps with CoreI
2121

2222
def classSymbol(implicit ctx: Context): Option[ClassSymbol] =
2323
if (tpe.classSymbol.exists) Some(tpe.classSymbol.asClass) else None
24+
25+
def typeSymbol(implicit ctx: Context): Symbol = tpe.typeSymbol
2426
}
2527

2628
def ConstantTypeDeco(x: ConstantType): Type.ConstantTypeAPI = new Type.ConstantTypeAPI {

library/src/scala/tasty/reflect/FlagsOps.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,21 @@ trait FlagsOps extends Core {
101101

102102
/** Is this symbol a parameter accessor */
103103
def ParamAccessor: Flags
104+
105+
/** Is this symbol an enum */
106+
def Enum: Flags
107+
108+
/** Is this symbol a module class */
109+
def ModuleClass: Flags
110+
111+
/** Is this symbol labeled private[this] */
112+
def PrivateLocal: Flags
113+
114+
/** Is this symbol a package */
115+
def Package: Flags
116+
117+
/** Is this symbol an implementation class of a Scala2 trait */
118+
def ImplClass: Flags
104119
}
105120

106121
}

library/src/scala/tasty/reflect/PatternOps.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ trait PatternOps extends Core {
1414
def pos(implicit ctx: Context): Position
1515

1616
def tpe(implicit ctx: Context): Type
17+
18+
def symbol(implicit ctx: Context): Symbol
1719
}
1820
implicit def PatternDeco(pattern: Pattern): PatternAPI
1921

library/src/scala/tasty/reflect/Printers.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ trait Printers
129129
if (flags.is(Flags.StableRealizable)) flagList += "Flags.StableRealizable"
130130
if (flags.is(Flags.Param)) flagList += "Flags.Param"
131131
if (flags.is(Flags.ParamAccessor)) flagList += "Flags.ParamAccessor"
132+
if (flags.is(Flags.Enum)) flagList += "Flags.Enum"
133+
if (flags.is(Flags.ModuleClass)) flagList += "Flags.ModuleClass"
134+
if (flags.is(Flags.PrivateLocal)) flagList += "Flags.PrivateLocal"
135+
if (flags.is(Flags.Package)) flagList += "Flags.Package"
136+
if (flags.is(Flags.ImplClass)) flagList += "Flags.ImplClass"
132137
flagList.result().mkString(" | ")
133138
}
134139

@@ -504,6 +509,11 @@ trait Printers
504509
if (flags.is(Flags.StableRealizable)) flagList += "stableRealizable"
505510
if (flags.is(Flags.Param)) flagList += "param"
506511
if (flags.is(Flags.ParamAccessor)) flagList += "paramAccessor"
512+
if (flags.is(Flags.Enum)) flagList += "enum"
513+
if (flags.is(Flags.ModuleClass)) flagList += "moduleClass"
514+
if (flags.is(Flags.PrivateLocal)) flagList += "private[this]"
515+
if (flags.is(Flags.Package)) flagList += "package"
516+
if (flags.is(Flags.ImplClass)) flagList += "implClass"
507517
flagList.result().mkString("/*", " ", "*/")
508518
}
509519

library/src/scala/tasty/reflect/SymbolOps.scala

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ trait SymbolOps extends Core {
1414
/** Flags of this symbol */
1515
def flags(implicit ctx: Context): Flags
1616

17+
def isLocalDummy(implicit ctx: Context): Boolean
18+
def isRefinementClass(implicit ctx: Context): Boolean
19+
def isAliasType(implicit ctx: Context): Boolean
20+
def isAnonymousClass(implicit ctx: Context): Boolean
21+
def isAnonymousFunction(implicit ctx: Context): Boolean
22+
def isAbstractType(implicit ctx: Context): Boolean
23+
def isClassConstructor(implicit ctx: Context): Boolean
24+
1725
/** This symbol is private within the resulting type. */
1826
def privateWithin(implicit ctx: Context): Option[Type]
1927

@@ -26,6 +34,7 @@ trait SymbolOps extends Core {
2634
/** The full name of this symbol up to the root package. */
2735
def fullName(implicit ctx: Context): String
2836

37+
/** The position of this symbol */
2938
def pos(implicit ctx: Context): Position
3039

3140
def localContext(implicit ctx: Context): Context
@@ -111,6 +120,7 @@ trait SymbolOps extends Core {
111120
/** The symbol of the companion module */
112121
def companionModule(implicit ctx: Context): Option[ValSymbol]
113122

123+
def moduleClass(implicit ctx: Context): Option[Symbol]
114124
}
115125
implicit def ClassSymbolDeco(symbol: ClassSymbol): ClassSymbolAPI
116126

@@ -170,7 +180,7 @@ trait SymbolOps extends Core {
170180
}
171181

172182
trait BindSymbolAPI {
173-
/** Bind pattern of this defintion. */
183+
/** Bind pattern of this definition. */
174184
def tree(implicit ctx: Context): Bind
175185
}
176186
implicit def BindSymbolDeco(symbol: BindSymbol): BindSymbolAPI

library/src/scala/tasty/reflect/TypeOrBoundsOps.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ trait TypeOrBoundsOps extends Core {
5454
def <:<(other: Type)(implicit ctx: Context): Boolean
5555
def widen(implicit ctx: Context): Type
5656
def classSymbol(implicit ctx: Context): Option[ClassSymbol]
57+
def typeSymbol(implicit ctx: Context): Symbol
5758
}
5859

5960
val IsType: IsTypeModule

project/Build.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ object Build {
378378
baseDirectory in (Compile, run) := baseDirectory.value / "..",
379379
baseDirectory in Test := baseDirectory.value / "..",
380380
unmanagedSourceDirectories in Test += baseDirectory.value / "input" / "src" / "main" / "scala",
381+
scalacOptions in Test ++= Seq("-Yno-inline"),
381382
libraryDependencies ++= List(
382383
("org.scalameta" %% "semanticdb" % "4.0.0").withDottyCompat(scalaVersion.value),
383384
"com.novocode" % "junit-interface" % "0.11",

semanticdb/input/src/main/scala/example/Access.scala

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,20 @@ class Access {
88
protected[this] def m5 = ???
99
protected[example] def m6 = ???
1010
def m7 = ???
11+
12+
private val mv1 = ???
13+
private[this] val mv2 = ???
14+
private[Access] val mv3 = ???
15+
protected val mv4 = ???
16+
protected[this] val mv5 = ???
17+
protected[example] val mv6 = ???
18+
val mv7 = ???
19+
20+
private var mr1 = ???
21+
private[this] var mr2 = ???
22+
private[Access] var mr3 = ???
23+
protected var mr4 = ???
24+
protected[this] var mr5 = ???
25+
protected[example] var mr6 = ???
26+
var mr7 = ???
1127
}

semanticdb/input/src/main/scala/example/Advanced.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package example
22

3-
import scala.language.existentials
4-
import scala.language.higherKinds
3+
import scala.language.{existentials, higherKinds=>h}
54
import scala.language.reflectiveCalls
65

76
class AdvC[T] {

semanticdb/input/src/main/scala/example/Anonymous.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ class Anonymous {
1515

1616
trait Foo
1717
var x = new Foo {}
18-
}
18+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package example
2+
3+
class TestApply {
4+
object Foo {
5+
def apply(x: Int) : Int = x
6+
}
7+
val z = Foo(1)
8+
val y = Foo.apply(1)
9+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package example
2+
3+
class BinaryOp {
4+
val y = 1 #:: 2 #:: Stream.empty[Int]
5+
val x = 1 :: 2 :: 3 :: Nil
6+
val z = 1 + 2
7+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package example
2+
3+
class CaseTest {
4+
def foo (x: Option[Int]) : Int =
5+
x match {
6+
case y @ Some(x) => x
7+
case None => 0
8+
}
9+
}
10+
11+
case class CaseClass(x: Int)
12+
case object CaseObject

semanticdb/input/src/main/scala/example/Classes.scala

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
package example
22

3+
class CDep[X]
4+
class CDependenat[X /* This is a comment /* and a nested comment
5+
*/*/](var x1: CDep[X])
6+
class CVarArg(var x1 : Int)
7+
8+
9+
class CDefaultWrapper {
10+
val glob = 3
11+
class Cdefault(val x1: Int = glob)
12+
}
313
class C1(val x1: Int) extends AnyVal
414

515
class C2(val x2: Int) extends AnyVal
616
object C2
717

8-
case class C3(x: Int)
18+
case class C3[Y ](x: Int)
919

1020
case class C4(x: Int)
11-
object C4
21+
object C4 {
22+
val foo: Int = 4
23+
}
1224

1325
object M {
1426
implicit class C5(x: Int)
@@ -30,4 +42,15 @@ object N {
3042
val local = 2
3143
local + 2
3244
}
33-
}
45+
46+
val otheranon = {
47+
var a = 1
48+
a
49+
}
50+
51+
val lastanon = {
52+
val a = new CVarArg(4)
53+
a.x1 = 8
54+
a.x1
55+
}
56+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package example
2+
3+
class DepTemp {
4+
5+
}
6+
7+
abstract class DepAdvD[CC[X[C] <: B], X[Z], C] extends DepTemp {
8+
val foo: List[Option[Option[X[C]]]]
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package example
2+
3+
class PredefsDotty {
4+
locally {
5+
val x: Int => Int = _ => ???
6+
}
7+
assert(true)
8+
assert(false, "bonjour")
9+
}

semanticdb/input/src/main/scala/example/Example.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ class Example {
1414
x +
1515
y
1616
)
17+
var b = 4
1718
}
1819

19-
class ExampleInit() {
20+
class ExampleInit {
2021

2122
}

semanticdb/input/src/main/scala/example/Flags.scala

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
package example
21

3-
package object p {
2+
package object example {
43
private lazy val x = 1
5-
protected implicit var y: Int = 2
4+
/*protected implicit var y: Int = 2
65
def z(pp: Int) = 3
76
def m[TT] = ???
8-
abstract class C[+T, -U, V](x: T, y: U, z: V) {
7+
abstract class Cex[+T, -U, V](x: T, y: U, z: V) {
98
def this() = this(???, ???, ???)
109
def w: Int
1110
}
@@ -20,5 +19,5 @@ package object p {
2019
class S[@specialized T]
2120
val List(xs1) = ???
2221
??? match { case List(xs2) => ??? }
23-
??? match { case _: List[t] => ??? }
22+
??? match { case _: List[t] => ??? }*/
2423
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package example
2+
3+
class IgnoredTest {
4+
val _ = 2
5+
def foo(x: Int): Unit = {
6+
val _ = x
7+
}
8+
}

semanticdb/input/src/main/scala/example/Imports.scala

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
1+
/*
2+
// This text is deactivated for now as macro annotations require to enable
3+
// macro paradise
4+
15
package example
26
3-
//@MacroAnnotation
7+
8+
import scala.annotation.StaticAnnotation
9+
import scala.annotation.compileTimeOnly
10+
import scala.language.experimental.macros
11+
12+
@compileTimeOnly("enable macro paradise to expand macro annotations")
13+
class MacroAnnotation extends StaticAnnotation {
14+
def macroTransform(annottees: Any*): Any = ???
15+
}
16+
17+
@MacroAnnotation
418
class MacroAnnotations
519
object MacroAnnotations
20+
*/
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package example
2+
3+
class Multiple {
4+
def m19(x: Int)(z: Int = 3) = ???
5+
}

0 commit comments

Comments
 (0)