是否有更简洁的方法来组成SBT任务?

时间:2015-01-12 00:37:31

标签: scala sbt

有一个有用的SBT插件用于格式化许可证标题: https://github.com/Banno/sbt-license-plugin

从0.1.0开始,它只在Compile"中格式化" scalaSource:

object Plugin extends sbt.Plugin {
  import LicenseKeys._

  object LicenseKeys {  
    lazy val formatLicenseHeaders = TaskKey[Unit]("formatLicenseHeaders", "Includes the license header to source files")
    …
  }

  def licenseSettings = Seq(
    formatLicenseHeaders <<= formatLicenseHeadersTask,
    …
  )

  …

  private def formatLicenseHeadersTask = 
    (streams, scalaSource in Compile, license in formatLicenseHeaders, removeExistingHeaderBlock in formatLicenseHeaders) map {
      (out, sourceDir, lic, removeHeader) =>
        modifySources(sourceDir, lic, removeHeader, out.log)
    } 

我写了一个pull请求,我将其概括为格式化用于编译和测试的java和scala源:

https://github.com/Banno/sbt-license-plugin/blob/master/src/main/scala/license/plugin.scala

private def formatLicenseHeadersTask = Def.task[Unit] {
  formatLicenseHeadersTask1.value
  formatLicenseHeadersTask2.value
  formatLicenseHeadersTask3.value
  formatLicenseHeadersTask4.value
}

任务formatLicenseHeadersTask1234对应于{scala,java} Source和{Compile,Test}的组合。

这有效,但它真的很难看。有没有办法用循环写下相同的东西,如下图所示?

for { 
   src <- Seq( scalaSource, javaSource )
   kind <- Seq( Compile, Test )
   …
}

0 个答案:

没有答案