Comments 53
А есть возможность запустить интерпритатор из редактора?
Есть плагин SublimeREPL. Там, правда, нет возможности сразу запустить с текущим файлом, поэтому надо запустить и написать :l FIle.hs.
Спасибо.
Вы пользовались емаксом или сразу стали использовать st?
Вы пользовались емаксом или сразу стали использовать st?
Как раз для этого я сделал плагин: LoadFileToRepl
Судя по скриншотам, Вы все еще не знаете, что сайдбар можно сделать темным. Тогда мы идем к вам gist.github.com/1857652.git.
При запуске Sublime Text выдаёт такую ошибку:
и соответственно часть функций не работает. Судя по сообщению, тут некоторый конфликт версий, но в силу недостатка знаний Haskell исправить его у меня не получилось. Может быть подскажете?
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.
Однако автодополнение почему-то так и не работает, выдаёт ошибку в консоли:
ghc-mod установлен и включен.
Однако автодополнение почему-то так и не работает, выдаёт ошибку в консоли:
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 не может его распарсить и возвращает данные, в которых нет этой информации. Должно заработать, если файл будет без ошибок парсинга. Спасибо за баг, сейчас поправлю.
Что-то не совсем понимаю логику работы автодополнения (оказывается, оно вроде заработало). Есть файл с кодом:
Ни при вводе точки, ни при последующем нажатии Ctrl+Space ничего не дополняет и в консоль ничего не пишет. Начинает предлагать варианты только при дальнейшем вводе начала слова (может быть так и должно быть, но в топике на скрине ничего дальше не введено, а дополнение есть).
module Main where
import qualified Data.List
foo = Data.List -- курсор в конце этой строки
main = print 123
Ни при вводе точки, ни при последующем нажатии Ctrl+Space ничего не дополняет и в консоль ничего не пишет. Начинает предлагать варианты только при дальнейшем вводе начала слова (может быть так и должно быть, но в топике на скрине ничего дальше не введено, а дополнение есть).
А что-нибудь в log пишет (Ctrl+`)?
У меня работает. Попробуйте сохранить файл в состоянии, когда он сможет быть распарсен, тогда ModuleInspector его успешно отсканирует и информация об импортах сохранится.
В любом случае, вы натолкнули меня на мысль, что при в таком случае информацию об импортах можно и не учитывать, имя-то квалифицированное. А что импорта нет, человек увидит потом.
У меня работает. Попробуйте сохранить файл в состоянии, когда он сможет быть распарсен, тогда ModuleInspector его успешно отсканирует и информация об импортах сохранится.
В любом случае, вы натолкнули меня на мысль, что при в таком случае информацию об импортах можно и не учитывать, имя-то квалифицированное. А что импорта нет, человек увидит потом.
Сделал так, что при явной квалификации подсказки высвечиваются и при отсутствии импорта.
Возникла мысль сделать какой-нибудь browse declarations, выводящий всё, что есть в наличии в cabal'е. Было бы супер ещё автоматически добавлять импорт, но это уже чересчур.
Возникла мысль сделать какой-нибудь browse declarations, выводящий всё, что есть в наличии в cabal'е. Было бы супер ещё автоматически добавлять импорт, но это уже чересчур.
Исправил.
Да, теперь этой ошибки в консоли нет. Однако автодополнение (на том же примере, habrahabr.ru/post/154859/#comment_5283093 ) не предлагает вообще ничего из Data.List (раньше при вводе, например, символа m, предлагались функции типа maximum).
При вызове check (SublimeHaskell: Check) высвечиваются также warnings из импортированных модулей, а не только из открытого в данной вкладке. Если можно, хотелось бы отфильтровать их по имени файла.
И ещё пожелание: добавить нечто вроде команды «Run» для проекта, которая сделает Cabal Build и запустит получившийся исполняемый файл (с выводом в консоль sublime text).
В cabal можно определить несколько исполняемых файлов и библиотеку, поэтому запускать там может быть непонятно что. Делать какой-то частный случай проблематично.
Есть вариант запускать единственный исполняемый файл, если он один, иначе ничего не запускать и выводить соответствующее сообщение.
Да хотя бы первый исполняемый по списку. Пожалуйста-пожалуйста!
Добавил, выводит списком все исполняемые для проектов. Наверху для текущего.
К сожалению, я пока не понял, как сделать взаимодействие, так что ждётся завершение программы, а вывод на output. В принципе, сам код запуска там несложный, если поможете, доделаем.
К сожалению, я пока не понял, как сделать взаимодействие, так что ждётся завершение программы, а вывод на 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) вставить логов. Каких-нибудь таких:
И в файле cabalbuild.py в функции SublimeHaskellRun.run (строка 130) добавить
Должно выводить данные о проектах в консоль.
Могу предложить только в 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, очень доволен.
Еще раз спасибо!
Там проблемы с билдованием .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)
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 шрифт на скриншотах?
Кстати, а как включить lint? Он у меня почему-то не работает.
Его нет в списках команд или не выдает результата?
я думал он автоматически вызывается. в списке команд он есть.
Если включена автосборка (по умолчанию), то вызывается она.
Если включены auto_lint + auto_check (по умолчанию включены), зовётся команда Check & Lint,
Если включено что-то одно (check или lint), зовётся соответственно Check или Lint.
При этом параметр автосборки должен игнорироваться, если файл не лежит в проекте (т.е. для простого файла должно зваться Check & Lint).
Команду для Check&Lint сразу, а не по отдельности, я забыл добавить в настройки, можно перевзять в гитхаба.
У меня настроено на check&lint при сохранении, и работает.
Если включены auto_lint + auto_check (по умолчанию включены), зовётся команда Check & Lint,
Если включено что-то одно (check или lint), зовётся соответственно Check или Lint.
При этом параметр автосборки должен игнорироваться, если файл не лежит в проекте (т.е. для простого файла должно зваться Check & Lint).
Команду для Check&Lint сразу, а не по отдельности, я забыл добавить в настройки, можно перевзять в гитхаба.
У меня настроено на check&lint при сохранении, и работает.
Sign up to leave a comment.
SublimeHaskell