aboutsummaryrefslogblamecommitdiff
path: root/doc-tool/src/dotty/tools/dottydoc/core/DocImplicitsPhase.scala
blob: 6577f0cb784fbebdf98e1602b137a66892486016 (plain) (tree)
1
2
3
4
5
6
7
8
9






                                                                                        
                    
 
                                                                       










                                                                                                         
                                                                                                                               
                                                                                             




        
package dotty.tools
package dottydoc
package core

import dotty.tools.dotc.transform.TreeTransforms.{ MiniPhaseTransform, TransformerInfo }
import dotty.tools.dotc.core.Flags
import dotc.core.Contexts.Context
import util.syntax._

class DocImplicitsPhase extends MiniPhaseTransform { thisTransformer =>
  import dotty.tools.dotc.ast.tpd._

  def phaseName = "addImplicitsPhase"

  override def transformDefDef(tree: DefDef)(implicit ctx: Context, info: TransformerInfo): Tree = {
    if (
      tree.symbol.is(Flags.Implicit)  && // has to have an implicit flag
      tree.symbol.owner.isStaticOwner && // owner has to be static (e.g. top-level `object`)
      tree.vparamss.length > 0        &&
      tree.vparamss(0).length == 1       // should only take one arg, since it has to be a transformation
    ) {
      val convertee = tree.vparamss(0)(0).symbol.info.widenDealias.finalResultType.typeSymbol // the pimped type (i.e. `class`)
      ctx.docbase.addDef(convertee, tree.symbol.info.widenDealias.finalResultType.typeSymbol)
    }

    tree
  }
}