2016-03-09 10 views
12

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

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

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

+2

Ближайшей вещь, которую я знаю, это использовать '-Ywarn-unused' и' -Ywarn-неиспользованный-import' как параметры sbt. –

+0

Возможный дубликат [Есть ли инструмент для Scala для очистки всех неиспользуемых импортов из всех файлов кода?] (Https://stackoverflow.com/questions/7767567/is-there-a-tool-for-scala-to -clean-все-в-неиспользованные-импорт-из-все-The-код-файл) –

ответ

4

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

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

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^