Эффективный рабочий процесс Clojure? - PullRequest
28 голосов
/ 06 июня 2010

Я разрабатываю проект для домашних животных с Clojure, но задаюсь вопросом, могу ли я немного ускорить рабочий процесс.

Мой текущий рабочий процесс (с Compojure):

  1. Начните Swank с lein swank.
  2. Перейти к Emacs, соединиться с M-x slime-connect.
  3. Загрузка всех существующих исходных файлов один за другим. Это также запускает сервер Jetty и приложение.
  4. Введите код в REPL.
  5. Если вас устраивают эксперименты, напишите полную версию конструкции, которую я имел в виду. Эвал (C-c C-c) это.
  6. Переключите REPL в пространство имен, где находится эта конструкция, и протестируйте его.
  7. Переключитесь в браузер и перезагрузите вкладку браузера с соответствующей страницей.
  8. Настройте код, проверьте его, проверьте в браузере.
  9. Повторите любое из перечисленного.

Есть ряд неприятностей с ним:

  1. Мне приходится все время переключаться между Emacs и браузером (или браузерами, если я тестирую такие вещи, как создание шаблонов в нескольких браузерах). Есть ли общая идиома для автоматизации этого? Раньше у меня был бит JavaScript, который непрерывно перезагружал страницу, но он имел ограниченную полезность, очевидно, когда мне приходилось взаимодействовать со страницей более нескольких секунд.
  2. Мой экземпляр JVM становится «грязным», когда я экспериментирую и пишу тестовые функции. В основном пространства имен становятся загрязненными, особенно если я выполняю рефакторинг и перемещаю функции между пространствами имен. Это может привести к столкновению символов, и мне нужно перезапустить Swank. Могу ли я найти символ?
  3. Я загружаю все исходные файлы один за другим (C-c C-k) при перезапуске Swank. Я подозреваю, что делаю все неправильно.
  4. Переключение между REPL и редактором файлов может немного раздражать, особенно когда у меня открыто много вкладок Emacs рядом с браузером (ами).

Я ищу способы улучшить вышеперечисленные пункты и весь рабочий процесс в целом, поэтому я был бы признателен, если бы вы поделились своим.

P. С.

Я также использовал Vimclojure и раньше, поэтому приветствуются рабочие процессы на основе Vimclojure.

Ответы [ 2 ]

19 голосов
/ 06 июня 2010

Не полное описание рабочего процесса, просто несколько идей:

  1. Можно удалить Var из пространства имен с помощью функции ns-unmap. Для дополнительного удобства поверх него можно построить макрос undef, например: вот так:

    (defmacro undef [& syms]
      `(do ~@(map (fn [s] `(ns-unmap *ns* '~s)) syms)))
    

    ns-unalias также может представлять интерес.

  2. Нет причин просматривать файлы, содержащие пространства имен, просто сделать C-c C-k в каждом из них; Вы можете просто require пространства имен, которые вам нужны в REPL.

    Более того, если вы наберете несколько символов в SLIME REPL и затем используете Mp / Mn для просмотра истории, только записи, соответствующие начальному биту текста, введенному вами вручную будет отображаться. Это совместимо с Paredit (закрывающая скобка (скобки) не будет проблемой). Итак, если вы создаете огромное требование в начале - (require '[foo :as f] '[bar :as b] '[clojure.contrib.sql :as sql] ...) - тогда после перезапуска Swank все, что вам нужно сделать, это набрать что-то вроде (require '[f и нажать Mp , чтобы вывести эту форму снова на приглашение REPL.

    По общему признанию, это может быть автоматизировано несколькими способами (например, с помощью поиска Swank REPL для файла конфигурации, или, возможно, простым макросом, расширяющимся до соответствующей формы require, которую можно использовать после ввода только одного пространства имен утилиты от проекта - особенно последняя идея была бы легко осуществима), но я нахожу это достаточно низким на факторе раздражения, который я до сих пор не беспокоил никакими улучшениями.

  3. Вы можете использовать C-c C-z , чтобы сделать окно с SLIME REPL всплывающим, пока вы находитесь в буфере с поддержкой SLIME. Кроме того, вы должны попробовать использовать ido, если вы еще этого не сделали. Я склонен работать с буфером кода, открытым в окне с левой стороны экрана, и с буфером REPL справа; с windmove-left и windmove-right привязанными к некоторым удобным клавишам, я, как правило, очень счастлив. Если мне нужно часто просматривать дополнительные буферы, я использую дополнительные фреймы Emacs.

  4. Кстати, я обычно не использую lein swank, я предпочитаю свою пользовательскую функцию clojure-project (измененная версия оригинала Фила Хагельберга). Иногда я чувствую желание улучшить его ... возможно, в следующий раз я буду иметь дело с автоматизацией import / require для каждого проекта. ; -)

5 голосов
/ 06 июня 2010

Я не уверен насчет Lein, но в Maven вы можете указать имя сценария repl (параметр конфигурации replScript), который позволяет указать, какие команды будут выполняться при запуске REPL & Swank ... А если у вас есть Отдельное пространство имен для вашего проекта, вы можете использовать функции из clojure.contrib.find-namespaces, чтобы найти ваши пространства имен и загрузить их все ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...