Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 53

НЛО прилетело и опубликовало эту надпись здесь
ghc-mod lint и есть hlint, а вот за scan спасибо, посмотрю.
А есть возможность запустить интерпритатор из редактора?
Есть плагин SublimeREPL. Там, правда, нет возможности сразу запустить с текущим файлом, поэтому надо запустить и написать :l FIle.hs.
Спасибо.

Вы пользовались емаксом или сразу стали использовать st?
Пользовался emacs'ом. Продолжаю им пользоваьтся для Agda.
Кстати, а вы хаскелем и агдой занимаетесь по работе? Или это хобби?
Как раз для этого я сделал плагин: LoadFileToRepl
Круто, спасибо. Может, имеет смысл его с SublimeREPL смержить?
Судя по скриншотам, Вы все еще не знаете, что сайдбар можно сделать темным. Тогда мы идем к вам gist.github.com/1857652.git.
Спасибо :)
При запуске Sublime Text выдаёт такую ошибку:
SublimeHaskell: Failed to compile ModuleInspector

/home/alexander/.config/sublime-text-2/Packages/SublimeHaskell/ModuleInspector.hs:110:39:
    Couldn't match expected type `LazyByteString.ByteString'
                with actual type `bytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString'
    Expected type: a0 -> LazyByteString.ByteString
      Actual type: a0
                   -> bytestring-0.9.2.1:Data.ByteString.Lazy.Internal.ByteString
    In the second argument of `(.)', namely `Json.encode'
    In the expression: LazyByteString.putStrLn . Json.encode


и соответственно часть функций не работает. Судя по сообщению, тут некоторый конфликт версий, но в силу недостатка знаний Haskell исправить его у меня не получилось. Может быть подскажете?
Судя по всему, пакет aeson у вас собран с другой версией bytestring. Попробуйте
cabal update && cabal install bytestring && cabal install aeson
Это не помогло, однако помогло другое: ghc-pkg unregister bytestring-0.10.0.1, так как были почему-то установлены две разные версии bytestring.

Однако автодополнение почему-то так и не работает, выдаёт ошибку в консоли:
Traceback (most recent call last): File "./sublime_plugin.py", line 236, in on_query_completions File "./autocomplete.py", line 298, in on_query_completions File "./autocomplete.py", line 106, in get_completions KeyError: 'imports'

ghc-mod установлен и включен.
В файле, видимо, ошибка, ModuleInspector не может его распарсить и возвращает данные, в которых нет этой информации. Должно заработать, если файл будет без ошибок парсинга. Спасибо за баг, сейчас поправлю.
Что-то не совсем понимаю логику работы автодополнения (оказывается, оно вроде заработало). Есть файл с кодом:

module Main where

import qualified Data.List

foo = Data.List -- курсор в конце этой строки

main = print 123

