如何让IntelliJ IDEA识别由宏创建的代码?

Mal*_*off 38 compilation syntax-highlighting intellij-idea scala-macros

背景

我有一个使用了SBT管理斯卡拉项目通常SBT项目布局斯卡拉用宏,即项目,包含宏的主要项目,是实际应用和依赖于宏观子项目子项目.宏是宏注释,实质上是为常规类生成伴随对象.生成的伴随对象在其他成员中声明了apply/unapply方法.

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

一切都或多或少都有效,除了生成的伴随对象,更重要的是它们的成员,如apply/unapply,IDEA无法识别.因此,我在任何地方都得到了一条波浪线,例如,一种应用方法.

我的设置是IntelliJ IDEA CE 133.471,在Windows 7 x64上使用插件SBT 1.5.1和Scala 0.28.363.

问题

如何让IntelliJ IDEA识别由Scala宏生成的代码(类,对象,方法......)(准确地说是宏注释)?

是否已知其他IDE(例如Eclipse)在这样的设置中工作得更好?

有关

这个问题(不太详细)基本上问了同样的问题,但还没有得到答复(2014-02-26).

根据JetBrains开发人员说法,我要求的功能是他们的长期待办事项清单,但不会很快实施(2014-03-05).

Ale*_*nov 8

使用最新的Scala插件构建,有一个API可用于编写自己的插件以支持您的宏:http://blog.jetbrains.com/scala/2015/10/14/intellij-api-to-build -scala的宏支持/

现在,每个人都可以使用这个API使他们的宏对他们喜欢的IDE更友好.为此,您必须实现SyntheticMembersInjector,并将其注册到plugin.xml文件中:

<extensions defaultExtensionNs="org.intellij.scala">
  <syntheticMemberInjector implementation="org.jetbrains.example.injector.Injector"/>
</extensions>
Run Code Online (Sandbox Code Playgroud)