背景
我有一个 sbt 管理的 Scala 项目,它使用 usual sbt project layout对于带有宏的 Scala 项目,即包含宏的子项目,主项目是实际应用程序,并且依赖于宏子项目。宏是 macro annotations本质上,它为常规类生成伴生对象。生成的伴随对象在其他成员中声明了应用/取消应用方法。
我使用 sbt-idea 插件生成相应的 IntelliJ IDEA 项目,并使用 IDEA 的 sbt-plugin 中的 sbt 控制台编译和运行我的 Scala 应用程序。
除了生成的伴生对象,更重要的是,它们的成员(例如 apply/unapply)不被 IDEA 识别外,一切都或多或少地正常工作。因此,我在任何地方都会得到一条波浪线,例如 apply 方法。
我的设置是 IntelliJ IDEA CE 133.471,带有插件 SBT 1.5.1 和 Windows 7 x64 上的 Scala 0.28.363。
问题
如何让 IntelliJ IDEA 识别由 Scala 宏(准确地说是宏注释)生成的代码(类、对象、方法等)?
是否已知其他 IDE(例如 Eclipse)在这样的环境中工作得更好?
有关的
This question (不太详细)基本上问了同样的问题,但还没有得到答复(2014-02-26)。
According to a JetBrains developer我要求的功能在他们的长期待办事项列表中,但不会很快实现(2014-03-05)。
最佳答案
使用最新的 Scala 插件构建,有一个 API 可用于编写您自己的插件来支持您的宏:http://blog.jetbrains.com/scala/2015/10/14/intellij-api-to-build-scala-macros-support/
Now, everyone can use this API to make their macros more friendly to their favorite IDE. To do that, you have to implement SyntheticMembersInjector, and register it in the plugin.xml file:
<extensions defaultExtensionNs="org.intellij.scala"> <syntheticMemberInjector implementation="org.jetbrains.example.injector.Injector"/> </extensions>
关于intellij-idea - 如何让 IntelliJ IDEA 识别由宏创建的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21696660/