【问题标题】:How to make IntelliJ IDEA recognise code created by macros?如何让 IntelliJ IDEA 识别宏创建的代码?
【发布时间】:2014-03-29 15:23:37
【问题描述】:

背景

我有一个由 sbt 管理的 Scala 项目,它使用 usual sbt project layout 用于带有宏的 Scala 项目,即包含宏的子项目是实际应用程序的主项目,并且取决于宏子项目。宏是macro annotations,本质上,它为常规类生成伴随对象。生成的伴随对象在其他成员中声明应用/取消应用方法。

我使用 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)在这种环境下工作得更好?

相关

This question(不那么详细)基本上问了同样的问题,但还没有得到答复(2014-02-26)。

According to a JetBrains developer 我请求的功能在他们的长期待办事项清单上,但不会很快实现 (2014-03-05)。

【问题讨论】:

  • 为什么投反对票?请解释一下自己,以便我改进问题。
  • 我赞成这个问题,因为我不明白为什么它也值得反对
  • 除了代码完成之外,我想调试一下 Intellij 中 Scala 宏生成的合成代码
  • 没有这个插件吗?

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


【解决方案1】:

似乎支持有限。

通过此链接引用:http://blog.jetbrains.com/scala/2014/01/23/heading-to-the-perfect-scala-code-analysis/

Alexander Podkhalyuzin says:    

2014 年 1 月 30 日上午 10:13

我们开始支持 Scala 宏,但这不是一项简单的任务,所以我不能保证很快就会完成。

最好的问候, 亚历山大·波德哈柳津。

【讨论】:

    【解决方案2】:

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

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

    <extensions defaultExtensionNs="org.intellij.scala">
      <syntheticMemberInjector implementation="org.jetbrains.example.injector.Injector"/>
    </extensions>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 2012-04-23
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多