Ответ 1
Я не верю, что есть такая вещь.
Дело в том, что для любого языка, но особенно для языка библиотеки, такого как Scala, лексический анализ и синтаксический анализ являются наименее интересной и самой тривиальной частью статического анализа. Чтобы сделать что-нибудь даже отдаленно интересное, вам нужно выполнить значительный семантический анализ: desugaring, вывод типа, проверка типов, проверка вида, расширение макросов, разрешение перегрузки, неявное разрешение, привязка имени. Короче: вам нужно повторно внедрить более или менее весь компилятор Scala, по модулю фактической части генерации кода. Помните, что как макросистемы Scala, так и система типа Scala являются Turing-complete (на самом деле, Scala макросистема Scala!): Может произойти значительное вычисление времени компиляции и уровня на уровне, невозможно проанализировать без фактического выполнения расширения макросов, вывода типа и проверки типов.
Это огромная задача, и на самом деле есть только два проекта, которые успешно выполнили ее: один - это компилятор Scala, другой - плагин IntelliJ IDEA Scala.
И даже не рассказывайте о плагинах компилятора, которые могут изменять почти синтаксис и семантику Scala почти любыми способами.
Но вот, есть надежда: сам компилятор Scala предоставляет API, называемый компилятором презентаций, который специально разработан для использования IDE, обозревателями кода и всеми видами инструментов статического анализа. Он дает вам доступ ко всей информации, которую компилятор имеет во время компиляции, непосредственно перед этапами оптимизации и генерации кода. Он используется ScalaDoc, Scala REPL, плагин Scala Eclipse, плагин NetBeans Scala, SimplyScala.Com, плагин ENSIME для Emacs, некоторые инструменты статического анализа и многие другие.