Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Модератор
5047 / 3276 / 526
Регистрация: 01.06.2013
Сообщений: 6,806
Записей в блоге: 9
1

Stack + IntelliJ IDEA + plugin haskforce + напильник

14.11.2015, 03:32. Показов 2962. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решил я обновить инструменты. stack вместо cabal-а уже использую. Тут и IntelliJ IDEA 15-ая вышла. Решил обновиться, заодно и плагин для работы с haskell в IDEA другой попробовать. Плагин haskforce, хоть и не поддерживает отладку, зато, сказывают, лучше умные подсказки у него. И вообще, страничка ничего так. Решил поставить его.
Тут проблема. Во всех плагинах, что я видел, подразумевается использование cabal. А у меня stack. Решил написать такой псевдо cabal, который будет вызывать stack конвертируя команды в стековские. (Подозреваю, велосипед это трёхколёсный, и stack как то умнее к какому то IDE можно приспособить. Тем более что у него есть команды stack ide).
Однако продолжим. Устанавливаем stack-ом пакеты, которые плагину надо - (hlint,stylish-haskell, ghc-mod).
Дальше создаём проект (не в IDEA пока), компилируем "обманку".
Кликните здесь для просмотра всего текста
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
module Main where
 
import System.Environment
import System.Process
import System.FilePath
import System.Directory
import System.Exit
 
{-
appLog:: String -> IO ()
appLog s = appendFile "d:\\samples\\Haskell\\tstStack\\stack-cabal\\out.txt" (s++"\n")
-}
 
runStack:: [String] -> IO ()
runStack args = do
        ePth <- (flip replaceBaseName "stack") <$> getExecutablePath
        (exitC,sOut,sErr) <- readProcessWithExitCode ePth args ""
        putStr sOut
        putStr sErr
--        appLog $ concat [ show args, "\n", sOut, "\n", sErr, "\n", show exitC]
        exitWith exitC
 
getExecFile :: IO (Maybe String)
getExecFile = do
    d  <- getCurrentDirectory
    dirC <- getDirectoryContents "."
    case filter ((".cabal"==).takeExtensions) dirC of
        [] -> do
            putStrLn $ "cabal file not found in current dir " ++ d
            return Nothing
        [p] -> return $ Just $ takeBaseName p
        _ -> do
            putStrLn $ "cabal file must be one in current dir " ++ d
            return Nothing
 
main :: IO ()
main = do
    args <- getArgs
--    appLog (show args)
    case args of
        [] -> exitSuccess
        ["--numeric-version"] -> putStrLn "18.1.0.0"
        [_] -> runStack args
        ("run":_:a) -> do
            r <- getExecFile
            case r of
                (Just e) ->  runStack $ "exec":e:a
                _ -> exitFailure
        (_:"configure":_) -> exitSuccess
        (_:"build":_) -> runStack ["build"]
        _ -> runStack args
Её и для других плагинов можно использовать. Только порядок аргументов передаваемых cabal-у может быть другим. Для этого можно будет раскомментировать вывод в лог (укажите свой путь!).
Обманка, я её назвал stack-cabal, должна и под linux работать.


Обманку разместить там же, где и stack.exe !

Ставим само IntelliJ IDEA Community Edition. (Т.е., то что справа, Free). Установив, добавляем плагин. Settings -> Plugins -> Browse repositories ..., в строке поиска вводим haskforce и зелёную кнопку Install справа.

(Попасть в настройки IDEA, при первом запуске или не выбранном проекте можно кнопкой внизу окна. В открытом проекте Ctrl-Alt-S.)

В настройках плагина
Кликните здесь для просмотра всего текста
Stack + IntelliJ IDEA + plugin haskforce + напильник
указываем установленные вначале утилиты, с одним нюансом. Вместо ghci_mod указываем второй раз ghc-mod и флаг ему legacy-interactive
Пути у меня такие, куда ставит в Windows stack по умолчанию. Этот каталог я внёс в PATH, так что утилиты нашлись сами (нажимаем кнопки AutoFind).

В настройках компилятора
Кликните здесь для просмотра всего текста
Stack + IntelliJ IDEA + plugin haskforce + напильник
прописываем путь к ghc - этот путь можно увидеть выполнив stack path, желательно в каталоге уже существующего, свежего проекта, и после bin-path: он будет вторым или третьим из перечисленных каталогов. Там же, следующей строкой, прописываем путь к "обманке".

В общем, дальше разберётесь. Может чего и мне подскажите.
Результат компиляции и выполнения пробного проекта
Кликните здесь для просмотра всего текста
Stack + IntelliJ IDEA + plugin haskforce + напильник
.

p.s. Вместо cabal run XRuZzz предложил использовать stack exec. Я использовал его совет. Спасибо ему.
2
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2015, 03:32
Ответы с готовыми решениями:

Intellij Idea
Ошибка с @Test. Test package Main; import org.junit.jupiter.api.BeforeEach; import...

IntelliJ IDEA
IntelliJ IDEA где можно скачать но мне нужно для 32 битного Windows xp?? И сколько оперативки она...

IntelliJ IDEA
Здравствуйте. Столкнулся сегодня с проблемкой в IntelliJ IDEA Community Edition 14.1.1, после...

intellij idea
Здравствуйте! Помогите, у меня есть код на java, только незнаю как его вставить в intellij idea...

0
14.11.2015, 03:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2015, 03:32
Помогаю со студенческими работами здесь

Idea python plugin автодополнение/ Настраивается ли глубина анализатора
Пример: mystr = &quot;mytext&quot; myupperstr = mystr.upper() автокомплит работает. for i in...

Sqlite в Intellij Idea
Приветствую Вас! Создал базу данных SQlite, с которой собираюсь работать в Intellij Idea на языке...

Строки IntelliJ IDEA
Работа со сплитером public class Stroki { public static void main (String args){ ...

Беда с IntelliJ IDEA
Добрый день товарищи! Прошу не кидаться в мою сторону тухлыми помидорами) я в начале пути и жажду...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru