Как добавить плагин компилятора Scala только для тестовых исходников - PullRequest
2 голосов
/ 14 июля 2020

Можно ли добавить плагин компилятора Scala только при компиляции тестовых источников?

Когда плагин компилятора добавляется путем вызова SBT addCompilerPlugin, тогда добавляется зависимость библиотеки. Соответствующие методы:

  /** Transforms `dependency` to be in the auto-compiler plugin configuration. */
  def compilerPlugin(dependency: ModuleID): ModuleID =
    dependency.withConfigurations(Some("plugin->default(compile)"))

  /** Adds `dependency` to `libraryDependencies` in the auto-compiler plugin configuration. */
  def addCompilerPlugin(dependency: ModuleID): Setting[Seq[ModuleID]] =
    libraryDependencies += compilerPlugin(dependency)

Вопрос сводится к тому, существует ли withConfigurations, из-за которого плагин находится в пути к классам только при компиляции исходных текстов тестов. Я безуспешно пробовал Some("plugin->default(testCompile)").

1 Ответ

1 голос
/ 14 июля 2020

Чтобы ответить на мой собственный вопрос: это возможно, установив autoCompilerPlugins в false и добавив необходимую опцию -Xplugin=... Scalac вручную в тестовой конфигурации. Это можно сделать с помощью служебного метода Classpaths.autoPlugins.

В моем случае я хотел активировать плагин компилятора SemanticDB только во время тестов. Это можно сделать с помощью следующих настроек SBT:

    autoCompilerPlugins := false,
    ivyConfigurations += Configurations.CompilerPlugin,
    scalacOptions in Test ++= Classpaths.autoPlugins(update.value, Seq(), ScalaInstance.isDotty(scalaVersion.value)),
    scalacOptions in Test += "-Yrangepos",
    scalacOptions in Test += "-P:semanticdb:text:on",
...