оценка списка задач внутри задачи sbt - PullRequest
1 голос
/ 06 апреля 2020

Я хотел бы оценить список задач внутри одной задачи.

это мой код:

val testPar: sbt.TaskKey[scala.Unit] = TaskKey("test-par")

testPar := {
  (Test / definedTests)
    .value
    .map(td => " " + td.name)
    .map(t => (Test / testOnly).toTask(t))
    .map(_.value)
}

но я получаю эту ошибку:

ошибка: недопустимая динамика c ссылка: x $ 1
.map (_. value)

Я пытался использовать Def.taskDyn, как предлагается здесь { ссылка }, но затем я получаю эту ошибку:

ошибка: несоответствие типов;
найдено: Seq [Unit] требуется:
sbt.Def.Initialize [sbt.Task [?]]

Я использую sbt 1.3.9
что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Вы столкнулись с проблемой, с которой я также часто боролся в прошлом. В большинстве случаев на помощь приходит комбинация taskDyn и рекурсии:

val testPar: sbt.TaskKey[scala.Unit] = TaskKey("test-par")

testPar := Def.taskDyn {
  val tasks = (Test / definedTests).value
    .map(td => " " + td.name)
    .map(t => (Test / testOnly).toTask(t))

  flattenTasks(tasks)
}.value

def flattenTasks[A](tasks: Seq[Def.Initialize[Task[A]]]): Def.Initialize[Task[List[A]]] =
  tasks.toList match {
    case Nil => Def.task { Nil }
    case x :: xs => Def.taskDyn { flattenTasks(xs) map (x.value :: _) }
  }
1 голос
/ 06 апреля 2020

Вы определили tasPar как TaskKey [Unit], и тогда вы вызываете toTask(t) из testOnly:

val testPar: sbt.TaskKey[scala.Unit] = TaskKey("test-par")

testPar := {
  (Test / definedTests).value
    .map(td => " " + td.name)
    .map(t => (Test / testOnly).toTask(t))
}

, а тип testOnly равен sbt.InputKey[scala.Unit]. Где документация гласит:

Метод toTask при Initialize [InputTask [T]] принимает ввод данных String для применения и создает задачу, которую можно использовать в обычном режиме.

Итак , в вашем случае T - это Unit, и вы не можете продолжить цепочку с map для входных задач

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...