Ни при вводе точки, ни при последующем нажатии Ctrl+Space ничего не дополняет и в консоль ничего не пишет. Начинает предлагать варианты только при дальнейшем вводе начала слова (может быть так и должно быть, но в топике на скрине ничего дальше не введено, а дополнение есть).
А что-нибудь в log пишет (Ctrl+`)?
У меня работает. Попробуйте сохранить файл в состоянии, когда он сможет быть распарсен, тогда ModuleInspector его успешно отсканирует и информация об импортах сохранится.
В любом случае, вы натолкнули меня на мысль, что при в таком случае информацию об импортах можно и не учитывать, имя-то квалифицированное. А что импорта нет, человек увидит потом.
Сделал так, что при явной квалификации подсказки высвечиваются и при отсутствии импорта.
Возникла мысль сделать какой-нибудь browse declarations, выводящий всё, что есть в наличии в cabal'е. Было бы супер ещё автоматически добавлять импорт, но это уже чересчур.
Сделал browse declarations, сейчас обновлю статью.
Исправил.
Да, теперь этой ошибки в консоли нет. Однако автодополнение (на том же примере, habrahabr.ru/post/154859/#comment_5283093 ) не предлагает вообще ничего из Data.List (раньше при вводе, например, символа m, предлагались функции типа maximum).
При вызове check (SublimeHaskell: Check) высвечиваются также warnings из импортированных модулей, а не только из открытого в данной вкладке. Если можно, хотелось бы отфильтровать их по имени файла.
Сделал
И ещё пожелание: добавить нечто вроде команды «Run» для проекта, которая сделает Cabal Build и запустит получившийся исполняемый файл (с выводом в консоль sublime text).
В cabal можно определить несколько исполняемых файлов и библиотеку, поэтому запускать там может быть непонятно что. Делать какой-то частный случай проблематично.
Есть вариант запускать единственный исполняемый файл, если он один, иначе ничего не запускать и выводить соответствующее сообщение.
Ответил ниже.
Да хотя бы первый исполняемый по списку. Пожалуйста-пожалуйста!
Добавил, выводит списком все исполняемые для проектов. Наверху для текущего.
К сожалению, я пока не понял, как сделать взаимодействие, так что ждётся завершение программы, а вывод на output. В принципе, сам код запуска там несложный, если поможете, доделаем.
По-всякому попробовал, и в отдельном sublime text — проекте, но всё равно пишет nothing to run. При этом build, clean и подобное работает.
Очень странно. Проверил только что ещё раз, всё работает. Попробуйте напрямую натравить на файл .cabal CabalInspector:
...> ./CabalInspector myproject.cabal
Интересно, там ли ошибка.
Выводит {«executables»:[{«name»:«НАЗВАНИЕ»,«path»:""}]}.
Исправил ещё один баг, неверно для русских названий Inspectorы работали. Сейчас нормально. По поводу вашей проблемы, даже не знаю. Нажмите Ctrl+` после запуска, там должно пройти
Sublime Haskell: reinspecting project (D:\users\voidex\Documents\GitHub\simple-log)
для всех проектов. Если после этого не работает, то значит где-то что-то не так.
Да, регулярно проходит такая строчка: Sublime Haskell: reinspecting project (/home/alexander/Haskell/PROJ_NAME). А в плагине ничего платформо-специфичного нет?
Нет, да и я на обеих системах проверял.
Могу предложить только в autocomplete.py в функции _refresh_project_info (строка 470) вставить логов. Каких-нибудь таких:
log(project_name)
log(str(new_info))

И в файле cabalbuild.py в функции SublimeHaskellRun.run (строка 130) добавить
log(autocompletion.projects)
Должно выводить данные о проектах в консоль.
Попробуй собрать через GHC cabalInspector.hs. У меня такое было из-за того что он не строился. А не строился он от того, что пакетов нужных не было
Спасибо! Правда у меня тоже со скрипом оно заработало. Пришлось тоже разобраться с плагинами для саблайма :)

Там проблемы с билдованием .hs-фалов были — не стоял aeson, конфликты версий библиотеки ByteString. Когда это поправил, там что-то с вводом-выводом не пошло. Я игрушку под glut ковыряю, и окошко почему-то ее не видно получается. Видимо из-за хитрого способа, которым ты запускаешь и потоки перенаправляешь.

В общем я себе наковырял на твоей основе попроще штуку: pastebin.com/Epb5nUdD — оно также как и для билда находит cabal-файл, там регекспом находит названия executables, и запускает первый из них. Повесил на F5, очень доволен.

Еще раз спасибо!
С os.system, к сожалению, не получить вывод от консольных программ. Надо будет придумать какой-то более общий способ.
У меня там тоже не очень выходит. Там по сохранению начинается компиляция, плюс мой код еще окончания своей компиляции не ждет, короче гонки и глюки. В общем я тут тоже пока ковыряю.
Там сборка отдельным потоком, именно поэтому там есть функции вида run_build_commands_with, принимающие список программ, чтоб запустить их последовательно в одном отдельном потоке, а не каждого в своём. Соответственно как-то надо умудриться по окончании звать callback. Был бы async-monad, было бы хорошо, а так, видимо, придется туда передавать какой-нибудь BuildListener, у которого будут дёргаться какие-нибудь on_build.
Попробовал поставить. Не работает ничего кроме отображение типов. Куда можно посмотреть чтобы понять что не так?
Вот такое вот исключение есть в консоли:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "./autocomplete.py", line 138, in run
RuntimeError: Must call on main thread, consider using sublime.set_timeout(function, timeout)
Понял, что это не ваш код, а чужой. Ваш как раз отлично работает.
Да, автор до сих пор не слил воедино, чуть попозже ещё раз ему напишу.
Ваши улучшения офигенны. Спасибо вам!
Это же не monospace шрифт на скриншотах?
Нет, это Lucida Sans Unicode
Кстати, а как включить lint? Он у меня почему-то не работает.
Его нет в списках команд или не выдает результата?
я думал он автоматически вызывается. в списке команд он есть.
Если включена автосборка (по умолчанию), то вызывается она.
Если включены auto_lint + auto_check (по умолчанию включены), зовётся команда Check & Lint,
Если включено что-то одно (check или lint), зовётся соответственно Check или Lint.

При этом параметр автосборки должен игнорироваться, если файл не лежит в проекте (т.е. для простого файла должно зваться Check & Lint).

Команду для Check&Lint сразу, а не по отдельности, я забыл добавить в настройки, можно перевзять в гитхаба.

У меня настроено на check&lint при сохранении, и работает.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации