intellij-idea - 如何让IntelliJ IDEA识别宏创建的代码?

标签 intellij-idea compilation syntax-highlighting scala-macros

背景

我有一个 sbt 管理的 Scala 项目,它使用 usual sbt project layout对于带有宏的 Scala 项目,即包含宏的子项目,主项目是实际应用程序,并且依赖于宏子项目。宏是 macro annotations从本质上讲,它为常规类生成伴随对象。生成的伴生对象除了其他成员之外还声明了 apply/unapply 方法。

我使用 sbt-idea 插件生成了相应的 IntelliJ IDEA 项目,并使用 IDEA 的 sbt-plugin 中的 sbt 控制台来编译和运行我的 Scala 应用程序。

一切都或多或少地工作正常,除了生成的伴生对象,更重要的是,它们的成员(例如 apply/unapply)不被 IDEA 识别。因此,我在任何地方都会出现一条波浪线,例如 apply 方法。

我的设置是 Windows 7 x64 上的 IntelliJ IDEA CE 133.471,带有插件 SBT 1.5.1 和 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/22047492/

相关文章:

java - IntelliJ gui creator : JPanel gives runtime null pointer exception upon adding any component

search - intelliJ -> 有什么方法可以将您的搜索范围限定在一个函数内

java - IntelliJ、Maven 和 Java 7

c - 为什么我们应该在函数声明的同一个文件中包含函数原型(prototype)的头文件?

Xcode 中的 Python 语法高亮

intellij-idea - 如何在我的 IDE 中使用 sops 作为外部工具?

java - 如何在 Gradle "compile"任务中用自定义库替换 JDK 标准库?

php - 自己的语法荧光笔

vim - 在 vim 中以可视模式更改文本选择颜色

c++ - 在虚拟机上使用 OpenCV 重建 C++ 程序