Насколько мне известно, таких инструментов нет, хотя AFAIR IntelliJ может предупреждать о несоответствии между пакетом и каталогом. ) правило - scalafix / scalameta будет использоваться для проверки фактического пакета файла, перевода его в ожидаемый каталог и, если они отличаются, перемещения файла.
Я предлагаю scalafix / scalameta, потому что есть такие угловые случаи, как:
вам разрешено писать свои пакеты, например:
package a
package b
package c
, а это почти как package a.b.c
, за исключением того, что он автоматически импортирует все из a
и b
вы можете иметь package object
в вашем файле, а затем, если у вас есть
package a.b
package object c
, этот файл должен быть в a/b/c
каталог
, поэтому я бы предпочел проверить, не попал ли файл под какие-либо из существующих инструментов.
Если вы уверены, что у вас нет таких случаев ( Я бы не стал без проверки) вы могли бы:
- соответствовать первым t строка с регулярным выражением (
^package (.*)
) - преобразовать
a.b.c
в a/b/c
(matched.split('.').map(_.trim).mkString(File.separator)
) - сравнить сгенерированное местоположение с фактическим местоположением (я предлагаю разрешить абсолютное местоположение файлов)
- при необходимости переместить файл
Если есть возможность иметь более сложный случай, я мог бы заменить первый шаг запросом утилит scalafix / scalameta.