Скалярный плагин SBT форматирует одно и то же несколько раз, возможно ли это сделать один раз? - PullRequest
3 голосов
/ 13 апреля 2019

SBT скалярный плагин форматирует файлы более одного раза в настройке нескольких проектов.Вот пример https://github.com/Seetaramayya/sbt-scalariform-example

если вы компилируете проект, вы можете увидеть что-то подобное в консоли

[info] Formatting 5 Scala sources ProjectRef(uri("file:/Users/seeta/projects/github/sbt-multi-scalariform/example/"), "root")(compile) ...
[info] Formatting 7 Scala sources ProjectRef(uri("file:/Users/seeta/projects/github/sbt-multi-scalariform/example/"), "module1")(compile) ...
[info] Formatting 7 Scala sources ProjectRef(uri("file:/Users/seeta/projects/github/sbt-multi-scalariform/example/"), "module2")(compile) ...
[info] Formatting 7 Scala sources ProjectRef(uri("file:/Users/seeta/projects/github/sbt-multi-scalariform/example/"), "main")(compile) ...

В базе кода существует 5 файлов scala и 2 файла sbt.Ни в SBT, ни в скалярной документации я не мог найти, как выполнить задачу только один раз при настройке нескольких модулей.

Я хотел бы выполнить задачу только один раз.Единственный вариант, который я вижу, это включить плагин на уровне корневого проекта и отключить его на подпроектах, но мне не понравился этот вариант (мне нужно добавить disablePlugins в 15 подпроектах)

1 Ответ

1 голос
/ 14 апреля 2019

Проблема , по-видимому, заключается в том, что

Задача scalariformFormat каждого подпроекта в различных областях имеет корень проекта в настройке sourceDirectories.Это просто приводит к тому, что весь проект сканируется для источников scala и форматируется столько раз, сколько существует подпроектов.

и адресован через scalariformWithBaseDirectory настройка

val scalariformWithBaseDirectory = settingKey[Boolean]("Whether or not to format sources in project root (default: false)")

Таким образом, установка withBaseDirectory=false в .scalariform.conf должна давать вывод

[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "main")(compile) ...
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "module1")(compile) ...
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "module2")(compile) ...

Обратите внимание, однако, что это не будет форматировать *.scala источники в корне project/каталог.Чтобы решить эту проблему, мы могли бы попытаться сохранить withBaseDirectory=false в .conf, но включить его для корневого проекта, например,

lazy val root = (project in file("."))
  .aggregate(module1, module2, main)
  .settings(scalariformWithBaseDirectory := true)

, который выдает

[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "module2")(compile) ...
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "module1")(compile) ...
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "main")(compile) ...
[info] Formatting 5 Scala sources ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "root")(compile) ...

, где мы все еще получаем дублирование, ноне так сильно, как изначально.

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