All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala.build.CoursierUtils.scala Maven / Gradle / Ivy

There is a newer version: 1.6.1
Show newest version
package scala.build

import coursier.core.{Dependency => CDependency, Module}
import coursier.parse.{DependencyParser, ModuleParser}
import dependency.{DependencyLike, NameAttributes}

import scala.build.internal.Constants
import scala.quoted.*

def noArgs(args: Expr[Seq[Any]])(using Quotes): Unit = {} // TODO

def extractString(cs: Expr[StringContext])(using Quotes): String =
  cs.value match {
    // without Seq it brokes compiler! - check this!
    case Some(StringContext(Seq(part: String))) =>
      part
    case _ =>
      quotes.reflect.report.error("StringContext args must be statically known")
      ???
  }

object CoursierUtils {
  def parseModule(cs: Expr[StringContext], args: Expr[Seq[Any]])(using Quotes): Expr[Module] =
    noArgs(args)
    val modString = extractString(cs)
    ModuleParser.module(modString, Constants.defaultScalaVersion) match {
      case Left(error) =>
        quotes.reflect.report.error(error)
        ???
      case Right(_) =>
        '{
          ModuleParser.module(
            ${ Expr(modString) },
            Constants.defaultScalaVersion
          ).getOrElse(???)
        }
    }

  extension (inline ctx: StringContext)
    inline def cmod(inline args: Any*): Module =
      ${ parseModule('ctx, 'args) }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy