aboutsummaryrefslogtreecommitdiff
path: root/dottydoc/shared
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-04-11 18:20:42 +0200
committerFelix Mulder <felix.mulder@gmail.com>2016-08-19 15:37:18 +0200
commit8d8d87b9cecef81e2b2813137bb3f71e13418b11 (patch)
tree3c53e99bd6b33ff0f6bde1a72658124a9bab5d7c /dottydoc/shared
parent5a5f9d7ed37ca6449ef61ee5e0f6fbf9731df795 (diff)
downloaddotty-8d8d87b9cecef81e2b2813137bb3f71e13418b11.tar.gz
dotty-8d8d87b9cecef81e2b2813137bb3f71e13418b11.tar.bz2
dotty-8d8d87b9cecef81e2b2813137bb3f71e13418b11.zip
Add project and impl for initial barebones dottydoc
Diffstat (limited to 'dottydoc/shared')
-rw-r--r--dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/Entity.scala126
-rw-r--r--dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/EntityFactories.scala37
-rw-r--r--dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/comment/Comment.scala6
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)