【问题标题】:Does IDEA recognize Play Scala template changes?IDEA 是否识别 Play Scala 模板更改?
【发布时间】:2013-01-05 19:24:45
【问题描述】:

我发现 IntelliJ IDEA 12 不理解对 Scala 模板的更改。例如,假设我有 index.html.scala :

@(message: String)

我的控制器使用:

return ok(index.render("Your new application is ready."));

然后我将模板更改为:

@(message: String, foo: String)

控制器是:

return ok(index.render("Your new application is ready.", "foo"));

我发现 IDEA 会将控制器代码标记为红色,声称我有一个我不应该有的额外参数(“foo”)。直到我点击页面并且 Play 重新编译模板,错误突出显示才消失。

当然,这是一个大问题,因为 IDEA 出色的语法突出显示的全部意义在于让我在加载浏览器之前确保我的代码是好的。当前行为的工作方式,我的流程是代码->重新加载->检查错误而不是首选代码->检查错误->重新加载。

还有其他人遇到过这种情况吗?

【问题讨论】:

  • 到目前为止我发现的最好的事情是在命令行上打开播放控制台并运行 ~compile 命令。然后至少在文件更改时会发生重新编译,尽管这仍然不是我期望从 IDEA 获得的体验。

标签: java scala playframework intellij-idea playframework-2.0


【解决方案1】:

默认情况下,Play 等待下一个请求(即在浏览器中手动刷新页面)以涉及热重载(并重新编译更改的元素)。

使用play ~run 运行您的应用程序,因此它会在文件保存后立即重新加载。并且更改的参数将在接下来的几秒钟内对 Idea 12 可见

【讨论】:

  • 是的,这与 ~compile 基本相同(我在帖子的后续评论中提到过)。但令我沮丧的是,这仍然不是您对 IDEA 所期望的正常行为。此外,由于 IDEA 在 IDE 失去焦点之前不会将文件保存到磁盘,因此您仍然需要切换到另一个应用程序,这会破坏正常流程。无赖:(
  • CTRL+S它会保存所有文件并在后台重新编译更改的元素,问题出在哪里???相信我,持续的重新编译是你最不想看到的,它会烧毁你的 CPU
  • 即使使用 CTRL+S,IDEA 也不会注意到底层重新编译类的变化,直到您离开并重新聚焦。它与“同步”设置有关(参见 Preferences->General->Synchronization->Synchronize files on frame activation)。
  • 我应该补充一点:我实际上并不希望它一直重新编译。我只是想让 IDEA 注意到语法的变化。这与我如何更改 Java 代码中的方法签名并突出显示错误没有什么不同。这就是强类型语言的全部意义所在:您可以拥有智能 IDE,在编译之前突出显示错误。
  • 这就是 Play 的工作方式,进入您的 Java 控制器并按住 CTRL 单击 index.render(...) 您会看到这会将您转到 Scala 视图的编译版本.换句话说,Play 必须用新参数编译视图,使它们可见和类型感知......记住,Java 和 Scala 中默认参数的行为是不同的,如果不重新编译,就不可能在Java 控制器
【解决方案2】:

我只是把它输入谷歌:http://plugins.intellij.net/plugin?pluginId=7080

【讨论】:

  • 我已经安装了那个插件 - 这不是问题。
猜你喜欢
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 2017-04-10
  • 1970-01-01
  • 2016-02-27
  • 2015-04-30
相关资源
最近更新 更多