Возможно ли иметь хорошие табуляции в Clojure REPL?
Хорошая вкладка завершения означает динамически генерируемую с помощью отражения или чего-то еще (что не требует заранее определенного списка завершений где-то) и что знает, что может и что не может следовать в определенном месте.
Как в (.<TAB> x)
я получу список методов x, в (println <TAB>)
я получу список локальных и глобальных определений, в (Math/<TAB>
я получу список математических функций...
Например, Мне нравится, как Tab работает в ghci (Haskell) или ipython.
5 ответов:
Это, безусловно, возможно, и некоторые инструменты развиваются в этом направлении. Новейшая версия clojure включает опцию "режим разработки", которая упрощает создание такого инструмента; например, она отключает локальную очистку, чтобы помочь в отладке, и намерение состоит в том, чтобы она могла в конечном итоге экспортировать намного больше информации о процессе компиляции для использования IDE и связанными инструментами. Это широко признано в качестве области для улучшения экосистемы Clojure и по моим наблюдениям, над этим работают несколько очень умных людей.
Текущая бета-версия Eclipse CounterClockwise REPL значительно улучшила завершение кода и охватывает все ваши случаи, включая завершение Java. За исключением, конечно, не быть автономной командной строки REPL. Clojure, будучи динамическим языком, однако, имеет свои ограничения на завершение по типу, что намного проще в строго типизированных языках, таких как Haskell.
Я использую Emacs в качестве редактора с Slime и Emacs auto-complete, и получил все эти функции, работающие для Repl в Emacs: автоматическое завершение для классов и полей Java, автоматическое завершение плюс документация для функций Clojure. К сожалению, это не сработает, если вы не используете Emacs в качестве редактора / IDE.
Похоже, что IClojure делает это более или менее красиво. Он вдохновлен и выглядит как IPython и предлагает завершение tab (не полное, 2 из 3 упомянутых случаев)и помогает разрабатывать Clojure в консоли. Хотя и не очень стабильно.