diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2016-04-11 18:20:42 +0200 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2016-08-19 15:37:18 +0200 |
commit | 8d8d87b9cecef81e2b2813137bb3f71e13418b11 (patch) | |
tree | 3c53e99bd6b33ff0f6bde1a72658124a9bab5d7c /dottydoc/shared | |
parent | 5a5f9d7ed37ca6449ef61ee5e0f6fbf9731df795 (diff) | |
download | dotty-8d8d87b9cecef81e2b2813137bb3f71e13418b11.tar.gz dotty-8d8d87b9cecef81e2b2813137bb3f71e13418b11.tar.bz2 dotty-8d8d87b9cecef81e2b2813137bb3f71e13418b11.zip |
Add project and impl for initial barebones dottydoc
Diffstat (limited to 'dottydoc/shared')
3 files changed, 169 insertions, 0 deletions
diff --git a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/Entity.scala b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/Entity.scala new file mode 100644 index 000000000..9bd175fde --- /dev/null +++ b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/Entity.scala @@ -0,0 +1,126 @@ +package dotty.tools.dottydoc +package model + +import comment.Comment + +object Entities { + import prickle._ + + type PackageMember = Entity with Members with Modifiers + + sealed trait Entity { + def name: String + + def path: List[String] + + def comment: Option[Comment] + + val sourceUrl: String = "#" + + val kind: String + } + + sealed trait Members { + def members: List[Entity] + } + + sealed trait Modifiers { + def modifiers: List[String] + + val isPrivate: Boolean = + modifiers.contains("private") + } + + final case class Package( + name: String, + members: List[Entity], + comment: Option[Comment], + path: List[String] + ) extends Entity { + override val kind = "package" + + val children: List[PackageMember] = + members.collect { case x: PackageMember => x } + } + + final case class Class( + name: String, + members: List[Entity], + comment: Option[Comment], + modifiers: List[String], + path: List[String] + ) extends Entity with Members with Modifiers { + override val kind = "class" + } + + final case class CaseClass( + name: String, + members: List[Entity], + comment: Option[Comment], + modifiers: List[String], + path: List[String] + ) extends Entity with Members with Modifiers { + override val kind = "case class" + } + + final case class Trait( + name: String, + members: List[Entity], + comment: Option[Comment], + modifiers: List[String], + path: List[String] + ) extends Entity with Members with Modifiers { + override val kind = "trait" + } + + final case class Object( + name: String, + members: List[Entity], + comment: Option[Comment], + modifiers: List[String], + path: List[String] + ) extends Entity with Members with Modifiers { + override val kind = "object" + } + + final case class Def( + name: String, + comment: Option[Comment], + modifiers: List[String], + path: List[String] + ) extends Entity with Modifiers { + override val kind = "def" + } + + final case class Val( + name: String, + comment: Option[Comment], + modifiers: List[String], + path: List[String] + ) extends Entity with Modifiers { + override val kind = "val" + } + + /** This object is used to represent entities that are to be filtered out */ + final case object NonEntity extends Entity { + override val name = "" + override val comment = None + override val path = Nil + override val kind = "" + } + + //implicit val pMPickler: PicklerPair[PackageMember] = CompositePickler[PackageMember] + // .concreteType[Class] + // .concreteType[CaseClass] + // .concreteType[Object] + // .concreteType[Trait] + + implicit val entityPickler: PicklerPair[Entity] = CompositePickler[Entity] + .concreteType[Val] + .concreteType[Def] + .concreteType[Class] + .concreteType[CaseClass] + .concreteType[Object] + .concreteType[Trait] + .concreteType[Package] +} diff --git a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/EntityFactories.scala b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/EntityFactories.scala new file mode 100644 index 000000000..5e459a766 --- /dev/null +++ b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/EntityFactories.scala @@ -0,0 +1,37 @@ +package dotty.tools.dottydoc +package model + +import dotty.tools.dotc +import dotc.core.Types._ +import dotc.core.Contexts.Context +import dotc.core.Symbols.Symbol +import dotc.core.{ Flags => DottyFlags } +import dotc.ast.Trees._ +import DottyFlags.FlagSet + +object EntityFactories { + import dotty.tools.dotc.ast.tpd._ + import DottyFlags._ + + def flags(t: Tree)(implicit ctx: Context): List[String] = + (t.symbol.flags & SourceModifierFlags).flagStrings.toList + + def path(t: Tree, name: String)(implicit ctx: Context): List[String] = { + def pathList(tpe: Type): List[String] = tpe match { + case t: ThisType => + pathList(t.tref) + case t: NamedType if t.prefix == NoPrefix && t.name.toString == "<root>" => + Nil + case t: NamedType if t.prefix == NoPrefix => + t.name.toString :: Nil + case t: NamedType => + pathList(t.prefix) :+ t.name.toString + } + + val ref = + if (t.symbol.isTerm) t.symbol.termRef + else t.symbol.typeRef + + pathList(ref) + } +} diff --git a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/comment/Comment.scala b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/comment/Comment.scala new file mode 100644 index 000000000..cf37564b9 --- /dev/null +++ b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/comment/Comment.scala @@ -0,0 +1,6 @@ +package dotty.tools +package dottydoc +package model +package comment + +case class Comment(body: String) |