使用Ensime在Atom中开发Scala

当我回到Java 1.3时代开始Java软件开发时,我记得曾经使用JDeveloper,然后才切换到早期的Eclipse版本。 在大约4年前切换到IntelliJ之前,我在Eclipse呆了很长时间(大约8年)。 我一直是IntelliJ的忠实拥护者,不仅是对Java进行编程,而且几年前开始使用Scala时,我也一直使用它。 但是,上个月,我开始注意到我实际上只使用了所有IntelliJ功能中的一小部分,并且对于某些Scala项目的IntelliJ慢速爬行的方式逐渐感到恼火。 加上IntelliJ绊倒了Shapeless,Spray,Scalaz的某些东西,使我开始寻找替代的轻量级Scala编辑器。

由于我已经使用Atom做笔记了(nvAtom与同步的保管箱文件夹结合使用效果很好!),几个月前我尝试了Ensime,所以我想我会再尝试一次。 在本文中,您可以阅读我所采取的步骤,以及为实现相当不错的Ensime / Atom组合而安装的插件。

获取和安装Ensime

我一直在等本文,直到Scala 2.11.8发行,因为它解决了使用Ensime时导入和隐式的许多问题。 因此,要获得使用Ensime的最佳体验,请将您的项目升级到Scala 2.11.8。 因此,让我们开始安装Ensime。

ensime_1

要安装Ensime,只需按照站点( http://ensime.github.io/editors/atom/installation/ )上的说明进行操作,您将获得一个原子,可用于运行Ensime。

准备和导入项目

安装后,请确保指向本地sbt安装,或多或少准备开始使用ensime。 我们需要做的最后一件事是安装一个sbt插件,该插件需要生成一些有关esime需求的信息。 按照此处的安装说明进行操作( http://ensime.github.io/build_tools/sbt/ ),完成后打开控制台并导航到要导入的项目。 如果还没有这样做,请将Scala版本更新为2.11.8。 在该目录中调用`sbt gen-ensime`。

➜  graphql-sangria  sbt gen-ensime
[info] Set current project to graphql-sangria (in build file:/Users/jos/dev/git/graphql-sangria/)
[info] ENSIME update. Please vote for https://github.com/sbt/sbt/issues/2266
[info] ENSIME updateClassifiers. Please vote for https://github.com/sbt/sbt/issues/1930
[warn] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version:
[info] Resolving org.scala-lang#scalap;2.11.7 ...
[info] ENSIME processing graphql-sangria (graphql-sangria)
➜  graphql-sangria  ls -lat
total 32
-rw-r--r--   1 jos  staff  9327 Mar 19 09:54 .ensime
drwxr-xr-x  57 jos  staff  1938 Feb 22 09:28 ..
drwxr-xr-x   6 jos  staff   204 Jan 20 07:15 .ensime_cache
drwxr-xr-x   9 jos  staff   306 Jan 19 20:22 .
drwxr-xr-x  12 jos  staff   408 Jan  5 14:17 .idea
-rw-r--r--   1 jos  staff   410 Jan  2 14:45 build.sbt
drwxr-xr-x   4 jos  staff   136 Jan  2 13:24 src
drwxr-xr-x   6 jos  staff   204 Jan  2 13:24 target
drwxr-xr-x   6 jos  staff   204 Jan  2 13:23 project
➜  graphql-sangria

请注意,我使用了以下sbt包装器( https://github.com/paulp/sbt-extras ),该包装器将SBT的输出仅大幅减少到必需的程度,并且提供了许多额外的功能,使得使用SBT有点更轻松。 因此,当您运行此程序时,您可能会看到更多信息。 这里要注意的导入是,我们现在有一个.ensime和一个.ensime_cache目录,其中包含Ensime特定的文件。

在Atom中打开一个新窗口,添加该文件夹,然后您可以使用ctrl-cmd-p`Ensime:start`启动ensime。

ensime_2

在第一次下载依赖项时,会花费一些时间,但是最终Ensime将完成下载并启动服务器。 此时,您可以使用Ensime来检查Scala代码(无论是在键入时还是在保存时)。 在底部,它将向您显示当前文件或整个项目的问题。 例如在示例项目中,我有许多未使用的导入:

ensime_3

它还提供了导入建议:

ensime_4

并显示具体错误。

ensime_5

因此,对于许多项目,您已经可以将Atom用于Scala开发。 但是,Ensime也存在一些问题。

有什么不好的呢

我是IntelliJ的狂热用户,当我开始使用Atom时注意到的很多功能之一就是IntelliJ的自动导入功能。 Ensime / Atom提供了类似的功能,但到目前为止还不如IntelliJ有用。 使用Atom / Ensime,您可以导入建议,但是(目前)它只是选择一个建议,而不是允许您选择。 错误的错误往往会被导入。

尽管导入功能很烦人,但是添加它只是时间问题,因为Ensime确实提供了多个提示,只是Atom / Ensime插件尚不支持它。

还有许多其他功能,其中IntelliJ提供了更多有用的信息,但是没有任何真正阻碍工作的东西,您只需要再多浏览一点源代码/文档,这很容易做到(`Ensime:go到文档`):

ensime_6

或者只是按ctrl-click进入声明。

一些被阻止的东西

尽管Ensime / Atom很快变得好起来,但对于某些项目,目前可能确实存在一些阻碍性的问题。 如果您使用的项目使用宏或某些编译器插件,则可能会得到错误的错误。 我打算显示一个项目,其中报告了错误错误,但是在最新版本中,我的喷雾/无形状项目显然不再出现错误。 因此,我参加了我的另一个项目(其中使用了很多Scalaz的东西),其中IntelliJ遇到了问题,以测试Ensime / Atom如何处理该问题。 尽管Ensime需要花费一些时间来编译所有内容并使其达到稳定状态,但它可以正确处理所有内容!

不管最近的成功如何,仍然会有很大的变化,您将遇到错误。 这是Ensime团队意识到的一个问题(请参阅问题: https : //github.com/ensime/ensime-server/issues/673 ),显然很难解决。 但是,人们正在通过提供一个插件来进行工作,该插件可以为生成的代码返回正确的签名,以使编辑满意。 关于此的更多信息可以在这里找到: https : //github.com/fommil/imaginary-friend

其他插件,使使用Ensime更容易

使用Ensime插件,使用Atom中的标准功能,您可能已经可以完成很多工作。 但是,我已经从Ensime / Atom网站安装了两个建议的插件,它们确实使处理多个项目和浏览代码变得更加容易。 因此,如果您打算开始更多使用Atom和Ensime。 这两个对安装非常有用:

  1. 项目经理:允许您管理多个项目
  2. 最后光标位置:导航回到您所在的位置

最后,我建议您安装term3软件包,使用该软件包可以直接在Atom中打开终端窗口,这在您需要执行一些快速sbt命令或执行一些git操作时非常有用(我也在IntelliJ中工作的方式

结论

正如我刚刚注意到的那样,Ensime服务器的开发进展很快。 一个月前,喷涂/无定型问题解决了很多,现在似乎已经解决了(无论是通过Ensime改进还是我不知道的scala 2.11.8)。 Atom插件有一些粗糙之处,但是已经非常有用。 最大的优势之一是与IntelliJ相比,Atom的重量轻。 因此,我将越来越多地开始使用Atom,但对于某些类型的项目,可能会回到IntelliJ。

翻译自: https://www.javacodegeeks.com/2016/03/developing-scala-atom-ensime.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值