diff options
Diffstat (limited to 'src/plugins/nim/project/nimblebuildstep.cpp')
-rw-r--r-- | src/plugins/nim/project/nimblebuildstep.cpp | 74 |
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 {}; } |