From ab09530d350a2a7b2576d06a870082b975cf6c4f Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Mon, 16 Jan 2017 19:08:57 +0100 Subject: Add `TypeAlias` to docs --- doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala | 5 +++++ .../dotty/tools/dottydoc/core/MiniPhaseTransform.scala | 14 +++++++++++++- doc-tool/src/dotty/tools/dottydoc/model/entities.scala | 14 ++++++++++++-- doc-tool/src/dotty/tools/dottydoc/model/internal.scala | 15 +++++++++++---- 4 files changed, 41 insertions(+), 7 deletions(-) (limited to 'doc-tool') diff --git a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala index 0ad199ca2..ed31eeb05 100644 --- a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala +++ b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala @@ -85,6 +85,11 @@ class DocASTPhase extends Phase { val pkgPath = path(pd.symbol) addEntity(PackageImpl(pd.symbol, annotations(pd.symbol), pd.symbol.showFullName, collectEntityMembers(st, pkgPath), pkgPath)) + /** type alias */ + case t: TypeDef if !t.isClassDef => + val sym = t.symbol + TypeAliasImpl(sym, annotations(sym), flags(t), t.name.show, path(sym), None) + /** trait */ case t @ TypeDef(n, rhs) if t.symbol.is(Flags.Trait) => //TODO: should not `collectMember` from `rhs` - instead: get from symbol, will get inherited members as well diff --git a/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala b/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala index 100e0af6b..80e2929f7 100644 --- a/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala +++ b/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala @@ -92,6 +92,17 @@ object transform { newPackage } + case t: TypeAlias => transformEntity(t, _.typeAliasTransformation) { t => + TypeAliasImpl( + t.symbol, + t.annotations, + t.modifiers, + t.name, + t.path, + t.alias, + t.comment + ) + } case c: Class => transformEntity(c, _.classTransformation) { cls => ClassImpl( cls.symbol, @@ -195,8 +206,8 @@ object transform { case id => id } - // Partial functions instead???? def transformPackage(implicit ctx: Context): PartialFunction[Package, Package] = identity + def transformTypeAlias(implicit ctx: Context): PartialFunction[TypeAlias, TypeAlias] = identity def transformClass(implicit ctx: Context): PartialFunction[Class, Class] = identity def transformCaseClass(implicit ctx: Context): PartialFunction[CaseClass, CaseClass] = identity def transformTrait(implicit ctx: Context): PartialFunction[Trait, Trait] = identity @@ -205,6 +216,7 @@ object transform { def transformVal(implicit ctx: Context): PartialFunction[Val, Val] = identity private[transform] def packageTransformation(p: Package)(implicit ctx: Context) = (transformPackage orElse identity)(p) + private[transform] def typeAliasTransformation(alias: TypeAlias)(implicit ctx: Context) = (transformTypeAlias orElse identity)(alias) private[transform] def classTransformation(cls: Class)(implicit ctx: Context) = (transformClass orElse identity)(cls) private[transform] def caseClassTransformation(cc: CaseClass)(implicit ctx: Context) = (transformCaseClass orElse identity)(cc) private[transform] def traitTransformation(trt: Trait)(implicit ctx: Context) = (transformTrait orElse identity)(trt) diff --git a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala index aea09f745..6f6e8d3e8 100644 --- a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala +++ b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala @@ -5,7 +5,7 @@ import comment._ import references._ import dotty.tools.dotc.core.Symbols.{ Symbol, NoSymbol } -trait Entity { +trait Entity { entity => def symbol: Symbol def name: String @@ -21,6 +21,12 @@ trait Entity { def annotations: List[String] + def children: List[Entity with Members] = entity match { + case e: Entity with Members => + e.members.collect { case e: Entity with Members if e.kind != "package" => e } + case _ => Nil + } + /** All parents from package level i.e. Package to Object to Member etc */ def parents: List[Entity] = parent match { case NonEntity => Nil @@ -72,8 +78,12 @@ trait ImplicitlyAddedEntity extends Entity { trait Package extends Entity with Members { val kind = "package" +} - def children: List[Entity with Members] +trait TypeAlias extends Entity with Modifiers { + val kind = "type" + def alias: Option[Reference] + def isAbstract: Boolean = !alias.isDefined } trait Class extends Entity with Modifiers with TypeParams with Constructors with SuperTypes with Members { diff --git a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala index 9787da7ce..dd592c2e1 100644 --- a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala +++ b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala @@ -18,10 +18,17 @@ object internal { var members: List[Entity], path: List[String], var comment: Option[Comment] = None - ) extends Package with Impl { - def children: List[Entity with Members] = - members.collect { case x: Entity with Members => x } - } + ) extends Package with Impl + + final case class TypeAliasImpl ( + symbol: Symbol, + annotations: List[String], + modifiers: List[String], + name: String, + path: List[String], + alias: Option[Reference], + var comment: Option[Comment] = None + ) extends TypeAlias with Impl final case class ClassImpl( symbol: Symbol, -- cgit v1.2.3