Skip to content

Commit ffd1916

Browse files
committed
Mark members as deprecated when their parents are in api reports
1 parent 27ce299 commit ffd1916

File tree

4 files changed

+79
-60
lines changed

4 files changed

+79
-60
lines changed

api-reports/2_12.txt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -947,22 +947,22 @@ experimental/push/package[SO] implicit def pushServiceWorkerRegistration(swr: Se
947947
experimental/push/package.PushServiceWorkerGlobalScope[JT] var onpush: js.Function1[PushEvent, _]
948948
experimental/push/package.PushServiceWorkerGlobalScope[JT] var onpushsubscriptionchange: js.Function1[PushEvent, _]
949949
experimental/push/package.PushServiceWorkerRegistration[JT] val pushManager: PushManager
950-
experimental/serviceworkers/Cache[JC] def add(request: RequestInfo): js.Promise[Unit]
951-
experimental/serviceworkers/Cache[JC] def addAll(requests: js.Array[RequestInfo]): js.Promise[Unit]
952-
experimental/serviceworkers/Cache[JC] def delete(request: RequestInfo, options: js.UndefOr[CacheQueryOptions]?): js.Promise[Boolean]
953-
experimental/serviceworkers/Cache[JC] def keys(request: js.UndefOr[RequestInfo]?, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.Array[Request]]
954-
experimental/serviceworkers/Cache[JC] def `match`(request: RequestInfo, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.UndefOr[Response]]
955-
experimental/serviceworkers/Cache[JC] def matchAll(request: RequestInfo?, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.Array[Response]]
956-
experimental/serviceworkers/Cache[JC] def put(request: RequestInfo, response: Response): js.Promise[Unit]
957-
experimental/serviceworkers/CacheQueryOptions[JT] var cacheName: String
958-
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreMethod: Boolean
959-
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreSearch: Boolean
960-
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreVary: Boolean
961-
experimental/serviceworkers/CacheStorage[JT] def delete(cacheName: String): js.Promise[Boolean]
962-
experimental/serviceworkers/CacheStorage[JT] def has(cacheName: String): js.Promise[Boolean]
963-
experimental/serviceworkers/CacheStorage[JT] def keys(): js.Promise[js.Array[String]]
964-
experimental/serviceworkers/CacheStorage[JT] def `match`(request: RequestInfo, options: CacheQueryOptions?): js.Promise[js.Any]
965-
experimental/serviceworkers/CacheStorage[JT] def open(cacheName: String): js.Promise[Cache]
950+
experimental/serviceworkers/Cache[JC] def add(request: RequestInfo): js.Promise[Unit] (@deprecated in 1.2.0)
951+
experimental/serviceworkers/Cache[JC] def addAll(requests: js.Array[RequestInfo]): js.Promise[Unit] (@deprecated in 1.2.0)
952+
experimental/serviceworkers/Cache[JC] def delete(request: RequestInfo, options: js.UndefOr[CacheQueryOptions]?): js.Promise[Boolean] (@deprecated in 1.2.0)
953+
experimental/serviceworkers/Cache[JC] def keys(request: js.UndefOr[RequestInfo]?, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.Array[Request]] (@deprecated in 1.2.0)
954+
experimental/serviceworkers/Cache[JC] def `match`(request: RequestInfo, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.UndefOr[Response]] (@deprecated in 1.2.0)
955+
experimental/serviceworkers/Cache[JC] def matchAll(request: RequestInfo?, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.Array[Response]] (@deprecated in 1.2.0)
956+
experimental/serviceworkers/Cache[JC] def put(request: RequestInfo, response: Response): js.Promise[Unit] (@deprecated in 1.2.0)
957+
experimental/serviceworkers/CacheQueryOptions[JT] var cacheName: String (@deprecated in 1.2.0)
958+
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreMethod: Boolean (@deprecated in 1.2.0)
959+
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreSearch: Boolean (@deprecated in 1.2.0)
960+
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreVary: Boolean (@deprecated in 1.2.0)
961+
experimental/serviceworkers/CacheStorage[JT] def delete(cacheName: String): js.Promise[Boolean] (@deprecated in 1.2.0)
962+
experimental/serviceworkers/CacheStorage[JT] def has(cacheName: String): js.Promise[Boolean] (@deprecated in 1.2.0)
963+
experimental/serviceworkers/CacheStorage[JT] def keys(): js.Promise[js.Array[String]] (@deprecated in 1.2.0)
964+
experimental/serviceworkers/CacheStorage[JT] def `match`(request: RequestInfo, options: CacheQueryOptions?): js.Promise[js.Any] (@deprecated in 1.2.0)
965+
experimental/serviceworkers/CacheStorage[JT] def open(cacheName: String): js.Promise[Cache] (@deprecated in 1.2.0)
966966
experimental/serviceworkers/CanvasProxy[JT] def setContext(context: RenderingContext): Unit
967967
experimental/serviceworkers/Client[JT] def frameType: FrameType
968968
experimental/serviceworkers/Client[JT] def id: String

api-reports/2_13.txt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -947,22 +947,22 @@ experimental/push/package[SO] implicit def pushServiceWorkerRegistration(swr: Se
947947
experimental/push/package.PushServiceWorkerGlobalScope[JT] var onpush: js.Function1[PushEvent, _]
948948
experimental/push/package.PushServiceWorkerGlobalScope[JT] var onpushsubscriptionchange: js.Function1[PushEvent, _]
949949
experimental/push/package.PushServiceWorkerRegistration[JT] val pushManager: PushManager
950-
experimental/serviceworkers/Cache[JC] def add(request: RequestInfo): js.Promise[Unit]
951-
experimental/serviceworkers/Cache[JC] def addAll(requests: js.Array[RequestInfo]): js.Promise[Unit]
952-
experimental/serviceworkers/Cache[JC] def delete(request: RequestInfo, options: js.UndefOr[CacheQueryOptions]?): js.Promise[Boolean]
953-
experimental/serviceworkers/Cache[JC] def keys(request: js.UndefOr[RequestInfo]?, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.Array[Request]]
954-
experimental/serviceworkers/Cache[JC] def `match`(request: RequestInfo, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.UndefOr[Response]]
955-
experimental/serviceworkers/Cache[JC] def matchAll(request: RequestInfo?, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.Array[Response]]
956-
experimental/serviceworkers/Cache[JC] def put(request: RequestInfo, response: Response): js.Promise[Unit]
957-
experimental/serviceworkers/CacheQueryOptions[JT] var cacheName: String
958-
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreMethod: Boolean
959-
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreSearch: Boolean
960-
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreVary: Boolean
961-
experimental/serviceworkers/CacheStorage[JT] def delete(cacheName: String): js.Promise[Boolean]
962-
experimental/serviceworkers/CacheStorage[JT] def has(cacheName: String): js.Promise[Boolean]
963-
experimental/serviceworkers/CacheStorage[JT] def keys(): js.Promise[js.Array[String]]
964-
experimental/serviceworkers/CacheStorage[JT] def `match`(request: RequestInfo, options: CacheQueryOptions?): js.Promise[js.Any]
965-
experimental/serviceworkers/CacheStorage[JT] def open(cacheName: String): js.Promise[Cache]
950+
experimental/serviceworkers/Cache[JC] def add(request: RequestInfo): js.Promise[Unit] (@deprecated in 1.2.0)
951+
experimental/serviceworkers/Cache[JC] def addAll(requests: js.Array[RequestInfo]): js.Promise[Unit] (@deprecated in 1.2.0)
952+
experimental/serviceworkers/Cache[JC] def delete(request: RequestInfo, options: js.UndefOr[CacheQueryOptions]?): js.Promise[Boolean] (@deprecated in 1.2.0)
953+
experimental/serviceworkers/Cache[JC] def keys(request: js.UndefOr[RequestInfo]?, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.Array[Request]] (@deprecated in 1.2.0)
954+
experimental/serviceworkers/Cache[JC] def `match`(request: RequestInfo, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.UndefOr[Response]] (@deprecated in 1.2.0)
955+
experimental/serviceworkers/Cache[JC] def matchAll(request: RequestInfo?, options: js.UndefOr[CacheQueryOptions]?): js.Promise[js.Array[Response]] (@deprecated in 1.2.0)
956+
experimental/serviceworkers/Cache[JC] def put(request: RequestInfo, response: Response): js.Promise[Unit] (@deprecated in 1.2.0)
957+
experimental/serviceworkers/CacheQueryOptions[JT] var cacheName: String (@deprecated in 1.2.0)
958+
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreMethod: Boolean (@deprecated in 1.2.0)
959+
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreSearch: Boolean (@deprecated in 1.2.0)
960+
experimental/serviceworkers/CacheQueryOptions[JT] var ignoreVary: Boolean (@deprecated in 1.2.0)
961+
experimental/serviceworkers/CacheStorage[JT] def delete(cacheName: String): js.Promise[Boolean] (@deprecated in 1.2.0)
962+
experimental/serviceworkers/CacheStorage[JT] def has(cacheName: String): js.Promise[Boolean] (@deprecated in 1.2.0)
963+
experimental/serviceworkers/CacheStorage[JT] def keys(): js.Promise[js.Array[String]] (@deprecated in 1.2.0)
964+
experimental/serviceworkers/CacheStorage[JT] def `match`(request: RequestInfo, options: CacheQueryOptions?): js.Promise[js.Any] (@deprecated in 1.2.0)
965+
experimental/serviceworkers/CacheStorage[JT] def open(cacheName: String): js.Promise[Cache] (@deprecated in 1.2.0)
966966
experimental/serviceworkers/CanvasProxy[JT] def setContext(context: RenderingContext): Unit
967967
experimental/serviceworkers/Client[JT] def frameType: FrameType
968968
experimental/serviceworkers/Client[JT] def id: String

scalafix/src/main/scala/org/scalajs/dom/scalafix/GenerateApiReport.scala

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,43 @@ class GenerateApiReport extends SemanticRule("GenerateApiReport") {
2121

2222
if (enabled)
2323
doc.tree.traverse {
24-
case a: Defn.Class => process(a.symbol, a.templ, ScopeType.Class)
25-
case a: Defn.Object => process(a.symbol, a.templ, ScopeType.Object)
26-
case a: Defn.Trait => process(a.symbol, a.templ, ScopeType.Trait)
27-
case a: Pkg.Object => process(a.symbol, a.templ, ScopeType.Object)
24+
case a: Defn.Class => process(a.mods, a.symbol, a.templ, ScopeType.Class)
25+
case a: Defn.Object => process(a.mods, a.symbol, a.templ, ScopeType.Object)
26+
case a: Defn.Trait => process(a.mods, a.symbol, a.templ, ScopeType.Trait)
27+
case a: Pkg.Object => process(a.mods, a.symbol, a.templ, ScopeType.Object)
2828
case _ =>
2929
}
3030

3131
Patch.empty
3232
}
3333

34-
private def process(sym: Symbol, body: Template, typ: ScopeType)(implicit doc: SemanticDocument): Unit = {
34+
private def process(parentMods: List[Mod], sym: Symbol, body: Template, typ: ScopeType)(implicit doc: SemanticDocument): Unit = {
3535
// Skip non-public scopes
3636
val info = sym.info.get
3737
if (!info.isPublic && !info.isPackageObject)
3838
return
3939

40+
def inspectAnnotationsFn(set: String => Unit): List[Mod] => List[Mod] =
41+
_.filter {
42+
case Mod.Annot(Init(tpe, _, List(List(_, ver)))) if tpe.toString == "deprecated" =>
43+
set(
44+
ver match {
45+
case Lit.String(s) => s
46+
case term => term.toString
47+
}
48+
)
49+
false
50+
case _ => true
51+
}
52+
53+
// Inspect scope's annotations
54+
var scopeDeprecatedVer = Option.empty[String]
55+
inspectAnnotationsFn(v => scopeDeprecatedVer = Some(v))(parentMods)
56+
4057
val parents = Util.parents(sym).iterator.map(Util.typeSymbol).toList
4158
val domParents = parents.iterator.filter(isScalaJsDom).toSet
4259
val isJsType = parents.exists(isScalaJs)
43-
val s = state.register(sym, isJsType, typ, domParents)
60+
val s = state.register(sym, isJsType, typ, domParents, scopeDeprecatedVer)
4461

4562
def letsSeeHowLazyWeCanBeLol(t: Tree): Unit = {
4663
// Skip non-public members
@@ -58,20 +75,7 @@ class GenerateApiReport extends SemanticRule("GenerateApiReport") {
5875

5976
// Inspect annotations
6077
var deprecatedVer = Option.empty[String]
61-
62-
def inspectAnnotations(mods: List[Mod]): List[Mod] =
63-
mods.filter {
64-
case Mod.Annot(Init(tpe, _, List(List(_, ver)))) if tpe.toString == "deprecated" =>
65-
deprecatedVer = Some {
66-
ver match {
67-
case Lit.String(s) => s
68-
case term => term.toString
69-
}
70-
}
71-
false
72-
case _ => true
73-
}
74-
78+
val inspectAnnotations = inspectAnnotationsFn(v => deprecatedVer = Some(v))
7579
t2 match {
7680
case Decl.Def(mods, name, tparams, paramss, tpe) => t2 = Decl.Def(inspectAnnotations(mods), name, tparams, paramss, tpe)
7781
case Decl.Val(mods, pats, tpe) => t2 = Decl.Val(inspectAnnotations(mods), pats, tpe)

scalafix/src/main/scala/org/scalajs/dom/scalafix/MutableState.scala

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,17 @@ final class MutableState {
1111

1212
private[this] val scopes = mutable.Map.empty[Symbol, Scope]
1313

14-
def register(sym: Symbol, isJsType: Boolean, scopeType: ScopeType, parents: Set[Symbol]): Scope = synchronized {
14+
def register(sym : Symbol,
15+
isJsType : Boolean,
16+
scopeType : ScopeType,
17+
parents : Set[Symbol],
18+
deprecatedVer: Option[String]): Scope = synchronized {
1519
scopes.get(sym) match {
1620
case None =>
1721
val s = Scope(sym)(scopeType, parents)
1822
scopes.update(sym, s)
1923
s.isJsType = isJsType
24+
s.deprecatedVer = deprecatedVer
2025
s
2126
case Some(s) =>
2227
s
@@ -47,10 +52,20 @@ final class MutableState {
4752

4853
val b = SortedSet.newBuilder[Result]
4954

55+
def deprecationSuffix(ver: Option[String]): String =
56+
ver match {
57+
case None => ""
58+
case Some(v) => s" (@deprecated in $v)"
59+
}
60+
5061
// Pass 1
5162
for (root <- scopes.valuesIterator) {
52-
if (!root.isJsType && scopeParents(root).exists(_.isJsType))
63+
val parents = scopeParents(root)
64+
if (!root.isJsType && parents.exists(_.isJsType))
5365
root.isJsType = true
66+
if (root.deprecatedVer.isEmpty)
67+
for (p <- parents.find(_.deprecatedVer.isDefined))
68+
root.deprecatedVer = p.deprecatedVer
5469
}
5570

5671
// Pass 2
@@ -65,19 +80,18 @@ final class MutableState {
6580
var membersFound = false
6681
for {
6782
s <- root :: scopeParents(root)
68-
v <- s.directMembers
83+
m <- s.directMembers
6984
} {
7085
membersFound = true
71-
val key = (scopeKey, v.name, v.desc)
72-
var result = prefix + v.desc
73-
for (ver <- v.deprecatedVer)
74-
result = s"$result (@deprecated in $ver)"
86+
val key = (scopeKey, m.name, m.desc)
87+
val result = prefix + m.desc + deprecationSuffix(m.deprecatedVer.orElse(root.deprecatedVer))
7588
b += Result(key, result)
7689
}
7790

7891
if (!membersFound && !scopeName.endsWith("/package")) {
7992
val key = (scopeKey, " ", "")
80-
b += Result(key, prefix.trim)
93+
val result = prefix.trim + deprecationSuffix(root.deprecatedVer)
94+
b += Result(key, result)
8195
}
8296
}
8397

@@ -101,6 +115,7 @@ object MutableState {
101115

102116
private[MutableState] val directMembers = mutable.Set.empty[Member]
103117
private[MutableState] var isJsType = false
118+
private[MutableState] var deprecatedVer = Option.empty[String]
104119

105120
def add(v: Member): Unit =
106121
synchronized(directMembers += v)

0 commit comments

Comments
 (0)