aboutsummaryrefslogblamecommitdiff
path: root/doc-tool/src/dotty/tools/dottydoc/model/references.scala
blob: a103347c1efca7feaa321386000f4b6cfaa887d7 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13












                                                                                                                                          
                                                    



                                                                                     









                                                                                               
                                                                                   







                                                                                     
 
package dotty.tools.dottydoc
package model

object references {
  sealed trait Reference
  final case class TypeReference(title: String, tpeLink: MaterializableLink, paramLinks: List[Reference]) extends Reference
  final case class OrTypeReference(left: Reference, right: Reference) extends Reference
  final case class AndTypeReference(left: Reference, right: Reference) extends Reference
  final case class FunctionReference(args: List[Reference], returnValue: Reference) extends Reference
  final case class TupleReference(args: List[Reference]) extends Reference
  final case class BoundsReference(low: Reference, high: Reference) extends Reference
  final case class NamedReference(title: String, ref: Reference, isByName: Boolean = false, isRepeated: Boolean = false) extends Reference
  final case class ConstantReference(title: String) extends Reference
  final case object EmptyReference extends Reference

  /** Use MaterializableLink for entities that need be picklable */
  sealed trait MaterializableLink { def title: String }
  final case class UnsetLink(title: String, query: String) extends MaterializableLink
  final case class MaterializedLink(title: String, target: String) extends MaterializableLink {
    def this(title: String, target: Entity) = this(title, target match {
      case target: Package =>
        target.path.mkString("/") + "/index.html"
      case _: TypeAlias | _: Def | _: Val =>
        target.parent.path.mkString("/") + ".html#" + target.signature
      case _ =>
        target.path.mkString("/") + ".html"
    })
  }
  final case class NoLink(title: String, target: String) extends MaterializableLink

  object AndOrTypeReference {
    def unapply(ref: Reference): Option[(Reference, String, Reference)] = ref match {
      case OrTypeReference(left, right) => Some((left, "|", right))
      case AndTypeReference(left, right) => Some((left, "&", right))
      case _ => None
    }
  }
}