aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/haskell/haskellmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/haskell/haskellmanager.cpp')
-rw-r--r--src/plugins/haskell/haskellmanager.cpp85
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