aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/nim/project/nimblebuildstep.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/nim/project/nimblebuildstep.cpp')
-rw-r--r--src/plugins/nim/project/nimblebuildstep.cpp74
1 files changed, 33 insertions, 41 deletions
diff --git a/src/plugins/nim/project/nimblebuildstep.cpp b/src/plugins/nim/project/nimblebuildstep.cpp
index 43fb20da23..cd2e64ffb7 100644
--- a/src/plugins/nim/project/nimblebuildstep.cpp
+++ b/src/plugins/nim/project/nimblebuildstep.cpp
@@ -43,40 +43,24 @@ using namespace Utils;
namespace {
-class NimParser : public IOutputParser
+class NimParser : public OutputTaskParser
{
-public:
- void stdOutput(const QString &line) final
+ Result handleLine(const QString &lne, Utils::OutputFormat) override
{
- parseLine(line.trimmed());
- IOutputParser::stdOutput(line);
- }
+ const QString line = lne.trimmed();
+ static const QRegularExpression regex("(.+.nim)\\((\\d+), (\\d+)\\) (.+)");
+ static const QRegularExpression warning("(Warning):(.*)");
+ static const QRegularExpression error("(Error):(.*)");
- void stdError(const QString &line) final
- {
- parseLine(line.trimmed());
- IOutputParser::stdError(line);
- }
-
-private:
- void parseLine(const QString &line)
- {
- static QRegularExpression regex("(.+.nim)\\((\\d+), (\\d+)\\) (.+)",
- QRegularExpression::OptimizeOnFirstUsageOption);
- static QRegularExpression warning("(Warning):(.*)",
- QRegularExpression::OptimizeOnFirstUsageOption);
- static QRegularExpression error("(Error):(.*)",
- QRegularExpression::OptimizeOnFirstUsageOption);
-
- QRegularExpressionMatch match = regex.match(line);
+ const QRegularExpressionMatch match = regex.match(line);
if (!match.hasMatch())
- return;
+ return Status::NotHandled;
const QString filename = match.captured(1);
bool lineOk = false;
const int lineNumber = match.captured(2).toInt(&lineOk);
const QString message = match.captured(4);
if (!lineOk)
- return;
+ return Status::NotHandled;
Task::TaskType type = Task::Unknown;
@@ -85,15 +69,20 @@ private:
else if (error.match(message).hasMatch())
type = Task::Error;
else
- return;
-
- emit addTask(CompileTask(type, message, FilePath::fromUserInput(filename), lineNumber));
+ return Status::NotHandled;
+
+ const CompileTask t(type, message, absoluteFilePath(FilePath::fromUserInput(filename)),
+ lineNumber);
+ LinkSpecs linkSpecs;
+ addLinkSpecForAbsoluteFilePath(linkSpecs, t.file, t.line, match, 1);
+ scheduleTask(t, 1);
+ return {Status::Done, linkSpecs};
}
};
}
-NimbleBuildStep::NimbleBuildStep(BuildStepList *parentList, Core::Id id)
+NimbleBuildStep::NimbleBuildStep(BuildStepList *parentList, Utils::Id id)
: AbstractProcessStep(parentList, id)
{
setDefaultDisplayName(tr(Constants::C_NIMBLEBUILDSTEP_DISPLAY));
@@ -106,18 +95,22 @@ NimbleBuildStep::NimbleBuildStep(BuildStepList *parentList, Core::Id id)
bool NimbleBuildStep::init()
{
- auto parser = new NimParser();
- parser->setWorkingDirectory(project()->projectDirectory());
- setOutputParser(parser);
-
ProcessParameters* params = processParameters();
- params->setEnvironment(buildConfiguration()->environment());
- params->setMacroExpander(buildConfiguration()->macroExpander());
+ params->setEnvironment(buildEnvironment());
+ params->setMacroExpander(macroExpander());
params->setWorkingDirectory(project()->projectDirectory());
params->setCommandLine({QStandardPaths::findExecutable("nimble"), {"build", m_arguments}});
return AbstractProcessStep::init();
}
+void NimbleBuildStep::setupOutputFormatter(OutputFormatter *formatter)
+{
+ const auto parser = new NimParser();
+ parser->addSearchDir(project()->projectDirectory());
+ formatter->addLineParser(parser);
+ AbstractProcessStep::setupOutputFormatter(formatter);
+}
+
BuildStepConfigWidget *NimbleBuildStep::createConfigWidget()
{
return new NimbleBuildStepWidget(this);
@@ -156,13 +149,12 @@ QVariantMap NimbleBuildStep::toMap() const
QString NimbleBuildStep::defaultArguments() const
{
- QTC_ASSERT(buildConfiguration(), return {}; );
- switch (buildConfiguration()->buildType()) {
- case ProjectExplorer::BuildConfiguration::Debug:
+ switch (buildType()) {
+ case BuildConfiguration::Debug:
return {"--debugger:native"};
- case ProjectExplorer::BuildConfiguration::Unknown:
- case ProjectExplorer::BuildConfiguration::Profile:
- case ProjectExplorer::BuildConfiguration::Release:
+ case BuildConfiguration::Unknown:
+ case BuildConfiguration::Profile:
+ case BuildConfiguration::Release:
default:
return {};
}