diff options
Diffstat (limited to 'src/plugins/haskell/haskellmanager.cpp')
-rw-r--r-- | src/plugins/haskell/haskellmanager.cpp | 85 |
1 files changed, 9 insertions, 76 deletions
diff --git a/src/plugins/haskell/haskellmanager.cpp b/src/plugins/haskell/haskellmanager.cpp index ac3564f23e0..cc91ae7f816 100644 --- a/src/plugins/haskell/haskellmanager.cpp +++ b/src/plugins/haskell/haskellmanager.cpp @@ -3,43 +3,22 @@ #include "haskellmanager.h" +#include "haskellsettings.h" #include "haskelltr.h" -#include <coreplugin/messagemanager.h> #include <utils/algorithm.h> #include <utils/commandline.h> #include <utils/hostosinfo.h> #include <utils/mimeutils.h> +#include <utils/process.h> #include <utils/processenums.h> -#include <utils/qtcprocess.h> -#include <QCoreApplication> #include <QDir> #include <QFileInfo> -#include <QSettings> - -#include <unordered_map> - -static const char kStackExecutableKey[] = "Haskell/StackExecutable"; using namespace Utils; -namespace Haskell { -namespace Internal { - -class HaskellManagerPrivate -{ -public: - FilePath stackExecutable; -}; - -Q_GLOBAL_STATIC(HaskellManagerPrivate, m_d) -Q_GLOBAL_STATIC(HaskellManager, m_instance) - -HaskellManager *HaskellManager::instance() -{ - return m_instance; -} +namespace Haskell::Internal { FilePath HaskellManager::findProjectDirectory(const FilePath &filePath) { @@ -57,28 +36,6 @@ FilePath HaskellManager::findProjectDirectory(const FilePath &filePath) return {}; } -FilePath defaultStackExecutable() -{ - // stack from brew or the installer script from https://docs.haskellstack.org - // install to /usr/local/bin. - if (HostOsInfo::isAnyUnixHost()) - return FilePath::fromString("/usr/local/bin/stack"); - return FilePath::fromString("stack"); -} - -FilePath HaskellManager::stackExecutable() -{ - return m_d->stackExecutable; -} - -void HaskellManager::setStackExecutable(const FilePath &filePath) -{ - if (filePath == m_d->stackExecutable) - return; - m_d->stackExecutable = filePath; - emit m_instance->stackExecutableChanged(m_d->stackExecutable); -} - void HaskellManager::openGhci(const FilePath &haskellFile) { const QList<MimeType> mimeTypes = mimeTypesForFileName(haskellFile.toString()); @@ -87,35 +44,11 @@ void HaskellManager::openGhci(const FilePath &haskellFile) }); const auto args = QStringList{"ghci"} + (isHaskell ? QStringList{haskellFile.fileName()} : QStringList()); - auto p = new QtcProcess(m_instance); - p->setTerminalMode(TerminalMode::On); - p->setCommand({stackExecutable(), args}); - p->setWorkingDirectory(haskellFile.absolutePath()); - connect(p, &QtcProcess::done, p, [p] { - if (p->result() != ProcessResult::FinishedWithSuccess) { - Core::MessageManager::writeDisrupting( - Tr::tr("Failed to run GHCi: \"%1\".").arg(p->errorString())); - } - p->deleteLater(); - }); - p->start(); -} - -void HaskellManager::readSettings(QSettings *settings) -{ - m_d->stackExecutable = FilePath::fromString( - settings->value(kStackExecutableKey, - defaultStackExecutable().toString()).toString()); - emit m_instance->stackExecutableChanged(m_d->stackExecutable); -} - -void HaskellManager::writeSettings(QSettings *settings) -{ - if (m_d->stackExecutable == defaultStackExecutable()) - settings->remove(kStackExecutableKey); - else - settings->setValue(kStackExecutableKey, m_d->stackExecutable.toString()); + Process p; + p.setTerminalMode(TerminalMode::Detached); + p.setCommand({settings().stackPath(), args}); + p.setWorkingDirectory(haskellFile.absolutePath()); + p.start(); } -} // namespace Internal -} // namespace Haskell +} // Haskell::Internal |