Статьи

Разработка Scala в Atom с помощью Ensime

Когда я начинал разработку программного обеспечения на Java еще во времена Java 1.3, я вспомнил, как некоторое время использовал JDeveloper, прежде чем перейти к ранним версиям Eclipse. Я пробыл в Eclipse очень долго (около 8 лет), прежде чем перейти на IntelliJ около 4 лет назад. Я всегда был большим поклонником IntelliJ, не только для программирования на Java, но я также продолжал использовать его, когда начал работать со Scala пару лет назад. Однако в последние месяцы я начал замечать, что на самом деле я использую лишь небольшую часть всей функциональности IntelliJ, и постепенно меня раздражало то, как IntelliJ замедлился до сканирования для некоторых проектов Scala. В сочетании с тем, что IntelliJ споткнулся о некоторые вещи Shapeless, Spray, Scalaz, я начал искать альтернативный облегченный редактор Scala.

Поскольку я уже использую Atom для заметок (nvAtom в сочетании с синхронизированной папкой dropbox отлично работает!), И я попробовал 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, который необходим для генерации некоторой информации. Следуйте инструкциям по установке здесь ( http://ensime.github.io/build_tools/sbt/ ) и, как только закончите, откройте консоль и перейдите к проекту, который вы хотите импортировать. Если вы этого еще не сделали, обновите версию Scala до 2.11.8. В этом каталоге вызовите `sbt gen-ensime`.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
➜  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 имеет некоторые острые углы, но он уже очень полезен. Одним из самых больших преимуществ является то, как легкий Atom по сравнению с IntelliJ. Поэтому я буду все больше и больше работать с Atom, но, возможно, вернусь к IntelliJ для проектов определенного типа.

Ссылка: Разработка Scala в Atom с Ensime от нашего партнера JCG Йоса Дирксена в блоге Smart Java .