package scala.reflect
package api

trait Quasiquotes { self: Universe =>

  // implementation is hardwired to `dispatch` method of `scala.tools.reflect.quasiquotes.Quasiquotes`
  // using the mechanism implemented in `scala.tools.reflect.FastTrack`
  implicit class Quasiquote(ctx: StringContext) {
    protected trait api {
      def apply[T](args: T*): Tree = macro ???
      def unapply(scrutinee: Any): Any = macro ???
    }
    object q extends api
    object tq extends api
    object cq extends api
    object pq extends api
    object fq extends api
  }
}

package scala.reflect
package api

trait Quasiquotes { self: Universe =>

  // implementation is hardwired to `dispatch` method of `scala.tools.reflect.quasiquotes.Quasiquotes`
  // using the mechanism implemented in `scala.tools.reflect.FastTrack`
  implicit class Quasiquote(ctx: StringContext) {
    protected trait api {
      def apply[T](args: T*): Any = macro ???
      def unapply(scrutinee: Any): Any = macro ???
    }
    object q extends api
    object tq extends api
    object cq extends api
    object pq extends api
    object fq extends api
  }
}

--- 
+++ 
@@ -7,7 +7,7 @@
   // using the mechanism implemented in `scala.tools.reflect.FastTrack`
   implicit class Quasiquote(ctx: StringContext) {
     protected trait api {
-      def apply[T](args: T*): Any = macro ???
+      def apply[T](args: T*): Tree = macro ???
       def unapply(scrutinee: Any): Any = macro ???
     }
     object q extends api
Tweak signature for quasiquote's apply

Even though quasiquotes are whitebox macros their
return values are in fact always trees. This might
help IDEs with macro expansions turned off.
