Подтвердить что ты не робот

Scala инструмент для удаления всего неиспользуемого кода

Я пишу плагин Scala для редактора, который я использую, чтобы выделить все неиспользуемые коды кода (может быть не использован defs, vals, classes и implicits) и дать пользователю возможность вытащить их из файла .scala.

Как я могу это сделать? Чтобы упростить проблему, предположим, что у нас есть только одиночный корневой уровень .scala файл без внешней зависимости от библиотек или любых других файлов кода.

В идеале я хотел бы, чтобы это был плагин SBT, который, учитывая один такой файл Foo.scala, выплевывал бы файл Foo_min.Scala при удалении всего неиспользуемого кода.

4b9b3361

Ответ 2

Вам нужен какой-то семантический API для прохождения по коду и задавать такие вопросы, как "эта переменная/импорт когда-либо используется"?

Насколько я знаю, Intellij использует Meta programming System для достижения тех же целей. Для scala вы можете дождаться выпуска scalameta 2.0, который (скорее всего) будет поддерживать семантический API.

Ответ 3

В основном вы ищете callgraph.

Полный, но сложный callgraph для кода Scala реализован в Dotty Linker. Это современное состояние. Однако даже создание более простого callrraph не является тривиальной задачей. Я бы не удивился, если бы реализация Meta была бы ограничена для выполнения такой задачи. В частности, вам нужно быть очень осторожным с имплицитами и областями, особенно учитывая тот факт, что мета-макросы расширяются после typer.

Создание собственного callgraph требует символов, типов и неявных поисков. Боюсь, вам нужно подождать, пока не будет выпущен Semantic API в Scala Meta 2.0.